エンベディング モデルがあるとします。ユーザーが特定された場合、どのアイテムをおすすめするかをどのように決定しますか。
サービング時に、あるクエリを指定して、まず次のいずれかを行います。
- 行列分解モデルの場合、クエリ(またはユーザー)エンベディングは静的に知られているため、システムはユーザー エンベディング行列から簡単に検索できます。
- DNN モデルの場合、システムは特徴ベクトル \(x\)でネットワークを実行して、サービング時にクエリ エンベディング \(\psi(x)\)を計算します。
クエリ エンベディング \(q\)を取得したら、エンベディング空間で \(q\) に近いアイテム エンベディング\(V_j\) を検索します。これは最近傍問題です。たとえば、類似性スコア \(s(q, V_j)\)に基づいて上位 k 個のアイテムを返すことができます。
関連アイテムのおすすめにも同様のアプローチを使用できます。たとえば、ユーザーが YouTube 動画を視聴している場合、システムはまずそのアイテムのエンベディングを検索し、エンベディング空間で近い他のアイテムのエンベディングを検索します。\(V_j\)
大規模な取得
エンベディング空間内の最近傍を計算するために、システムはすべての候補を徹底的にスコア付けします。非常に大規模なコーパスでは、網羅的なスコアリングは費用がかかる場合がありますが、次のいずれかの戦略を使用して効率を高めることができます。
- クエリ エンベディングが静的にわかっている場合は、システムはオフラインで網羅的なスコアリングを実行し、各クエリの上位候補のリストを事前計算して保存できます。これは、関連アイテムのレコメンデーションでよく行われる手法です。
- 近似最近傍を使用する。 Google は、GitHub で ScaNN(Scalable Nearest Neighbors)というオープンソース ツールを提供しています。このツールは、大規模なベクトル類似性検索を効率的に実行します。