← notes

Semantic IDs for ranking @Youtube

, ,

이전 Semantic IDs, Generative Retrieval (TIGER)의 접근을 ranking에 확장

Semantic ID Generation

  • 우선 아이템의 콘텐츠 임베딩이 밑재료가 됨
    • 아이템에 대한 텍스트 설명(e.g. 이름, 가격, 브랜드, 카테고리 등)을 sentence-T5나 BERT 같은 범용 사전훈련된 텍스트 인코더를 사용해 dense semantic embedding을 얻음
  • Residual Quantization(RQ-VAE) : 이 임베딩들을 각 KK 크기를 가지는 mm개의 코드북을 사용해 길이 mm의 코드워드의 튜플로 바꾸면 이게 바로 semantic ID가 됨
  • 구성
    • 인코더: 입력 dense embedding xx를 잠재 표현 z=E(x)z = E(x)로 바꾼다.
    • RQ: mm번의 quantization을 반복한다.
      • 첫번째 코드북에는 C0={ek}k=0K−1C_0=\{e_k\}_{k=0}^{K-1} 와 같이 KK개의 벡터가 존재하며, 이중에서 zz와 가장 가까운 ec0e_{c0} 을 찾는다. 그림에서는 c0=7c_0=7 -> 이게 첫번째 코드워드가 됨.
        • 이때 완전히 동일하진 않을 것이므로 잔차(z−ec0z-e_{c0}의 절대값)가 발생하는데, 이를 r1r_1 이라고 하고 다음 코드북으로 넘기자.
      • 두번째 코드북 C1C_1에서 KK개의 벡터 중 r1r_1과 가장 가까운 ec1e_{c1}을 찾는다. 그림에서는 c1c_1 = 1 -> 두번째 코드워드.
        • 여기서 또 잔차가 발생하므로 다시 r2r_2를 다음 코드북으로 넘기자.
      • 이를 코드북 개수 mm 만큼 반복하면 mm개의 코드워드(가장 가까웠던 벡터의 인덱스)와 함께 각 단계에서 선택되었던 벡터 ecke_{c_k}를 얻게 됨
    • 디코더: 선택되었던 벡터들의 합이 zz의 quantized representation z^=∑0m−1eci\hat{z} = \sum^{m-1}_{0}e_{c_i} 가 되고 이를 decoder가 인풋으로 가져감. 최종적으로 디코더의 출력 x^=D((^z))\hat{x} = D(\hat(z))
  • 기본적으로 auto encoder구조이므로 인코더-디코더를 거쳐 원래의 embedding이 잘 복원되도록 해야 하고 동시에 quantization 과정에서 정보 손실이 적어야 함 -> 이 2가지 목적을 손실함수로 두고 인코더, 코드북, 디코더의 파라미터를 학습하게 됨
    • Reconstruction Loss : 입력 xx 과 디코더의 출력 x^\hat{x}간의 차이
    • Quantization Loss: ∑d=0m−1(∥sg[ri]−eci∥2+β∥ri−sg[eci]∥2)\sum_{d=0}^{m-1} \left( \| \text{sg}[r_i] - e_{c_i} \|^2 + \beta \| r_i - \text{sg}[e_{c_i}] \|^2 \right)
      • sg\text{sg}는 stop-gradient operation (역전파할 때 안에 있는 값을 무시하고 상수 취급)
      • 첫번째 항은 잔차와 선택되는 벡터를 가깝게 하되 잔차에 대해서는 학습하지 않고 코드북 내의 벡터들을 잔차에 가깝게 조정
      • 두번째 항은 인코더의 출력이 선택된 코드북 벡터에 더 가까워지도록 하되 코드북 벡터는 냅두고 인코더가 코드북 벡터로 잘 표현될 수 있는 값을 내보내도록 유도
  • 충돌 처리
    • 여러 아이템이 동일한 semantic ID를 가지게 되는 것을 방지하기 위해 맨 마지막에 추가 토큰을 하나 더 붙여줌 e.g. 두 아이템이 Semantic ID (12, 24, 52)를 공유하는 경우(12, 24, 52, 0) 및 (12, 24, 52, 1)로 나타내어 구별

Semantic IDs, Generative Retrieval (TIGER)


Semantic ID representation in Ranking


Experiment

한줄요약하면 Random Hashing 기반 item embedding은 memorize는 잘하지만, generalize는 못하고 (Dense embedding은 풍부한 피쳐일지라도 memorize를 못해서 성능이 떨어지고) Semantic ID는 반대로 의미적 표현은 담으면서 ID로 기능하면서 적당한 memorization + generalization을 한다.

Semantic IDs as hierarchy of concepts

RQ-VAE가 만든 SID는 사실 의미적인 계층구조를 나타내고 있음

(1)
 ├── (1,2)
 │    ├── (1,2,3)
 │    └── (1,2,6)
 └── (1,4)
      ├── (1,4,1)
      └── (1,4,9)

이런 식으로 trie구조를 만들면 첫번째 코드워드는 상대적으로 상위 개념, 뒤로 갈수록 하위(fine-grained) 개념