🏀

レコメンドシステム—— Wide&Deep モデル

2024/03/17に公開

はじめに

今回取り上げたのも、レコメンデーション分野の代表的な論文、Wide & Deep Learning for Recommender Systemsです。Google App Storeのレコメンデーションチームが2016年に発表したものです。ちょうどディープラーニングが始まった頃です。この記事は、レコメンデーションシステムのCTR予測にディープラーニングモデルを活用した、レコメンデーションシステムにおけるディープラーニングの成功例といえるでしょう。
論文のリンク:https://dl.acm.org/doi/pdf/10.1145/2988450.2988454

レコメンドシステムの概要

これはレコメンドシステムの構造図です。

ユーザーがアプリにアクセスすると、リクエストが生成され、そのリクエストにはユーザーやコンテキストの特徴が含まれます。レコメンドシステムは、ユーザーがクリックしたり購入したりする可能性が最も高い商品をモデルが選別した一連の商品を返さなければなりません。

候補集には膨大な量のデータが含まれているため、何百万もあります。すべての商品の呼び出しモデルに、決まった時間(100ミリ秒)内に点数をつけて順番をつけることは不可能です。そのため、我々は要請に対してRetrieval、つまりリコールを行う必要があります。Retrievalシステムは、ユーザーの要求に対してリコールを行います。リコールの方法は、機械学習モデルを利用したり、ルールを作ったりすることができます。

スクリーニングとリコールが終わった後、最後にWide & Deepモデルを呼び出してCTRを想定し、予測されたCTRに基づいて商品をランク付けします。この記事では、他の技術的な詳細を無視し、Wide & Deepモデルの実装にのみ注目しています。

Wide&Deepとは

レコメンドシステムは、商品のランキングシステムと見ることができます。入力はユーザ情報およびユーザが閲覧したコンテキスト情報であり、結果としてランキングされたシーケンスが返されます。だからこそ、レコメンドシステムにとっても、記憶力汎化性のトレードオフという課題があります。

記憶性は、ペアになっている商品や特徴が対になって現れることを簡単に理解できる学習ですが、ユーザーの履歴的な行動の特徴は非常に強い特徴であるため、記憶性はよりよい効果をもたらすことができます。しかし、それと同時に問題も発生します。典型的な問題は、モデルの汎化性が不十分であることです。

汎化性能力の場合、その主要な源は特徴間の相関性と伝達性です。特徴AとBが直接ラベルと関連していることもあれば、特徴Aが特徴Bと関連していることもあり、特徴Bが特徴ラベルと関連していることもあり、これを伝達性といいます。特徴間の伝達性を利用することで、過去のデータではあまり見られなかった特徴の組み合わせを探索することができ、高い汎化性能力を得ることができます。

大規模なオンラインランキングシステムでは、ロジスティック回帰のような線形モデルが広く使われています。なぜなら、これらのモデルは非常に単純で、拡張性が高く、性能が高く、解釈性にも優れているからです。この記事では、記憶性と汎化性を両立させたモデルWide & Deepを紹介します。線形モデルとニューラルネットワークの2つの部分を同時に訓練することができます

Wide&Deepの原理

まずモデルの構造図を見てみます。

これは論文からのもので、左からWideモデル、Wide&Deepモデル、Deepモデルを示しています。Wideモデルとは線形モデルで、Deepモデルはディープニューラルネットワークモデルです。
この図を使って、二つの部分について少し詳しく見ていきます。

Wide部分

Wide部分は、上の図の左の部分で示したように、一般化された形y = w^Tx + bの線形モデルです。yが予測結果で、xが特徴でd次元のベクトルx=[x_1, x_2 ... x_d]です。ここでdは特徴の数です。同様にwはd次元のウエイトベクトルでw = [w_1, w_2 ... w_d]です。bはオフセットです。これは、線形回帰のモデルでも紹介したことがあるので、皆さんもよく知っていると思います。

Deep部分

Deepの部分はフィードフォワード型ニューラルネットワークで、上の図の右側の部分です。

このグラフを見るといろいろなことがわかります。例えば入力はsparseのfeatureでmultihotの配列と理解できます。この入力はニューラルネットワークの第1層で低次元のembeddingに変換され、ニューラルネットワークがこのembeddingを訓練することです。このモジュールは主にitemのクラス、ユーザーの性別などのカテゴリ特徴を扱うように設計されています。

伝統的なone-hot法に比べて、離散型変数を一つのベクトルで表現するembedding方式の方が表現力が高く、そのベクトルの値はモデル自身に学習させるため、汎化性能力が大きく向上します。これもディープニューラルネットワークでは一般的なやり方です。

Wide&Deepの合併

Wide部分とDeep部分ができたら、重み付けをして合わせます。これが上の図の真ん中です。

最上位の出力はsigmoidレイヤかlinearレイヤでした単純な線形アキュムレータです。
その結果、トレーニングが部分ごとに分かれているため、各サブモデルのパラメータ空間が大きくなり、より効果的になります。リニアな部分とディープラーニングの部分を分離することで、欠点を補い合うことができ、よりよい効果が得られますし、トレーニングパラメータの数を人為的に増やす必要もありません。

モデルの学習

推薦システムのデータストリームは、データ生産、モデルトレーニング、モデルサービスの3つの部分からなります。1枚の図ではこうなります。

データ生産

データ生産の段階では、サンプルとして一定期間ユーザーの前に露出する商品を使い、ユーザーが購入をすればサンプルは1、そうでなければ0と表示されます。これも、ほとんどのシーンでおすすめです。
この段階で、システムはいくつかの文字列クラスの特徴をint型のidに変換します。たとえば娯楽系なら1、写真系なら2、有料なら0、無料なら1などです。同時に数値形の特徴を標準化し、[0,1]の範囲内にスケーリングします。

トレーニング

論文にはモデルの構造図があります。

左は年齢、インストールされたアプリの数など連続的な特徴で、右はデバイス情報、インストールされたアプリなど個別的な特徴です。これらの離散的な特徴はembeddingに変換され、右の連続的な特徴とともにニューラルネットワークに入って学習されます。論文では32次元のembeddingが使われています。

モデルサービス

モデルがトレーニングされると、サーバーは要求ごとにrecallシステムから一連の候補商品とユーザーの特徴を取得します。そして、モデルを呼び出して1つひとつの商品に点数を付け、点数を取ると、サーバーが候補の商品を点数の高い順に並べていきます。
深層学習のツールTensorFlowやPytorchを使うと、100ミリ以内に結果がもらえます。

まとめ

今回の記事はWide&Deepというランキングモデルを詳しく紹介しました。
モデルのコードは下記のGitHubに記載しています。ご参考になれば幸いです。

https://github.com/datasciencekun/starmie/blob/master/ranking/wide_deep_demo.ipynb

Discussion