Recommender System/구현

[22'Recsys] BERT4Rec 구현의 진실에 관하여 : A Systematic Review and Replicability Study of BERT4Rec for Sequential Recommendation

감각 수집가 2023. 5. 9. 23:41

글을 한마디로 표현한다면 : 허깅페이스로 SR 추천하세요!

 

ChatGPT 이전에,

NLP에서 핵인싸인 트랜스포머 모형의 자녀들인,

BERT와 GPT는 툭하면 결투를 벌였습니다(팝콘각).

결투는 추천모형에서도 계속됐죠.
누가 이겼을까요?

 

오늘 소개해 드릴 내용은,
2022년도 Recsys 재현성 트랙에 게재됐으며,

아래 링크에서 논문 원문을 확인하실 수 있습니다.

 

1. 논문 제목과 배경

논문 제목은
A Systematic Review and Replicability Study

of BERT4 Rec
for Sequential Recommendation인데요.

 

Sequential Recommendation(SR)은 이름에 의미가 내포돼 있는데요.

 

고객이 웹에서 여러 기존 제품들을 클릭하거나 구매하는 행위의 순서가,

다음에 유저가 새로운 제품을 구매할 때,

중요하게 반영한된다고 생각하는 분야입니다.

 

BERT4Rec 논문은 2019년쯤 나왔습니다(CIKM 게재).

이 논문은, 어휘의 순서가 중요한 NLP 분야에서 BERT가 뜨자,

고객 행동 순서를 모형화할 때도 BERT를 응용해 보자는 취지를 담고 있습니다. 

 

다시 말해, 고객 행동을 모형으로 표현할 때,

BERT가 사용한 masking을 비슷하게 응용하면,

SR 문제를 해결할 때 큰 도움이 된다고 주장했습니다.

 

그런데 이전에 이미 다른 NLP 모델인 GPT를 활용해,

고객 행동을 설명하고자 한 시도가 있었고,

그 알고리즘의 이름은 SASRec입니다.

 

BERT4Rec 저자들은 이 모형이,

SASRec보다 더 우수한 추천 모형이라고 주장했습니다.

 

BERT4Rec에서 주장한 모형 성능상의 공헌점

이후 BERT4Rec은,

SR분야에 관심 갖는 연구자들과, 개발자들이

한 번쯤 들여다보는 논문이 됐습니다.

2.   문제 발견 과정

재현성이 주제인 원래 논문의 저자들의 마음을 상상해 볼게요.

이들은 의문을 품습니다.

 

'BERT4 Rec이 SASRec보다 무조건 좋으냐?'라고요.

 

답은 아래 표에 있습니다. 

재현성을 밝히고자 먼저 저자들은,

BERT4 Rec과 SASRec 알고리즘 발표 이후 제안된,

SR분야를 연구한 다양한 기존 연구자들의 분석결과를 종합해 보여줍니다.

 

위 표는 그 결과인 것이죠.

 

이 표에서 알 수 있는 것은,

항상 BERT4 Rec이 좋은 건 아니다.입니다.

 

그래서인지, BERT4 Rec 저자들이 제시한 코드를 또 확인해 봅니다.

 

그리고 충격받습니다.

 

BERT4Rec 저자들이 제시한 코드는 개발환경 그대로 구현시,

그 논문의 주장보다 30배 이상의 학습시간까지도 요구했었습니다.

 

엄청난 차이죠.

 

그래도, 표에서 보이듯 많은 데이터에서 BERT4 Rec의 성능이 더 좋긴 합니다.

모델을 활용을 하면 좋을 텐데,, 고민을 시작하죠.

 

그래서 다른 방식으로 구현하면,

동일한 모델을 상대적으로 적은 시간을 들여 만들어,

괜찮게 쓸 수 있을까 찾아봅니다.

 

3. 뭐가 짱일까? : 허깅페이스

 

허깅페이스는 당연히 자연스럽게 떠올랐을 거고요.

NLP를 먹여 살리는 구현 프레임웍이니까요.

추천에서 유명한 베이스라인 구현체인 Recbole도 후보로 넣습니다.

 

후보군

 

구현체들의 효율성을 비교할 수단은

4개의 데이터입니다.

 

분야는 영화 데이터 2개, 게임 1개, 아마존 커머스(미용 카테고리)입니다.

 

User는 고객수, Item은 제품수,

Interaction은 고객이 제품에 남긴 총 리뷰수,

Avg.len은 리뷰 평균길이,

Sparsity는 고객-제품 행렬에서 비어있는 정보의 비율을 나타냅니다.

 

※ 참고 : Sparsity를 제시하는 이유

더보기

추천 알고리즘은 수리적으로

고객이 어떤 제품을 좋아할지 아닐지 맞추는 문제이므로,

고객-제품을 데이터프레임 행렬로 표현했을 때,

결측값 채우기와 같습니다.

 

Sparsity가 높을수록,

거의 없는 정보를 가지고 일반화해야 하는 문제가 돼,

1> 딥러닝으로 문제 해결하는 정당성 확보와,

2> 문제 해결의 어려움을 보일 수 있습니다.

 

실험 시, 여러 디테일이 들어갑니다.

 

또, 랭킹 모형 평가 지표인 NDCG와 Recall@k은

BERT4Rec 저자들의 제시 방법을 따릅니다.

 

추천 모형은 제품의 인기도를 고려해서 학습하는 게 중요한데요. 

이때, 유저가 짱 싫어할만한 아이템을 뽑는 과정도 중요합니다.

그래서 인기도를 고려해 negative item을 뽑는 과정 또한, 

BERT4Rec 논문을 따랐습니다.

 

소비 아이템 1개당 100개씩 negative item sample을 만들었습니다.

 

※ 참고 : 인기 편향을 추천 모형 설계에 고려하는 이유

더보기

예컨대, 영화 소비현상 등의 경우,

어떤 영화는 정말 관람객이 많고,

불과 몇 위만 내려가도 관객수가 10배까지 막 차이나기도 합니다.

 

이런 고객의 소비 현상은

추천시스템 설계 시,

특정 제품을 지나치게 추천하게 만들어,

윤리적으로나 성과적으로 악영향을 줍니다.

 

역대박스오피스 관람객 통계(출처 : https://www.kobis.or.kr/kobis/business/stat/boxs/findFormerBoxOfficeList.do)

 

모델 구조는 같거나 비슷하게 유지한 채로,

Sequence length(제품 순서의 길이)를 더 짧게 했음에도

허깅페이스 기반 구현체가 갓갓인 결과입니다.

 

 

NLP나 SR분야에서는,

Sequence length가 길수록, 일반적으로 성능이 향상되는데.. 신기하죠..?

에폭도 허깅페이스를 활용한 구현체(Ours)가 되게 짧습니다.

 

4.  SR 분야를 정복할 트랜스포머의 후예들

 

아래 표는 ML-1M 데이터를 기준으로

구현체들을 비교한 결과입니다.

 

유명한 추천 구현체 RecBole은

원문 설정으로 BERT4Rec 만들면, 성능도 시간도 그지 같습니다.

 

저 RecBole로 여러 실험하다가,

본 논문보고 말... 잇... 못..ㅜㅜ

 

허깅페이스 transformers library로 구현한 건 학습시간과 성능 다 이겼네요.

안쓸 이유 없쥬?

 

BERT4Rec 원문 저자분들은..

재현성이고 머고...

(재현성 : SASRec을 ML-1M에선 학습시간과 성능에서 다 못 이김 + 구현체도 구라였음)

이미 좋은 데 취업됐을 듯... 부럽따....

 

 

NLP에서 Transformer 아키텍처의 후예들이 있는데요.

 

허깅페이스를 활용하면,

추천 모델을 만들 때 이들을 손쉽게 쓸 수 있다는 게 또 장점이라고 합니다.

 

트랜스포머 구조의 후예들이자,

BERT 업그레이드 NLP 모델인 DeBERTa와 ALBERT를 가져와서

추천 모형을 만들어 봅니다.

 

추천모형 성능분포를 분산분석 후 본페르니 사후검정 결과,

유의하게 성능 향상이 발생했네요.

(근데 모형 학습 소요 시간은 꽤 늘긴 했네요...)

 

긴 글 읽어주셔서 고맙습니다.

 

오늘의 교훈

1. ChatGPT아니더라도, 추천 모형 만들 때도 허깅페이스를 애용하자.

2. 사기치면, 언젠가는 걸린다.

 

BERT4Rec 논문은 매우 유의한 수준으로 사기를 쳤다(?)

 

 

※ 참고 : 각 데이터와, 구현체별로 디테일한 실험 결과입니다.