エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

ニューラルネットの推薦システムに時間・場所等のデータを活用する(Latent Cross)

機械学習エンジニアの西場(@m_nishba)です。主に自然言語処理を使ったリコメンドや文書分類、ユーザー分析を行っています。

最近、読んだ論文を社内データに対して試したので紹介します。

コンテンツ

論文の紹介

概要

今回読んだ論文はLatent Cross: Making Use of Context in Recurrent Recommender Systemsです。 これはWSDM 2018でのFull Presentationの論文で、Googleの人たちによって書かれています。

この論文の主題は、「ニューラルネットを用いた推薦システムにおいて、時間や場所等のcontextual dataをどのように活用するか」です。

これまで推薦システムにおいて、時間等のcontextual dataを使わない、または単純に結合する方法が採用されていました。

そこで論文ではLatent Crossという方法を提案しています。

既存の単純な方法

単純に時間等のcontextual dataを結合する場合、 例えば、商品の埋め込みベクトル{ h }と時間の埋め込みベクトル{ w }を結合すると下記のような特徴ベクトル{ v }を作ることになります。 { v = (h, w) } この{ v }を全結合層やRNNの入力として使うことになります。

しかし、この方法だと単純な例でも上手く学習できない/深い層が必要になるケースがあります。 例えば協調フィルタリングを考えます。 協調フィルタリングでは、ユーザー{ i }の埋め込みベクトル{ u_i }、商品{ j }の埋め込みベクトル{ v_i }とした場合におけるユーザー{ i }の商品{ j }に対する評価{ r_{ij} }は下記のように近似します。

{ r_{ij} \approx u_i \cdot v_j }

これを2つの埋め込みベクトルを結合し全結合層を使って { r_{ij} } を近似できるか実験すると下図のようになります。

f:id:nsb248:20180401144928p:plain

([1]より転写)

各埋め込みベクトルの次元が20の内積を考えた場合(r=1, m=2のカラム)でも1層ではかなり精度が低いです。現実の問題ではかなり深い層を必要とする可能性があります。

Latent Cross

論文では上記の方法を解決するためLatent Crossを提案しています。 Latent Crossは既存のニューラルネットを用いた推薦システムにcontextual dataを取り入れる方法です。

既存の推薦システムのある層の出力{ h_t }をcontextual dataの埋め込みベクトル{ w }を使って下記のように調整します。 { h_t \leftarrow (1 + w) \ast h_t }

ここで { \ast } は要素ごとの掛け算です。こうすることで前述した単純な結合では表現できなかったようなケースにも対応できます。 また推薦システム以外の研究でも重要性が示されているattentionの一種だとみなすことができます。 { w }の値の調整により、中間層の出力に対して次元のマスキングをすることができます。

実際に論文ではRNNを用いたYouTubeの推薦システムにcontextual dataとして時間を取り入れたモデルで数値検証を行っています。

f:id:nsb248:20180401144851p:plain

([1]より転写)

ベースとなるRNN(Plain, no time)と比べ、RNN(Concatenated { \Delta t })、RNN with { \Delta t } Latent Crossの順にPrecisionとMAPが改善しています。

社内データでの数値実験

概要

Latent Crossは推薦システム以外にも応用ができそうなので、文書分類について実験します。 CNNと協調フィルタリングを使った日本語文書のリコメンド でも使った”ニュースのタイトルから「地域」タグがつくかどうかの2値問題”を扱います。

様々な新聞社からニュースが配信されており、地域密着の新聞社の場合、地域のニュースが多いと予測できます。そこで、新聞社を埋め込みベクトルにして、Latent Crossを適用しようと思います。

モデルの詳細についてこちらをご覧ください。

結果

  • CNN(Plain, no publisher)
              precision    recall  f1-score   support

          0      0.893     0.894     0.894      1048
          1      0.923     0.922     0.922      1436

avg / total      0.910     0.910     0.910      2484
  • CNN(Concatenated)
             precision    recall  f1-score   support

          0      0.891     0.888     0.890      1048
          1      0.919     0.921     0.920      1436

avg / total      0.907     0.907     0.907      2484
  • CNN(Latent Cross)
             precision    recall  f1-score   support

          0      0.912     0.887     0.899      1048
          1      0.919     0.937     0.928      1436

avg / total      0.916     0.916     0.916      2484

ぐぬぬ。ほとんど変わらないですね。この問題において新聞社は特徴量として効かないようです。 他の要素やLatentCrossの入れる層などを検討し、精度改善を進めたいと思います。

最後に

弊社では、医療分野における

といったコンテンツが豊富にあり、分析によってビジネスを加速することができます。 (医療分野に特化した翻訳や動画からの特徴量抽出にも取り組もうとしています)

弊社のデータ分析・機械学習業務の特徴として、

  • ビジネスに直結している
  • メインサービスにアルゴリズムの導入ができる。
  • アルゴリズムのABテストをビジネスサイドが受け入れてくれる
  • 動画等に対する長期的なアルゴリズム開発にも挑戦できる。
  • 外部API等では実現できない面白い課題に専念できる。(外部APIでできる問題は外部APIを使います。)
  • 新卒・中途関係なく、自分が担当する案件のメイン開発者になれる。

といったところがあります。

もし興味のある方は応募フォームまたは@m_nishibaまでご連絡ください。