Two-Tower Recommendationについて

# はじめに
LITALICO Engineers Advent Calendar 2023 の19日目の記事です。
2023年からLITALICOにJOINして、CDOとしてデータ推進を担当してます@akira_saigoです。

20年ほどデータ活用に関連した業務をやってきてまして、メディア企業でレコメンドエンジンの開発なども多数経験してきました。この記事ではレコメンデーションについて入門的な内容を、最新のレコメンデーション技術を交えながら書いてみたいと思います。


# レコメンデーションの歴史
レコメンデーションにおける最も引用されている論文はおそらく、2003年のAmazonのItem-to-Item CFについての論文だと思います。

https://ieeexplore.ieee.org/document/1167344


IEEEの20周年記念の名誉ある賞にこの論文が選ばれた際、Amazonがレコメンデーション アルゴリズムの歴史に関するBlogを記載しており、ユーザーベースのアルゴリズムと、アイテムベースのアルゴリズム、Matrix factorization、DNN、そして、エンコーダーの話がまとめられています。

https://www.amazon.science/the-history-of-amazons-recommendation-algorithm

# レコメンデーションの課題

こういった歴史的な流れの中で、レコメンデーションに共通した課題を整理しつつ、重要なものを3つほど列挙してみたいと思います。

| 課題 | 概要 |
|------|------|
| コールドスタート問題 | 初めてのユーザーや新商品の推薦ができないこと。 |
| 膨大なアイテムやユーザー間の類似度計算 | レコメンデーションシステムは、大量のユーザーとアイテムに対して効率良く動作する必要がある。大規模なデータセットを扱う場合、計算コストとレスポンス時間が課題となります。 |
| バイアスと多様性 | 一般的に人気のあるアイテムが過剰に推薦される傾向がある（ポピュラリティバイアス）。新しいまたはマイナーなアイテムが見過ごされる、つまりテールのアイテムを無視してしまうことが課題です。|


バイアスと多様性はいろんな要素を含んでますが、ユーザーにとって新しいタイプのアイテムを提案することは、UXや新規の発見など、サービスを好きになってもらうために重要だと思います。 

他にもありますが、上記の課題は「時代を問わず」常に挙げられる課題です。この20年ずっと変わってないと言っても間違ってません。

# 「Two-Tower」レコメンデーション

上記のような課題がある中で、最新のモデルでよく引用されるのが、「Two-Tower」レコメンデーションです。ユーザーやアイテムの数が億オーダーになるメディア業界やECなどでは特に注目されており、強力なコンセプトであるアルゴリズムを比較的シンプルに表現できていることで、CFやDNNベースのレコメンド以後のモデルとして徐々に広がっているようです。



![Understanding.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627455/07e8e055-550a-38bd-7a4b-3824876ff697.png)





https://hackernoon.com/understanding-the-two-tower-model-in-personalized-recommendation-systems

アルゴリズムのニューラルネットワークアーキテクチャは、2つの別々の「タワー」で構成されており、それぞれが異なるデータセットを処理します。一方のタワーはユーザー（またはクエリ）用、もう一方のタワーは推薦されるアイテム用です。この構造により、大量のデータを効率的に処理することができ、コンテンツの推薦、広告システム、検索エンジンなど様々な分野で応用することができます。

また、この手法のメリットとして、コールドスタート問題に対応できることも非常に重要です。例えば、過去のクエリ（ユーザー）の情報と購入or閲覧したアイテムの情報があれば、同じ特徴空間にエンベディングすることができます。


仮に新規のアイテムが発生しても、その購入履歴を参照することなく、特徴ベクトルの情報のみでユーザーにパーソナライゼーションやレコメンデーションすることができます。
過去の類似の手法でも同じアプローチが取られてきましたが、近年のTTE（Two-Tower Embeddings）は画期的にスマートで進化している手法だと思います。


# 「Two‐Tower」のオリジンナル論文は？
このアルゴリズム・モデルは、Googleを始めとしてさまざまな推薦システムで広く使用されていますが、その発祥に関する特定の基礎論文は存在しないようです。コンセプト自体が普遍的で、時間とともに多くの研究者や実務家によって発展し、貢献されてきたものと考えられます。

例えば、UberのTechBlogが比較的多く引用されているようなので今後参考にしてみたいと思います。

https://www.uber.com/en-JP/blog/innovative-recommendation-applications-using-two-tower-embeddings/

# 「Two-Tower」のアーキテクチャーは？

他のレコメンデーションシステムでも共通ですが、購入履歴や閲覧履歴などのデータを使ってバッチ形式で演算を行い、ユーザーのセッションに応じてオンライン処理を逐次演算するアーキテクチャーがGoogleのTechBlogで紹介されています。

プロセスとしては下記の演算処理やパイプラインを開発することになります。
・バッチでTwo-Towerのエンコーディング
・ベクトルのインデックス作成
・ユーザーのセッション等を入力情報にしたベクトルを作成（変換）
・近似最近傍探索(ANN)

実務的なレコメンドシステムではNNのあとに、スコリングや何かしらの優先順位付けを行い、実際のレコメンドアイテムをリスト化することが多いと思います。


![figure-03_7QHFOAX.max-800x800.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627455/a1fc2b9f-832a-4555-90c3-08ff04226349.jpeg)


https://cloud.google.com/blog/products/ai-machine-learning/scaling-deep-retrieval-tensorflow-two-towers-architecture?hl=en

マネージドのベクトルエンジンなどが用意されている一方で、Two-Towerモデル自体は独自で開発するが必要あり、モデル作成においてはMLエンジニアやデータサイエンティストの力量が試されそうです、ちょっとワクワクしますね！

# まとめと今後

・レコメンデーションの歴史的な課題とそれらを解決する一つの手法として流行りのTwo-Towerを紹介しました。今後は、実務での検証や実際のサービスへの導入などもやってみたいと思います。

# 最後に
・LTIALICOにおけるデータ活用は始まったばかりですが、データ人材を積極採用中です！レコメンデーションなどにも興味がある方もデータエンジニアの方もぜひ、よろしくお願いします！

https://herp.careers/v1/litalico/svwKAvP4J0fW