이미지 출처는 링크 or 아이펠 교육 자료입니다.
추천 시스템 논문을 학습하기 전에
NCF
DeepFM
AutoInt
HAFP
연관성 매칭이 선행되어야 하는 이유
Mean Average Precision
DCG / IDCG
이 지표의 의미 : 가장 이상적으로 추천했을 경우, 랭킹 기반으로 추천이 제대로 제공 되었는가?
온라인 광고 CTR 데이터셋
사이트 기준
앱 기준
디바이스 기준
그 외
(a)
(b)
새로운 u4가 들어온다면?
다만, 이 부분을 잠재 공간에 표현할 수 없기 때문에 DNN을 도입한 것(비선형 구조)
NDCG@K
: Top@K 평가 방법 중 랭킹 기반 평가를 의미HitRate@K
: Top@K 중 추천 아이템 매칭 여부 파악[모델 정의 파트]
embedding_user_mlp
, embedding_item_mlp
embedding_user_mf
, embedding_item_mf
2번, 3번
2번: Multi-Layer 퍼셉트론 구현 코드
Output Layer
3번: 최종적으로 사용자가 이 예측을 인터렉션할 것이라는 값을 추출
[Forword 파트]
1번: MLP 레이어에 들어가기 위한 사용자와 아이템 임베딩을 컴페티네이션하는 코드
2번: 사용자 MF용 벡터와 아이템 MF용 벡터로 element-wise multiplication 수행
3번: 각 레이어를 통과하면서 ReLU 활성화 함수를 적용
4번: 실제 사용자가 해당 아이템을 클릭할 것인지에 대한 예측 수행
여기까지는 Pytorch 기반
기존 연구
DeepFM
Factorization Machine(FM) + Neural network
Wide & Deep 구조 변형
FM 컴포넌트
Linear interaction, order-1 가능
Pairwise(order-2) feature interaction 가능
Offsets
: feature 시작 지점(필드로 구분)field_dims = [10, 20, 30]
으로 설정했을 경우의 랜덤 Input 값을 만들어 실험
[1] Original feature embedding
[2] offset 결과
FM
DNN
Input: queries, keys, values
Q = tf.layers.dense(queries, num_units, activation=tf.nn.relu)
K = tf.layers.dense(keys, num_units, activation=tf.nn.relu)
V = tf.layers.dense(values, num_units, activation=tf.nn.relu)
Q_ = tf.concat(tf.split(Q, num_heads, axis=2), axis=0)
K_ = tf.concat(tf.split(K, num_heads, axis=2), axis=0)
V_ = tf.concat(tf.split(V, num_heads, axis=2), axis=0)
# Multiplication
weights = tf.matmul(Q_, tf.transpose(K_, [0, 2, 1]))
# Scale
weights = weights / (K_.get_shape().as_list()[-1] ** 0.5)
# Activation
weights = tf.nn.softmax(weights)
기존 연구
HAFP 모델 제안
핵심 구조