「レコメンデーションシステム(1) 概要」の記事では、一般的な[候補アイテムプール]の生成方法として「コンテンツベースフィルタリング」と「協調フィルタリング」の2つを紹介しました。その中でも、コンテンツベースのフィルタリングは非常にシンプルですが、当然ながらその限界も明らかです。対照的に、協調フィルタリングはユーザーとアイテム間の類似性を使用して推奨を行います。
目次
1. 映画のおすすめ例
トレーニング データがフィードバック マトリックスで構成されている映画推奨システムを考えてみましょう。
- 各行はユーザーを表します。
- 各列はアイテム (映画) を表します。
映画に関するフィードバックは、次の 2 つのカテゴリのいずれかに分類されます。
- 明示的– ユーザーは数値評価を提供することで、特定の映画がどの程度好きかを指定します。
- 暗黙的- ユーザーが映画を視聴すると、システムはユーザーが興味を持っていると推測します。
簡単にするために、フィードバック行列がバイナリであると仮定します。つまり、値 1 は映画への関心を示します。
ユーザーがホームページにアクセスすると、システムは以下に基づいて映画を推奨する必要があります。
- ユーザーが過去に気に入った映画との類似性
- ユーザーが好む類似の映画
説明を簡単にするために、以下の表で説明されている映画のいくつかの機能を手動で設計してみましょう。
映画 | 評価 | 説明する |
---|---|---|
ダークナイトライジング | PG-13 | DC コミックスの世界を舞台にしたこの『ダークナイト』の続編では、バットマンはゴッサム シティを核による壊滅から救うために働きます。 |
ハリーポッターと賢者の石 | PG | 孤児は自分が魔法使いであることを知り、ホグワーツ魔法魔術学校に入学し、そこで邪悪なヴォルデモートとの最初の戦いを戦います。 |
シュレック | PG | 愛らしいオーガと相棒のロバが、ドラゴンによって城に閉じ込められたフィオナ姫を救出する任務に出発しました。 |
ベルヴィルの三つ子 | PG-13 | ツール・ド・フランスでチャンピオンのプロ自転車選手が誘拐されると、彼の祖母と太りすぎの犬が、3人の年老いたジャズシンガーの助けを借りて、彼を救出するために海外へ向かう。 |
記念する | 右 | 記憶喪失の男は、遺体に手がかりとなるタトゥーを入れて妻殺害事件を解決しようと必死だ。 |
1.1 1次元埋め込み
図 1 に示すように、映画が子供 (負のスコア) に適しているか大人 (正のスコア) に適しているかを示すために、各映画にスカラー [−1,1] を割り当てたとします。また、子供向け映画 (-1 に近い) または成人向け映画 (+1 に近い) に対するユーザーの興味を表すスカラー [-1,1] を各ユーザーに割り当てるとします。ユーザーが好むと予想される映画の場合、映画の埋め込みとユーザーの埋め込みの積は大きくなる (1 に近づく) 必要があります。
図 1 単一の機能 (大人または子供) に基づいて映画を評価する
図 2 では、チェックマーク (✅) は、特定のユーザーが視聴した映画を識別するために使用されます。3 人目と 4 人目のユーザーの好みは、この機能によってよく説明できます (視聴する映画が明らかに「二極化」しているため) - 3 人目のユーザーは子供向けの映画を好み、4 人目のユーザーは成人向けの映画を好みます。ただし、この 1 つの機能だけでは、1 人目と 2 人目のユーザーの好みを完全に説明することはできません。子供向け映画と成人向け映画の両方で、彼らの好みは矛盾しているようです。
図 2 1 次元の埋め込み図
1.2 2次元埋め込み
上記の 1 つの特徴 (子供から大人まで) だけでは、すべてのユーザーの好みを特徴付けるには明らかに十分ではありません。この問題を解決するために、2 番目の特性を追加しましょう。それは、各映画が大ヒット映画またはアート映画である度合いです。2 番目の機能では、次の 2D 埋め込みを使用して各ムービーを表現できるようになりました。
図 3 は 2 つの特徴に基づいて映画を説明しています
フィードバック行列を最適に解釈するために、再び同じエンベディング空間にユーザーを配置します。各 (ユーザー、アイテム) ペアについて、ユーザーが映画を視聴するときに、ユーザーのエンベディングとアイテムのエンベディングのドット積が 1 に近くなるようにします。 , それ以外の場合は0です。
図4 2次元埋め込み図
注:上の例では、Item と User を同じ埋め込み空間で表していますが、少し奇妙に思えるかもしれません。結局のところ、ユーザーとアイテムは 2 つの異なるエンティティです。ただし、埋め込み空間をアイテムとユーザーの共通の抽象表現として考えることができます - つまり、同じ埋め込み空間を使ってアイテムとユーザーを表現します この方法はある程度明白です: 類似性を評価するには類似性尺度を使用するのが便利ですまたは相関関係。
この例では、埋め込みを手動で設計しました。実際には、埋め込みは自動的に学習できます。これが協調フィルタリング モデルの力です。次の 2 つのセクションでは、これらの埋め込みを学習するためのさまざまなモデルと、それらをトレーニングする方法について説明します。
このアプローチの協調的な性質は、モデルが埋め込みを学習するときに明らかです。動画の埋め込みベクトルは固定であると仮定する。その後、モデルはユーザーの好みを最もよく説明する埋め込みベクトルを学習できます。したがって、同様の好みを持つユーザーの埋め込みは近くなります。同様に、ユーザーのエンベディングが固定されている場合、フィードバック行列を最もよく説明するために映画のエンベディングを学習できます。したがって、同様のユーザーが気に入った映画の埋め込みは、埋め込みスペースの近くに配置されます。
1.3 埋め込みを再理解する
組み込みに関しては、学術界と産業界の両方に明確な定義があります。ここで筆者は、ユーザーとアイテムは複雑かつ多様であり、それぞれに独自の特性を持っており、その特性を直接評価することは困難であると筆者自身の理解を語っている。そこで、これらの複雑な特徴を空間に抽象化して「世界観を統一」する必要があり、その統一された空間では、もともと複雑だった特徴が比較的単純なデジタルベクトルに変換されます。
上記の理解に基づくと、いわゆるエンベディングとは本質的に一種の「抽象化」であり、抽象化によって粗と細、偽と真を取り除き、ユーザーとアイテムの本質を描写します。抽象化により、ユーザーとアイテムを別の[空間]に投影し、数学的な形式で表現します。この[空間]は比較的合理化されています。
2.行列分解
行列分解は単純な埋め込みモデルです。フィードバック行列 が与えられると、モデルは次のことを学習します。ここで、 はユーザー (またはクエリ) の数、 はアイテムの数です。
- ユーザー埋め込み行列。行 i はユーザー i の埋め込みです。
- 項目埋め込み行列。行 j は項目 j の埋め込みです。
- はフィーチャの寸法を表します。
埋め込みは、 フィードバック行列 A の適切な近似となるように学習されます。 上の図では、の座標 の値が 内積 、つまり User の埋め込みと Items の埋め込みの 内積であることは明らかです 。理想的には、 この点積がフィードバック行列内の点積に近ければ近いほど、予測が正確であることを示します。
注:行列分解では、通常、完全な行列を学習するよりもコンパクトな表現が得られます。完全な行列には エントリがありますが、埋め込み行列にはエントリがあり 、埋め込み次元は通常 sum よりもはるかに 小さくなり ます 。したがって、観測値が低次元の部分空間に近いと仮定すると、行列分解によりデータ内の基礎的な構造が明らかになります。前の例では、n、m、d の値が非常に低いため、利点は無視できました。ただし、実際のレコメンダー システムでは、完全な行列を学習するよりも行列分解の方がコンパクトになる場合があります。
3. 目的関数を選択します
直観的な目的関数は二乗距離です。これを行うには、次のように、観察されたすべてのエントリのペア (U、V) の二乗誤差の合計を最小化する必要があります。
この目的関数では、観測されたエントリのペア (i, j) のみ、つまりフィードバック行列の非ゼロ値のみを合計します。ただし、値の 1 つだけを合計するのは良い考えではありません。すべての値の行列では損失が最小限に抑えられ、有効な提案を行うことができず、一般化が不十分なモデルが生成されます (観察されたエントリのペアが疎である可能性があるため、たとえば、100 本の映画がある場合、ユーザーがそのうちの 1 つだけを視聴したことが観察されました)。
おそらく、観測されていない値をゼロとして扱い、行列内のすべてのエントリを合計します。これは、 近似間 の フロベニウスの二乗 距離を最小化することに対応します。
この二次問題は、行列の特異値分解( SVD )によって解決できます。ただし、実際のアプリケーションでは行列が 非常に疎になる可能性があるため、SVD も良い解決策とは言えません。たとえば、YouTube 上のすべてのビデオと、特定のユーザーが視聴したすべてのビデオを比較します。解(モデルの入力行列の近似に相当) がゼロに近くなり、汎化パフォーマンスが低下する可能性があります。
対照的に、重み付き行列因数分解は、目的を次の 2 つの合計に分解します。
- 観測されたエントリのペアの合計 - (観測された - 予測された) の二乗和に相当します。
- 観測されていないエントリのペアの合計 (ゼロとして扱われる) - 予測値の二乗和に相当します。
ここで、 はターゲットがどちらか一方に支配されないように両方の項に重みを付けるハイパーパラメータです。このハイパーパラメータを調整することは非常に重要です。
注:実際のアプリケーションでは、慎重な重み付けが必要です。たとえば、一部の高頻度シナリオでは、高頻度アイテム (人気のないビデオなど) または高頻度ユーザー (ヘビーユーザーなど) の場合、上記の式の最初の項が目的関数を支配する可能性があります。このシナリオでは、アイテムの頻度を考慮してトレーニング サンプルに重みを付けることで、この影響を補正できます。つまり、目的関数は次のように置き換えることができます。
ここで、 はユーザー i とアイテム j の頻度の関数です。
4. 目的関数を最小化する
目的関数を最小化するための一般的なアルゴリズムには次のものがあります。
-
加重交互最小二乗法( WALS )
ターゲットは、との両方の行列 で 2 次です。(ただし、この問題は共凸ではないことに注意してください。) WALS は、埋め込みをランダムに初期化し、次のことを交互に行うことによって機能します。
- 解決策 を指定する
- 解決策 を指定する
各段階は (線形システムを解くことによって) 正確に解くことができ、分散することができます。この手法では、各ステップで損失が削減されることが保証されるため、収束が保証されます。
SGD と WALS にはそれぞれ独自の長所と短所があります。それらがどのように比較されるかを確認するには、以下の情報をチェックしてください。
4.1シンガポールドル
アドバンテージ:
1- 非常に柔軟 - 他の損失関数も使用できます。
2-並列化可能。
欠点:
1-遅い - 収束はそれほど速くありません。
2- 観察されていないエントリの処理が困難になります。
4.2 ワルツ
アドバンテージ:
1-並列化可能。
2-収束速度は SGD よりも高速です。
3- 監視されていないエントリの処理が容易になります。
欠点:
1 - 損失の二乗のみに依存します。
5.協調フィルタリングのメリットとデメリット
5.1 利点
1- ドメインの知識は不要:埋め込みは自動的に学習されるため、ドメインの知識は必要ありません。
2-興味の発見:このモデルは、ユーザーが新しい興味を発見するのに役立ちます。単独では、機械学習システムはユーザーが特定のアイテムに興味があることを認識していない可能性がありますが、同様のユーザーがそのアイテムに興味を持っているため、モデルは依然としてそのアイテムを推奨する可能性があります。
3-開始が簡単: ある程度まで、システムは行列分解モデルをトレーニングするためにフィードバック行列のみを必要とします。特に、システムはコンテキスト機能を必要としません。実際には、これは複数の候補ジェネレータの 1 つとして使用できます。
5.2 欠点
5.2.1 新しくアップロードされたアイテムを処理できない
特定の (ユーザー、アイテム) ペアのモデル予測は、対応する埋め込みのドット積です。したがって、トレーニング中に項目が表示されない場合、システムはその項目の埋め込みを作成し、その項目を使用してモデルをクエリすることができません。この問題は、コールド スタート問題と呼ばれることがよくあります。ただし、次の手法を使用すると、コールド スタートの問題をある程度解決できます。
-
WALS での投影。トレーニング中に表示されなかった新しい項目がある 場合、システムがユーザーと何らかの対話を行っている場合、システムはモデル全体を再トレーニングすることなく、この項目の埋め込みを簡単に計算できます。システムは次の方程式、または重み付けされたバージョンを解くだけで済みます。
前述の方程式は、WALS の反復に対応します。つまり、ユーザーの埋め込みは固定され、システムは項目の埋め込みを解決します。新規ユーザーに対しても同じことができます。
-
新しいアイテムの埋め込みを生成するヒューリスティック。システムにインタラクションがない場合、システムは、同じカテゴリ、同じアップローダー (YouTube にアップロードされたビデオなど) などからのアイテムの埋め込みを平均することによって、その埋め込みを近似できます。
5.2.2 補助機能の追加が難しい
補助特性は、ユーザー (クエリ) またはアイテム ID 以外の任意の特性です。映画の推奨の場合、補助機能には国や年齢が含まれる場合があります。利用可能な補助機能を含めることで、モデルの品質を向上させることができます。WALS に補助機能を追加するのは簡単ではないかもしれませんが、WALS の一般化によりこれが可能になります。
WALS を一般化するには、ブロック行列 を定義することで入力行列の特徴を強化します 。ここで、
- Block(0, 0) は元のフィードバック行列です。
- Block(0, 1) は、ユーザー機能のマルチホット エンコーディングです。
- Block(1, 0) は、Item 機能のマルチホット エンコーディングです。
ブロック (1, 1) は通常空白のままです。行列分解が適用される場合、ユーザーとアイテムの埋め込みに加えて、システムは補助機能の埋め込みも学習します。
6. 参考文献
链接-https://developers.google.cn/machine-learning/recommendation/collaborative/basics