소비자의 로그(클릭 순서)를 기반으로하는 추천시스템인 SR-GNN에 대해 작성해보겠다
paper link
reference
SR-GNN 이란?
- 기존의 세션 기반의 추천 알고리즘의 RNN에 GNN을 결합함으로써 Item 맥락간의 transifion까지 포착하는 알고리즘이다
- 각 세션이 하나의 subgraph로서, 세션 내부에는 소비된 Item Node들이 directed link로 연결된다
1. 모델구조
아래는 SR-GNN의 대략적인 구조를 표현한 그림이다
- V1 ~ V7은 추천대상인 Item 리스트이다
- 세션1 = [V1 -> V2 -> V3 -> V4] 라면 웹이나 어플 상에서 로그 기록을 기반하여 세션을 구성하였을때 어떠한 4개의 Item을 순차적으로 소비(클릭)한 데이터를 표현한 것이다
- 각 세션 sequence를 directed session (sub) graph로 취급한다
- 이 세션데이터는 Gated GNN을 통해 각각의 Node 벡터를 얻게 된다
- 그리고 이를 활용하여 최종적으로 Sg, S1이라는 2개의 벡터를 얻게 된다
- Sg : Global한 선호를 반영하는 Global Session Vector
- S1 : 현재 세션내에서의 User의 현재 관심을 반영하는 Local Session Vector
2. Session 내부 Node 임베딩 얻기
먼저 Session (sub) Graph 내에서 이루어지는 Node 벡터의 학습 과정을 알아보자
- 직전 t-1 시점의 Node 벡터를 활용해서 현재의 t 시점 Node 벡터를 얻게 되는 과정이다
- 위와 같은 session 구조에서는 양방향 1, 단뱡향 1/2로 matrix가 구성된다
- 이렇게 매트릭스에서 이전 노드벡터 정보를 받아온다 (인덱싱. 여기서는 2번째 row)
- 그리고 이걸 바로 쓰는게 아니라 어떤 정보를 보존하고 버릴지를 결정한다 (GRU Layer)
- z가 무엇을 보존할지, r이 무엇을 잊을지를 결정하게 되는 것이다
- Final State는 위와 같이 이전 Hidden State 였던 V t-1 을 얼마나 잊고, 현재 Candidate State를 얼마나 보존할지를 결정하게 된다
이렇게 세션 Graph 내의 모든 Node에 대해 수렴할 때 까지 업데이트를 진행하고 나면 Final node Vectors를 얻게 된다 : V1 ~ Vn
논문의 기호 중 i는 Node의 Index를 의미하고, t는 학습 Update 과정에서의 시점을 의미한다. 즉 모든 업데이트가 끝나면 t는 필요 없는 기호가 된다
3. Session Graph 임베딩 얻기
세션 임베딩은 아래의 두가지 벡터를 결합하여 구성하게 된다
- Local Sesssion Embedding
- 이건 가장 최근에 클릭한 아이템의 임베딩 값을 그대로 사용한다
- Global Sesssion Embedding
- 모든 Node 벡터를 통합하여 얻을 수 있는데, 중요도는 각각 다를 것이므로 Soft-attention 메커니즘을 활용한다
4. 모델 훈련과 추천
- 세션들 전체에서 Unique한 Item들 전체 목록 중 가장 높은 Score를 정해서 추천하게 된다
이 때는 Softmax 함수를 사용한다
- Loss함수는 Cross-Entropy 함수를 사용한다
- 일반적으로 세션의 길이가 괴앚ㅇ히 짧기 때문에 과적합을 막기 위해서는 비교적 적은 수의 Epoch이 적용되어야 할것이라 한다
5. 코드 구현
추가 예정