본문 바로가기
Study/Recommendation

[Deep learning] [논문리뷰] DIEN - Deep Interest Evolution Network for Click-Through Rate Prediction (CTR 추천알고리즘, sequence, AUGRU)

by 후이 (hui) 2022. 3. 24.
728x90
반응형
1. Introduction 
2. Related Work
3. DIEN : Deep Interest Evolution Network
  1) BaseModel
      * feature representation 
      * Embedding, MLP
      * Loss function 
  2) Interest Extractor Layer 
      * auxiliary loss 
  3) Interest Evolving Layer
     *  augru
4. Experiements
5. Conclusion

 

 

1. Introduction 

 

  • CTR (Click Through Rate) 은 사용자가 플랫폼에 게시된 광고를 클릭할지 말지 예측하는 Task 
  • E커머스 시장에서 유저들의 성향과 그 성향의 변화를 포착하는게 CTR 성능을 높이는 핵심
  • 이전의 대부분 CTR 모델들은 input feature 들간의 상호작용(interaction) 에 만 집중 (ex. Factorization  Machine 기반 모델들)
  • 해당 논문에서 제시하는 DIEN 알고리즘은 유저들의 변화하는 interest에 주목

 

DIEN 알고리즘의 main contribution 

 

  • 각 학습 단계마다 hidden layer를 감시하는 auxiliary loss를 활용해서 유저의 잠재적인 흥미(latent interests)를 포착 
  • 유저의 변화하는 흥미 (interest evolving phenomenon) 에 집중하기 위해서 interest evolving layer 제안
  • 구체적인 방법으로 gru의 update gate에 attention 을 적용하는 AUGRU 알고리즘을 활용해서 타겟아이템과 더 연관성 높은 유저의 흥미를 파악하고, 유저의 변화하는 흥미를 파악한다. 

  ==> 주목해야하는 technique은  auxiliary loss 와 AUGRU (gru + attention)

 

 

2. Related work 

 

1) CTR 모델들은 선형 비선형 모델에서  MLP Multi-layer Perceptron기반의 deep model 구조로 변화하고 있음

  deep model 예시 : Wide & Deep, DeepFM, PNN, DIN

특히 DIN 은 RNN+attention 기반으로 유저 행동의 변화를 포착하는 모델

 --> 하지만, 시퀀셜한 행동들 사이의 의존성을 파악하는데는 한계가 있었음

 

2) 최근 연구에서는 유저-아이템의 상호작용이 시간에 따라 기록되는 것을 학습에 활용

 ex. TDSSM (long term interest, shot term interest 최적화) 

       DREM (RNN 기반으로 유저 행동 sequential 하게 학습) 등등

이전의 시퀀스를 반영하지 않은 모델들에 비해서는 개선된 accuracy 성능을 보임

 

3) 하지만, 전통 RNN 기반 모델들은 문제가 있음 

     -  hidden 상태의 정보를 직접적으로 해석하는 반면, 각각의 hidden state에 대한 직접적인 감시는 없다 

         (+) 쉽게 설명하자면,  여기서 auxiliary loss 필요성이 도출되는데,

                 기존의 loss는 모든 hidden state를 다 거친 다음에 적용되니까

                 각각 hidden 개별 레이어에 대한 loss를 적용하는 방식 auxiliary loss  필요하다는 말) 

 

     - 유저의 모든 행동을 연속적으로 동일하게 다룸 (각각의 행동의 중요도와 비연속성을 고려하지 않음) 

        (+ 이것도 각 입력 토큰에 가중치를 부여할 수 있는 attention 의 필요성을 돌려서 말한 것)     

 

3. Deep Interest Evolution Network

( user 1 의 데이터를 넣는다고 하면)

  • Target AD field : user 1 에게 노출시킬 타겟 광고 id, 광고 관련 정보들 (광고 상품범주, 광고 브랜드 등등)
  • output : user1이 targetAD를 클릭 할지 안할지 (0 or 1 - 이진분류)
  • user behavior sequence  : 방문한 상품 id list 
  • context field : 시간 관련 정보들
  • user profile field : 성별, 나이 등 유저의 개인 정보들

 

