개발자식

[Coursera] Recommendation Systems with TensorFlow on GCP_2_TIL 본문

AI/Recommendation System

[Coursera] Recommendation Systems with TensorFlow on GCP_2_TIL

밍츠 2022. 8. 10. 22:36

1. Content-Based Recommendation Systems

- item features를 사용하여 사용자가 이미 좋아한 것과 유사한 새로운 항목을 추천하고, 그들의 이전 행동이나 명시적인 피드백을 기반으로 한다.

- 다른 사용자 또는 다른 사용자 항목 상호 작용에 대한 정보에 의존하지 않는다.

 

 

2. Similarity Measures

두 영화가 비슷하다란?

- 영화의 장르나 주제가 겹치는 것이 많다.

 

사용자가 비슷하다란?

- 사용자가 과거에 좋아했던 영화나 장르가 겹치는 것이 많다.

 

 

머신러닝을 하려면 영화와 사용자를 비교해야 한다.

따라서 유사성에 대한 개념을 엄격하게 만들 필요가 있다.

-> 항목의 속성이나 기능을 생각하여 동일한 임베딩 공간에 있는 사용자가 얼마나 유사한지 비교할 수 있다.

 

 

임베딩 (Embedding)

: Embedding is a map from our collection of items or users to some finite dimensional vector space

- 데이터 세트의 항목과 사용자에 대한 유한 벡터 값 표현을 제공하는 방법을 제공한다.

- input features 표현, 머신러닝 문제에 주로 사용

 

 

- 두 가지 장르 (2차원)으로 임베딩하여 영화를 표현

- x 축 : Drama, y 축: Fantasy

- 메멘토영화는 드라마 장르에 가깝고 판타지에 멀다

- 해리포터는 판타지에 가깝고 드라마에는 중간 정도로 측정한다.

 

스타워즈 영화는 해리포터와, 메멘토 얼마나 가까울까?

- 직관적으로 위의 임베딩 공간으로는 해리포터와 가까워 보인다.

- 영화에 대한 임베딩 값을 고려한다.

- 유사성 측정(Similarity measure)은 정확히 정의하는 메트릭일 뿐, 임베딩 공간에서 항목과 얼마나 유사한가이다.

 

내적

- 일반적으로 사용되는 유사성 척도

- 각 벡터의 곱한 성분의 합을 계산한 것

- 해리포터 & 스타워즈 : 26, 메멘토& 스타워즈 : 19 

-> 해리포터 & 스타워즈가 26으로 내적 값이 더 크므로 스타워즈는 메멘토보다 해리포터에 더 가깝다.

 

코싸인 유사도(Cosine Similarity)

- 널리 사용되는 유사성 척도

- 스케일된 내적과 유사하다.

 

 

3. Building a User Vector

 

위 사진과 같이 단일 사용자를 고려하여 데이터베이스에 7개의 영화만 있다고 가정하고, 이 사용자는 세 편의 영화를 평가했다. 남은 4편 중 어떤 영화를 추천해야 할까?

- 영화는 장르(판타지, 액션, 만화, 드라마, 코미디)를 사용하여 나타냈고, 해당 장르 여부에 대해 k-hot으로 인코딩 (한 가지 장르만 충족 가능)

-> 5차원 임베딩 공간에 영화를 표현하는 데 사용

- 장르 외에 더 세분화된 기능을 사용하면 영화를 더 정확하게 설명할 수 있다.

 

- 사용자 등급을 평가한 다음 결과 벡터를 정규화한다. -> 사용자 특징 벡터

- 영화 기능 메트릭스에 해당 사용자가 부여한 등급을 곱한 후 각 기능 차원을 합산하여 집계한 후 정규화한다. -> 사용자 기능 벡터

- 사용자 기능 벡터의 숫자 값은 높을수록 사용자가 좋아하는 장르이지만 Action의 값의 경우 사용자가 평가한 영화에 해당 장르가 없기 때문에 0이다.

 

 

4. Making Recommendations Using a User Vector

 

- 사용자가 보지 않은 영화의 5차원 임베딩 데이터와 사용자 기능 벡터를 내적하여 유사도를 측정한다.

-> 유사도가 가장 높은 영화를 추천 

 

 

 

5. Making Recommendations for Many Users

단일 사용자가 아닌 이 기술을 확장하여 한 번에 여러 사용자에게 추천을 제공하는 방법

- item-feature matrix 는 영화를 설명하는 데 사용하는 기능의 k-hot 인코딩이다. 각 행은 단일 영화에 해당하며 열마다 영화가 해당 장르에 적합함을 나타낸다.

 

 

tf.constant 

- constant (상수) : 변하지 않고 고정된 값

- 이 함수를 통해 상수 텐서를 만들 수 있다.

- 이 함수를 사용하여 하드 코딩되기 전의 user-item rating matrix와 item-feature matrix 두 텐서의 순위를 지정한다.

 

- 각 사용자에 대한 weighted feature matrix 계산

 

 tf.stack :

- 여러 개의 텐서를 쌓아서 하나의 텐서를 만들어주는 함수

- 완전한 가중치 사용자 기능 텐서를 얻기 위해 tf.stack을 사용하여 이들을 함께 쌓는다. (스택 축 : 0)

사용자 기능 텐서를 찾으려면 특성 열을 합산하고 각각의 결과 벡터를 개별적으로 정규화한다.

 

what is the shape of the tensor resulting from stacking together all of the weighted feature metrics?

- 모든 가중치 기능 메트릭을 함께 쌓은 결과 텐서의 모양은 무엇인가?

: (#users, #movies, #features)

- 4 * 5 * 5

 

 

- feature 열을 더한 후 개인별로 결과 벡터 각각 정규화를 진행한다.

 

 

tf.reduce_sum :

- 텐서의 모든 성분의 총합을 계산하는 함수

 

추천을 제공할 때 이전에 평가되지 않은 영화에만 초점을 맞춘다.

 

 

 

- 내적으로 추론된 영화 순위 찾는다.

 

 

Which TensorFlow operation could we use to mask the previously rated movies in our user-movie ranking matrix, so we only focus on previously unrated movies when providing recommendations?

- 어떤 TensorFlow 작업을 사용하여 사용자 영화 순위 메트릭스에서 이전에 평가된 영화를 마스킹하여 추천을 제공할 때 이전에 평가되지 않은 영화에만 집중할 수 있습니까?

: tf.where (numpy.where과 유사함)

 

- 위에서 구한 과정을 통해 각 사용자에게 추천해줄 결과

- 두 번째 사용자는 액션이나 공상과학이 포함된 항목을 평가하지 않았기 때문에 다크 나이트의 특징이 액션과 공상과학만 포함되어 이 영화에 대해 0점으로 추론한다.

-> 콘텐츠 기반 추천 시스템의 단점

-> 사용자의 관심을 확대하기 어려움

 

 

Comments