SlideShare a Scribd company logo
1 of 21
Solr の LTR プラグインの使い方 - プロローグ -
第 3 回 LTR 勉強会
西潟 一生
検索システムで困る時
• ランキングのチューニングは至難の業
solr
Solr について教えて !! ...
fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo
fugo fugo …
Apache Solr ...
hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge
hoge hoge hoge …
ランクを上げたい
検索システムで困る時 solr
[チューニング]
タイトルでヒットした時スコア100倍 + 本文でヒット
した時スコア10倍
Solr について教えて !! ...
fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo
fugo fugo …
Apache Solr ...
hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge
hoge hoge hoge …
検索システムで困る時 solr
Solr について教えて !! ...
fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo
fugo fugo …
Apache Solr ...
hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge
hoge hoge hoge …
Spring Data Solr Tutorial ...
hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge
hoge hoge hoge …
5分で解説 Apache Solr - SolrTutorial.com
fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo
fugo fugo …
PHP: Solr - Manual ...
fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo
fugo fugo …
検索システムで困る時 solr
Solr について教えて !! ...
fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo
fugo fugo …
Apache Solr ...
hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge
hoge hoge hoge …
Spring Data Solr Tutorial ...
hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge
hoge hoge hoge …
5分で解説 Apache Solr - SolrTutorial.com
fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo
fugo fugo …
PHP: Solr - Manual ...
fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo
fugo fugo …
[チューニング]
タイトルでヒットした時スコア150倍 + 本文でヒットした
時スコア3.14倍 + クリック数を考慮
検索システムで困る時 solr
Solr について教えて !! ...
fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo
fugo fugo …
Apache Solr ...
hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge
hoge hoge hoge …
Spring Data Solr Tutorial ...
hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge
hoge hoge hoge …
5分で解説 Apache Solr - SolrTutorial.com
fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo
fugo fugo …
PHP: Solr - Manual ...
fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo
fugo fugo …
チューニング
タイトルでヒットした時スコア99.9倍 + 本文でヒットした
時スコア3.1114倍 + クリック数を考慮 + 更新日付を考慮
LTR とは?
• 使えば使うほど検索結果が良くなっていく
検索システムに必要な技術
• 検索結果に対するユーザーのアクション(
クリック,滞在時間など)を得点化し,こ
れを学習したモデルを使って検索結果を再
構築できる
検索結果
ユーザーアクション
を
得点化したデータ
モデル
再構築された
検索結果
検索
エンジン
Solr の LTR を使ってみる
• Solr6.4 から LTR プラグインが追加(SOLR-8542)
• LTR のモデルは自前で用意することが前提
• 素性抽出 → モデル構築 → 検索結果をリランクする流れを概説
Solr 起動
• 以下のコマンドで Solr を起動
• LTR プラグインはデフォルトで有効になっていないので準備が面倒。下
記コマンドで簡単に環境構築可
$ cd {SOLRインストールディレクトリ}
$ bin/solr start -e techproducts -Dsolr.ltr.enabled=true
素性抽出の条件を作成
• 3種類の素性を作成した例(myFeatures.json)
"name" "documentRecency"
"class" "org.apache.solr.ltr.feature.SolrFeature"
"params"
"q" "{!func}recip( ms(NOW,last_modified), 3.16e-11, 1, 1)"
"name" "isBook"
"class" "org.apache.solr.ltr.feature.SolrFeature"
"params"
"fq" "{!terms f=cat}book"
"name" "originalScore"
"class" "org.apache.solr.ltr.feature.OriginalScoreFeature"
"params"
素性抽出の条件を Solr へアップロード
• 下記コマンドで Solr へアップロード
'http://localhost:8983/solr/techproducts/schema/feature-store' "@/path/myFeatures.json"
'Content-type:application/json'
• 素性は検索時に初めて抽出される。ここでは Solr 内部で持っている情報の
うち,どれを素性として利用するか定義しているだけ
素性の確認
• 下記リクエストを Solr に投げることで,どのような素性が抽出されるか確認でき
る
http://localhost:8983/solr/techproducts/query?q=test&fl=id,score,[features]
• ここで確認できる各「数値」が次に説明するモデルで使用され,リランク後のス
コアに影響する。(今はリランクも何もしていない。値の確認だけ)
※ fl=[features]が素性表示に必要
"response" "numFound" 2 "start" 0 "maxScore" 1.959392 "docs"
"id" "GB18030TEST"
"score" 1.959392
"[features]" "documentRecency=0.020893794,isBook=0.0,originalScore=1.959392"
"id" "UTF8TEST"
"score" 1.5513437
"[features]" "documentRecency=0.020893794,isBook=0.0,originalScore=1.5513437"
モデル定義
• 学習で得られたモデルを定義する(myModel.json)
"class" "org.apache.solr.ltr.model.LinearModel"
"name" "myModel"
"features"
"name" "documentRecency"
"name" "isBook"
"name" "originalScore"
"params"
"weights"
"documentRecency" 1.0
"isBook" 0.1
"originalScore" 0.5
• 機械学習で求まった3種類の素性の重みをここで定義する
• Solr ではこの学習部分が提供されていない
モデルを Solr へアップロード
• 下記コマンドで Solr へアップロード
'http://localhost:8983/solr/techproducts/schema/model-store' "@/path/myModel.json" 'Content-
type:application/json'
• リランク時の重みがこれで決定。リランク時に myModel.json で定義した
name を切り替えることで,モデル(重み)を切り替えられる
Solr でリランクしてみる
• 下記リクエストでリランク前とリランク後を確認
• test で検索した結果100件に対して myModel を適用し,スコアを再計算後
結果表示
肝心のモデル構築ができないのは困る
LIBLINEAR を使って構築したモデルを使ってみる(1)
• Solr のソースコードをダウンロード
• 解凍後 config.json を編集
http://www.apache.org/dyn/closer.lua/lucene/solr/7.5.0/solr-7.5.0-src.tgz
• LIBLINEAR をダウンロード,インストール
← LIBLINEAR をインストールしたパスに変更。train を忘れず
に
LIBLINEAR を使って構築したモデルを使ってみる(2)
• 以下のコマンドでモデル構築から Solr へのアップロードまで行える
• 以下のリクエストでリランク結果を確認する
http://localhost:8983/solr/techproducts/query?indent=on&q=test&wt=json&rq={!ltr%20model=exampleModel%20reRa
nkDocs=25%20efi.user_query=%27test%27}&fl=price,score,name
※ Python2 系で実行して下さい!!
LIBLINEAR を使って構築したモデルに必要なもの
• example には必要なファイルは全て含まれている。チューニングしたい時
は以下のファイルを修正
おさらい
• デフォルトの Solr で LTR 使いたい時の流れ
1. Solr で LTR プラグインを有効化する
$ bin/solr start -e techproducts -Dsolr.ltr.enabled=true だと構築が楽
2. Solr のどのフィールドをランキングに影響させたいか決める
素性抽出用ファイルを作成 → myFeatures.json の作成
3. 検索ログなどから,クエリとその結果に対するスコアを記述したファイルを作成する
user_quries.txt の作成
4. 2. と 3. で作ったファイルを LIBLINEAR に渡し, 2. で決めたフィールドの影響度合いが決まる
example に含まれる Python スクリプトを使用し,モデルファイル(exampleModel.json)が得られる
5. 影響度合いが決まったファイルを Solr でのリランク時に使用する
exampleModel.json を元にランキングが再構築される
Solr の FunctionQuery を使えば良いのでは?同じこと?
• ↓は Solr のブーストや FunctionQuery を使ってやってることと同じ?
"params"
"weights"
"documentRecency" 1.0
"isBook" 0.1
"originalScore" 0.5
• FunctionQuery で足りるならそっちの方が楽で良い
• LTR の大きなメリットは2つ
• トップ N 件を対象にするので計算量が抑えられる
• リランクの際は Solr のスコアは一切考慮されず,選択した素性だけでスコアが計算される
• FunctionQuery だと Solr のスコアと合算されるので,Solr 自体のスコアの影響は受けてしまう。