** field는 비슷한 정보끼리 묶인 여러개의 칼럼이다. 

 

 

1) Embedding layer 

User Profile, User Behavior, Ad, Context를 각각 원핫 벡터로 바꿈 

각각의 원핫 벡터를 e차원으로 임베딩 

⇒ 핵심은 여기 각각의 벡터가 모두 시퀀셜 하다는 것

→ xb = [b1;b2;··· ;bT ] ∈ RK×T , bt ∈ {0, 1}K ,

    where bt is encoded as one-hot vector and represents t-th behavior,

    T is the number of user’s history behaviors, K is the total number of goods that user can click. 

 

ex) user 1의 user behavior sequence

2번째 상품선택 onehot : [0,1,0,0,0,0,0,0,0,0]

3번째 상품선택 onehot : [0,0,1,0,0,0,0,0,0,0]       (k=10 인상황)

 

⇒  behavior sequence Xb : [ [0,1,0,0,0,0,0,0,0,0] ,[0,0,1,0,0,0,0,0,0,0]   …. ]  = [b1;b2;··· ;bT ]

     즉 t 번째 행동까지 벡터에 담음, K는 유저가 클릭할 수 있는 전체 상품의 개수임

 

⇒ 각각의 상품k개는 e 차원으로 압축됨  만약 e가 3이면 

     Xb : [ [0.06, 0.71, 0.00001] ,[0.2, 0.03, 0.802]   …. ] ⇒  3차원으로 압축된 벡터 t개 

 

2) output : CTR binary classification (click or not)

 

3) DIEN 구조 뜯어보기

 

 [ dien 특징 ] 

*  모든 범주형 자료가 임베딩됨 

* 두가지 단계를 거쳐서 사람들의 interest를 포착함 

    - interest extract layer 

    - interest evolving process  

*  마지막으로 두단계를 거쳐 학습된 interest representation과

    임베딩 된 target ad , user profile, context 임베딩 벡터가 모두 concat

 

 

3.1) interest extractor layer - GRU with  auxiliary loss &  negative sampling

시퀀스 정보를 학습시키기 위해 gru 모델 선택 

 

하지만, 시퀀스 마지막에서야 타겟아이템을 클릭하는 행동이 이뤄짐

그 사이 행동(history state ht) 들에 대해서는 감시가 이루어지지 않음

각각의 hidden state를 감시하기 위해서  auxiliary loss 와 negative sampling 적용

 

# auxiliary loss?

hidden state 중간에 loss를 적용하는 방식 

출처 : https://github.com/younggyoseo/rnn-auxiliary-loss

RNN 계열의 모델 (GRU, LSTM) 은 시퀀스 길이가 길어지면 맨 끝단에서 이뤄지는 supervised loss 반영이 안될 수 있음

따라서 최종 hidden state가 아니라 중간의 hidden state에 Auxiliary gradient 를 계산하고 loss를 적용하는 방법

     (seq2seq의 teacher forcing 과 비슷한 컨셉) 

학습때만 적용이 되고 test 때에는 적용되지 않음 

 

 

# negative sampling (hidden state 내부에서 이뤄지는 것)

interest extractor layer 에서 auxiliary loss 를 계산할 때, 

현재 hidden state 에서 입력된 임베딩한 벡터 중에서

 

해당 유저가 클릭한 상품벡터 e(t+1)와 

다른 유저가 클릭한 상품벡터 e(t+1)'(negative sample)를 가져온 뒤 (즉, 다른 유저 행동 시퀀스의 임베딩 벡터)

e(t+1) 의 target은 1, e(t+1)'1 의 target은 0으로 두고 학습을 진행한다. 

 

 

 

3.2) interest evolving layer 

 

고객의 흥미는 다양함 (따라서 최종 결정할 때는 연관 있는 것들만 반영해야함)  & 고객의 흥미는 변함  

