👩‍💻LEARN : ML&Data/Lecture

[Unsupervised Learning, Recommenders, Reinforcement Learning] #4. Content-based filtering

쟈니유 2023. 3. 30. 15:45
728x90

2주차 강의에서 배울 추천 시스템 종류


#4. Content-based filtering 

 

▶️ Collaborative filtering vs Content-based filtering

Collabo : ratings of user를 사용하여 유사한 rating을 준 사람들의 rating값에 기반하여 추천 

Content : user, item's features를 사용하여 추천 

  • r(i,j) : 사용자가 해당 아이템을 rating한 경우 (0,1)
  • y(i,j) : 사용자가 아이템에 대해 매긴 점수 

 

Examples of user and item features 

  • User feature (xu(j) for user j) 
    • 나이, 성별, 나라 본 영화 수 , 각 장르에 대한 평균 점수 
  • Movie feature (xm(i) for movie i)
    • 출시연도, 장르, 리뷰, 평균점수 

→ 영화 xm(i)가 사용자 xu(i)에게 추천할 만한지 알아봐야 함 

 

Content-based filtering : Learning to match 

  • User j가 영화 i에 대해 매길 점수 예측
    • vu : 유저들의 feature에 대한 벡터값 
    • vm : 영화의 feature들에 대한 벡터값 
    • vju,vjm은 dot product 수행을 위해 길이가 같아야 함  → neural network로 맞춰줄거임 

 

 

▶️ Deep learning for content-based filtering

Neural network architecture

  • user, movie의 input 값들을 Neural network 을 사용하여 동일한 output의 벡터로 만들고 dot product 활용 
  • rating과 같은 값을 위해선 Regression, 좋아한다 아니다의 여부를 예측하기 위해선 sigmoid 활용하면 됨 
  • 하지만 xu, xm에 대해 각각 nn을 하기 때문에 파라미터 수가 많아져서 이를 해결해야 함 
    • vu, vm 간 곱이 실제 y를 얼마나 잘 예측하는 지 거리를 확인하고 여기에 정규화를 입혀서 cost function을 활용 
    • 그 다음 경사하강법이나 adam등의 optimizer 사용하여 cost를 최소화

 

Learned user and item vectors 

특정 영화와 유사한 영화를 찾기 위해선 두 영화 간 거리가 최소화된 영화를 찾으면 됨 

 

▶️ Recommending from a large catalog

How to efficiently find recommendations from a large set of items?

1. Retrieval 

  • 그럴듯한 item candidate large list 만들기
    • 유저가 최근에 본 10개 영화랑 비슷한 영화 찾기
    • 가장 많이 시청한 3개 장르에서 탑10 찾기
    • 나라에서 탑 20개 찾기 
  • 해당 아이템들 combine한 후 중복된 값, 이미 유저가 시청한 값 제거 (100개정도 확보)

2. Ranking 

  • retrieval list에서 확보한 영화의 feature들과 유저 feature를 활용해서 neural network에 넣어 rating값 등 예측
    • 이때 영화에 대한 vm 값을 미리 산출해 놓으면 계산이 빨라짐 
  • 유저에게 ranked item 노출 

 

▶️ TensorFlow implementation of content-based filtering 

 

 

 

#옵션. Principal Component Analysis 

 

▶️ Reducing the number of features 

여러개의 Feature 가 있을 때, 새로운 축을 찾아서 적은 변수를 사용하는 것 (차원축소) 

  • 일반적으론 유사한 분포를 보이는 두개의 feature 중 하나만 고르거나 (e.g. 차의 길이, 높이)
  • 두개의 변수를 모두 반영하는 새로운 z 축을 만들어서 해당 변수를 선택하거나 (길이와 높이를 반영한 새 축) 
  • 여러개의 feature를 가졌어도 2차원으로 축소할 수 있어서 시각화 하기에 좋음 (데이터 압축이나 지도학습 속도 올리는 용으론 x) 

▶️ PCA Algorithm

 

Choose an axis

  • Principle component (new axis)를 만들어야 함 
    • 해당 축과 데이터를 90도로 Project했을 때 해당 데이터들의 variance가 최대치여야 함 (많은 정보를 가져오기위해)

Coordinate on the new axis

  • dot product 로 해당 데이터의 좌표와 해당 축에서 length= 1에 해당하는 좌표를 곱하기
  • Principle components는 2nd, 3rd가 있으며 서로 90도로 교차해야 함 (3D)

Appoximation to the original data 

 

 

▶️ PCA in the code (scikit-learn)

  • component엔 축 몇개로 둘 것인지 세팅