Tech Review of Netflix #4
~2012 : Deep Learning becomes popular in Machine Learning
~2017 : Deep Learning becomes popular in Recommender Systems
2012년부터 Deep Learning은 Machine Learning 분야에서 많이 주목을 받았습니다. 하나의 방법론으로 사용되었습니다. 2017년부터는 Recommender System에 Deep Learning 방법을 적용시키는 연구가 많이 진행되었습니다.
Collaborative Filtering
: Recommend items that similar users have chosen
Recommendation에 있어 가장 전통적인 기법은 Collaborative Filtering입니다. Collaborative Filtering은 추천 기술에 있어 하나의 철학입니다. "당신과 유사한 사용자가 좋아한 Item은 당신도 좋아할 거야."라는 철학을 담고 있습니다.
우선 사용자가 좋아했던 Item들을 Matrix 형태로 표현을 해야 합니다. 이 단계를 사용자의 Preference를 예측하는 Preference Modeling이라고 합니다. 별점과 같은 Explicit 한 Feedback을 통해 유추하기도 하고, 사용자 클릭과 같은 Implicit 한 Feedback을 통해 유추하기도 합니다.
이 Matrix에서 사용자가 관심을 표하지 않은 Item들 중 가장 좋아할 것 같은 것을 찾는 과정이지요. 그렇기 때문에 Matrix Completion Problem으로도 불립니다. 이 과정에서 해당 사용자와 유사한 취향을 가진 다른 사용자가 좋아했던 Item을 찾는 과정을 거칩니다.
A Matrix Factorization view
-> A Feed Forward Network view
-> A deeper feed-forward view
이렇게 Matrix를 채워서 사용자의 Preference를 예측하는 것을 여러 가지 방법을 통해 할 수 있습니다. 하나의 Matrix를 User matrix와 Item matrix로 분해하는 것이지요.
Matrix Factoriztion view
전통적으로는 Matrix를 Decomposition 하는 기법을 사용했습니다. 이때, SVD와 같은 기법들을 사용하였습니다. 이것이 Matrix Factorization view입니다.
Feed-forward Network view
User matrix와 Item matrix를 유추하는 과정에 Deep Learning 기술을 접목시킬 수 있습니다. Matrix Completion problem은 User vector와 Item vector를 모르는 상태에서 각각을 Layer로 간주하여 user preference를 맞추는 feed-forward network라고 생각할 수 있습니다. 즉, 아래와 같게 표현이 되겠지요.
Feed forward layer를 더 깊게 쌓을 수도 있겠지요. 그러면 User와 Item의 non-linear 한 관계를 더 많이 고려한 그런 model이 될 것입니다. 구조는 아래와 같습니다.
Deeper feed-forward view is not always the best
but opens up many possibilities
Feed-forward 구조를 복잡하게 가져간다고, 무조건 좋은 것은 아닙니다. 성능적으로 overfitting을 할 수 있겠지만, 설명력이 부족해질 수도 있고, 실제 데이터에서는 좋은 성능을 보이지 않을 수도 있습니다.
하지만 분명한 것은 Feed-forward를 deep 하게 설계함으로써, 다양한 case를 녹여낼 수 있다는 것입니다. 다양한 case를 녹여낸다는 것은 우리가 데이터를 인식하고 추천하고자 하는 방향, 철학을 녹여낼 수 있다는 것이지요.
가장 간단한 Feed-forward network에서는 user와 item의 직접적인 pointwise interaction만을 고려하였습니다. 사용자가 추천 대상에 대해 직접적으로 평가한 preference만 고려했다는 것입니다. 하지만, 중간 layer들을 RNN, CNN로 변형해둠으로써, 사용자의 feedback을 인식하는 방식을 모델에 녹여낼 수 있습니다.
Sequence prediction
Sequence prediction을 예시로 들 수 있습니다. Recommendation 문제를 어떠한 경우에는 sequence classification이라고 볼 수 있습니다. 사용자가 세션 내에서 하는 action을 가지고, 그다음 action을 예측하는 것이지요. 사용자가 클릭하는 것을 인식하여, 다음 클릭 아이템을 예상하여 추천하는 문제라고 할 수 있습니다. 즉, RNN을 끼워 넣음으로 서, 세션 내 추천이라는 목적에 맞는 recommendation system을 설계할 수 있습니다. Gru4Rec이라는 논문이 그 예시입니다.
Leveraging other data
User의 item에 대한 feedback만으로는 추천 대상을 선정하기에 정보가 부족한 경우가 있습니다. 이 경우, 외부 데이터를 사용하여, 사용자를 더 깊이 있게 이해합니다. 더 많은 feature들을 사용하기 때문에 더 좋은 추천을 할 수 있을 것입니다. 실제로 사용자의 item에 대한 feedback은 너무 sparse 하기 때문에, 외부 데이터들을 이용하는 것은 매우 좋은 기법입니다. YouTube에서는 실제로 이 기법을 사용하였다고 합니다. 사용자의 검색 쿼리를 vector화 하여 하용하고, demographic 정보, 시청 시간 등을 vector화 하여 모두 사용하여 더 풍성한 추천을 하였다고 합니다. 이 과정에 있어, deeper 한 feed-forward를 사용함으로써, 추천 품질을 향상시켰습니다.
두 번째 Trend는 Causality에 대한 이야기입니다. Causality를 해석하면, 인과관계입니다.
대부분의 추천 알고리즘은 correlational 합니다. Correlational 하다는 것은 사용자와 추천 대상과 상관관계가 있다는 것입니다. 분명한 것은 상관관계가 있다고 해서, 그것들끼리 인과관계가 있는 것은 아니라는 것입니다.
Did you watch a movie because you liked it? Or because we showed it to you? Or both?
사용자는 진짜 그 추천 아이템을 좋아해서 구매하거나 시청을 하는 것일까요, 아니면 우리가 추천해주었기 때문에 구매하거나 시청하는 것일까요?
추천 시스템에서는 Feedback loop가 생기게 됩니다. 추천 시스템이 사용자에게 추천을 해주고, 추천을 해준 리스트 중에서 사용자들은 더 많은 아이템을 소비하며, 추천되는 아이템은 popularity가 생기고, 사용자의 취향도 해당 아이템과 가까워지게 됩니다. Feedback loop는 추천 시스템 전체에 bias를 생성하게 됩니다.
Closed Loop vs Open Loop
Feedback loop에서 bias를 발생시키지 않기 위하여, 추천 시스템 이외의 데이터도 모델에 넣음으로써 해결합니다. 검색과 같은 데이터를 넣음으로써 데이터를 풍성하게 하는 것이지요. 이렇게 추천 시스템에 Correlation이 아닌 Causality도 녹여내기 위하여, 다양한 노력을 하는 추세입니다.
지난 리뷰 보기
https://brunch.co.kr/@andrewhwan/62
https://brunch.co.kr/@sonjoosik/13
이 글은 아래의 원문을 번역/의역 및 요약하였습니다. 중간중간 파란색으로 표시된 글씨는 번역자의 견해입니다.
https://www.slideshare.net/justinbasilico/recent-trends-in-personalization-a-netflix-perspective