-
pinterest처럼 계속 탐색할 수 있는 UI를 구현합니다.
이 과정에서 리롤 애니메이션과 빈티지한 커버 처리를 통해 계속해서 디깅하고 싶은 화면을 구성하였습니다.
-
실제 유저들의 음악청취 패턴을 파악하기 위해 플레이리스트 데이터를 실제 유저의 행동 로그라고 가정하였습니다.
-
recommendation: simGCL 기반 트랙 임베딩 + 유저 시퀀스를 반영한 투타워 모델
-
keyword search: clip 방식의 트랙임베딩과 키워드 임베딩의 alignment + 짧은 키워드 검색을 위한 전처리
- Spotify 플레이리스트 데이터를 크롤링하여 구축
- 약 80K tracks, 40K playlists 규모
- 각 playlist를 하나의 user sequence로 가정하여 추천 문제를 구성
- Item2Vec
- co-occurrence 기반으로 학습되지만
- 그래프 이웃 구조를 직접 활용하지 못한다는 한계 존재
- LightGCN
- 사용자–아이템 이분 그래프 기반 임베딩
- Recall 성능은 개선되었으나
- 임베딩 공간이 uniform하지 않음
- SimGCL
-
그래프에 contrastive perturbation을 적용한 방식
-
특히 long-tail 아이템 추천 성능이 크게 향상
-
임베딩 공간에서
uniformity 증가, alignment 개선
-
결과적으로 더 균형 잡힌 representation 형성
-
in-batch Negative로 학습하며 random Negative를 배치에 추가한 경우와도 비교
-
| Metric | Item2vec | LightGCN | simGCL | simGCL+randNeg |
|---|---|---|---|---|
| Recall@10 | 0.0486 | 0.1594 | 0.2051 | 0.2068 |
| Recall@20 | 0.0708 | 0.2253 | 0.2772 | 0.2828 |
| NDCG@10 | 0.0262 | 0.0898 | 0.1191 | 0.1199 |
| NDCG@20 | 0.0318 | 0.1063 | 0.1372 | 0.139 |
그래프 모델은 유저 임베딩을 정적으로 학습하기 때문에, 현재 세션 기반의 동적 유저 표현이 불가능합니다.
이를 보완하기 위해 Two-Tower 모델을 도입하여 세션 내 트랙 임베딩으로부터 유저 임베딩을 실시간으로 생성합니다.
-
Architecture
- User Tower
- 2-layer Transformer Encoder
- 사용자 track sequence → user embedding
- Item Tower
- 트랙 feature를 MLP로 변환하여 item embedding 생성
- User Tower
-
Training
- In-batch negative sampling + infoNCE
-
Serving
- item embedding을 DB에 미리 저장
- ANN 검색으로 빠른 추천 수행
-
Evaluation (LOO)
Recall@10: 0.1982
Recall@20: 0.3127
Recall@50: 0.4631
GOAL: 사용자가 검색한 무드/장르에 맞는 곡을 추천!
-
Training
-
플레이리스트 제목은 대부분 길지만 (ex 눈 오는 겨울에 듣는 감성힙합/발라드, 70s Hits - The Biggest Hits of the 70's)
-
유저의 검색은 짧은 키워드(ex 발라드, 크리스마스..) 위주가 될 것이라고 생각했습니다.
-
GPT api를 통해 플레이리스트 제목에서 짧은 키워드를 추출하여 이를 학습에 사용하여 키워드 검색을 강화하였습니다.
70s Hits - The Biggest Hits of the 70's → ['70s', 'hits']
이후 3번 이상 등장한 2300여개의 태그를 학습에 사용하였습니다.
-
-
inference
- 추론시에는 플레이리스트 임베딩과 같은 공간에 존재하는 트랙 임베딩에 프로젝션 모델을 사용합니다.
- projected embedding을 저장하여 검색 시간 단축합니다.
- ANN search(HNSW)
- MMR 기반으로 검색의 다양성 확보
참고 논문
https://arxiv.org/abs/1603.04259
https://arxiv.org/abs/2002.02126