Submit Search
Upload
Solrで多様なランキングモデルを活用するためのプラグイン開発 #SolrJP
•
2 likes
•
9,964 views
Yahoo!デベロッパーネットワーク
Follow
第20回 Lucene/Solr勉強会 https://solr.doorkeeper.jp/events/59743 発表資料
Read less
Read more
Technology
Report
Share
Report
Share
1 of 30
Download Now
Download to read offline
Recommended
はじめての検索エンジン&Solr 第13回Solr勉強会
はじめての検索エンジン&Solr 第13回Solr勉強会
Noritsugu Suzuki
第16回Lucene/Solr勉強会 – ランキングチューニングと定量評価 #SolrJP
第16回Lucene/Solr勉強会 – ランキングチューニングと定量評価 #SolrJP
Yahoo!デベロッパーネットワーク
Solr の LTR プラグインの使い方 - 第3回 LTR 勉強会資料 -
Solr の LTR プラグインの使い方 - 第3回 LTR 勉強会資料 -
Issei Nishigata
Apache Solr 入門
Apache Solr 入門
順平 西本
広告配信のための高速疎ベクトル検索エンジンの開発@WebDBフォーラム2015 #webdbf2015
広告配信のための高速疎ベクトル検索エンジンの開発@WebDBフォーラム2015 #webdbf2015
Yahoo!デベロッパーネットワーク
Apache Solr 検索エンジン入門
Apache Solr 検索エンジン入門
Yahoo!デベロッパーネットワーク
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
Field collapsing/Result groupingについて
Field collapsing/Result groupingについて
Jun Ohtani
More Related Content
What's hot
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
Shinsuke Sugaya
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
JVMパラメータチューニングにおけるOptunaの活用事例 ( Optuna Meetup #1 )
JVMパラメータチューニングにおけるOptunaの活用事例 ( Optuna Meetup #1 )
Hironobu Isoda
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Takahiko Ito
Vespa 機能紹介 #yjmu
Vespa 機能紹介 #yjmu
Yahoo!デベロッパーネットワーク
Payloads in Solr - Erik Hatcher, Lucidworks
Payloads in Solr - Erik Hatcher, Lucidworks
Lucidworks
Spring fest2020 spring-security
Spring fest2020 spring-security
土岐 孝平
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話
Kentaro Yoshida
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめ
sleepy_yoshi
SpringBootTest入門
SpringBootTest入門
Yahoo!デベロッパーネットワーク
はじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタ
Satoyuki Tsukano
RDF Semantic Graph「RDF 超入門」
RDF Semantic Graph「RDF 超入門」
オラクルエンジニア通信
How to Schedule Machine Learning Workloads Nicely In Kubernetes #CNDT2020 / C...
How to Schedule Machine Learning Workloads Nicely In Kubernetes #CNDT2020 / C...
Preferred Networks
オンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッション
Yahoo!デベロッパーネットワーク
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
推薦アルゴリズムの今までとこれから
推薦アルゴリズムの今までとこれから
cyberagent
Apache Spark + Arrow
Apache Spark + Arrow
Takeshi Yamamuro
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
Preferred Networks
What's hot
(20)
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
JVMパラメータチューニングにおけるOptunaの活用事例 ( Optuna Meetup #1 )
JVMパラメータチューニングにおけるOptunaの活用事例 ( Optuna Meetup #1 )
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Vespa 機能紹介 #yjmu
Vespa 機能紹介 #yjmu
Payloads in Solr - Erik Hatcher, Lucidworks
Payloads in Solr - Erik Hatcher, Lucidworks
Spring fest2020 spring-security
Spring fest2020 spring-security
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめ
SpringBootTest入門
SpringBootTest入門
はじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタ
RDF Semantic Graph「RDF 超入門」
RDF Semantic Graph「RDF 超入門」
How to Schedule Machine Learning Workloads Nicely In Kubernetes #CNDT2020 / C...
How to Schedule Machine Learning Workloads Nicely In Kubernetes #CNDT2020 / C...
オンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッション
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
DockerコンテナでGitを使う
DockerコンテナでGitを使う
推薦アルゴリズムの今までとこれから
推薦アルゴリズムの今までとこれから
Apache Spark + Arrow
Apache Spark + Arrow
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
Similar to Solrで多様なランキングモデルを活用するためのプラグイン開発 #SolrJP
Chainerで学ぶdeep learning
Chainerで学ぶdeep learning
Retrieva inc.
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
Tokyo r50 beginner_2
Tokyo r50 beginner_2
Takashi Minoda
Lucene/Solr Revolution 2016 参加レポート
Lucene/Solr Revolution 2016 参加レポート
Shinpei Nakata
Swtt2018 sfdgr2 Developer Group ルーキー会が教える!次の一歩のための開発ノウハウ
Swtt2018 sfdgr2 Developer Group ルーキー会が教える!次の一歩のための開発ノウハウ
SFDG ROOKIES
Lucene/Solr Revolution2015参加レポート
Lucene/Solr Revolution2015参加レポート
Yahoo!デベロッパーネットワーク
Elasticsearch 20150107
Elasticsearch 20150107
ShingoOKAWA
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
Ryutaro YOSHIBA
Prophet入門【Python編】Facebookの時系列予測ツール
Prophet入門【Python編】Facebookの時系列予測ツール
hoxo_m
Firebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支える
健一 辰濱
アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱
Koichi ITO
データ分析チームの振り返り
データ分析チームの振り返り
Satoshi Noto
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
Katsuhiro Morishita
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624
Yusuke Suzuki
レボリューションR(RRE)のご紹介
レボリューションR(RRE)のご紹介
Satoshi Kitajima
Tokyo r38
Tokyo r38
Takashi Minoda
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
Koichi ITO
【デブサミ福岡B5】コードレビューの進め方~全員で行う品質の維持~
【デブサミ福岡B5】コードレビューの進め方~全員で行う品質の維持~
Developers Summit
ICSE2014参加報告 (SE勉強会 6/12)
ICSE2014参加報告 (SE勉強会 6/12)
Kazunori Sakamoto
LIFULL HOME'SでのSolrの構成と運用の変遷
LIFULL HOME'SでのSolrの構成と運用の変遷
LIFULL Co., Ltd.
Similar to Solrで多様なランキングモデルを活用するためのプラグイン開発 #SolrJP
(20)
Chainerで学ぶdeep learning
Chainerで学ぶdeep learning
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Tokyo r50 beginner_2
Tokyo r50 beginner_2
Lucene/Solr Revolution 2016 参加レポート
Lucene/Solr Revolution 2016 参加レポート
Swtt2018 sfdgr2 Developer Group ルーキー会が教える!次の一歩のための開発ノウハウ
Swtt2018 sfdgr2 Developer Group ルーキー会が教える!次の一歩のための開発ノウハウ
Lucene/Solr Revolution2015参加レポート
Lucene/Solr Revolution2015参加レポート
Elasticsearch 20150107
Elasticsearch 20150107
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
Prophet入門【Python編】Facebookの時系列予測ツール
Prophet入門【Python編】Facebookの時系列予測ツール
Firebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支える
アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱
データ分析チームの振り返り
データ分析チームの振り返り
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624
レボリューションR(RRE)のご紹介
レボリューションR(RRE)のご紹介
Tokyo r38
Tokyo r38
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
【デブサミ福岡B5】コードレビューの進め方~全員で行う品質の維持~
【デブサミ福岡B5】コードレビューの進め方~全員で行う品質の維持~
ICSE2014参加報告 (SE勉強会 6/12)
ICSE2014参加報告 (SE勉強会 6/12)
LIFULL HOME'SでのSolrの構成と運用の変遷
LIFULL HOME'SでのSolrの構成と運用の変遷
More from Yahoo!デベロッパーネットワーク
ゼロから始める転移学習
ゼロから始める転移学習
Yahoo!デベロッパーネットワーク
継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
Yahoo!デベロッパーネットワーク
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
Yahoo!デベロッパーネットワーク
LakeTahoe
LakeTahoe
Yahoo!デベロッパーネットワーク
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
Yahoo!デベロッパーネットワーク
Persistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability Feature
Yahoo!デベロッパーネットワーク
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
Yahoo!デベロッパーネットワーク
eコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtc
Yahoo!デベロッパーネットワーク
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
Yahoo!デベロッパーネットワーク
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo!デベロッパーネットワーク
ビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtc
Yahoo!デベロッパーネットワーク
サイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtc
Yahoo!デベロッパーネットワーク
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
Yahoo!デベロッパーネットワーク
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo!デベロッパーネットワーク
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
Yahoo!デベロッパーネットワーク
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
Yahoo!デベロッパーネットワーク
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
Yahoo!デベロッパーネットワーク
「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc
Yahoo!デベロッパーネットワーク
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
Yahoo!デベロッパーネットワーク
The potential of Kubernetes as more than just an infrastructure to deploy
The potential of Kubernetes as more than just an infrastructure to deploy
Yahoo!デベロッパーネットワーク
More from Yahoo!デベロッパーネットワーク
(20)
ゼロから始める転移学習
ゼロから始める転移学習
継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
LakeTahoe
LakeTahoe
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
Persistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability Feature
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
eコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
ビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
The potential of Kubernetes as more than just an infrastructure to deploy
The potential of Kubernetes as more than just an infrastructure to deploy
Recently uploaded
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
arts yokohama
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
ssuser539845
2024 03 CTEA
2024 03 CTEA
arts yokohama
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
Tetsuya Nihonmatsu
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
Matsushita Laboratory
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
Ayachika Kitazaki
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
arts yokohama
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
ssuser370dd7
2024 04 minnanoito
2024 04 minnanoito
arts yokohama
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
Shumpei Kishi
Recently uploaded
(11)
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
2024 03 CTEA
2024 03 CTEA
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
2024 04 minnanoito
2024 04 minnanoito
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
Solrで多様なランキングモデルを活用するためのプラグイン開発 #SolrJP
1.
Solrで多様なランキングモデルを活用するためのプラグイン開発 2017/06/05 第20回 Lucene/Solr勉強会 #SolrJP ヤフー株式会社
矢野 友貴
2.
1 • 氏名 • 矢野
友貴 (やの ゆうき) • 所属 • ヤフー株式会社 D&S統括本部 • ふつーのエンジニア • Solr歴は1年ぐらい (Solrチョットデキル) • 前回登壇した石川さんのチームに所属 • 主に検索ランキング周り担当 自己紹介 石川さんのスライド https://www.slideshare.net/TakahiroIshikawa6/solratomicupdate50000
3.
2 • 今回のネタ、今年のLucene/Solr Revolutionに投稿してましたが… •
結果はrejectでしたorz 余談: Lucene/Solr Revolution 2017
4.
3 • Solrのランキング周りの話 • Yahoo!JAPANで開発中のランキングプラグインの話 アジェンダ
5.
4 Solrのランキング周り
6.
5 • ランキング =
特定の基準に従って検索結果をソート • ヒットした文書毎にスコア計算をして並べ替える • ランキングのモチベーション • 検索の質の改善 • 検索意図との関連度をスコア化 • ex) 機械学習によるランキングモデル • 検索のカスタマイズ • 業務要件に応じた補正をスコア化 • ex) 広告費用を加味した補正 検索とランキング
7.
6 • Solrでは大きく分けて2つある (はず) •
Similarity • TF-IDF, BM25のような統計情報ベースのスコア • FunctionQuery • 四則演算や条件式で定義したカスタムスコア • 実際はDisMaxクエリとか他にも色々と方法はあるが。。。 • 突き詰めると最終的に上の2つに行き着く Solrとスコア計算
8.
7 • 実際のユースケースではスコア計算に色々な要望がでてくる • ヒットした結果をサービス固有なロジックで並び替えたい •
機械学習モデルとかもっとリッチなスコア計算をしたい • スコア計算を自由にカスタマイズするには? • 独自Similarityを実装する • RankQueryを使ったプラグインを実装する Solrとスコア計算 (cont’d)
9.
8 • Solrのランキングの登場人物はざっくり2つ • Query/Weight/Scorer •
スコア計算 • Collector/LeafCollector • ドキュメント選択 • (Similarityは割愛) Solrでのランキングフロー query Query Weight Scorer Collector index (segment) Leaf Collector ※実際はCollectorを生成するのはSolrIndexSearcherだが便宜上Queryと繋いでいる
10.
9 • Query/Weight/Scorer • Query
=> Weight => Scorerと生成される • 後にいく程担当範囲が狭くなる • Scorerが具体的なセグメントを担当 • 対象ドキュメントの走査とスコア計算 • 実装によってクエリの当て方が変わる (ex. フレーズ検索) Solrでのランキングフロー (cont‘d) query Query Weight Scorer index (segment) 検索全体 shard毎 segment毎 検索クエリを解析して Queryを生成 shardのコンテキスト に基いて生成 segmentのコンテキスト に基いて生成
11.
10 • Collector/LeafCollector • Scorerが返すスコアを元にドキュメントを選択 •
優先度キューを用いてスコアの高い文書を選ぶ Solrでのランキングフロー (cont’d) TopDocsCollector (Collector) LeafCollector Scorer index (segment) PriorityQueue documents collect topDocs 候補文書の絞込 topNの選択
12.
11 • RankQuery =
Solrのランキングを拡張するための機能 • Queryをラッピングして諸々の処理を書き換える RankQueryの仕組み query Query Weight Scorer Collector index (segment) Leaf Collector query Query Weight Scorer Collector index (segment) Leaf Collector RankQuery rq={!xxx} Queryをラップすることで CollectorやWeightの生成 を差し替えられるようになる
13.
• リランキング用のクエリで再検索してスコア補正 • score
= firstPassScore + reRankWeight * secondPassScore LeafCollector 12 RankQueryの例 (ReRankプラグイン) q=foo&rq={!rerank reRankQuery=bar} ReRankCollector PriorityQueue ReRankQueryRescorer Scorer (q=foo) collect Scorer (q=bar) topDocs index documents rescore q=fooの条件で スコアを計算 reRankQuery=barの条件 でスコアを再計算して補正 補正後のスコアで再ソート (リランキング) https://cwiki.apache.org/confluence/display/solr/Query+Re-Ranking
14.
13 • Solr6.4から追加されたプラグイン • 「LTR
= Learning To Rank」、Solrで機械学習モデルを扱う • Bloombergの人によってコントリビュートされた RankQueryの例 (LTRプラグイン) https://issues.apache.org/jira/browse/SOLR-8542
15.
14 • 学習済モデルを事前に登録し, リランキングで利用 •
リクエストパラメタでモデル名を指定して切り替え • 現状では線形モデルとアンサンブル木モデルに対応している RankQueryの例 (LTRプラグイン) (cont‘d) ModelStoremodel.json LTRRescorer ModelScorer (model = xxx) LTRScoringModel (model = xxx) ...&rq={!ltr model=xxx}&... 事前にモデル定義をアップロード 検索時に利用する モデルを指定 対応するモデルにスコア計算を委譲 https://cwiki.apache.org/confluence/display/solr/Learning+To+Rank
16.
15 Yahoo!JAPANで開発中の ランキングプラグイン
17.
16 • RankQueryを用いたプラグインとして実装 • 他のプラグインと同じように主要な処理を差し替える •
多様なサービスニーズに応えるために以下を実現する (したい) • 柔軟なスコア計算の定義 => DSLによるモデル記述 • リッチな特徴量 => ポスティングリストから取れる情報を使う • 高速なランキング => 動的コンパイル, (高速化アルゴリズム) アプローチ
18.
17 • 大きく3つのコンポーネントに分かれる ランキングプラグインの概要 index Matcher profiles profile.json models Evaluator Feature … Scorer Rescorer Collector Parser Model スコアリングランキング
モデリング
19.
18 • 基本的な対応方針は他のRankQuery系プラグインと同じ • Queryをラッピングして,
独自のCollectorに差し替える • 他のプラグインと地味に異なる点 • collectでもスコア計算を差し替え可能 • topDocsでscore+fieldのような複合ソートに対応 ランキング処理 Evaluator Scorer Rescorer Collector ランキング
20.
19 • スコア計算はLTRプラグインのアプローチに近い • 特徴ベクトルを展開
=> モデルでスコア計算 • 以下の3ステップでスコアを計算 1. ポスティングリストから単語情報を展開 • position, freq, norm, payload • フィールド値とかもここで展開 2. 1.の情報を元に各特徴量を計算 3. 2.の情報を元にモデルでスコア計算 スコアリング処理 index Matcher Evaluator Feature … スコアリング
21.
20 • プラグインでは各モデルとprofileという単位で管理 • 検索時にランキングで用いるprofileを指定して使う •
profileの指定に従い以下のような前処理を事前に行う • 対応するmodelファイルのロード • スコア計算式のコンパイル モデリング処理 profiles profile.json models Parser Model モデリング
22.
21 • プラグインでは2通りの記述方法を提供 1. DSL
(Domain Specific Language) • プログラマブルな記述方法 • 自由にルールを記述したいときに使う 2. 特化モデル (今回は割愛) • 特定のモデルフォーマットに限定した記述方法 • 表現に制約があるがその代わり計算が速い 検索モデルの記述方法
23.
22 • モデル定義を行うための簡易言語 • 四則演算,
条件式, if文, 数学関数とかに対応 • FunctionQueryをもっとhuman-readableに噛み砕いた感じ • 基本的なモデルもDSLを用いて表現可能 • 線形モデル : 足し算と掛け算の繰り返し • アンサンブル木モデル : ネストしたif文 モデル記述とDSL
24.
23 • 内部はJavaCCを用いて実装 • SolrのQueryParserの実装と似た感じ •
ただしそのままインタプリタ実行すると重い。。。 • 各モデル式をコンパイルして高速化 • javax.tools.JavaCompilerで動的コンパイルする モデル記述とDSL (cont‘d) モデル式 評価木 Javaコード byteコード解析 実行 変換 コンパイル 実行
25.
24 • 動的コンパイルする利点 • インタプリタ実行時の評価ノードの再帰呼出しを回避 •
モデル毎にJITコンパイルのプロファイリングして最適化 • 実際にコンパイルすると20〜50%程度レイテンシが改善 • CPU使用率が下がるため特に高負荷時に差がつく モデル記述とDSL (cont‘d) 高負荷時には 倍ぐらい差がつく
26.
25 LTRプラグインとの比較 LTRプラグイン Yahooプラグイン ランキング collectの書き換え
✕ ◯ topDocsの書き換え ◯ ◯ field-sortへの対応 △ (topDocsが未対応) ◯ スコアリング フィールド参照 ◯ ◯ クエリパラメタ ◯ ◯ FunctionQueryとの連携 ◯ (SolrFeatureで使える) △ (DSLで担保) pos, payloadの利用 △ (Query依存) ◯ (ただし素性実装が必要) モデリング 複数モデルの切り替え ◯ ◯ 機械学習モデルの利用 ◯ ◯ カスタムモデルの利用 △ (継承 or FunctionQuery) ◯ (DSLで書ける) モデル分割 △ (FunctionQueryでできる?) ◯ (DSLで書ける) 高速化の工夫 ✕ (ナイーブ実装) ◯ (特化モデル) 素性ダンプ ◯ △ (実装中) ※だいぶ個人的なバイアスかかってると思います
27.
26 • ランキングプラグインはまだまだ絶賛開発中 • ランキングの基本部分はほぼほぼ動くレベル •
これからやりたいこと • 特徴ベクトルをダンプしてHadoop/Sparkとかに流す • 機械学習のPDCAサイクルを回すため • 特徴の追加実装とか拡張性を高める • 外部jarとかで気楽に拡張できるようにしたい • Solr本体側への還元 (LTRプラグインのパッチとして) • (個人的には) 将来的にプラグイン自体も公開したい 今後の予定
28.
27 • 今日話さなかった特化モデルの方はパッチ出しました 追記: SOLR-10811 https://issues.apache.org/jira/browse/SOLR-10811
29.
28 • Solrのランキング周りを紹介 • 独自ランキングを作りたいならRankQueryを使おう •
LTRプラグインの登場で機械学習も身近に • Yahoo!JAPANのランキングプラグインを紹介 • DSLで自由なモデル記述 • 高速化も結構がんばってます • 成果をSolrコミュニティに還元する予定 まとめ
30.
29 最後に (お約束) https://about.yahoo.co.jp/hr/ We are
Hiring!
Download Now