서론
ihiratch입니다. 본 기사에서는 검색 및 추천 태스크에 사용되는 Two-Tower 모델에 대해 설명합니다.
Two-Tower는 쿼리(query)와 아이템(item)을 각각 별도의 신경망으로 벡터로 변환하고, 그 유사도를 통해 관련도를 평가하는 모델입니다. 아이템 측의 벡터를 사전에 계산해 둘 수 있기 때문에, 방대한 후보군으로부터 효율적으로 검색할 수 있습니다.
본 기사는 '구조편'으로서, 검색 태스크부터 Two-Tower의 구조, 추론(Inference), 학습(Learning), 서빙(Serving)까지 설명합니다. 학습에 대해서는 특히 부정 예제(negative example) 샘플링에 대해 깊이 있게 다룹니다. 실제 데이터셋을 사용한 구현, 학습 및 평가는 별도의 '실험편'에서 다룰 예정입니다.
검색 태스크란 무엇인가
검색 태스크란 많은 후보군 중에서 주어진 입력과 관련된 아이템을 찾아 가져오는 태스크를 말합니다. 예를 들어, 웹 검색에서는 검색어와 관련된 페이지를 찾고, 동영상이나 뉴스 추천에서는 사용자의 열람 이력 등을 바탕으로 흥미로울 만한 영상이나 기사를 찾습니다.
검색 태스크에서는 입력을 '쿼리(Query)', 검색 대상을 '아이템(Item)'이라고 부릅니다.
- 쿼리: 검색어, 사용자 위치 정보, 열람 이력 등, 검색 모델에 제공되는 정보. 검색어 같은 문자열에 국한되지 않고, 사용자나 당시 상황을 나타내는 정보도 포함합니다. -
- 아이템: 페이지, 동영상, 기사 등, 검색의 대상이 되는 것.
검색 태스크에서는 방대한 후보군 중에서 사용자의 의도나 취향에 맞는 아이템을 짧은 시간 안에 찾아내야 합니다. Two-Tower는 아이템 측의 계산을 사전에 완료해 둠으로써 검색 시의 계산량을 줄일 수 있습니다. 또한, 검색어 외에도 위치 정보나 열람 이력 등도 활용하여 사용자의 의도와 취향에 맞는 아이템을 검색할 수 있습니다.
Two-Tower 개요 및 추론(Inference)
개요
Two-Tower는 쿼리를 처리하는 **쿼리 타워(Query Tower)**와 아이템을 처리하는 **아이템 타워(Item Tower)**로 구성된 모델입니다. 각 타워가 입력을 임베딩(embedding)으로 변환하고, 마지막에 두 임베딩의 유사도를 계산합니다.
아래 그림은 페이지 검색을 예시로 든 Two-Tower의 개요입니다. 검색어 또는 사용자 위치 정보/열람 이력은 쿼리 측 특징량으로, 페이지의 제목·카테고리·본문은 아이템 측 특징량으로 각각의 타워에서 임베딩으로 변환합니다. 그리고 두 임베딩의 내적(dot product)을 쿼리와 페이지의 관련도를 나타내는 점수(score)로 사용합니다. 이 점수가 높은 순서대로 페이지를 정렬하여 상위부터 사용자에게 제시합니다.
Two-Tower によるページ検索の例。検索ワード・位置情報・閲覧履歴と、ページのタイトル・カテゴリ・本文を別々のタワーで埋め込みに変換し、内積で関連度のスコアを計算する。
그림1: Two-Tower를 이용한 페이지 검색 (특징량은 예시)
추론(Inference)
개요에서 보여준 페이지 검색을 예로 들어, 학습된 Two-Tower가 입력으로부터 관련도 점수를 계산하는 과정을 자세히 살펴보겠습니다.
먼저, 쿼리 측 특징량을 모델이 처리할 수 있는 숫자나 임베딩으로 변환합니다. 예를 들어, 다음과 같은 방법들이 고려될 수 있습니다.
- 검색어: 텍스트를 처리하는 모델로 임베딩 변환. -
- 위치 정보: 사용자가 있는 지역을 ID로 표현하고, 임베딩 레이어에서 임베딩으로 변환. -
- 열람 이력: 과거에 본 페이지의 임베딩을 평균하여 하나의 임베딩으로 요약합니다.
예를 들어 '레스토랑'이라는 검색어에 위치 정보나 열람 이력을 추가함으로써, 근처 가게나 취향에 맞는 가게를 찾을 단서를 모델에 제공할 수 있습니다. 열람 이력을 임베딩의 평균으로 표현하는 방법은 YouTube 추천 모델을 다룬 Yi et al. 논문에서도 사용되었습니다. 해당 논문에서는 최근 시청한 동영상 ID의 임베딩을 평균하여 모델에 입력했습니다[1].
이렇게 얻은 특징량을 예를 들어 연결(concat)하여 하나로 통합하고, 쿼리 타워를 통과시켜 쿼리 임베딩을 얻습니다.
아이템 측도 유사합니다. 페이지의 제목이나 본문은 텍스트를 처리하는 모델로, 카테고리의 ID는 임베딩 레이어에서 임베딩으로 변환하는 방법이 고려될 수 있습니다. 이들을 조합하여 아이템 타워를 통과시켜 아이템 임베딩을 얻습니다.
다음으로, 두 임베딩의 유사도를 계산합니다. 쿼리 특징량을
이 점수가 높은 아이템을 상위
다음 절에서는 정예(positive example)와 부정 예제(negative example)를 사용하여 두 타워를 어떻게 학습하는지 설명하겠습니다.
학습(Learning)
추론에서는 쿼리와 아이템의 임베딩 내적으로부터 점수를 계산했습니다. 학습에서는 쿼리에 대한 정예 아이템의 점수가, 부정 예제 아이템의 점수보다 높아지도록 두 타워의 가중치(weight)를 업데이트합니다. 예를 들어 페이지 검색이라면, 사용자가 클릭한 페이지와 당시의 쿼리 조합을 정예 쌍으로 간주합니다.
우선, 배치 내 부정 예제(in-batch negative example)를 사용한 기본적인 학습 방법부터 설명하겠습니다.
배치 내 부정 예제
먼저, 쿼리와 아이템의 긍정 예시 쌍(positive pair)을 **배치 내 음성(in-batch negatives)**이라고 부릅니다[1:1][2].
배치 내 [2:1]를 사용합니다.
본 기사에서는 softmax cross-entropy loss(소프트맥스 교차 엔트로피 손실)를 사용합니다. 배치 전체의 평균 손실 [1:2]을 계산합니다.
여기서는 각 쿼리에 대응하는 긍정 예시 아이템을 정답 레이블로 교차 엔트로피를 계산하고, 배치 내의...
이 배치 내 음성(in-batch negatives)의 장점은 한 번 계산한 아이템 임베딩을 다른 쿼리에 대한 음성으로 재사용할 수 있다는 것입니다. 음성을 위해 별도의 아이템을 추가로 타워에 통과시키지 않고도 많은 조합을 비교할 수 있습니다.
인기 편향 및 logQ 보정
배치 내 음성에서는 학습 데이터에 자주 나타나는 인기 아이템일수록 음성으로 사용되기 쉽습니다. 이러한 샘플링 편향(sampling bias)이 발생하면, 인기 아이템은 다른 쿼리의 음성으로 반복적으로 사용되어 음성으로서 과도한 페널티를 받게 됩니다. Yi et al.의 논문에서는 이 편향에 대처하기 위해 logQ 보정을 사용하고 있습니다[1:3].
logQ 보정 후 점수
여기서,
각 항목은
아이템의 출현 빈도 [1:4]를 반영합니다.
선택 편향 및 균일 무작위 음성
배치 내 음성에 logQ 보정을 추가하더라도, 학습 시 비교하는 아이템은 긍정 예시 쌍에 등장하는 것으로 한정됩니다. 기존 검색 시스템의 클릭 로그를 사용하는 경우, 긍정 예시 쌍은 해당 시스템이 제시하고 사용자가 클릭한 아이템으로부터 만들어집니다. 따라서, 기존 시스템이 제시하지 않거나 새로운 아이템은 학습 데이터에 포함되지 않아 음성으로도 사용되지 않습니다. 이러한 선택 편향(selection bias)으로 인해, 모델은 로그에 나타나는 빈도가 낮은 아이템을 다른 아이템과 구별하는 능력을 충분히 학습하지 못할 가능성이 있습니다[2:2].
Yang et al.의 논문에서는 선택 편향에 대처하기 위해, 검색 대상 아이템 집합에서 균일하게 무작위로 아이템을 선택하여 음성으로 추가하는 것을 제안했습니다 (Mixed Negative Sampling; MNS)[2:3]. 이를 통해 로그에 나타나지 않는 아이템도 음성으로서 학습 시 비교 대상으로 포함할 수 있습니다.
[2:4]。
Hard negative mining
앞 절에서 설명한 균일 무작위 음성에는 모델이 긍정 예시와 쉽게 구별할 수 있는 것들이 포함됩니다. 직관적으로 볼 때, 모델이 긍정 예시와 구별하기 어려운 어려운 음성을 추가함으로써 모델의 판별 정확도를 더욱 높일 수 있을 것 같습니다. 예를 들어, “시부야 이탈리안 레스토랑”이라는 검색에 대해, “시부야 이탈리아 요리 교실” 페이지는 장소나 요리 종류가 공통적이기 때문에 모델이 높은 점수를 줄 수도 있습니다. 하지만 레스토랑을 찾는 의도에는 맞지 않으므로 물론 음성이 됩니다. 이러한, 모델이 판별하기 어려워하는 페이지를 음성으로 학습에 사용한다면, 공통되는 단어뿐만 아니라 검색의 의도에 맞는지도 모델이 판단할 수 있게 될 것 같습니다.
이처럼, 모델이 높은 점수를 줄 음성을 골라 학습에 사용하는 방법을 hard negative mining (HNM)이라고 부릅니다. Facebook의 검색 모델을 다룬 Huang et al.의 논문에서도 이 방법이 사용되었습니다[3].
여기서는 학습된 모델로 음성을 수집하는 오프라인 HNM을 설명합니다. 기본적인 흐름은 다음과 같습니다.
- 무작위 음성 등을 사용하여 검색 모델을 학습합니다.
- 학습용 쿼리로 검색하여 점수가 높은 상위 후보들을 수집합니다.
- 점수 상위 후보들로부터 hard negative를 얻습니다.
- 선택한 hard negative와 무작위 음성을 사용하여 모델을 재학습합니다.
해당 논문은 HNM에 대해 몇 가지 통찰력을 보고하고 있습니다.
- 가장 높은 점수의 후보가 최적의 음성인 것은 아닙니다. (해당 논문의 실험에서는, 101~500위 후보들로부터 음성을 선택했을 때 재현율이 가장 좋았습니다).
- hard negative에 무작위 음성을 섞는 것이 효과적입니다. (해당 논문의 실험에서는, 무작위 음성의 비율을 늘릴수록 재현율이 개선되었으며, 무작위 음성 : hard negative = 100 : 1에서 개선이 포화되었습니다.)
서빙(Serving)
본 절에서는 학습된 모델을 사용하여 검색 결과를 반환하는 흐름을 간단히 설명합니다. 크게 나누면, 다음 3가지 절차를 거칩니다[3:2].
- 사전에 검색 대상 아이템의 임베딩을 계산하여 저장합니다.
- 요청 시 쿼리의 임베딩을 계산하고, 저장된 아이템 임베딩에서 점수가 높은 아이템을 검색합니다.
- 획득한 아이템을 검색 결과로 사용자에게 제시합니다.
배포(Serving)의 전체적인 흐름은 그림 2에 나타 있습니다.
事前処理ではアイテムの特徴量をアイテムタワーに入力し、出力された埋め込みを保存する。リクエスト時にはクエリの特徴量をクエリタワーに入力し、出力された埋め込みと保存済みのアイテム埋め込みを使い、ANN などでクエリと関連度の高いアイテムを取得してユーザーに返す。
그림 2: Two-Tower 배포의 전체적인 흐름
절차 2에서는 아이템의 총 개수가 많은 경우, 모든 아이템과의 점수를 계산하여 상위 아이템을 가져오는 처리에 시간이 걸립니다. 이러한 경우에는 근사 최근접 이웃 탐색(Approximate Nearest Neighbor Search; ANN)을 사용하여 빠르게 검색합니다. ANN에는 클러스터나 그래프 등을 활용한 다양한 방법이 있습니다. 검색 속도를 높일 수 있는 반면, 엄격한 전체 검색으로 얻을 수 있었던 후보를 놓칠 가능성이 있습니다. 따라서 ANN의 파라미터를 조정하여 검색 속도와 검색 품질 사이의 균형을 맞추는 것이 중요합니다[3:3]。
맺음말
본 기사에서는 검색/추천 작업에 사용되는 Two-Tower 구조와 추론(Inference), 학습(Learning), 배포(Serving)의 흐름을 설명했습니다.
개인적으로는 어떤 특징량(Feature)을 Tower에 입력할지는 태스크에 따라 시행착오가 필요하다고 느꼈습니다. 또한, 쿼리 Tower와 아이템 Tower가 분리되어 있기 때문에 아이템 측 계산을 사전에 완료하여 효율적으로 배포할 수 있다는 점도 인상 깊었습니다.
이번에는 시스템의 원리 설명이 중심이었기 때문에, 다음 '실험편'에서는 실제 데이터셋을 사용하여 Two-Tower를 구현하고 학습 및 평가를 진행할 예정입니다.
Yi et al.(2019). Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations. RecSys ’19. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Yang et al.(2020). Mixed Negative Sampling for Learning Two-tower Neural Networks in Recommendations. WWW ’20 Companion. ↩︎ ↩︎ ↩︎ ↩︎
Huang et al.(2020). Embedding-based Retrieval in Facebook Search. KDD ’20. ↩︎ ↩︎ ↩︎ ↩︎
논의