내가 보려고 만든 블로그
Bert4Rec 본문
Bert를 Recommendation에 적용할 때 기존 BERT와의 차이점이 무엇인지 , 그리고 Bert4Rec의 Architecture에 대해 간단하게 적어봄.
1. Input
기존의 BERT의 경우 3가지 임베딩이 합쳐져 Input으로 들어가게 된다.
1. Token Embedding 2. Positional Embedding 3. Segment Embedding
Token Embedding의 경우 말 그대로 해당 Token 을 Embedding으로 표현한 것 . Segment Embedding의 경우 문장을 구별하는 Embedding . 그리고 각 Token의 위치에 대한 Positional Embedding이 존재한다 .
추천에서 BERT를 적용할때 문장을 구별 , 즉 , user의 세션동안 반응한 상품들이 input으로 들어가기 때문에 문장을 구별할 일은 딱히 없다. 따라서 Segment Embedding은 쓰이지 않음.
2. Masking
추천에서는 한 세션동안의 아이템을 바탕으로 마지막 아이템을 예측하면 되는 문제이다. 중간 중간의 아이템을 마스킹하고 이를 맞추도록 하는것이 학습에는 도움이 되겠지만 적용을 위해서는 마지막 아이템을 맞춰야한다. 따라서 기존 BERT차람 Masking을 랜덤하게 하여 학습을 시키되 test를 할 때는 마지막 item에 Masking을 하고 해당 Mask token의 BERT모델의 마지막 layer에서 얻어진 embedding을 바탕으로 추론을 하도록 하였다.
3. Architecture
Architecture는 다음과 같다 . 결국에는 BERT처럼 Transformer를 여러개 쌓고 , GELU를 사용하고 등등 당연하게도 BERT와 똑같다.
위에서 언급한데로 마지막 embedding에 대하여 fully connected layer를 통해 item을 예측하도록 함 .
갑자기 든 생각은 마지막 item으로부터 n개 까지만을 cutting하여 사용하는데 만약 sequence가 1개 일 경우에는 어떻게 될까?
[mask , mask , mask , mask , item_A] 이런식으로 넣줘야할 것 같은데 이렇게 sequence가 짧을때에는 사용이 쉽지 않을 것 같다.
'Recommendation' 카테고리의 다른 글
<Recommendation> SVD++ , SVDpp 구현 (0) | 2022.07.23 |
---|