😇

レコメンドシステム—— DeepFM(Deep Factorization Machine)

2024/03/28に公開

はじめに

今回取り上げたのも、レコメンデーション分野の代表的な論文、DeepFM: A Factorization-Machine based Neural Network for CTR Predictionです。
DeepFMはDeepとFMを組み合わせたもので、LRをFMに置き換え、モデルのwide側の情報抽出能力を向上させたものです。DeepFMを学ぶ前に、FMとWide&Deepについて知っておくことをおすすめします。
https://zenn.dev/datasciencekun/articles/d67230e2781f7d
https://zenn.dev/datasciencekun/articles/3903f35e122986

論文のリンク:
DeepFM: A Factorization-Machine based Neural Network for CTR Prediction

DeepFMの特徴

DeepFMは、FMから派生したアルゴリズムと考えられ、DeepとFMを組み合わせ、FMで特徴間の低次元結合を、Deep NN部分で特徴間の高次元結合を、という2つの手法を並列的に組み合わせることで、次のような特徴を持つアーキテクチャになります:
(1)隠ベクトルを得るためにFMを事前トレーニングする必要はありません;
(2)人工の特徴のエンジニアリングが必要ありません;
(3)低次元と高次元の組み合わせの特徴を同時に学習できます。
(4)FMモジュールとDeepモジュールはFeature Embedding部分を共有しており、より高速なトレーニング、より正確なトレーニング学習が可能です。

DeepFMのアーキテクチャ

まずモデルの構造図を見てみます。
左側がFMの構造層、右側がDeep部分の構造層で、同じ特徴インプットを共有します。

Sparse Features

カテゴリ特徴はモデルに直接インプットできないので、onehot処理を使って特徴の01ベクトル表現を得る必要があります。onehotの01ベクトルは非常に長い(sparse matrix)ため、実際には特徴を整数に変換するためにLabelEncoderを用いて符号化するのが一般的です。この層はonehot符号化されたカテゴリの特徴を表します。
その中に、fieldとは特徴で、黄色の部分は特徴の実際のvalueです。例えば、field1は星座で、実際のvalueが天秤座で、天秤座の符号化するvalueが10です。(〇〇座:1、✖️✖️座:2...天秤座:10
など)

Dense Embeddings

埋め込み層(embedding layer)の構造は上の図のようになります。
高次元の疎らな01ベクトルを埋め込み、低次元の稠密なベクトルembeddingを得て、それぞれの稠密ベクトルを横方向に連結し、連結上の元の数値的特徴をDeepとFMの入力とします。各01ベクトルは埋め込み層に対応し、異なるベクトルの埋め込みプロセスは互いに独立しています。
現在のネットワーク構造には2つの興味深い特徴があります。
1)異なるフィールドの入力の長さにもかかわらず、embedding後のベクトルの長さはKです。
2)FMで得られた暗黙変数Vikは、埋め込み層ネットワークの重みとして使用されます。

FM Layer

FMには線形部と交差部の2つの部分があります線形部分(黒い線分)は、それぞれの特徴に重みを与え、重み和を行います。交差する部分(赤い線分)は、特徴を2つずつ掛け合わせ、重みをつけて足したものです。この2つの結果の合計がFM Layerの出力となります。

FM部分の公式は:

Hidden Layer(Deep部分)

Deep部分はフィードフォワードのネットワークです。その入力a0はすべての稠密ベクトルの横方向の連結で、その後、多層線形+非線形変換を経てHidden Layerの出力を得て、普通は1次元にマッピングして、FMの結果と積算する必要があるのです。

Deep部分の公式は:

Output Units

出力層は、FM Layerの結果とHidden Layerの結果の積み重ね、低次と高次の特徴の相互作用の融合、sigmoid非線形変換を経て、予測された確率出力を得ます。
公式は:

実践効果

DeepFMのCTR想定タスクのパフォーマンス、および他の推薦アルゴリズムとの比較は以下の通りです。

まとめ

Wide&Deepとの違い:

  • 共通点:線形モデルとDeepモデルの融合です。
  • 相違点:DeepFMは2つの部分で入力を共有しますが、wide側は間薄い入力、deep側は稠密な入力です。DeepFMは人工的な特徴を追加する必要がなく、エンドツーエンドで学習が可能で、オンラインでの展開が容易ですが、Wide&Deepでは入力に人工的な特徴を加えてモデル表現能力を向上させます。

今回の記事はDeepFMというランキングモデルを詳しく紹介しました。
モデルのコードは下記のGitHubに記載しています。ご参考になれば幸いです。
https://github.com/datasciencekun/starmie/blob/master/ranking/deepfm_demo.ipynb

Discussion