23년 이전 글/모두의연구소 아이펠

-38일차- 추천 시스템 활용

NoPainNoPaper 2022. 2. 22. 21:53

가장 상업적인 성공을 거둔 머신러닝 알고리즘

콘텐츠 추천 알고리즘의 진화

협업 필터링 방식과 콘텐츠 기반 필터링 방식의 주요 차이점

  • 협업 필터링은 사용자의 아이템 구매 이력 정보 만으로 사용자간 유사성 및 아이템 간 유사성을 파악
  • 콘텐츠 기반 필터링은 아이템의 고유 정보를 바탕으로 아이템 간 유사성 파악

협업 필터링의 제약 조건

  • 시스템이 충분한 정보를 모으지 못하여 추론을 할 수 없는 콜드 스타트일 때
  • 계산량이 너무 많아 추천의 효율이 떨어질 때
  • 사용자 관심이 저조한 항목의 정보가 부족하여 추천에서 배제될 때

유튜브 뮤직에서 좋아하는 아티스트의 정보를 요구하는 이유

  • 첫 사용자라면 초기 정보가 없기 때문에 맞춤형 서비스를 제공하기 위해서
  • 맞춤형 추천을 제공하지 못하면 처음 추천받은 콘텐츠 위주로 시청해서, 필터 버블 문제를 야기하거나 추천의 다양성을 저해하는 일이 발생함

 

 

사용자의 명시적/암묵적 평가

좋아요나 별점은 명시적(explicit)인 사용자의 평가이고

서비스 사용하면서 자연스럽게 발생하는 암묵적(implicit)인 피드백 또한 아이템에 대한 평가 단서가 됨

해당 이론에 대한 참조

 

  • 부정적인 피드백이 없다
  • 애초에 잡음이 많다
  • 수치는 신뢰도를 의미
  • Implicit-feedback Recommender System의 적절한 평가 방법을 고민해야 한다

암묵적 평가의 예시

플레이 횟수, 플레이 시간, 클릭 수, 구매 여부, 플레이 스킵 여부, 검색 기록, 방문 페이지 이력, 구매 내역, 마우스 움직임 등

ex) 1번 들은 곡의 경우 정답은 없지만 별로라서 안들을 수도, 듣고 싶지만 가수 이름을 잊어버렸을 수도 있음

 

Matrix Factorization(MF)

(m,n) 사이즈의 행렬 R을 (m,k) 사이즈의 행렬 P와 (k,n) 사이즈의 행렬 Q로 분해한다면 R이란 그저 P와 Q의 행렬곱으로 표현 가능할 수 있다는 간단한 아이디어지만 아이디어의 단순함에도 불구하고 MF 모델은 성능이 준수하고 Scalability가 좋아서 많이 사용되는 모델

[ - 출처: CuMF_SGD: Fast and Scalable Matrix Factorization(https://arxiv.org/pdf/1610.05838.pdf) ]

 

좌측의 행렬은 평가 행렬이며, 협업 필터링은 이러한 평가 행렬을 전제로 함

이 평가 행렬의 빈 부분에 대한 정보를 모두 얻을 수록 완벽한 추천이 가능해짐

 

[ 출처: https://developers.google.com/machine-learning/recommendation/collaborative/matrix ]

그림에서 상단의 행렬은 영화의 특성 행렬이며 하단은 유저의 선호도 행렬

모델의 목표는 모든 유저와 아이템에 대해 k-dimension의 벡터를 잘 만드는 것이고 이 기준은

유저 i의 벡터(Ui)와 아이템 j의 벡터(Ij)를 내적했을 때 유저 i가 아이템 j에 대해 평가한 수치(Mij)와 비슷한지 여부

사용할 모델에 대한 참조

 

 

 

Recommendation System — Matrix Factorization

Walk Through Recommender System of Matrix Factorization

towardsdatascience.com

 

CSR(Compressed Sparse Row) Matrix

유저와 아이템 수만큼의 정보를 매트릭스로 구성할 경우, 데이터 수가 많을수록 행렬의 크기가 매우 커지게 됨

따라서 유저와 아이템에 대한 정보만 저장하면서 전체 행렬 형태를 유추할 수 있는 구조가 필요

CSR Matrix는 Sparse한 matrix에서 0이 아닌 유효한 데이터로 채워지는 데이터 값과 좌표 정보로 구성하여 메모리 사용량을 최소화하고 sparse한 matrix와 동일한 행렬을 표현하는 데이터 구조

data, indices, indptr로 행렬을 압축표현

  • data = [1, 2, 3, 4, 5, 6] 원소를 차례로 기입한 값
  • indices = [0, 4, 1, 3, 0 ,3] data 요소가 어느 열에 있는지 표현한 index
  • indptr = [0, 2, 4, 4, 6] 0이 아닌 첫번째 원소가 data 리스트에서 몇번째 해당하는지와 마지막 data 벡터의 길이를 추가한 것

csr matrix 사용하는 api

 

implicit 패키지를 활용한 학습

implicit 패키지는 암묵적 dataset을 사용하는 다양한 모델을 빠르게 학습할 수 있는 패키지

  • factors : 유저와 아이템 벡터의 차원 설정
  • regularization : 과적합 방지를 위한 정규화 값 설정
  • use_gpu : gpu 사용여부
  • iterations : epoch와 같은 의미

 

https://github.com/dlfrnaos19/rock_scissors_paper_classifier/blob/main/%5BE-14%5D/%5BE-14%5Drecommend_system.ipynb

 

GitHub - dlfrnaos19/rock_scissors_paper_classifier: task 1

task 1. Contribute to dlfrnaos19/rock_scissors_paper_classifier development by creating an account on GitHub.

github.com

 

반응형