추천 시스템에 대해 잘 모르는 저는 SASRec 논문을 이해하기 위해서 추천시스템 사전 지식이 필요합니다.
님 진짜 열심히 하시네요 응원합니다
sequantial dymanics are key feature of many modern recommender systems, which seek to capture the 'context' of users' activities on the basis of actions they have performed recently
오늘날 추천시스템에서 sequential한 즉, 순차적인 정보가 key feature이 되고 있고, 이건 user들이 최근에 수행한 action에 근거해 user 들의 행동에 대한 'context' 문맥을 반영하게 됩니다.
이런 패턴을 뽑아내기 위해 크게 두가지 접근 방법이 존재합니다.
1. Markov Chains (MCs)
2. Recurrent Neural Networks (RNNs)
https://medium.com/@dr.ahmed.adm/markov-chain-recommendation-system-mcrs-99f5d3587dc2
: Collaborative filtering (CF) is based on the similarities between users and the similarities between items.
CF 는 추천시스템에서 매우 자주 사용되는 기법으로, user간의 similiarity와 item간의 similarity를 기반으로 사용됩니다.
그러나 user 들의 의견과, item 에 대한 인기(선호도)는 시간에 따라 달라질 수 있고, 이를 고려하지 않으면 추천 성능이 떨어질 수 있습니다.
markov chain assume that a user's next action can be predicted on the basis of just their last (or last few) actions
markov chain은 user 의 다음 action이 user의 이전 action들에 기반해 예측된다는 것을 가정합니다.
markov chain 추천시스템은 markov chain 개념을 활용해 사용자에게 맞춰 추천을 제공하는 데에 사용되는 기술 중 하나입니다.
이 방법은 사용자의 이전 동작(action)에 기반하여 다음에 할 가능성이 높은 동작(action)을 예측하는 것을 목표로 합니다.
markov chain 은 state라고 불리는 여러 state들의 set과 state 간의 transition probability(전이확률)을 나타내는 확률 matrix로 구성됩니다.
예를 들어, user의 영화 시청 패턴을 고려하면 각 영화는 하나의 상태로 간주될 수 있습니다. 사용자가 영화를 시청한 후 다음에 볼 영화를 예측하기 위해 markov chain을 활용할 수 있습니다.
markov chain based recommendation 은 sparse dataset에서 성능이 잘나옵니다.
RNN based recommendation은 MC-based recommendation과는 다른 특징을 갖고 있습니다.
RNNs allow for longer-term semantics to be uncovered
RNN은 mc-based 에 비해 조금 더 장기적인 의미를 파악할 수 있습니다.
또한 RNN은 dense dataset에서 성능이 잘나오기 때문에 model complexity가 높은 경우에도 사용할 수 있습니다.
이 논문의 모델인 SASRec 은 앞서 설명한 두 방식의 균형을 맞춰 RNN처럼 long-term semantic도 capture 할 수 있으면서, attention mechanism을 이용해서 MC based 와 같이 상대적으로 적은 action을 이용해서도 예측할 수 있도록 하는 방법입니다.
기본 토대가 되는 가장 일반적인 추천시스템에 대해 설명합니다.
추천시스템은 user와 item간의 호환성을 모델링하는데에 초점을 맞춥니다. 이 때 historical feedback 을 기반으로 수행하게 되는데,
이런 user feedback은 크게 explicit (e.g., ratings), implicit (e.g., clicks, purchases, comments)로 나눌 수 있습니다.
implicit feedback을 modeling 하는 건 꽤 어려울 수 있는데 그 이유는 'non-observed' data 를 해석하는데에 대한 애매함(모호성) 이 될 수 있습니다.
이런 문제를 해결하기 위해 point-wise, pairwise 와 같은 방법들을 사용합니다.
https://blog.naver.com/PostView.naver?blogId=shino1025&logNo=222394488801
mf는 user와 item 간의 정보를 나타내는 rating matrix를 user latent matrix 와 item latent matrix 로 분해하는 기법입니다.
rating matrix는 user수 x item수 로 구성된 행렬이고, 각 칸에는 user 가 item에 대해 평가한 수치가 적힙니다. 보통 비어있는 부분이 더 많아서 sparse matrix가 되는 경우가 많습니다.
MF는 이런 경우에 행렬을 분해함으로써 빈칸들을 채울 값들을 예측하는 기법입니다.
이것은 explicit feedback이 사용되기도 하지만, 근본적인 평가 그 자체라면 implicit feedback로 사용해볼 수 있습니다.
rating matrix는 mf를 통해 2개의 행렬로 나뉘어지고, 그 행렬은 각각 user latent matrix(U), item latent matrix(I) 가 됩니다.
Rating matrix (R)= (UxK) (KxI) => U I
이 때 둘 중 하나의 행렬을 transpose 해서 그대로 matrix multiplication을 해주면 기존의 rating matrix 형태로 돌아오게 됩니다.
latent matrix 는 각각, 각 user와 item에 대해 row 를 가지게 되는데, K개 만큼으 공간을 할당받는다고 할 수 있습니다.
해당 row 는 user 나 item의 latent information (잠재정보)를 저장하고 있는 vector로 , user matrix의 U row와 item matrix의 I row 에 대해 행렬곱을 수행하면, "user U의 item I에 대한 평가"가 나오게 됩니다.
Rating=IxU
그리고 이 때 K는 latent factor 의 크기로 사용자에 의해 hyperparameter로 입력받습니다. K를 크게 잡으면 다양한 정보를 가져갈 수 있지만, K를 작게 잡으면 핵심적은 정보외의 노이즈를 제거할 수 있습니다 (overfitting 방지)