SR-GNN(-ing)

jj·2020년 12월 18일
0

논문 제목: SR-GNN (Session-based Recommendation with Graph Neural Networks)

들어가기 전에, GNN을 이해하기 위한 참고 글:
https://medium.com/watcha/gnn-%EC%86%8C%EA%B0%9C-%EA%B8%B0%EC%B4%88%EB%B6%80%ED%84%B0-%EB%85%BC%EB%AC%B8%EA%B9%8C%EC%A7%80-96567b783479
http://www.secmem.org/blog/2019/08/17/gnn/

Abstract

  • anonymous user에 대한 추천 예측이 어려움
  • 이전의 추천 방식:
    - session을 sequence로 모델링함
    - item representation 외에도 user representation을 진행함
    • 이는 정확한 유저 벡터를 표현하기에는 insufficient
    • 충분한 유저-아이템 interaction에 의존함
  • 정확한 item embedding과 complex transitions of items(복잡한 아이템 전환?) 을 고려하기 위해서 새로운 방식을 고안함
  • 새로운 추천 방식
    • session sequences를 graphstructured data로 표현
    • session graph를 통해 GNN은 complex transitions of items을 고려가능
    • 각각의 세션은 attention network를 통해 composition of global preference와 해당 세션의 current interest로 표현됨

Introduction

  • 이전의 추천 시스템은 유저의 프로필과 past activities가 계속 저장된다고 예상함
  • 그러나 실제 서비스에서는 anonymous user이거나 진행중인 세션 내의 유저 행동 기록만 사용가능
  • 한 세션에서 제한된 행동 기록을 모델링하고 이에 맞는 추천을 생성해야함
  • 결국 GNN의 가장 큰 장점은 다음과 같다
    • capture transition of item
    • generate accurate item embedding vectors
    • 위의 두 개는 전통적인 sequential method(Marcov Chain, RNN-based model)에서는 발견하기 어려움

SR-GNN 방식의 workflow


1. 모든 세션 시퀀스를 directed session graph (방향 세션 그래프?)로 모델링함
- 여기서 각각의 세션 시퀀스는 subgraph로 취급됨
2. 각각의 세션 그래프는 하나씩 진행되며(successively), 각 그래프에 포함된 모든 노드의 latent vector는 gated GNN을 통해 얻게 됨
3. attention network를 통해, 각각의 세션은 global prefernece와 이번 세션의 current interest의 혼합으로 표현됨
- 이떄의 global, local session embedding vector는 노드들의 latent vector들로 구성됨
4. 마지막으로, 각 세션에서 각의 아이템이 다음 번 클릭할 때 등장할 확률을 예측함

main contribution
1. 구별된 세션 시퀀스를 graph structured data로 모델링하고, GNN을 통해 복잡한 item transition을 잡아냄
2. session based 추천시스템을 만들기 위해, session embedding을 사용함
- session embedding: 각각의 단일 세션에 포함된 아이템들의 latent vector를 기반으로 얻을 수 있음

The proposed Method

Notations

  • session based 추천 시스템은 한 유저가 어떤 아이템을 그 다음에 클릭할 것인가에 초점을 둔다
  • 장기적인 선호 프로필 없이, 오로지 유저의 current sequence session data에 기반함
  • formulation
    - let V = {v1, v2, . . . , vm} : 모든 세션에 포함된 모든 unique item으로 구성된 집합
    • list s = [v(s,1),v(s,2), ... v(s,n)] : 타임스탬프 순으로 정렬된 리스트, An anonymous session sequence s
    • v(s,i) ∈ V :a clicked item of the user within the session s
  • session based 추천 시스템의 목표: 다음 클릭(sequence label for the session: v(s,n+1))을 예측
  • session s에서, 모든 가능한 아이템에 대한 확률값 yˆ 을 도출
    - vector yˆ의 각 원소값: 각 원소에 대응하는 아이템에 대한 recommendation score
  • yˆ벡터 안의 top-K 아이템들은 추천될 아이템 후보군이 된다

Constructing Session Graphs

  • 각 세션 시퀀스 s는 directed graph Gs = (Vs, Es) 로 표현됨
  • 이 세션 그래프에서는, 각 노드들이 item v(s,i) ∈ V 를 의미함
  • 각 edge (vs,i−1, vs,i) ∈ Es는 한 유저가 (vs,i−1) 다음에 (vs,i)를 클릭했다는 의미임
    - 아이템들이 한 시퀀스에서 반복적으로 등장할 수 있기 때문에, 각 edge(간선)를 normalized weighted(정규화된 가중치)로 할당함
    • 가중치: edge의 발생정도/ edge의 시작 노드의 outdegree(출력차수)
  • 각 아이템v ∈ V 을 unified embedding space로 임베딩함
  • 노드 벡터 v ∈ R(d)는 GNN을 통해 학습된 아이템의 latent vector v 를 의미, d는 dimention
  • 노드 벡터에 기반하여, 각 세션 s는 임베딩 벡터s로 표현될 수 있음
    - 임베딩 벡터s는 해당 그래프에서 사용된 노드 벡터로 구성됨

