TL;DR

  • source : https://arxiv.org/pdf/1708.05031
  • Deep Learning + Collaborative Filtering
  • Contributions
    1. neural network로 CF를 하는 NCF 제안
    2. 기존의 Matrix Factorization은 NCF로 설명 가능하고 고차원의 non-linearity를 모델링하기 위해 MLP 사용

기존 MF 한계

  • interaction을 user와 item의 latent vector 로 추정
  1. 독립 · 동일 가중치 가정
    • 각 차원은 서로 영향 없음  
    • 모든 차원이 같은 힘으로 결과에 기여  
  2. 표현력 한계
    • 내적은 선형 관계만 담음   복잡한 “조건부 선호”나 비선형 패턴을 담기 어려움  
    • 기존 유저 간 거리관계를 만족시키면 새 유저 추가 시 다른 거리 요구를 동시에 만족 못함  
  3. 차원 늘리기 문제
    • K를 크게 하면 과적합 위험 증가  
    • 학습 데이터 적은 유저 · 아이템에 취약  
  4. 대칭 · 스케일 혼합
    • 벡터 크기와 방향이 뒤섞여 해석 어려움  
    • 유저와 아이템 사이 본질적 비대칭 반영 어려움  
  5. 희소 · 편향 데이터 취약
    • 관측 로그만 사용해 노출 편향 교정 힘듦  
    • 저빈도 아이템은 정보 부족으로 부정확

Neural Matrix Factorization (NeuMF)

1

기본 세팅
  • Implicit feedback 가정
    • : 사용자가 아이템 i를 클릭·재생·구매 등 어떤 방식으로든 접촉했다는 사실만 의미
    • : ① 노출됐지만 관심 없어 클릭 안 함 ② 애초에 노출되지 않음 (추천·검색 결과에 없었음)
  • 따라서 Negative Feedback이 부족해서 문제 생길 수 있음
    • 플랫폼은 클릭·구매 등 행동이 있는 쌍만 기록 → 대부분 1
      • 노출·무관심·싫어요를 구분할 명시적 항목이 없음
    • 추천·검색 알고리즘이 이미 인기 아이템을 더 많이 노출 → 미노출 아이템은 0으로 남음
      • 따라서 0 중 상당수가 알려지지 않은 잠재적 양호(positive)
    • 중 1은 희소하지만 학습 단계에서는 “positive 표본”만 확실, 나머지는 애매
      • 모델이 학습 과정에서 ‘싫어함’ 신호를 거의 받지 못해 over-generalization 위험
Loss : Implicit feedback Binary cross entropy loss
  • : 관찰된 interaction
  • : 관찰되지 않은 interaction

학습 과정에서 어떻게 적용?

  • 일반적으로 관찰되지 않은 interaction의 개수가 훨씬 많음
  • 매 iteration마다 관찰된 interaction와 비율을 맞춰서 uniform하게 샘플링해서 학습에 사용
def get_train_instances(train, num_negatives):
   user_input, item_input, labels = [],[],[]
   num_users = train.shape[0]
   for (u, i) in train.keys():
       # positive instance
       user_input.append(u)
       item_input.append(i)
       labels.append(1)
       # negative instances
       for t in xrange(num_negatives):
           j = np.random.randint(num_items)
           while train.has_key((u, j)):
               j = np.random.randint(num_items)
           user_input.append(u)
           item_input.append(j)
           labels.append(0)
   return user_input, item_input, labels
  • item 인기도 기반으로 non-uniform sampling도 가능
    • 실제로 노출이 많이 되었지만 (인기가 높아서) 선택이 안된 interaction을 학습에 더 자주 사용
Pre-training
  • GMF 부분과 MLP 부분으로 각각 모델 만들어서 학습
  • 이후 NeuMF Layer에서 hyperparameter weight 줘서 concat
Evaluation : leave-one-out
  • user의 가장 마지막 interaction 1개 + user와 상호작용 없던 item 100개 샘플링해서 총 101개 item으로 Hit ratio, NDCG 검증

Footnotes

  1. https://github.com/hexiangnan/neural_collaborative_filtering