Session-based Recommendation with Graph Neural Networks
SR-GNN 요약
본 리뷰는 교내 개인 프로젝트를 위해 읽고, 재구현한 논문에 대한 리뷰다. 그래서 프로젝트 내용이 굉장히 많이 들어가 있다.
- 서론
이 논문은 학교 임베디드 수업 프로젝트를 위해, 추천 시스템 모델 간의 비교를 위해 읽은 논문이다. 읽기는 작년 11월에 읽었었는데, 문득 정리하면 좋을 것 같아서 다시 복습해본다.
내 개인 프로젝트는 대표적 Sequential recommendation model인 BERT4Rec과, 대표적 Session-based recommendation model인 SR-GNN의 특징을 찾아 비교하려 했던 프로젝트다. 학습 시킨 각 데이터의 길이가 길수록 BERT4Rec은 좋아지지만, SR-GNN은 나빠진다는 사실을 확인했었다.
이 과정에서 SR-GNN은 직접 학습시켜봤는데, 그 때 구현한 주요 특징들을 적어본다.
- 배경
session-based와 sequential의 큰 차이는 session은 아주 작은 user session만을 보고 추천한다는 점이다.
원래의 session-based 모델은 다른 추천 모델과 비슷하게, session을 sequence로 보고 학습하였다. 허나 이러한 방식은 안 그래도 정보가 부족한 session 방식 추천에서 학습할 패턴, 관계 정보가 너무 부족할 것이다.
그래서 특별히 Graph를 사용해서, item 간의 transition과 복잡한 관계를 더 잘 학습하게끔 하는 것이 본 논문의 목표이다.
- 모델
GNN은 graph neural network로, graph로 된 입력을 받아 session vector를 내보내는 신경망이다.
그래프 생성은 아래와 같은 방식으로, incoming / outcoming edge를 모두 기록하여 v x 2v 크기의 행렬로써 각각 생성된다.
GNN은 gated GNN으로, 각 cell마다 input graph와 item embedding(hidden)을 받아 gate를 계산하여, 어떤 정보를 가지고 버릴지 정한다. 이는 각각 reset, update gate 선형층 통과를 통해 학습된다.
이렇게 학습한 정보들을 이전 cell과 결합하여 다음 cell로 정보를 넘긴다. 구체적인 수식은 다음과 같다.
이렇게 생성된 마지막 cell(t)의 v가 item들의 node vector가 된다. 그런데 여기서 session들은 모두 같은 item들에 대해 학습하고 있으므로, 논문은 이 세션마다 가지는 item node vector들을 합쳐 global embedding을 만들어 학습하였다.
즉 원래는 session마다 graph에서 item embedding을 따로 계산, 따로 session vector를 추출했다면 논문에선 이렇게 따로 계산한 item embedding 정보를 결합하여 long-term preference 관점에서 더 잘 학습될 수 있도록 만든 것이다.
논문은 global과 local을 합쳐 hybrid하게 session vector를 뽑아냈다. 이는 내 프로젝트 실험에서도 효과가 있음을 알 수 있었다.
각 session vector를 뽑았으니, 이제 다시 embedding을 transpose하여 곱하면 다음 item을 예측하는 모델이 완성 된 것이다.
- 결과 등 여담
실제 학습 시엔 n-1개 까지를 input, n번째 item을 참값으로 학습한다. session-based 추천 시스템의 특성 탓에, 굉장히 적은 횟수의 training을 해야 오버피팅을 방지할 수 있다고 한다.
* 이하는 프로젝트 관련 리뷰이다.
실제 학습해본 결과, 정말로 Session을 짧게 학습할 수록 좋은 결과가 나왔고, test session도 짧을 수록 좋았다.보통은 데이터가 많을 수록 정보가 많아 잘 학습할 거라 생각할 텐데, session-based 모델들은 어떻게 이러한 특징이 나왔을까?
개인적인 추측으로는, GNN의 영향이 있다고 생각한다. session이 길면 그만큼 graph가 복잡해지고, underfitting 현상이 일어날 수 있을 것 같다. GNN쪽 공부를 더해봐야 알겠지만, 이 논문에서는 가장 초기 방식인 recurrent GNN을 사용했기 때문에 그래프 특징 학습이 덜 되었을 수 있을 것 같다.
혹은 session이 길어지면 GNN cell을 dynamic하게 늘리는 방법도 있을 것 같다. 세션이 작을 땐 cell이 최소(1)개일때 가장 좋았는데, 길면 얘기가 다를 수도 있지 않을까?
이 결과는 다르게 말하면 짧은 세션의 정보를 아주 잘 파악한다는 이야기도 될 수 있겠다. 신규 유저들에겐 session-based 추천을, old 유저들에겐 BERT4Rec등을 이용한 추천을 적용하면 더 효과적인 추천 시스템 설계를 할 수 있겠다. 물론 어느 타이밍에 바꾸느냐는 또 이야기를 해야 되겠지만..
'내 맘대로 읽는 논문 리뷰 > Recommendation' 카테고리의 다른 글
Matrix Factorization (0) | 2021.04.05 |
---|---|
MEANTIME (0) | 2021.03.24 |
BERT4Rec (0) | 2021.03.18 |
Wide & Deep (0) | 2021.03.18 |