リクルート メンバーズブログ  ディープラーニングで検索ランキングを改善し、大きな効果が出た話

ディープラーニングで検索ランキングを改善し、大きな効果が出た話

検索改善担当の大杉です。今回は、2015年度まるまる取り組んでいたディープラーニング1を活用した施策について共有します。

汎用的に使えそうな部分を抽出して書いています。なので具体的な数字は出てきませんが、検索動線がコンバージョンに影響を与えるようなサービス一般に対して通用するんじゃないかと思ってます。

前提として

  1. すでにログやユーザーが集まっているサービス
  2. 専門性の高いメンバーで構成されたチーム(データサイエンティストは不在)

が、すでに与えられている恵まれた状態からスタートしています。

なにをやったか

ポンパレモールというECサイトで、検索時のランキングアルゴリズムの改善をやりました。検索基盤についてはこちらをご参照ください。

リクルート全社検索基盤のアーキテクチャ、採用技術、開発体制はどうなっているのか (1/2)

今回はそのアルゴリズムのロジック部分の話です。

やったことを1文にまとめると「検索ランキングアルゴリズムのパラメータチューニングをディープラーニングで行うことで、ユーザー属性や検索動線ごとに細かいチューニングを可能にし、これを本サービスに適用させA/Bテストを行ったところ、コンバージョン上昇が確認された」です。結構、色々と必要でした。

タイトルにも書いた通り、ディープラーニングを使っていますが、ディープラーニングは魔法でもなんでもないので、単に使っただけで改善効果が得られる訳はないです。「ディープラーニングの意味ある使い方ができる状態にする」ことが必要不可欠です。むしろ、ディープラーニングそのものよりも、その状態を作る方が重要です。

ディープラーニングを効果的に使うために必要なこと

他の実験やテストと同様で、すごい当たり前のことですが、

  1. ディープラーニングの目的
  2. ディープラーニングを使える環境
  3. ディープラーニングの結果を実サービスに展開する方法
  4. ディープラーニングの効果の観測

の4つが必須です。

ディープラーニングの目的

これがないと何もかも始まりませんし、こればっかりは考えてなんとかするしかないです。

そもそも、「A/Bテストの5%枠内ならなにをやってもいいから数字をあげてくれ2」としか言われていないので、ディープラーニングを使用する必然性は皆無だったのですが、使うといいことがありそうだったので、その用途を考えました。

大目的

ランキングアルゴリズムを改善して、コンバージョン率を上げる

小目的

検索ログから最適なアルゴリズムを推定する

を今回の目的にしました。この 「ログから最適なアルゴリズムを推定する」を掘り下げると、

  1. 最適なアルゴリズムは検索動線やユーザー属性によって異なる
  2. 検索動線やユーザー属性のデータは莫大な組み合わせがある
  3. この莫大な組み合わせを考慮した最適化が必要

この条件下で、検索ログから最適化なアルゴリズムの計算ができる手段が必要であり、本件では、他の教師つき学習と比べても、ディープラーニングが妥当だろうと考えました。

実際に本サービスへ適用するのには、目的を決めるのに要した時間の約20倍かかりました。

ディープラーニングを使える環境

これも自明ですが、以下の3つが必須です。

  1. 学習データ
  2. ディープラーニングの実装
  3. 分析インフラ

ディープラーニングの学習データとして、既存のログデータでは不足していたので、本サイトの改修をお願いして、やってもらいました。また、ログには商品の詳細情報が含まれていないので、全文検索インデックスの複製を用意し、そこに問い合わせることで、商品の詳細情報を獲得しました。地味に大変でした。

ディープラーニングの実装には、PFNのChainerを採用しました。どんなネットワーク構造を作ればいいのかが、サービスのデータ特有の問題もあり、色々と試さないとわからなかったため、Chainerの試行錯誤が容易な点に助けられました。その間の検証の副産物をブログに書きました。

NNライブラリChainerをScikit-learn likeにガンガン拡張する

分析インフラは、リクルートテクノロジーズが誇るインフラチームの尽力のもと、実現できました。検索部隊とビックデータ担当の両方から、部署を横断した協力が得られ、本当に助かりました。

ディープラーニングの結果を実サービスに展開する方法

そもそもパラメータチューニングの余地のないアルゴリズム・実装をしていては、ディープラーニングの意味がありません。そこで、

  1. 検索のランキングアルゴリズムを拡張
  2. 上記アルゴリズムの実現

の2点を行いました。このことは社内勉強会で話し、CodeIQの記事に簡単にまとまっています。

リクルート全社基盤アーキテクチャ、最適検索スコア導出、Ansible vs Chef-Solo、Node.js Stream─リクルートテクノロジーズ社内勉強会

動的に検索ランキングアルゴリズムを切り替えると、どう考えても検索の負荷があがるので、並行して性能チューニングも行いました。これも組織を超えたエンジニアの協力・サポートなしにはとても実現できませんでした。

ディープラーニングの効果の観測

施策の効果測定では、一からKPI設計するのではなく、すでにポンパレモールで使用されていた測定方法&指標を使いました。ただ、当初はA/Bテストの5%枠しかなく、継続的な改善を続けるには少し厳しかったので、テストの枠を増やしてもらいました。そのときの交渉の副産物が、こちらの記事になります。

Multi-variable testing のすすめ

また、学習結果のパラメータを眺めるだけでは想像できなかった副作用が存在するかもしれないので、本番相当のデータを本番相当の画面で確認した後、実サービスにリリースしました。こういうときに、簡単な社内用ツールくらいなら自作できると便利です。

締め

これらの全部を揃えて、やっとディープーニングを有効活用し、既存サービスの改善が達成できました。

統計関連の仕事だけならまだしも、このアイデアを実現するためには上記の全てを満たす必要があり、日々勉強といった毎日でした。チームメンバーの協力なしには、たった1年では到底実現できなかったです。大変でしたが、自身のアイデアの正しさを実証できて、満足です。「ほしいもの」がより見つかりやすいようになったはずなので、世の中的にも良いことができたんじゃないかな、と思っています。

リクルートテクノロジーズでは自ら目標を作り、折れずに突き進める仲間を募集中です。


  1. ネットワーク構造がそんなに深くないので文字通りの意味で”ディープ”ラーニングではないのです。「ディープラーニングのコツを利用した多層ニューラルネットワーク」の短縮表現をディープラーニングと表記しています。 
  2. 自主性を重んじるリクルートらしい仕事の与え方です。この件についてはこちらに詳しいです。学生時代にしかできない研究を究め、就活や就職後の仕事にとことん生かす