Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ヤフーにおける機械学習検索ランキングの取り組み

sz_dr
December 04, 2019

 ヤフーにおける機械学習検索ランキングの取り組み

Search Engineering Tech Talk 2019 Autumn
https://search-tech.connpass.com/event/156014/

sz_dr

December 04, 2019
Tweet

More Decks by sz_dr

Other Decks in Technology

Transcript

  1. 12 . 11 2 0 1 21 .10 . ヤフー株式会社

    サイエンス統括本部 鈴木 翔吾 ヤフーにおける機械学習 検索ランキングの取り組み Search Engineering Tech Talk 2019 Autumn 2019/12/4
  2. 12 . 11 2 0 1 21 .10 . 自己紹介

    2 名前 鈴木 翔吾 (Shogo Suzuki) 所属 ヤフー株式会社 サイエンス統括本部 (2017年入社) p ヤフーショッピング p ヤフー知恵袋 の検索改善に取り組んでいます 興味 検索システム・ランキング学習・A/Bテスト
  3. 12 . 11 2 0 1 21 .10 . 今日お話すること

    3 導入:検索システムとランキング ヤフーにおける機械学習ランキング 柔軟なランキングを実現するプラグイン
  4. 12 . 11 2 0 1 21 .10 . 今日お話すること

    4 導入:検索システムとランキング ヤフーにおける機械学習ランキング 柔軟なランキングを実現するプラグイン
  5. 12 . 11 2 0 1 21 .10 . 検索システムとランキング

    5 検索キーワード ユーザー 検索エンジン 検索キーワードに マッチする文書を取得 マッチした文書を ある基準でランキングする ランキングされた文書
  6. 12 . 11 2 0 1 21 .10 . 検索結果のチューニング

    6 例:ECサイトにおける商品検索 しょうゆ 売り上げ順に並べてみよう!
  7. 12 . 11 2 0 1 21 .10 . 検索結果のチューニング

    7 例:ECサイトにおける商品検索 しょうゆ 売り上げ順に並べてみよう! 「しょうゆラーメン」ばっかり 検索結果に出てきちゃった…
  8. 12 . 11 2 0 1 21 .10 . 検索結果のチューニング

    8 例:ECサイトにおける商品検索 しょうゆ 売り上げ順に並べてみよう! 「しょうゆラーメン」ばっかり 検索結果に出てきちゃった… 検索キーワードと商品名の マッチスコアで並べてみよう!
  9. 12 . 11 2 0 1 21 .10 . 検索結果のチューニング

    9 例:ECサイトにおける商品検索 しょうゆ 売り上げ順に並べてみよう! 「しょうゆラーメン」ばっかり 検索結果に出てきちゃった… 検索キーワードと商品名の マッチスコアで並べてみよう! しょうゆ商品は出るけど 人気無さそうな商品ばっかり…
  10. 12 . 11 2 0 1 21 .10 . 検索結果のチューニング

    10 スコアの足し合わせを色々試した… 検索キーワード「しょうゆ」は綺麗になった!
  11. 12 . 11 2 0 1 21 .10 . 検索結果のチューニング

    11 スコアの足し合わせを色々試した… 検索キーワード「しょうゆ」は綺麗になった! 「iPhone ケース」 「ワンピース 30代」 「500円」 「カレー 美味しい 安い」 「adidas」 「ルンバ980」
  12. 12 . 11 2 0 1 21 .10 . 検索結果のチューニング

    12 スコアの足し合わせを色々試した… 検索キーワード「しょうゆ」は綺麗になった! 「iPhone ケース」 「ワンピース 30代」 「500円」 「カレー 美味しい 安い」 「adidas」 「ルンバ980」 こんなの全部 チューニングしてられるか!
  13. 12 . 11 2 0 1 21 .10 . 検索結果のチューニング

    13 スコアの足し合わせを色々試した… 検索キーワード「しょうゆ」は綺麗になった! 「iPhone ケース」 「ワンピース 30代」 「500円」 「カレー 美味しい 安い」 「adidas」 「ルンバ980」 機械学習モデルによる 文書のランキング こんなの全部 チューニングしてられるか!
  14. 12 . 11 2 0 1 21 .10 . 機械学習ランキングモデル

    14 検索キーワード マッチした文書 ランキングモデル 1.2 0.9 2.4 0.3 スコア付け ランキングモデルはどのように学習するか? 文書間の順序関係を学習する手法 ランキング学習 しょうゆ … Excellent Bad ≻ f( ) > f( )と なるように学習
  15. 12 . 11 2 0 1 21 .10 . ランキング学習についてもう少し

    15 しょうゆ … Excellent Bad Q. ランキング学習でのラベルって? A. 検索キーワードと文書の関連度です 例えば5段階評価 (Perfect, Excellent, Good, Fair, Bad) が 使われます Q. ラベルってどうやって付けるの? A. 「人手で付ける」「ユーザー行動ログを使う」の2択です ランキングモデル Q. とりあえず試したいんだけど? A. p RankLib https://github.com/jobandtalent/RankLib p LightGBM https://github.com/microsoft/LightGBM/tree/master/examples/lambdarank
  16. 12 . 11 2 0 1 21 .10 . 今日お話すること

    16 導入:検索システムとランキング ヤフーにおける機械学習ランキング 柔軟なランキングを実現するプラグイン
  17. 12 . 11 2 0 1 21 .10 . ランキングモデルができるまで

    18 検索FE … 検索リクエスト 検索結果 検索FEログを送信 ・検索結果中の文書ID ・ユーザー行動 ランキングログを送信 ・検索結果中の文書ID ・ランキング特徴量 学習データ … Excellent Bad LightGBM ランキングモデル … デプロイ 集計特徴量をフィード 検索エンジン
  18. 12 . 11 2 0 1 21 .10 . ランキングモデルができるまで

    19 検索FE … 検索リクエスト 検索結果 検索FEから 検索リクエストが 飛んでくる ※正確には検索APIを挟んでおり クエリ解析などの処理が走るが, ここでは省略 検索エンジン
  19. 12 . 11 2 0 1 21 .10 . ランキングモデルができるまで

    20 検索FE … 検索リクエスト 検索結果 検索FEログを送信 ・検索結果中の文書ID ・ユーザー行動 ランキングログを送信 ・検索結果中の文書ID ・ランキング特徴量 ログをHadoopクラスタ(HDFS)に送信 Hive Tableのレコードとして格納する ※ ランキングモデルの学習データを作成するため, ユーザー行動およびランキング時に用いた特徴量を 保管しておく ※ ランキング特徴量は検索結果に含めて, FEログと一緒に送信することも考えられる. しかし, 特徴量の情報はかなり大きいので, 検索エンジンから直接HDFSに送信する方針を採用. 検索エンジン
  20. 12 . 11 2 0 1 21 .10 . ランキングモデルができるまで

    21 学習データ … Excellent Bad Hive Tableに格納されたログから, HiveQL/Sparkを用いて学習データを作成 リクエストID 文書ID ランキングID ユーザー行動 req_1 A rank_1 click req_1 B rank_1 none 文書ID ランキングID ランキング特徴量 A rank_1 {“f_1”: 3, ...} B rank_1 {“f_1”: 2, ...} 検索FEのユーザー行動ログ 検索エンジンから送信されたランキングログ
  21. 12 . 11 2 0 1 21 .10 . ランキングモデルができるまで

    22 学習データ … Excellent Bad LightGBM ランキングモデル … LightGBMを用いたランキング学習により ランキングモデルを作成 objective = lambdarank ※ データフォーマットにやや癖があります LightGBM/examples/lambdarank を参考 ※ ランキングモデルはリアルタイムに動作するため あまりにも大きいランキングモデルは 検索エンジンに乗せられません. そのため, ハイパラチューニングは精度だけでなく モデルサイズ(木の最大本数, 深さ, 葉の数)も 気にする必要があります.
  22. 12 . 11 2 0 1 21 .10 . ランキングモデルができるまで

    23 ランキングモデル … デプロイ 集計特徴量をフィード ランキングプラグイン 形式に変換 (後述) ↓ ランキングモデルを 検索エンジンにデプロイ ランキング特徴量の一部は Hive Tableから集計して生成する バッチで集計→特徴量をフィード 検索エンジン
  23. 12 . 11 2 0 1 21 .10 . ランキングモデルができるまで

    (再掲) 24 検索FE … 検索リクエスト 検索結果 検索FEログを送信 ・検索結果中の文書ID ・ユーザー行動 ランキングログを送信 ・検索結果中の文書ID ・ランキング特徴量 学習データ … Excellent Bad LightGBM ランキングモデル … デプロイ 集計特徴量をフィード 検索エンジン
  24. 12 . 11 2 0 1 21 .10 . 今日お話すること

    25 導入:検索システムとランキング ヤフーにおける機械学習ランキング 柔軟なランキングを実現するプラグイン
  25. 12 . 11 2 0 1 21 .10 . 独自ランキングプラグイン

    26 https://lucene.apache.org/solr/guide/8_2/learning-to-rank.html Solr公式のランキング学習ガイド Elasticsearch Learning to Rank https://elasticsearch-learning-to-rank.readthedocs.io/en/latest/ 各検索エンジンで ランキングプラグインは存在するが, サービスを改善していくには より柔軟なプラグインが必要だった 社内で独自の ランキングプラグインを開発!
  26. 12 . 11 2 0 1 21 .10 . DSLでランキングモデルを記述

    27 四則演算や条件式、組み込み関数をサポート “parser”: “rank-expression” “expr”: “if(f1 > 0, f2, f3) + 0.5 * if(f1 > 10, f3, f4)” 例 f1 f2 f3 + 0.5 × f1 f3 f4 > 0 > 10
  27. 12 . 11 2 0 1 21 .10 . DSLでランキングモデルを記述

    28 設定の継承をサポート “props”: { “prop_A”: 10, “prop_B”: 20 }, ... base_setting.json control_setting.json “parser”: “model-json”, “expr”: “control-model.json” test_setting.json “parser”: “model-json”, “expr”: “test-model.json” 共通設定を記述 A/Bテストでランキングモデルの 差し替えを行いたいときは, 共通設定を継承して A/Bテスト用の設定だけを記述できる
  28. 12 . 11 2 0 1 21 .10 . 多段階ランキング

    29 マッチした文書全てを機械学習モデルで リアルタイムにランキングするのは重くて無理… とはいえ, 精度の良いモデルを使いたい… 前段は軽い計算で文書をフィルタリング 後段は重量モデルでランキング! light-model heavy-model “collectPhase”: { “parser”: “model-json”, “expr”: “light-model.json” }, “rerankPhases”: { “heavyPhase”: { “parser”: “model-json”, “expr”: “heavy-model.json”, “rerankCount”: <N> } }
  29. 12 . 11 2 0 1 21 .10 . 独自のランキング特徴量

    30 例:統計特徴量 マッチスコア (BM25など) 8.4 7.3 12.5 6.5 他の商品に比べて マッチスコアが高い → 買われやすい? ランキング時に, マッチした文書集合の 特徴量統計値を計算→ランキングに利用 ・最大値 ・最小値 ・平均値 ・分散 ・percentile をサポート
  30. 12 . 11 2 0 1 21 .10 . ヤフーにおけるランキング改善

    32 検索モデリングチームのお仕事 複数の検索サービスを担当 p 多様な検索課題に取り組める (大変だけど) p 他サービスの成功事例や実装を輸出入しやすい web検索にも各サービスの検索結果を掲出 検索結果が良くなる web検索からの流入が増加 各サービスのUUに貢献できる! …
  31. 12 . 11 2 0 1 21 .10 . ヤフーにおけるランキング改善

    33 苦労した/しているポイントは盛りだくさん ユーザーアクション vs 検索結果の綺麗さ iPhone iPhone本体出さなくて良いのか? ユーザーはケースやケーブル商品を買いがち → ランキングモデルもそのように学習 マッチングスコア課題 検索キーワード「防水」 注意:この商品は防水ではありません。 検索キーワード「◯◯ 12巻」 ◯◯ 15巻 発売日:2018/12 ユーザーの意図をどうスコアに反映する?
  32. 12 . 11 2 0 1 21 .10 . 今日お話したこと

    34 導入:検索システムとランキング ヤフーにおける機械学習ランキング 柔軟なランキングを実現するプラグイン
  33. 12 . 11 2 0 1 21 .10 . 36

    時間余ったら
  34. 12 . 11 2 0 1 21 .10 . ランキングモデルで気をつけること

    37 高速なランキング  使ってよい特徴量 検索結果を高速に返したい 重いランキングモデルは サービスに取り入れにくい 例) 「文書の新鮮さ」を 考慮したい 文書の投稿時刻と 検索リクエスト時刻の差分を ランキング特徴量に追加 更新する度に 検索結果が変わるぞ!? モデルの更新 ランキングモデルで 良い検索結果できた! Nヵ月後… 最近検索結果が変! 季節トレンドのあるサービスなど 学習データ/予測対象で データの分布が変わっていく → モデルの更新が必要