Learning Item Embeddings on Session Graphs

  • 그렇다면, 어떻게 GNN을 통해 노드의 latent vector를 얻을 수 있는가?
  • Graph NN은 session-based 추천시스템에 적합함
    - 정보가 풍부한(?) 노드 벡터 덕분에 세션 그래프의 feature를 자동적으로 추출할 수 있기 때문이다
  • parameters
    - H ∈ R(d×2d) 은 가중치 조정
    - z(s,i), r(s,i)는 각각 reset and update gates를 의미
    - [v(t-1)1,...,v(t-1)n]: 세션 s에서의 노드 벡터들의 리스트
    - vi ∈ R(d): 노드 v(s,i)의 latent vector
    - connection matrix As ∈ R(n×2n): 그래프 안의 노드들이 서로 어떻게 상호작용하는지를 결정함
    - A(s,i:) ∈ R(1×2n) : node v(s,i)에 대응하는 2개의 column blocks in matrix As
    - As: 두개의 인접행렬 As(out), As(in)의 concatenation
  • update function for the node v(s,i) of graph Gs
  • 각각의 session graph Gs는 동시에 진행됨
  • (1) 은 다른 노드 간의 information propagation을 위해 사용됨(matrix As의 제약조건을 기반으로)
    - 이웃간의 latent vector를 추출하고, GNN의 input으로 feeding 함
    • 두 개의 게이트(update, reset gate)는 어떤 정보를 유지/버릴 것인지를 결정함 -> GRU와 비슷한 개념이라고 생각함!
  • (4) 이전 state,현재 state, reset gate를 기반으로 후보 state를 구성
  • 마지막 state는 이전의 hidden state와 후보 state의 혼합으로 구성(update gate의 제약 하에서)
  • 한 세션 그래프에서의 모든 노드가 수렴될 때까지 업데이트가 끝나면(?) 최종 노드 벡터를 얻을 수 있음
  • A example of a session graph and the connection matrix As
  • 예를 들어, session s =[v1, v2, v3, v2, v4] 로 이루어져 있다고 하자.
  • outgoing edges: x(가로)->y(세로)로 나가는 방향의 간선
  • incoming edges: x(가로)->y(세로)로 들어가는 방향의 간선
  • outgoing edges matrix(2,3),(2,4)를 보면 앞에서 제시된 normalized weighted(정규화된 가중치)가 적용된 것을 알 수 있음

Generating Session Embeddings

  • 이전의 session based recommendation은 각 세션에서의 유저의 distinct latent representation이 있다고 가정함
  • 그러나 SR-GNN은 해당 벡터에 대해 어떠한 가정도 하지 않음
  • 대신, 한 세션은 그 세션이 포함하고 있는 노드들로 바로 표현된다
  • 유저의 다음 클릭을 더 잘 예측하기 위해, 장기적인 선호와 이번 세션에서의 현재의 관심을 혼합하고, 이렇게 혼합된 임베딩을 세션 임베딩으로 삼는다
  • 모든 세션 그래프를 gated GNN으로 feeding한 후, 모든 노드에 대한 벡터를 얻을 수 있다
  • 각 세션s 를 embedding vector s ∈ R(d)로 표현하기 위해, 다음을 고려한다.
    - session s=[v(s,1), v(s,2), ... , v(s,n)]
    - local embedding sl (of session s) 은 가장 마지막에 클릭된 아이템 v(s,n) 벡터인 vn으로 표현될 수 있다 -> sl = vn
    - global embedding sg (of the session graph gs)는 모든 노드 벡터의 집합으로 생각한다
    - 이 임베딩의 정보들이 다른 우선순위를 가지고 있다면, 이를 soft-attention mechanism을 통해 global session representation 선호를 더 잘 나타낼 수 있을 것이다
  • parameter meters q ∈ R(d), W1,W2 ∈ R(d×d)는 아이템 임베딩 벡터의 가중치를 조정한다
  • 최종적으로, 하이브리드 임베딩인 sh를 the concatenation of the local and global embedding vector에 대해 선형변환을 취한다.
  • 이때, matrix W3 ∈ R(d×2d) 는 두 혼합 임베딩 벡터를 latent space R(d)로 압축한다

Making Recommendation and Model Training

  • 각 세션의 임베딩을 획득한 후, (각 후보 아이템 vi ∈ V에 대한) score zˆi은 session represetation sh * embedding vi로 계산한다
  • 그후 softmax를 취한다
  • zˆ ∈ R(m) : 모든 후보 아이템에 대한 recommendation scores을 의미
  • yˆ ∈ R(m) : 해당 노드가 세션 s에서의 다음 클릭이 될 확률을 의미
  • loss function: cross-entropy
    - y는 ground truth 아이템의 one hot encoding vector
  • 마지막으로, BPTT를 사용해서 SR-GNN을 학습시킴
    - 보통 session based 추천 시스템에서는, 대부분의 세션이 짧은 길이이기 때문에, 상대적으로 적은 수의 training step을 통해 오버피팅을 예방함

논문의 소스코드: https://github.com/CRIPAC-DIG/SR-GNN

참고: https://soobarkbar.tistory.com/184

profile
재밌는게 재밌는거다

0개의 댓글