추천 알고리즘을 고려할 때 가장 먼저 생각하는 것 중의 하나가 '협업 필터링 알고리즘'이다. user와 item이 많고, 인당 구매건수가 많은 경우에 협업 필터링 알고리즘을 이용하는 것은 좋은 선택이라고 생각한다.

 

하지만 경우에 따라서는 user와 item feature를 더 많이 고려해야 하는 경우가 생긴다. 이런 경우에 사용할 알고리즘을 탐색하던 와중에 factorization model이라는 것을 알게 되었다. 해당 알고리즘에 대해 리서치한 내용을 이번에 포스팅하고자 한다.

 

 

Factorization Machine

 

 

1. Factorization Machine의 구조

factorization machine은 matrix factorization이랑 말이 비슷해서 조금 헷갈리는데, 아래 포스팅을 참조하면 그 차이를 분명히 알 수 있을 듯 하다.
( 참조: https://zzaebok.github.io/machine_learning/factorization_machines/ )

위 포스팅에서는 회귀분석을 통해서 그 구조를 설명하고 있다. 회귀분석을 통해 알아보는 것이 가장 이해하기 좋은 것 같다. 다만 uesr, item, category를 합치면 차원이 굉자히 커지기 때문에, 이를 학습하기 위한 방법이 조금 헷갈린다. 이를 행렬분해를 통해 N X N을 N X K, K X N으로 분해하고, N X K 크기의 행렬을 학습시켜 시간복잡도를 줄인다고 한다. 

 

해당 부분의 내용은 아래 첨부한 논문에서 좀 더 잘 알 수 있었다. movielens데이터를 기준으로 어떻게 학습데이터를 만들어야 하는지도 알 수 있다.
( 참조: https://analyticsconsultores.com.mx/wp-content/uploads/2019/03/Factorization-Machines-Steffen-Rendle-Osaka-University-2010.pdf )

 

 

Factorization Machine 구조

 


Factorization 알고리즘은 Ranking 뿐만 아니라 Regresssion, Binary Classification에서도 활용할 수 있다고 한다.

 

 

2. Factoriaztion Machine 코드

실제 구현한 코드는 아래 포스팅에서 찾아볼 수 있었다. 필자는 tensorflow보다 pytorch에 관심이 많은데, 다행히 pytorch로 작성된 코드였다.
( 참조: https://hongl.tistory.com/243 )

 


여기서 user와 item factor를 더 넣고 싶다면, matrix에 추가하면 되지 않을까 싶다. 이는 DeepFM에 대해서 알아보면서 더 고민해봐야겠다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기