Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

12 . 11 2 0 1 21 .10 . 検索システムとランキング 5 検索キーワード ユーザー 検索エンジン 検索キーワードに マッチする文書を取得 マッチした文書を ある基準でランキングする ランキングされた文書

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

12 . 11 2 0 1 21 .10 . ヤフーにおける検索ランキング 17

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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のユーザー行動ログ 検索エンジンから送信されたランキングログ

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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/ 各検索エンジンで ランキングプラグインは存在するが, サービスを改善していくには より柔軟なプラグインが必要だった 社内で独自の ランキングプラグインを開発!

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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テスト用の設定だけを記述できる

Slide 29

Slide 29 text

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”: } }

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

12 . 11 2 0 1 21 .10 . 31 おまけ

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

12 . 11 2 0 1 21 .10 . 35 EOP

Slide 36

Slide 36 text

12 . 11 2 0 1 21 .10 . 36 時間余ったら

Slide 37

Slide 37 text

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