More Related Content

What's hot

研究室における研究・実装ノウハウの共有
研究室における研究・実装ノウハウの共有研究室における研究・実装ノウハウの共有
研究室における研究・実装ノウハウの共有Naoaki Okazaki
 
Transformer メタサーベイ
Transformer メタサーベイTransformer メタサーベイ
Transformer メタサーベイcvpaper. challenge
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようShinsuke Sugaya
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 
トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話Tier_IV
 
알아두면 쓸데있는 신비한 딥러닝 이야기
알아두면 쓸데있는 신비한 딥러닝 이야기알아두면 쓸데있는 신비한 딥러닝 이야기
알아두면 쓸데있는 신비한 딥러닝 이야기Kwangsik Lee
 
バンディットアルゴリズム入門と実践
バンディットアルゴリズム入門と実践バンディットアルゴリズム入門と実践
バンディットアルゴリズム入門と実践智之 村上
 
論文紹介: "MolGAN: An implicit generative model for small molecular graphs"
論文紹介: "MolGAN: An implicit generative model for small molecular graphs"論文紹介: "MolGAN: An implicit generative model for small molecular graphs"
論文紹介: "MolGAN: An implicit generative model for small molecular graphs"Ryohei Suzuki
 
車両運行管理システムのためのデータ整備と機械学習の活用
車両運行管理システムのためのデータ整備と機械学習の活用車両運行管理システムのためのデータ整備と機械学習の活用
車両運行管理システムのためのデータ整備と機械学習の活用Eiji Sekiya
 
