Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ヤフーにおける機械学習検索ランキングの取り組み
Search
sz_dr
December 04, 2019
Technology
11
15k
ヤフーにおける機械学習検索ランキングの取り組み
Search Engineering Tech Talk 2019 Autumn
https://search-tech.connpass.com/event/156014/
sz_dr
December 04, 2019
Tweet
Share
More Decks by sz_dr
See All by sz_dr
Vespaを利用したテクいベクトル検索
szdr
3
420
RecSys 2019 論文読み会 発表資料
szdr
1
1.2k
E-Commerce検索におけるランキング研究
szdr
1
800
ランク学習と偽負例化合物を用いたバーチャルスクリーニング
szdr
0
440
Convolutional Neural NetworkとRankNetを用いた画像の順序予測
szdr
0
220
Other Decks in Technology
See All in Technology
NW-JAWS #14 re:Invent 2024(予選落ち含)で 発表された推しアップデートについて
nagisa53
0
250
コンテナセキュリティのためのLandlock入門
nullpo_head
2
320
podman_update_2024-12
orimanabu
1
260
非機能品質を作り込むための実践アーキテクチャ
knih
3
730
PHPからGoへのマイグレーション for DMMアフィリエイト
yabakokobayashi
1
160
Fanstaの1年を大解剖! 一人SREはどこまでできるのか!?
syossan27
2
160
開発生産性向上! 育成を「改善」と捉えるエンジニア育成戦略
shoota
1
230
.NET 9 のパフォーマンス改善
nenonaninu
0
560
Postman と API セキュリティ / Postman and API Security
yokawasa
0
200
watsonx.ai Dojo #5 ファインチューニングとInstructLAB
oniak3ibm
PRO
0
160
re:Invent 2024 Innovation Talks(NET201)で語られた大切なこと
shotashiratori
0
300
KubeCon NA 2024 Recap / Running WebAssembly (Wasm) Workloads Side-by-Side with Container Workloads
z63d
1
240
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Statistics for Hackers
jakevdp
796
220k
We Have a Design System, Now What?
morganepeng
51
7.3k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
BBQ
matthewcrist
85
9.4k
The Cost Of JavaScript in 2023
addyosmani
45
7k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.5k
Code Reviewing Like a Champion
maltzj
520
39k
Into the Great Unknown - MozCon
thekraken
33
1.5k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
The Invisible Side of Design
smashingmag
298
50k
Transcript
12 . 11 2 0 1 21 .10 . ヤフー株式会社
サイエンス統括本部 鈴木 翔吾 ヤフーにおける機械学習 検索ランキングの取り組み Search Engineering Tech Talk 2019 Autumn 2019/12/4
12 . 11 2 0 1 21 .10 . 自己紹介
2 名前 鈴木 翔吾 (Shogo Suzuki) 所属 ヤフー株式会社 サイエンス統括本部 (2017年入社) p ヤフーショッピング p ヤフー知恵袋 の検索改善に取り組んでいます 興味 検索システム・ランキング学習・A/Bテスト
12 . 11 2 0 1 21 .10 . 今日お話すること
3 導入:検索システムとランキング ヤフーにおける機械学習ランキング 柔軟なランキングを実現するプラグイン
12 . 11 2 0 1 21 .10 . 今日お話すること
4 導入:検索システムとランキング ヤフーにおける機械学習ランキング 柔軟なランキングを実現するプラグイン
12 . 11 2 0 1 21 .10 . 検索システムとランキング
5 検索キーワード ユーザー 検索エンジン 検索キーワードに マッチする文書を取得 マッチした文書を ある基準でランキングする ランキングされた文書
12 . 11 2 0 1 21 .10 . 検索結果のチューニング
6 例:ECサイトにおける商品検索 しょうゆ 売り上げ順に並べてみよう!
12 . 11 2 0 1 21 .10 . 検索結果のチューニング
7 例:ECサイトにおける商品検索 しょうゆ 売り上げ順に並べてみよう! 「しょうゆラーメン」ばっかり 検索結果に出てきちゃった…
12 . 11 2 0 1 21 .10 . 検索結果のチューニング
8 例:ECサイトにおける商品検索 しょうゆ 売り上げ順に並べてみよう! 「しょうゆラーメン」ばっかり 検索結果に出てきちゃった… 検索キーワードと商品名の マッチスコアで並べてみよう!
12 . 11 2 0 1 21 .10 . 検索結果のチューニング
9 例:ECサイトにおける商品検索 しょうゆ 売り上げ順に並べてみよう! 「しょうゆラーメン」ばっかり 検索結果に出てきちゃった… 検索キーワードと商品名の マッチスコアで並べてみよう! しょうゆ商品は出るけど 人気無さそうな商品ばっかり…
12 . 11 2 0 1 21 .10 . 検索結果のチューニング
10 スコアの足し合わせを色々試した… 検索キーワード「しょうゆ」は綺麗になった!
12 . 11 2 0 1 21 .10 . 検索結果のチューニング
11 スコアの足し合わせを色々試した… 検索キーワード「しょうゆ」は綺麗になった! 「iPhone ケース」 「ワンピース 30代」 「500円」 「カレー 美味しい 安い」 「adidas」 「ルンバ980」
12 . 11 2 0 1 21 .10 . 検索結果のチューニング
12 スコアの足し合わせを色々試した… 検索キーワード「しょうゆ」は綺麗になった! 「iPhone ケース」 「ワンピース 30代」 「500円」 「カレー 美味しい 安い」 「adidas」 「ルンバ980」 こんなの全部 チューニングしてられるか!
12 . 11 2 0 1 21 .10 . 検索結果のチューニング
13 スコアの足し合わせを色々試した… 検索キーワード「しょうゆ」は綺麗になった! 「iPhone ケース」 「ワンピース 30代」 「500円」 「カレー 美味しい 安い」 「adidas」 「ルンバ980」 機械学習モデルによる 文書のランキング こんなの全部 チューニングしてられるか!
12 . 11 2 0 1 21 .10 . 機械学習ランキングモデル
14 検索キーワード マッチした文書 ランキングモデル 1.2 0.9 2.4 0.3 スコア付け ランキングモデルはどのように学習するか? 文書間の順序関係を学習する手法 ランキング学習 しょうゆ … Excellent Bad ≻ f( ) > f( )と なるように学習
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
12 . 11 2 0 1 21 .10 . 今日お話すること
16 導入:検索システムとランキング ヤフーにおける機械学習ランキング 柔軟なランキングを実現するプラグイン
12 . 11 2 0 1 21 .10 . ヤフーにおける検索ランキング
17
12 . 11 2 0 1 21 .10 . ランキングモデルができるまで
18 検索FE … 検索リクエスト 検索結果 検索FEログを送信 ・検索結果中の文書ID ・ユーザー行動 ランキングログを送信 ・検索結果中の文書ID ・ランキング特徴量 学習データ … Excellent Bad LightGBM ランキングモデル … デプロイ 集計特徴量をフィード 検索エンジン
12 . 11 2 0 1 21 .10 . ランキングモデルができるまで
19 検索FE … 検索リクエスト 検索結果 検索FEから 検索リクエストが 飛んでくる ※正確には検索APIを挟んでおり クエリ解析などの処理が走るが, ここでは省略 検索エンジン
12 . 11 2 0 1 21 .10 . ランキングモデルができるまで
20 検索FE … 検索リクエスト 検索結果 検索FEログを送信 ・検索結果中の文書ID ・ユーザー行動 ランキングログを送信 ・検索結果中の文書ID ・ランキング特徴量 ログをHadoopクラスタ(HDFS)に送信 Hive Tableのレコードとして格納する ※ ランキングモデルの学習データを作成するため, ユーザー行動およびランキング時に用いた特徴量を 保管しておく ※ ランキング特徴量は検索結果に含めて, FEログと一緒に送信することも考えられる. しかし, 特徴量の情報はかなり大きいので, 検索エンジンから直接HDFSに送信する方針を採用. 検索エンジン
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のユーザー行動ログ 検索エンジンから送信されたランキングログ
12 . 11 2 0 1 21 .10 . ランキングモデルができるまで
22 学習データ … Excellent Bad LightGBM ランキングモデル … LightGBMを用いたランキング学習により ランキングモデルを作成 objective = lambdarank ※ データフォーマットにやや癖があります LightGBM/examples/lambdarank を参考 ※ ランキングモデルはリアルタイムに動作するため あまりにも大きいランキングモデルは 検索エンジンに乗せられません. そのため, ハイパラチューニングは精度だけでなく モデルサイズ(木の最大本数, 深さ, 葉の数)も 気にする必要があります.
12 . 11 2 0 1 21 .10 . ランキングモデルができるまで
23 ランキングモデル … デプロイ 集計特徴量をフィード ランキングプラグイン 形式に変換 (後述) ↓ ランキングモデルを 検索エンジンにデプロイ ランキング特徴量の一部は Hive Tableから集計して生成する バッチで集計→特徴量をフィード 検索エンジン
12 . 11 2 0 1 21 .10 . ランキングモデルができるまで
(再掲) 24 検索FE … 検索リクエスト 検索結果 検索FEログを送信 ・検索結果中の文書ID ・ユーザー行動 ランキングログを送信 ・検索結果中の文書ID ・ランキング特徴量 学習データ … Excellent Bad LightGBM ランキングモデル … デプロイ 集計特徴量をフィード 検索エンジン
12 . 11 2 0 1 21 .10 . 今日お話すること
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/ 各検索エンジンで ランキングプラグインは存在するが, サービスを改善していくには より柔軟なプラグインが必要だった 社内で独自の ランキングプラグインを開発!
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
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テスト用の設定だけを記述できる
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> } }
12 . 11 2 0 1 21 .10 . 独自のランキング特徴量
30 例:統計特徴量 マッチスコア (BM25など) 8.4 7.3 12.5 6.5 他の商品に比べて マッチスコアが高い → 買われやすい? ランキング時に, マッチした文書集合の 特徴量統計値を計算→ランキングに利用 ・最大値 ・最小値 ・平均値 ・分散 ・percentile をサポート
12 . 11 2 0 1 21 .10 . 31
おまけ
12 . 11 2 0 1 21 .10 . ヤフーにおけるランキング改善
32 検索モデリングチームのお仕事 複数の検索サービスを担当 p 多様な検索課題に取り組める (大変だけど) p 他サービスの成功事例や実装を輸出入しやすい web検索にも各サービスの検索結果を掲出 検索結果が良くなる web検索からの流入が増加 各サービスのUUに貢献できる! …
12 . 11 2 0 1 21 .10 . ヤフーにおけるランキング改善
33 苦労した/しているポイントは盛りだくさん ユーザーアクション vs 検索結果の綺麗さ iPhone iPhone本体出さなくて良いのか? ユーザーはケースやケーブル商品を買いがち → ランキングモデルもそのように学習 マッチングスコア課題 検索キーワード「防水」 注意:この商品は防水ではありません。 検索キーワード「◯◯ 12巻」 ◯◯ 15巻 発売日:2018/12 ユーザーの意図をどうスコアに反映する?
12 . 11 2 0 1 21 .10 . 今日お話したこと
34 導入:検索システムとランキング ヤフーにおける機械学習ランキング 柔軟なランキングを実現するプラグイン
12 . 11 2 0 1 21 .10 . 35
EOP
12 . 11 2 0 1 21 .10 . 36
時間余ったら
12 . 11 2 0 1 21 .10 . ランキングモデルで気をつけること
37 高速なランキング 使ってよい特徴量 検索結果を高速に返したい 重いランキングモデルは サービスに取り入れにくい 例) 「文書の新鮮さ」を 考慮したい 文書の投稿時刻と 検索リクエスト時刻の差分を ランキング特徴量に追加 更新する度に 検索結果が変わるぞ!? モデルの更新 ランキングモデルで 良い検索結果できた! Nヵ月後… 最近検索結果が変! 季節トレンドのあるサービスなど 学習データ/予測対象で データの分布が変わっていく → モデルの更新が必要