Recommendation System
推薦システムは、ユーザーがどのアイテムを求めるか予測し、順位付けします。協調フィルタリングとコンテンツベースフィルタリング、パイプライン、課題、コードを紹介します。
レコメンデーションシステム(レコメンダー)とは、商品、動画、曲、記事、投稿など、ユーザーが求めそうなアイテムを予測し、そのユーザー向けに順位付けするソフトウェアです。星評価などの明示的なフィードバックに加え、クリック、視聴時間、購入など、より頻繁に得られる暗黙的なフィードバックから学習します。そのため、これは最も広く導入されている機械学習の応用分野の1つです。この分野を形作った主な節目は2つあります。Amazonが2003年に発表したアイテムベースの協調フィルタリングと、Netflixの映画評価予測を10%改善したチームに100万ドルを支払ったNetflix Prize(2006~2009年)です。
レコメンデーションシステムの仕組み#
協調フィルタリングでは、誰が何を利用したかというパターンだけを使います。ユーザーベースの手法では履歴が似ているユーザーを見つけ、アイテムベースの手法では同じユーザーが好むアイテムを見つけます。Netflix Prizeの期間に広まった行列分解では、すべてのユーザーとアイテムのベクトルを学習し、その内積によってユーザーの反応を予測します。これに対してコンテンツベースフィルタリングでは、ジャンル、自然言語処理(NLP)で処理したテキスト、画像の埋め込みなどの属性でアイテムを表現し、ユーザーがすでに気に入っているアイテムに似たものを推薦します。この方法は、まだ誰も利用していないアイテムにも有効です。ハイブリッドシステムでは両方のシグナルを組み合わせ、新しいアイテムに十分な数の反応が集まるまでコンテンツ特徴量を活用できます。
この例では、小規模な評価行列にアイテムベースの協調フィルタリングを適用し、映画の評価列間のコサイン類似度を使って、あるユーザーがまだ評価していない映画の評価を予測します。
import numpy as np
# Ratings from 4 users (rows) for 5 movies (columns); 0 means not rated
ratings = np.array(
[
[5, 4, 0, 1, 0],
[4, 5, 1, 0, 1],
[1, 0, 5, 4, 5],
[0, 1, 4, 5, 0],
]
)
# Item-item cosine similarity between the movies' rating columns
norms = np.linalg.norm(ratings, axis=0)
item_sim = ratings.T @ ratings / np.outer(norms, norms)
# Predict user 3's rating of each movie as a similarity-weighted average of their own ratings
user = ratings[3]
rated = user > 0
scores = item_sim[:, rated] @ user[rated] / item_sim[:, rated].sum(axis=1)
for movie in np.flatnonzero(~rated):
print(f"Movie {movie}: predicted rating {scores[movie]:.2f}")最後の行にあるユーザー3は、映画2と3を高く評価し、映画1を低く評価しています。そのため、評価の傾向が映画2と3に似ている映画4の予測評価は4.10となり、映画1に似ている映画0の予測評価は2.09となります。システムは映画4を推薦します。
ディープラーニングを用いたレコメンダーは、こうした表現をエンドツーエンドで学習します。二塔ネットワークはユーザーとアイテムを別々に埋め込むため、候補の取得は、ユーザーの埋め込みに最も近いアイテムの埋め込みを対象にするベクトル検索として実行できます。また、Transformerなどの系列モデルは、ユーザーの履歴を順番に読み取り、次の反応を予測します。
多段階パイプライン#
大規模サービスでは、リクエストのたびに数百万のアイテムに対して重いモデルを実行できないため、段階的に推薦を行います。候補生成(検索)では、協調フィルタリングや埋め込み検索など、低コストのシグナルを使ってカタログを数百件に絞り込みます。次にランキングモデルが、豊富な特徴量を使って各候補のクリック、視聴、購入の確率を予測します。最後の再ランキング処理で、多様性、新しさ、ビジネスルールを反映します。YouTubeは2016年にこの2段階設計を説明しました。表示された推薦はすべて次のモデルの学習に使うフィードバックも生成するため、システムは以前の選択によって形作られたデータから学習します。
最近のシステムでは、言語モデルと同様の方法でランキングモデルと検索モデルをスケールさせています。MetaがICML 2024で発表した生成型レコメンダーは、各ユーザーの行動を系列として扱い、1.5兆個のパラメーターに達しました。また、オンラインA/Bテストで指標を12.4%改善しました。
視覚的な推薦#
ファッション、家具、アートのカタログでは外観に基づいて推薦するため、「これに似たアイテム」の機能では商品写真の画像埋め込みを比較します。「このコーディネートを購入」の機能では、まず物体検出を使ってシーン写真から各アイテムを切り出し、その後、見た目が似た商品をカタログから検索します。同じ検索手法は学習データの候補選びにも使えます。Ultralytics Platformの類似画像を検索では、公開データセットとチームのデータセットから最も近い画像を最大24件、それぞれの類似度スコアとともに表示します。データセットにすでに含まれている画像は除外でき、モデルの検証で性能が最も低かった画像から検索を始めることもできます。
用途#
- 小売・Eコマース:商品ページには「この商品を購入したお客様はこちらも購入しています」というリストが表示され、閲覧履歴や購入履歴に基づいてホームページがパーソナライズされます。
- ストリーミングメディア:動画・音楽サービスは、視聴履歴や再生履歴に基づいて作品を順位付けし、プレイリストを生成します。Netflixでは、作品ごとに表示するアートワークもパーソナライズします。
- ソーシャルフィードとニュース:プラットフォームでは、予測エンゲージメントに基づいて投稿、短編動画、記事を順位付けし、ユーザーがフィードを開くたびに順位を更新します。
- ファッション:視覚的な類似性検索によって、買い物客が閲覧または撮影したアイテムとスタイル、色、柄が合う衣類を提案します。
レコメンデーションシステムと関連する概念#
- 検索:検索エンジンは明示的なクエリに応答しますが、レコメンダーはクエリなしでユーザーの要望を予測します。現在のシステムでは、検索と順位付けのコンポーネントを共有するものもあります。
- ベクトル検索とベクトルデータベース:クエリの埋め込みに最も近い保存済みの埋め込みを検索します。これは、レコメンダーが候補の取得に使う基本的な仕組みです。
- 再ランキングモデル:候補の短いリストをより正確に再スコアリングする第2段階のモデルで、レコメンダーにおけるランキング段階の役割を担います。
- 予測モデリング:ランキング段階では反応確率を予測するモデルを使いますが、レコメンダー全体では検索、順位付け、フィードバックループも扱います。
課題#
- コールドスタート:新規ユーザーや新規アイテムには反応履歴がないため、システムは人気度、初回利用時の質問、コンテンツ特徴量などに頼ります。
- スパース性:各ユーザーが大規模なカタログのごく一部しか利用しないため、ユーザーとアイテムの行列の大部分は空になります。
- 人気バイアスとフィードバックループ:記録された反応を使って学習すると、すでに頻繁に表示されているアイテムが優遇され、ユーザーが見るアイテムの幅が狭まり、フィルターバブルが生じる可能性があります。
- 評価:過去のデータに対するprecision@kやNDCGなどのオフライン指標は、新しい推薦に対するユーザーの実際の行動を測るオンラインA/Bテストと一致しないことがよくあります。
- プライバシー:詳細な行動プロファイルは個人データであり、EUをはじめとする各国・地域のデータ保護法によって保護されています。
- 規制:EUデジタルサービス法は、超大規模オンラインプラットフォームおよび検索エンジンに対し、各レコメンデーションシステムについて、プロファイリングに基づかない選択肢を少なくとも1つ提供するよう義務付けています。










