앞서 포스팅한 내용처럼 추천 시스템에는 여러가지 이유로 고전적인 ML 모델을 주로 활용했음
실제로 현재도 ML 모델들이 많이 활용되고 있음
그럼에도 불구하고
추천시스템에서 딥러닝을 활용하는 이유
1. Nonlinear Transformation
- 복잡한 user-item 상호작용을 효과적으로 모델링하고 user의 선호도 예측 (XOR 해결 가능)
2. Representation Learning
- 사람이 직접 feature design 안 해도 됨, 텍스트/이미지/오디오 등 활용 가능
3. Sequence Modeling
- 딥러닝은 NLP, 음성 신호 처리 등 Sequential modeling Task에 잘 적용됨
- 이는 추천 시스템에서 next-item prediction, session-based recommendation에 사용됨
4. Flexibility
- Tensorflow, PyTorch 등 다양한 DL 프레임워크 사용 가능
- 더 효율적으로 서빙
Neural Collaborative Filtering
개요
(모든 사진 출처는 Neural Collaborative Filitering 논문)
Matrix Factorization + Mulit Layer Perceptron으로 보면 됨
MF의 한계를 지적하면서 NN 기반의 구조를 사용해 더 일반화시킨 모델
MF는 user와 item embedding의 선형 조합으로 구하는데,
이는 복잡한 관계를 표현하는 것에 한계를 가짐 (XOR 문제)
→ 차원을 늘리면 해결이 되긴 함 → 하지만 Overfitting 발생 가능 → Nonlinear로 해결하자
$$ Y \text{(user-item)} \; = P \text{(user)} \times Q \text{(item)} $$
→ 비선형성이 있는 NN 구조를 활용해서 이를 개선한 것
앞서 학습한 MF를 일반화한 것과 MLP의 앙상블로 최종 모델을 구축함
MLP 파트
Input Layer: One-Hot Encoding된 User(Item) Vector $ v_u(v_i) $
Embedding Layer: User(Item) Latent Vector $ P^T v_u (Q^T v_i) $
Neural CF Layers: $ \phi_X( \ldots \phi_2 ( \phi_1 (P^T v_u, Q^T v_i ) ) \ldots ) $
Output Layer: User와 Item 사이의 관련도 $ \hat{y}_{ui} = \phi_{out} ( \phi_X( \ldots \phi_2 ( \phi_1 (P^T v_u, Q^T v_i ) ) \ldots ) ) , \hat{y}_{ui} \in [0, 1] $
<참고>
- $ \phi_x $: $ x $번 째 Neural Network
- Activation Function은 Logstic 혹은 Prohibit 함수 사용
최종 모델
GMF와 MLP를 앙상블하여 사용
GMF와 MLP는 서로 다른 Embedding Layer 사용
$$ \phi^{GMF} = (p_u^G)^T q_i^G $$
$$ \phi^{MLP} = \phi_X( \ldots \phi_2 ( \phi_1 ( p_u^M , q_i^M ) ) \ldots ) $$
$$ \hat{y}_{u, i} = \sigma ( h^T \begin{equation} \begin{bmatrix} \phi^{GMF} \\ \phi^{MLP} \\ \end{bmatrix} \end{equation} ) $$
해당 논문은 성능 향상보다는 MLP Layer를 MF에 처음으로 추가한 것에 의미가 있음!
YouTube Recommendation
개요
(모든 사진 출처는 Deep Neural Networks for YouTube Recommendations 논문)
딥러닝 기반 추천 시스템을 실제 유튜브 서비스에 적용한 논문
유튜브는 엄청 많은 유저, 제한된 컴퓨텅 파워, 계속 업로드 되는 컨텐츠, 높은 Sparsity 등의 많은 Issue가 있다.
이에 대처해서 효율적인 서빙과 특화된 추천 알고리즘을 필요로 한다.
YouTube Recommendation은 크게 2가지 단계의 구조로 되어 있다.
1. Candidate Generation: High Recall 목표, 해당 User에 대해 Top N 추천 아이템 생성
2. Ranking: 유저, 비디오 피처를 좀 더 풍부하게 사용, 스코어를 구하고 최종 추천 리스트 제공
Candidate Generation에서 후보군을 선정하고, Ranking에서 최종 결정하는 느낌!
Candidate Generation
extreme multiclass classification으로 생각하면 됨
특정 시간($ t $)에 유저 $ U $가 $ C $라는 context를 가지고 있을 때, 비디오 ($ i $) 각각을 볼 확률을 계산
$ P(w_t = i|U, C) = \cfrac{e^{v_i u}}{\sum_{j \in V} e^{v_j u}} $
1. watch vector: 과거 시청 이력
2. search vector: 과거 검색 이력
→ 마지막 검색어가 너무 큰 힘을 갖지 않도록 평균을 냄
3. domographic & geographic features: 성별 등의 인구통계학 정보와 지리적 정보를 feature로 포함
4. example age features: 모델이 과거 데이터 위주로 편향되어학습되는 문제를 방지하기 위해, 시청 로그가 학습 시점으로부터 경과한 정도를 나타냄
→ Bootstraping 현상 방지 및 Freshness 제고
다양한 Feature Vector들을 한 번에 Concatenate 하고, $ n $개의 dense layer를 거쳐서 User Vector 생성
마지막에는 softmax function을 거쳐서 비디오 분류
실제 유저에게 Serving을 할 때는 Annoy, Faiss 같은 ANN 라이브러리를 활용해서 벡터 내적 계산 시간을 줄인다.
$ P(w_t = i|U, C) = \cfrac{e^{v_i u}}{\sum_{j \in V} e^{v_j u}} $
Ranking
Candidate Generation에서 1차로 추린 비디오 후보들의 순위를 매기는 과정이다.
- Logistic Regression을 사용하는 기본적인 방법을 활용함
- Candidate Generation에서 보다 더 많은 비디오 관련 Feature 활용함
- Loss Function은 단순 클릭 여부가 아니라 시청 시간을 가중치로 한 값을 반영함
user actions feature 사용
- 유저가 특정 채널에서 얼마나 많은 영상을 봤는지
- 유저가 특정 토픽의 동영상을 본지 얼마나 지났는지
- ...
이 부분은 사실 DL 모델링보다 Feature Engineering, Feature Selection이 중요함
네트워크를 통과한 뒤에는 비디오가 실제로 시청될 확률을 매핑함
$$ P(watch) \in [0, 1] $$
→ 시청 여부만을 맞히는 CTR 예측
(CTR: Click-through rate, 클릭률)
Loss Function
- 단순 Binary가 아닌 Weighted Cross-Entropy Loss 사용
- 비디오 시청 시간을 가중치로 줌
- 그러므로 낚시성/광고 콘텐츠를 업로드하는 어뷰징의 영향을 감소시킴
딥러닝 기반 2단계 추천을 처음 제안한 논문!
Candidate Generation: 기존 CF 아이디어 기반으로 다양한 피처 활용
Ranking: 과거에 많이 사용된 선형/트리 기반 모델보다 더 높은 성능의 딥러닝 모델
AutoRec
Autoencoder: 입력 데이터를 출력으로 복원(reconstruct)하는 비지도(unsupervised) 학습 모델
이 Autoencoder를 CF에 적용하여 기본 CF 모델에 비해 Representation과 Complexity 측면에서 뛰어남을 보인 논문
https://blog.keras.io/building-autoencoders-in-keras.html
Autoencoder에서 이미지 대신 Rating Vector를 입력과 출력으로 사용한다.
- 유저나 아이템 벡터를 저차원의 Latent Feature로 나타내서 이를 사용해 평점으로 예측
- Autoencoder의 Representation Learning을 유저와 아이템에 적용한 것
MF는 Linear, Low-order interaction을 통한 Representation이 학습되지만,
AutoRec은 Non-Linear Activation Function을 사용하므로 더 복잡한 Interaction 표현이 가능함
아이템과 유저 중, 한 번에 하나에 대한 임베딩 만을 진행함
아래 아이템 임베딩 예시
출처: "AutoRec: Autoencoders Meet Collaborative Filtering" 논문
$ r^{(i)} $: 아이템 $ i $의 Rating Vector, R_{ui}: 유저 $ u $의 아이템 $ i $에 대한 Rating
$ V $: 인코더 가중치 행렬, $ W $: 디코더 가중치 행렬
기존의 rating과 reconstruced rating의 RMSE를 최소화하는 방향으로 학습
관측된 데이터에 대해서만 역전파 및 파라미터 업데이트 진행
$$ \min\limits_{\theta} \sum_{r \in S} || r - h(r; \theta) ||_2^2 $$
$$ h(r; \theta) = f( W \cdot g(Vr + \mu) + b ) $$
$ S $: 점수 벡터 $ r $의 집합, $ f, g $: Activation Function (Sigmoid, Identity Function)
이 논문 이후로 DAE, VAE 같은 고급 AE 기법을 활용한 후속 연구들이 나옴
CDAE
Collaborative Denoising Auto-Encoders
DAE (Denoising Autoencoders)
- 입력 데이터에 Random Noise나 Dropout을 추가하여 학습
- Noise Input을 더 잘 복원할 수 있는 Robust한 모델이 학습되어 전체적인 성능 향상
https://blog.keras.io/building-autoencoders-in-keras.html
AutoRec은 Rating Prediction이 목적이었지만,
CDAE는 Ranking을 통해 유저에게 Top-N 추천 제공이 목적
문제 단순화를 위해, 유저-아이템 상호작용 정보를 binary 정보로 바꿔서 학습 데이터로 사용
→ 개별 유저에 대해서 아이템의 Rating이 아닌 Preference를 학습하게 됨
출처: "Collaborative Denoising Auto-Encoders for Top-N Recommender Systems" 논문
AutoRec과 달리 DAE를 사용해서 Noise 추가
$$ P( \tilde{y}_u = \delta y_u) = 1 - q, P(\tilde{y}_u = 0 ) = q $$
$ \tilde{y}_u $는 $ q $의 확률에 의해 0으로 Dropout된 벡터 → 이것이 Noise
$ y_u $는 유저 $ u $의 모든 Item에 대한 평점
개별 유저에 대해 $ V_u $를 학습
→ 유저에 따른 특징을 해당 파라미터가 학습하고 Top N 추천에 사용
Encoder로 Latent Representation $ z_u $를 생성하고,
Decoder로 Regenerate
$$ z_u = h ( W^T \tilde{y}_u + V_u + b) $$
$$ \hat{y}_{ui} = f ( {W'}_{i}^{T} z_{u} + b'_{i}) $$
'boostcamp AI Tech > 추천 시스템' 카테고리의 다른 글
[RecSys] Context-aware Recommendation (0) | 2023.04.07 |
---|---|
[RecSys] 추천 시스템에 Deep Learning 활용하기 2 (0) | 2023.04.03 |
[RecSys] Item2Vec and ANN (0) | 2023.03.31 |
[RecSys] 추천 시스템 - 협업 필터링 (Collaborative Filtering) - MBCF (0) | 2023.03.29 |
[RecSys] 추천 시스템 - 협업 필터링 (Collaborative Filtering) - NBCF (0) | 2023.03.27 |