はじめての検索エンジン&Solr 第13回Solr勉強会
はじめての検索エンジン&Solr 第13回Solr勉強会はじめての検索エンジン&Solr 第13回Solr勉強会
はじめての検索エンジン&Solr 第13回Solr勉強会Noritsugu Suzuki
 
潜在ディリクレ配分法
潜在ディリクレ配分法潜在ディリクレ配分法
潜在ディリクレ配分法y-uti
 
ブラックボックス最適化とその応用
ブラックボックス最適化とその応用ブラックボックス最適化とその応用
ブラックボックス最適化とその応用gree_tech
 
AutoEncoderで特徴抽出
AutoEncoderで特徴抽出AutoEncoderで特徴抽出
AutoEncoderで特徴抽出Kai Sasaki
 
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016Tokoroten Nakayama
 
広告配信のための高速疎ベクトル検索エンジンの開発@WebDBフォーラム2015 #webdbf2015
広告配信のための高速疎ベクトル検索エンジンの開発@WebDBフォーラム2015 #webdbf2015広告配信のための高速疎ベクトル検索エンジンの開発@WebDBフォーラム2015 #webdbf2015
広告配信のための高速疎ベクトル検索エンジンの開発@WebDBフォーラム2015 #webdbf2015Yahoo!デベロッパーネットワーク
 
「いい検索」を考える
「いい検索」を考える「いい検索」を考える
「いい検索」を考えるShuryo Uchida
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual TalksYuya Unno
 
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15Shuyo Nakatani
 
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...joisino
 

What's hot (20)

研究室における研究・実装ノウハウの共有
研究室における研究・実装ノウハウの共有研究室における研究・実装ノウハウの共有
研究室における研究・実装ノウハウの共有
 
Transformer メタサーベイ
Transformer メタサーベイTransformer メタサーベイ
Transformer メタサーベイ
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
AlphaGoのしくみ
AlphaGoのしくみAlphaGoのしくみ
AlphaGoのしくみ
 
トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話
 
알아두면 쓸데있는 신비한 딥러닝 이야기
알아두면 쓸데있는 신비한 딥러닝 이야기알아두면 쓸데있는 신비한 딥러닝 이야기
알아두면 쓸데있는 신비한 딥러닝 이야기
 
バンディットアルゴリズム入門と実践
バンディットアルゴリズム入門と実践バンディットアルゴリズム入門と実践
バンディットアルゴリズム入門と実践
 
論文紹介: "MolGAN: An implicit generative model for small molecular graphs"
論文紹介: "MolGAN: An implicit generative model for small molecular graphs"論文紹介: "MolGAN: An implicit generative model for small molecular graphs"
論文紹介: "MolGAN: An implicit generative model for small molecular graphs"
 
車両運行管理システムのためのデータ整備と機械学習の活用
車両運行管理システムのためのデータ整備と機械学習の活用車両運行管理システムのためのデータ整備と機械学習の活用
車両運行管理システムのためのデータ整備と機械学習の活用
 
はじめての検索エンジン&Solr 第13回Solr勉強会
はじめての検索エンジン&Solr 第13回Solr勉強会はじめての検索エンジン&Solr 第13回Solr勉強会
はじめての検索エンジン&Solr 第13回Solr勉強会
 
潜在ディリクレ配分法
潜在ディリクレ配分法潜在ディリクレ配分法
潜在ディリクレ配分法
 