→ 따라서 마지막 선택 당시에 전체 히스토리중 가장 연관있는 걸 제공 (attention) 

→ 전체 interest 진화 트렌드를 따라서 예측할 수 있음 (GRU -sequential) 

 

# attention 

타겟 광고에 대한 임베딩 벡터가 key로 들어가서 dot product 진행됨 

 

 

따라서 현재 시점에서 입력된 hidden state 거친 유저 행동과 h(t) 

현재 입력된 타겟 광고 (target AD) 의 관계성을 파악하는 것

밀접한 관계인 유저행동일 수록 attention score 크게 아닌 경우에는 작게 부여됨

 

 

# AUGRU : GRU의 변형과 해당 논문에서 선택한 AUGRU 의 특징 

 

1/ 기본 GRU 

* ut : update gate  (이번 정보를 얼마나 반영할지)

현재 시점의 입력값 (xt)가 입력되면 그 시점의 가중치 Wz 와 내적 

전 시점의 hiddenstate ht-1는 그시점의 가중치 Uz 와 내적 

마지막으로 두 계산이 더해져 sigmoid 함수에 입력 --> 결과는 0~1사이값 

 

* Rt : reset gate (지난 정보를 얼마나 버릴지)

현재 시점의 입력값 (xt)가 입력되면 그 시점의 가중치 Wr 와 내적 

전 시점의 hiddenstate ht-1는 그시점의 가중치 Ur 와 내적 

마지막으로 두 계산이 더해져 sigmoid 함수에 입력 --> 결과는 0~1사이값 

 

* ~h : 현재 시점에 과거의 메모리를 얼마나 사용할거냐 

현재 시점의 입력값 (xt)가 입력되면 그 시점의 가중치 Wh 와 내적 

전 시점의 hiddenstate ht-1는 그시점의 가중치 Uh 와 내적하고 Rt(지난 정보 버림값)와 성분 곱

마지막으로 두 계산이 더해져 tanh 함수에 입력

--> 결국 Rt, Zt 각각 현시점 인풋 Xt와 이전시점 hidden state ht-1 을 weight와 곱한뒤 sigmoid 통과 시키는 구조

       다른 점은 연산되는 weight matrix 값이 다르다는 것. 

 

* h : 최종 메모리 정보 

update gate 출력값 Zt (이전정보 얼마나 반영) 와 이전시점 hidden state  ht-1를 성분 곱

update gate 에서 버리는 값인 1-Zt (이전정보 얼마나 안반영) 와 현재시점 hidden state ht 을 성분 곱 

 gru에 attention 어떻게 쓰는지에 따라서 아래의 학습방법들이 제시됨

 

2/ aigru

: attention * hidden state 가 다음 hidden state 인풋 

  마지막 output state ht 에 attention score at 곱  -> naive 한 method 였음, 성능이 잘 나오지는 못함 

 

3/ agru :  

 

이전 update 게이트 값 Ut가 들어가는 자리에 attention score at 활용 

이전 현재 attention score의 나머지 확률 값 (1- attention score)를 이전 hidden state에 부여해서 dot product 

→ 현재 hidden 중요하다면 / 이전 hidden 에는 낮은 가중치 //  현재hidden 덜 중요하다면 이전 hidden 에 높은 가중치

→ 단점 : 기존 ut는 벡터인 반면에 at는 어디까지나 스칼라 값임 (차원 무시)  

              차원 정보 또한 보존되는 방식으로 attention score 반영하자 !!! → AUGRU 등장 

 

 

4/ augru :GRU with attentional update gate (AUGRU) **** 

 

→ attention score를 update gate 통과 값에 반영시킨다. 

→ agru 와 달리 원래 update gate의 차원을 보존

→ update gate의 모든 차원을 scaling 한다 → 연관이 적은 것들은 hidden state에 적은 영향을 미치게끔 한다. 



 

##### 총정리 ##### 

따라서 한 입력벡터의 변화 과정을 tracking 하자면? 

(t = sequence length) 

