| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- JavaScript
- selenium
- 앱개발
- 강화학습
- 논문리뷰
- 사이드프로젝트
- 데이터분석
- 머신러닝
- Reinforcement Learning
- Ai
- 클론코딩
- TTS
- 카트폴
- DeepMind
- 강화학습 기초
- 음성합성
- Ros
- ReactNative
- 딥러닝
- coding
- Instagrame clone
- 전국국밥
- pandas
- TeachagleMachine
- python
- React
- App
- clone coding
- expo
- FirebaseV9
- Today
- Total
qcoding
[AI논문리뷰-추천알고리즘] BERT4Rec - 양방향 Transformer와 Cloze 학습으로 순차 추천을 바꾼 모델 본문
[AI논문리뷰-추천알고리즘] BERT4Rec - 양방향 Transformer와 Cloze 학습으로 순차 추천을 바꾼 모델
Qcoding 2026. 5. 6. 21:13한 문단 요약
BERT4Rec은 사용자의 과거 클릭, 구매, 시청 기록을 왼쪽에서 오른쪽으로만 읽던 순차 추천 모델의 한계를 BERT식 양방향 Transformer로 푼 논문이다. 핵심은 미래 아이템을 직접 보게 되는 정보 누수를 막기 위해 일부 아이템을 [mask]로 가리고 주변 문맥으로 맞히는 Cloze objective를 추천에 적용한 점이다. Beauty, Steam, MovieLens 1M/20M 네 데이터셋에서 SASRec, GRU4Rec+, Caser 등 강한 순차 추천 baseline보다 HR@10, NDCG@10, MRR을 일관되게 개선했다.
이 논문은 무엇을 해결하려고 했나?
이 논문의 문제의식은 "사용자 행동 시퀀스를 꼭 왼쪽에서 오른쪽으로만 읽어야 하는가?"로 요약할 수 있다. 기존 순차 추천 모델은 사용자가 과거에 소비한 아이템들을 시간순으로 인코딩하고 다음 아이템을 예측한다. GRU4Rec 같은 RNN 계열, Caser 같은 CNN 계열, SASRec 같은 self-attention 계열이 모두 이 흐름에 있다.
하지만 저자들은 left-to-right 모델이 아이템 표현을 제한한다고 본다. 시퀀스 중간의 아이템은 자기보다 앞의 아이템만 볼 수 있고, 뒤쪽 문맥은 표현에 반영하지 못한다. 자연어처럼 엄격한 문법 순서가 있는 데이터와 달리, 사용자 행동은 세일, 노출 위치, 기분, 외부 이벤트 같은 관측되지 않는 요인에 흔들린다. 그래서 "앞에서 뒤로만"이라는 가정이 실제 취향 변화를 충분히 설명하지 못할 수 있다.
BERT4Rec의 답은 BERT를 순차 추천에 맞게 바꾸는 것이다. 모든 위치가 양쪽 문맥을 볼 수 있게 하되, 정답 아이템을 그대로 보며 맞히는 정보 누수는 Cloze task로 막는다. 학습 때는 일부 아이템을 [mask]로 바꾸고 원래 아이템을 맞히며, 테스트 때는 사용자 시퀀스 끝에 [mask]를 붙여 다음 아이템을 추천한다.
배경지식과 핵심 키워드
이 논문을 읽을 때 중요한 포인트는 "Transformer를 썼다"가 아니라, 추천의 학습 목표와 평가 프로토콜이 어떻게 바뀌었는지다. 아래 키워드를 잡고 보면 BERT4Rec의 기여와 한계가 더 선명해진다.
|
Sequential Recommendation
사용자 u의 행동 기록 S_u=[v_1,...,v_t]가 있을 때 다음 시점의 아이템 v_{t+1}을 예측하는 문제다. BERT4Rec은 Beauty 40,226명, Steam 281,428명, ML-1m 6,040명, ML-20m 138,493명 규모로 실험한다. 평균 시퀀스 길이는 Beauty 8.8, Steam 12.4, ML-1m 163.5, ML-20m 144.4로 데이터마다 매우 다르다.
|
Left-to-Right 모델
GRU4Rec, SASRec처럼 앞의 행동을 보고 다음 행동을 예측하는 방식이다. 이 구조는 테스트 목표와 잘 맞지만, 중간 위치의 표현이 오른쪽 문맥을 보지 못한다. 논문은 SASRec을 BERT4Rec의 단방향 버전으로 해석하며, Table 3에서 Beauty HR@10 0.2653인 SASRec이 BERT4Rec 1-mask 0.2940보다 낮다는 점으로 양방향 표현의 효과를 분리해 보인다.
|
|
Bidirectional Self-Attention
모든 위치가 같은 layer 안에서 모든 다른 위치를 attention으로 볼 수 있는 구조다. BERT4Rec은 L개의 Transformer layer를 쌓고, 각 layer에서 multi-head self-attention과 position-wise feed-forward network를 사용한다. 논문 기본 설정은 공정 비교를 위해 L=2, h=2이며, head당 차원은 32를 경험적으로 사용한다.
|
Cloze Objective
문장 중간 단어를 가리고 맞히는 BERT의 masked language modeling을 추천 시퀀스에 적용한 학습 목표다. BERT4Rec은 입력 아이템 중 rho 비율을 [mask]로 바꾸고, 양쪽 문맥을 조건으로 원래 아이템을 예측한다. 최적 rho는 Beauty 0.6, Steam 0.4, ML-1m/ML-20m 0.2로, 짧은 시퀀스는 더 많이 가려도 버티지만 긴 시퀀스는 너무 많이 가리면 학습이 어려워진다.
|
|
Information Leakage
양방향 모델을 순차 추천에 그대로 쓰면 target item이 주변 위치를 통해 간접적으로 보이는 문제가 생긴다. 예를 들어 v_t를 맞히는데 입력 안에 v_t가 남아 있으면 모델은 추천 규칙을 배우지 않아도 된다. BERT4Rec의 [mask] 설계는 바로 이 누수를 막기 위한 장치다.
|
HR@10 / NDCG@10 / MRR
평가는 leave-one-out next item prediction이다. 각 사용자에서 마지막 아이템은 test, 그 직전 아이템은 validation, 나머지는 train으로 둔다. 테스트에서는 정답 아이템 1개와 사용자가 보지 않은 negative 아이템 100개를 popularity 기반으로 샘플링해 ranking하고, HR@1/5/10, NDCG@1/5/10, MRR을 계산한다.
|
|
Positional Embedding
Transformer는 순서를 직접 알지 못하므로 아이템 embedding에 위치 embedding을 더해야 한다. BERT4Rec은 고정 sinusoidal embedding 대신 학습 가능한 positional embedding을 쓴다. Ablation에서 positional embedding을 제거하면 ML-1m NDCG@10이 0.4759에서 0.2155로 크게 떨어져, 긴 행동 시퀀스에서는 위치 정보가 거의 필수임을 보여준다.
|
Sampled Evaluation
이 논문의 성능 수치는 전체 아이템 catalog ranking이 아니라 정답 1개와 negative 100개 ranking이다. ML-20m처럼 아이템이 26,744개인 데이터에서도 테스트 후보는 101개다. 모델 비교에는 유용하지만, 실제 서비스에서 수백만 후보를 ranking하는 상황과는 차이가 있으므로 수치를 읽을 때 주의가 필요하다.
|
핵심 인사이트
BERT4Rec의 핵심은 추천 문제에 Transformer를 가져온 것이 아니라, 양방향 문맥을 쓰면서도 다음 아이템 추천에서 정답 누수를 막는 학습 목표를 설계한 데 있다. 그래서 이 논문은 구조 논문이면서 동시에 objective 설계 논문이다.
기존 방법의 한계
기존 순차 추천 모델은 사용자의 과거 행동을 하나의 방향으로 인코딩한다. RNN은 순서대로 hidden state를 넘기고, CNN은 제한된 window 안에서 local pattern을 잡고, SASRec은 causal attention mask로 과거 위치만 보게 한다. 이 방식은 "다음 아이템 예측"이라는 테스트 목표와 직관적으로 맞지만, 각 아이템 표현이 자기 뒤의 문맥을 반영하지 못한다.
저자들은 이 한계를 두 가지로 본다. 첫째, 표현력 제한이다. 사용자 시퀀스 안의 아이템은 앞뒤 문맥 속에서 의미가 달라질 수 있는데 단방향 모델은 앞쪽 정보만 사용한다. 둘째, 엄격한 순서 가정이다. 음악, 영화, 쇼핑 같은 추천 로그에서는 사용자가 A 다음 반드시 B를 선택했다기보다 노출, 가격, 이벤트, 세션 맥락 때문에 순서가 흔들리는 경우가 많다.
물론 양방향 모델을 그대로 쓰면 문제가 생긴다. 다음 아이템을 맞히려는데 모델이 정답 아이템을 입력에서 볼 수 있으면 학습이 무의미해진다. 그래서 BERT4Rec은 "양방향으로 보되 정답 위치는 가린다"는 절충을 택한다.
제안 방법의 핵심 아이디어
BERT4Rec은 아이템 ID 시퀀스를 입력으로 받아 item embedding과 positional embedding을 더한 뒤, 여러 Transformer layer에 통과시킨다. 각 위치의 표현은 multi-head self-attention을 통해 시퀀스 전체의 다른 아이템과 정보를 교환한다. 이후 [mask] 위치의 final hidden vector를 output layer에 넣어 전체 item vocabulary에 대한 softmax 확률을 만든다.
학습은 매 step마다 사용자 시퀀스의 일부 아이템을 [mask]로 바꾸고 원래 아이템을 맞히는 방식이다. 예를 들어 [v1, v2, v3, v4, v5]에서 v2와 v4를 가리면 입력은 [v1, [mask], v3, [mask], v5]가 되고 label은 각각 v2, v4가 된다. 손실은 masked item들에 대한 negative log-likelihood 평균이다.
테스트 시에는 조금 다르게 동작한다. 사용자의 실제 행동 시퀀스 끝에 [mask]를 붙이고, 그 마지막 [mask]의 hidden vector로 다음 아이템을 예측한다. 학습 목표와 테스트 목표가 완전히 같지는 않으므로, 저자들은 학습 중 마지막 아이템만 가리는 sample도 만들어 sequential recommendation task에 더 맞춘다.
모델 구조/알고리즘 흐름
구현 관점에서 BERT4Rec의 흐름은 다음과 같다.
- 사용자별 행동 로그를 timestamp 기준으로 정렬해 item ID 시퀀스를 만든다.
- 너무 긴 시퀀스는 최근 N개로 자른다. 논문은 Beauty/Steam은 N=50, ML-1m/ML-20m은 N=200을 사용한다.
- 학습 시 시퀀스의 rho 비율 아이템을 [mask]로 바꾼다.
- item embedding과 learnable positional embedding을 더한다.
- L개의 bidirectional Transformer layer를 통과시킨다.
- [mask] 위치의 hidden vector를 projection, GELU, shared item embedding matrix, softmax로 연결해 원래 아이템 확률을 낸다.
- masked item들의 negative log-likelihood를 최소화한다.
- 추론 시에는 시퀀스 끝에 [mask]를 붙이고, 이 위치의 점수로 Top-K 아이템을 추천한다.
세부 구현도 꽤 중요하다. 저자들은 input/output item embedding을 공유해 모델 크기와 overfitting을 줄이고, residual connection, layer normalization, dropout을 Transformer sub-layer마다 적용한다. optimizer는 Adam, learning rate는 1e-4, batch size는 256이며, 단일 NVIDIA GTX 1080 Ti에서 모든 모델을 scratch부터 학습했다고 보고한다.
논문 그림/표로 이해하기
Figure 1을 보면 차이가 직관적이다. SASRec과 RNN 기반 모델은 왼쪽에서 오른쪽으로 다음 아이템을 예측한다. 반면 BERT4Rec은 [mask] 위치를 중심으로 양방향 self-attention을 수행한다. 추천 문제에 BERT를 그대로 옮긴 것이 아니라, "시퀀스 안의 일부 아이템을 가리고 맞히는 추천 전용 BERT"로 바꾼 셈이다.
Figure 2의 attention heatmap은 왜 양방향 모델이 의미 있는지 보여준다. layer 1의 어떤 head는 왼쪽 아이템을 더 보고, 다른 head는 오른쪽 아이템을 더 본다. layer 2에서는 더 최근 위치에 집중하는 경향도 나타난다. 단방향 causal attention과 달리, BERT4Rec의 각 위치는 양쪽 아이템을 함께 참고해 표현을 만든다.
주요 성능 결과 일부 재구성
| 데이터셋 | Metric | 강한 baseline | BERT4Rec | 개선율 |
|---|---|---|---|---|
| Beauty | HR@10 | SASRec 0.2653 | 0.3025 | 14.02% |
| Steam | HR@10 | SASRec 0.3783 | 0.4013 | 6.08% |
| ML-1m | NDCG@10 | SASRec 0.4368 | 0.4818 | 10.32% |
| ML-20m | MRR | SASRec 0.4026 | 0.4785 | 18.85% |
실험 설정과 결과 해석
실험은 Amazon Beauty, Steam, MovieLens 1M, MovieLens 20M 네 데이터셋으로 진행된다. rating이나 review 존재 여부는 모두 implicit feedback 1로 변환하고, 사용자별 로그를 timestamp로 정렬해 시퀀스를 만든다. 품질을 위해 최소 5개 feedback이 있는 사용자만 남긴다.
baseline은 POP, BPR-MF, NCF, FPMC, GRU4Rec, GRU4Rec+, Caser, SASRec이다. 비교 범위가 꽤 넓다. 비순차 협업 필터링, Markov chain 기반 모델, RNN, CNN, 단방향 self-attention이 모두 들어 있다. 그래서 BERT4Rec이 단순히 약한 모델을 이긴 것이 아니라 당시 강한 sequential recommendation 계열과 비교했다는 점은 의미가 있다.
결과는 명확하다. Table 2에서 BERT4Rec은 모든 데이터셋과 모든 metric에서 최고 성능이다. 평균적으로 가장 강한 baseline 대비 HR@10 7.24%, NDCG@10 11.03%, MRR 11.46% 개선을 보고한다. 특히 ML-20m HR@1은 SASRec 0.2544에서 BERT4Rec 0.3440으로 35.22% 개선되어, 상위 1개 추천의 품질 차이가 크게 나타난다.
더 흥미로운 것은 ablation이다. BERT4Rec (1 mask)은 Cloze에서 한 번에 하나만 가리는 변형인데, Beauty와 ML-1m에서 SASRec보다 모든 metric이 높다. 이는 성능 향상이 mask sample을 많이 만든 효과만이 아니라 양방향 표현 자체에서 온다는 근거다. 그리고 full BERT4Rec은 1-mask보다 다시 좋아져, 여러 mask를 사용하는 Cloze objective도 추가 이득을 준다.
실험을 읽을 때의 주의점
BERT4Rec의 개선은 설득력 있지만, 평가는 정답 1개와 negative 100개 ranking이다. 실제 서비스의 전체 후보 ranking, 노출 편향, cold-start, 세션 단절을 모두 해결했다는 뜻은 아니다. 이 논문은 "sequence encoder와 objective를 어떻게 설계할 것인가"에 대한 강한 기준점으로 읽는 편이 좋다.
한계와 비판적 관점
첫 번째 한계는 item ID 중심 모델이라는 점이다. 결론에서도 저자들은 category, price, cast 같은 rich item feature를 넣는 방향을 future work로 남긴다. 즉 BERT4Rec은 순수 행동 시퀀스가 충분히 쌓인 상황에서는 강하지만, 새 아이템이나 새 사용자 문제에는 별도 장치가 필요하다.
두 번째는 계산량이다. self-attention은 sequence length n에 대해 O(n^2d)의 비용이 든다. 논문은 GPU 병렬화 덕분에 실험에서는 문제가 크지 않았다고 말하지만, 매우 긴 로그를 가진 대규모 서비스에서는 candidate generation, sequence truncation, efficient attention, distillation 같은 추가 설계가 필요하다.
세 번째는 학습-추론 mismatch다. 학습은 시퀀스 중간의 random masked item을 맞히고, 추론은 끝에 붙인 [mask]로 다음 아이템을 맞힌다. 논문은 마지막 아이템만 가리는 sample을 추가해 이 간극을 줄이지만, objective가 최종 ranking 지표를 직접 최적화하는 것은 아니다.
마지막으로 sampled evaluation의 한계가 있다. popularity 기반 negative 100개 샘플은 재현성과 비교 가능성을 주지만, 실제 catalog 전체에서 인기 아이템과 긴 꼬리 아이템이 섞인 후보를 ranking하는 상황과는 다르다. 후속 연구나 실무 적용에서는 full ranking, time-based split, exposure bias 보정 평가를 별도로 봐야 한다.
구현하거나 응용한다면 무엇을 봐야 하나?
직접 구현한다면 먼저 데이터 split부터 고정해야 한다. 사용자별 마지막 아이템 test, 그 직전 validation, 나머지 train이라는 leave-one-out 설정과 negative sampling 방식이 결과를 크게 좌우한다. 논문 수치와 비교하려면 popularity 기반 100 negative sampling까지 맞춰야 한다.
모델 구현에서는 [mask] token을 item vocabulary에 추가하고, output layer에서 item embedding을 공유하는 부분을 확인해야 한다. 학습 batch 안에서 mask 비율 rho를 데이터셋 길이에 맞게 조정하는 것도 중요하다. 짧은 시퀀스에서는 rho를 크게 잡아도 문맥이 남지만, 긴 시퀀스에서 너무 많이 가리면 예측 대상이 과도하게 늘어난다.
서비스 관점에서는 BERT4Rec을 전체 추천 시스템의 final ranker로 곧장 쓰기보다 sequence-aware re-ranker로 보는 것이 현실적이다. 먼저 two-tower, collaborative filtering, 인기 기반 recall 등으로 후보를 줄이고, 사용자의 최근 행동 시퀀스를 BERT4Rec류 모델에 넣어 후보를 재정렬하는 구조가 자연스럽다. 게임 상점 추천, 콘텐츠 이어보기, 강의/논문 다음 읽기 추천처럼 최근 행동 순서가 중요한 도메인에서 특히 실험 가치가 크다.
한 줄 결론과 다음에 읽을 논문
한 줄 결론: BERT4Rec은 순차 추천에서 "다음 아이템을 맞히려면 과거만 봐야 한다"는 관성을 깨고, Cloze objective로 정보 누수를 막으며 양방향 Transformer 표현을 추천에 성공적으로 적용한 논문이다.
다음에 읽을 논문으로는 SASRec을 추천한다. BERT4Rec이 무엇을 바꿨는지 가장 잘 보려면, 단방향 self-attention 기반 순차 추천인 SASRec의 causal attention 구조를 먼저 또는 함께 비교해보는 것이 좋다.
출처
'AI논문리뷰-추천알고리즘' 카테고리의 다른 글
| [AI논문리뷰-추천알고리즘] SASRec - Self-Attention으로 순차 추천의 장단기 문맥을 함께 잡은 모델 (2) | 2026.05.06 |
|---|---|
| [AI논문리뷰-추천알고리즘] Wide & Deep Learning - 추천 시스템에서 암기와 일반화를 함께 쓰는 법 (1) | 2026.05.06 |
| [AI논문리뷰-추천알고리즘] GRU4Rec - 세션 기반 추천을 RNN으로 풀어낸 출발점 (0) | 2026.05.06 |
| [AI논문리뷰-추천알고리즘] Neural Collaborative Filtering - 행렬분해의 내적을 신경망으로 바꾼 추천 모델 (0) | 2026.05.06 |