ブラックボックス最適化とその応用
ブラックボックス最適化とその応用ブラックボックス最適化とその応用
ブラックボックス最適化とその応用
 
AutoEncoderで特徴抽出
AutoEncoderで特徴抽出AutoEncoderで特徴抽出
AutoEncoderで特徴抽出
 
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
 
広告配信のための高速疎ベクトル検索エンジンの開発@WebDBフォーラム2015 #webdbf2015
広告配信のための高速疎ベクトル検索エンジンの開発@WebDBフォーラム2015 #webdbf2015広告配信のための高速疎ベクトル検索エンジンの開発@WebDBフォーラム2015 #webdbf2015
広告配信のための高速疎ベクトル検索エンジンの開発@WebDBフォーラム2015 #webdbf2015
 
「いい検索」を考える
「いい検索」を考える「いい検索」を考える
「いい検索」を考える
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks
 
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
 
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
 

Recently uploaded

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成Hiroshi Tomioka
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 

Recently uploaded (9)

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 

Solr の LTR プラグインの使い方 - 第3回 LTR 勉強会資料 -

  • 1. Solr の LTR プラグインの使い方 - プロローグ - 第 3 回 LTR 勉強会 西潟 一生
  • 2. 検索システムで困る時 • ランキングのチューニングは至難の業 solr Solr について教えて !! ... fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo … Apache Solr ... hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge … ランクを上げたい
  • 3. 検索システムで困る時 solr [チューニング] タイトルでヒットした時スコア100倍 + 本文でヒット した時スコア10倍 Solr について教えて !! ... fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo … Apache Solr ... hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge …
  • 4. 検索システムで困る時 solr Solr について教えて !! ... fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo … Apache Solr ... hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge … Spring Data Solr Tutorial ... hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge … 5分で解説 Apache Solr - SolrTutorial.com fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo … PHP: Solr - Manual ... fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo …
  • 5. 検索システムで困る時 solr Solr について教えて !! ... fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo … Apache Solr ... hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge … Spring Data Solr Tutorial ... hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge … 5分で解説 Apache Solr - SolrTutorial.com fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo … PHP: Solr - Manual ... fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo … [チューニング] タイトルでヒットした時スコア150倍 + 本文でヒットした 時スコア3.14倍 + クリック数を考慮
  • 6. 検索システムで困る時 solr Solr について教えて !! ... fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo … Apache Solr ... hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge … Spring Data Solr Tutorial ... hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge … 5分で解説 Apache Solr - SolrTutorial.com fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo … PHP: Solr - Manual ... fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo fugo … チューニング タイトルでヒットした時スコア99.9倍 + 本文でヒットした 時スコア3.1114倍 + クリック数を考慮 + 更新日付を考慮
  • 7. LTR とは? • 使えば使うほど検索結果が良くなっていく 検索システムに必要な技術 • 検索結果に対するユーザーのアクション( クリック,滞在時間など)を得点化し,こ れを学習したモデルを使って検索結果を再 構築できる 検索結果 ユーザーアクション を 得点化したデータ モデル 再構築された 検索結果 検索 エンジン
  • 8. Solr の LTR を使ってみる • Solr6.4 から LTR プラグインが追加(SOLR-8542) • LTR のモデルは自前で用意することが前提 • 素性抽出 → モデル構築 → 検索結果をリランクする流れを概説
  • 9. Solr 起動 • 以下のコマンドで Solr を起動 • LTR プラグインはデフォルトで有効になっていないので準備が面倒。下 記コマンドで簡単に環境構築可 $ cd {SOLRインストールディレクトリ} $ bin/solr start -e techproducts -Dsolr.ltr.enabled=true
  • 10. 素性抽出の条件を作成 • 3種類の素性を作成した例(myFeatures.json) "name" "documentRecency" "class" "org.apache.solr.ltr.feature.SolrFeature" "params" "q" "{!func}recip( ms(NOW,last_modified), 3.16e-11, 1, 1)" "name" "isBook" "class" "org.apache.solr.ltr.feature.SolrFeature" "params" "fq" "{!terms f=cat}book" "name" "originalScore" "class" "org.apache.solr.ltr.feature.OriginalScoreFeature" "params"
  • 11. 素性抽出の条件を Solr へアップロード • 下記コマンドで Solr へアップロード 'http://localhost:8983/solr/techproducts/schema/feature-store' "@/path/myFeatures.json" 'Content-type:application/json' • 素性は検索時に初めて抽出される。ここでは Solr 内部で持っている情報の うち,どれを素性として利用するか定義しているだけ
  • 12. 素性の確認 • 下記リクエストを Solr に投げることで,どのような素性が抽出されるか確認でき る http://localhost:8983/solr/techproducts/query?q=test&fl=id,score,[features] • ここで確認できる各「数値」が次に説明するモデルで使用され,リランク後のス コアに影響する。(今はリランクも何もしていない。値の確認だけ) ※ fl=[features]が素性表示に必要 "response" "numFound" 2 "start" 0 "maxScore" 1.959392 "docs" "id" "GB18030TEST" "score" 1.959392 "[features]" "documentRecency=0.020893794,isBook=0.0,originalScore=1.959392" "id" "UTF8TEST" "score" 1.5513437 "[features]" "documentRecency=0.020893794,isBook=0.0,originalScore=1.5513437"
  • 13. モデル定義 • 学習で得られたモデルを定義する(myModel.json) "class" "org.apache.solr.ltr.model.LinearModel" "name" "myModel" "features" "name" "documentRecency" "name" "isBook" "name" "originalScore" "params" "weights" "documentRecency" 1.0 "isBook" 0.1 "originalScore" 0.5 • 機械学習で求まった3種類の素性の重みをここで定義する • Solr ではこの学習部分が提供されていない
  • 14. モデルを Solr へアップロード • 下記コマンドで Solr へアップロード 'http://localhost:8983/solr/techproducts/schema/model-store' "@/path/myModel.json" 'Content- type:application/json' • リランク時の重みがこれで決定。リランク時に myModel.json で定義した name を切り替えることで,モデル(重み)を切り替えられる
  • 15. Solr でリランクしてみる • 下記リクエストでリランク前とリランク後を確認 • test で検索した結果100件に対して myModel を適用し,スコアを再計算後 結果表示
  • 17. LIBLINEAR を使って構築したモデルを使ってみる(1) • Solr のソースコードをダウンロード • 解凍後 config.json を編集 http://www.apache.org/dyn/closer.lua/lucene/solr/7.5.0/solr-7.5.0-src.tgz • LIBLINEAR をダウンロード,インストール ← LIBLINEAR をインストールしたパスに変更。train を忘れず に
  • 18. LIBLINEAR を使って構築したモデルを使ってみる(2) • 以下のコマンドでモデル構築から Solr へのアップロードまで行える • 以下のリクエストでリランク結果を確認する http://localhost:8983/solr/techproducts/query?indent=on&q=test&wt=json&rq={!ltr%20model=exampleModel%20reRa nkDocs=25%20efi.user_query=%27test%27}&fl=price,score,name ※ Python2 系で実行して下さい!!
  • 19. LIBLINEAR を使って構築したモデルに必要なもの • example には必要なファイルは全て含まれている。チューニングしたい時 は以下のファイルを修正
  • 20. おさらい • デフォルトの Solr で LTR 使いたい時の流れ 1. Solr で LTR プラグインを有効化する $ bin/solr start -e techproducts -Dsolr.ltr.enabled=true だと構築が楽 2. Solr のどのフィールドをランキングに影響させたいか決める 素性抽出用ファイルを作成 → myFeatures.json の作成 3. 検索ログなどから,クエリとその結果に対するスコアを記述したファイルを作成する user_quries.txt の作成 4. 2. と 3. で作ったファイルを LIBLINEAR に渡し, 2. で決めたフィールドの影響度合いが決まる example に含まれる Python スクリプトを使用し,モデルファイル(exampleModel.json)が得られる 5. 影響度合いが決まったファイルを Solr でのリランク時に使用する exampleModel.json を元にランキングが再構築される
  • 21. Solr の FunctionQuery を使えば良いのでは?同じこと? • ↓は Solr のブーストや FunctionQuery を使ってやってることと同じ? "params" "weights" "documentRecency" 1.0 "isBook" 0.1 "originalScore" 0.5 • FunctionQuery で足りるならそっちの方が楽で良い • LTR の大きなメリットは2つ • トップ N 件を対象にするので計算量が抑えられる • リランクの際は Solr のスコアは一切考慮されず,選択した素性だけでスコアが計算される • FunctionQuery だと Solr のスコアと合算されるので,Solr 自体のスコアの影響は受けてしまう。