b[t ] :  [ [0,1,0,0,0,0,0,0,0,0] ,[0,0,1,0,0,0,0,0,0,0]   …. ]  one hot representation 

   b(1)  =  [0,1,0,0,0,0,0,0,0,0]

 

<< embedding layer 통과 >> 

e[t ] :  [ [0.06, 0.71, 0.00001] ,[0.2, 0.03, 0.802]   …. ]  embedding vector 

  e(1) = [0.06, 0.71, 0.00001]

 

<< GRU 통과 >> 

 

h[t] = [[ ?, ?, ?, ? ….], [ ?, ?, ?, ? ….],[ ?, ?, ?, ? ….], …] 

   h(1) = [ ?, ?, ?, ? ….] 

 

<< AUGRU 통과 >> 

h’[t] = [[ ?, ?, ?, ? ….], [ ?, ?, ?, ? ….],[ ?, ?, ?, ? ….], …[ ?, ?, ?, ? ….]

   h’(1) = [ ?, ?, ?, ? ….] 

   h’(t) = [ ?, ?, ?, ? ….]  →마지막 output 

 

     h’(t) / target ad / context feature / userprofilefeature  ⇒ concat 

 

 

4. Experiements

0) 비교 모델들 

 - BaseModel  - Behavior layer 까지의 모델 (embedding + MLR) 

 - wide & deep 

 - PNN : interactive 정보를 product layer를 통해 학습하는 알고리즘 

 - DIN (지금 dien 모델의 이전 버전) : attention 활용 

 

1) Public dataset - Amazon Dataset (상품 리뷰 + 메타 데이터, 책/전자제품 데이터각각 활용)

  - 리뷰를 행동으로 간주함  (한 유저로부터 나온 리뷰들을 정렬) --> 한 유저가 작성한 t개의 리뷰를 유저의 행동 경로라고 판단

  ex. 내가 쿠팡에 쓴 리뷰들로 경로를 만든다면

          - 프로틴 가루 리뷰 -> 닭가슴살 리뷰 -> 레깅스 리뷰 순으로 썼다면 

          - 프로틴 가루, 닭가슴살, 레깅스, 덤벨, 폼롤러 ---> 다음 상품은? 추측하는 것 (헬스 기구 제품을 추천할 것임~)

- dien 은 user의 sequential interest를 포착했을 뿐만 아니라 interest 발전 과정도 깨달았음 

- 변동하는 사용자의 interest를 정확하게 감지했음 

 

 

2) Industrial Dataset (알리바바 내부 데이터) 

 - 실제 알리바바 광고 노출 후 클릭 로그들로 데이터 셋 구성 (CTR에 맞는 데이터셋) 

 - 타겟 상품이 클릭된 시점으로부터 14일 전 행동들을 history behavior로 설정 (input sequence 가 15일인 것임) 

 

- 여기서 확실히 attention based model이 괜찮은 성능을 보여줌 (라고 논문에서 말하는데 사실 고만고만 한 것 같음...) 

 

3) 추가 연구

3.1) Effect of GRU with attentional update gate (AUGRU) - AUGRU의 효과

 

 - 앞서 살펴본 attention + GRU 를 합친 모델들 (AIGRU, AGRU, AUGRU) 중에서는 AUGRU가 가장 우수한 성능 보이는걸 증명

 

3.2) Effect of auxiliary loss - auxiliary loss의 효과

 

 

 - GRU 시퀀스 전체에 training loss를 먹이는 것보다, hidden state 때마다 loss를 적용하는 auxiliary loss 방식이 학습 과정에서 loss 를 낮추는데 더 도움이 되는 걸 알 수 있음

 

- 하지만 industry dataset에서는  auxiliary loss의 효과를 보기는 어려웠음 

    why?  임베딩할 인스턴스가 너무 많아서 auxiliary loss의 효과를 보기는 어려웠음 

              public dataset은 책, 전자제품으로 상품범주를 정한 반면, industrial dataset에 나오는 상품은 범주가 너무 다양했음

728x90
반응형

댓글