SlideShare ist ein Scribd-Unternehmen logo
1 von 10
LUCENE-6819
Good bye index-time boost
8/24/17
Koji Sekiguchi @kojisays
LUCENE-6819による変更
• Lucene/Solr 6.5.0 にて関連するコードが
@deprecated にマークされた。また、データ投入
時にboost!=1.0の値が指定されていると、警告が表
示される。
• Lucene/Solr 7.0.0 にて、インデックス時重み指定
ができなくなり、参照している部分も削除された。
背景
• 旧DefaultSimilarityの実装に強く依存していた。
• fieldNorm = lengthNorm * boost
• fieldNormが1バイトのfloatでインデックスに保存されており、低精度。boostはコン
トロールしようがないが、これが取り除ければ0 <= fieldNorm <= 1の範囲で抑える
ことができ、精度を高く保つ努力が報われる。
• かつ、ほとんどの人はboostを指定しない。
• (すでにBM25Similarityがデフォルトとなり、オリジナルのBM25にはboostという考
えがなかったが、LuceneのBM25には文書長を考慮する部分にboostが掛けられている
という独自実装が入っており、気持ち悪かった・・・というのもあると思われる。)
• docValuesにboost値を入れればより高精度に重みを指定できる。
LUCENE-6819
• この修正だけでは、相変わらず低精度のまま(0〜
255の範囲が有効に使えていない(グレー部分))
〜〜〜〜
1byte (fieldNorm)
Float.MAX_VALUE0 1(boostを使わない場合の最大値)
今後のindex-time boost
• 今後はdocValuesにブースト値を入れてスコアに加味す
る。
• Luceneの場合:FunctionScoreQuery
• Solrの場合:従来のFunctionQuery
• 使い方(Solrの場合)
• techproductsではweightがdocValuesになっているので
、q=_val_:”product(weight)”などとする。
関連チケット
LUCENE-7730
(7.0)
lengthNorm のよりよいエンコーディングのための改善。長さ(単語
数)40まではそのままエンコーディングされる(その後徐々にずれる
)。BM25Similarityがデフォルトなので、1/sqrt(numTerms)計算後の
値ではなく、numTermsそのものを入れることにした。
LUCENE-7623
(6.5)
FunctionScoreQuery と FunctionMatchQuery の追加。
LUCENE-7377
(提案中)
ClassicSimilarityの削除。
omitNormsとの関連
• omitNormsは相変わらず有効。LUCENE-6819で行ったのは、
fieldNorm = lengthNorm * boost から boost を切り離したこと。相変わ
らず fieldNorm = lengthNorm はLUCENE-6819後も低精度でインデッ
クスに保存されている。
• boostはどんな値も設定されるので、fieldNormがどんな値になるの
か制御できない。
• LUCENE-7730で短い文章においてfieldNormに差がつくように改善し
た。
• LUCENE-6819によりboostを切り離したことで、LUCENE-7730の
苦労が報われる。
fieldNorms値の違い
• Lucene 7.0
• 〜 Lucene 6.x
87
fieldNorm
(1byte)
1000 984
SmallFloat.intToByte4(1000) → 87 SmallFloat.byte4ToInt(87) → 984
104
fieldNorm
(1byte)
1000 1024
SmallFloat.floatToByte315(boost/sqrt(1000)) → 104
boost==1のとき、1/sqrt(1000)=0.03162277660168
SmallFloat.byte315ToFloat(104) → 0.031250
SmallFloat
a b
numTerms
SmallFloat.intToByte4(numTer
ms)
SmallFloat.byte4ToInt(a)
SmallFloat.floatToByte315(boost/
sqrt(numTerms))
SmallFloat.byte315ToFloat(b)
0 0 0
1 1 1 124 1.000000
2 2 2 121 0.625000
3 3 3 120 0.500000
4 4 4 120 0.500000
: : : : :
40 40 40 113 0.156250
41 40 40 112 0.125000
42 41 42 112 0.125000
43 41 42 112 0.125000
: : : : :
1000 87 984 104 0.031250
7.0(LUCENE-7730) 〜 6.x
LUCENE-7730
• fieldNormを有効に使う修正
〜〜〜〜
1byte (fieldNorm)
Integer.MAX_VALUE0
40

Weitere ähnliche Inhalte

Mehr von Koji Sekiguchi

An Introduction to NLP4L
An Introduction to NLP4LAn Introduction to NLP4L
An Introduction to NLP4LKoji Sekiguchi
 
コーパス学習による Apache Solr の徹底活用
コーパス学習による Apache Solr の徹底活用コーパス学習による Apache Solr の徹底活用
コーパス学習による Apache Solr の徹底活用Koji Sekiguchi
 
情報検索の基礎からデータの徹底活用まで
情報検索の基礎からデータの徹底活用まで情報検索の基礎からデータの徹底活用まで
情報検索の基礎からデータの徹底活用までKoji Sekiguchi
 
LUCENE-5252 NGramSynonymTokenizer
LUCENE-5252 NGramSynonymTokenizerLUCENE-5252 NGramSynonymTokenizer
LUCENE-5252 NGramSynonymTokenizerKoji Sekiguchi
 
情報検索におけるランキング計算の紹介
情報検索におけるランキング計算の紹介情報検索におけるランキング計算の紹介
情報検索におけるランキング計算の紹介Koji Sekiguchi
 
系列パターンマイニングを用いた単語パターン学習とWikipediaからの組織名抽出
系列パターンマイニングを用いた単語パターン学習とWikipediaからの組織名抽出系列パターンマイニングを用いた単語パターン学習とWikipediaからの組織名抽出
系列パターンマイニングを用いた単語パターン学習とWikipediaからの組織名抽出Koji Sekiguchi
 
Luceneインデックスの共起単語分析とSolrによる共起単語サジェスチョン
Luceneインデックスの共起単語分析とSolrによる共起単語サジェスチョンLuceneインデックスの共起単語分析とSolrによる共起単語サジェスチョン
Luceneインデックスの共起単語分析とSolrによる共起単語サジェスチョンKoji Sekiguchi
 
Lucene terms extraction
Lucene terms extractionLucene terms extraction
Lucene terms extractionKoji Sekiguchi
 
Visualize terms network in Lucene index
Visualize terms network in Lucene indexVisualize terms network in Lucene index
Visualize terms network in Lucene indexKoji Sekiguchi
 
WikipediaからのSolr用類義語辞書の自動生成
WikipediaからのSolr用類義語辞書の自動生成WikipediaからのSolr用類義語辞書の自動生成
WikipediaからのSolr用類義語辞書の自動生成Koji Sekiguchi
 
OpenNLP - MEM and Perceptron
OpenNLP - MEM and PerceptronOpenNLP - MEM and Perceptron
OpenNLP - MEM and PerceptronKoji Sekiguchi
 
自然言語処理における機械学習による曖昧性解消入門
自然言語処理における機械学習による曖昧性解消入門自然言語処理における機械学習による曖昧性解消入門
自然言語処理における機械学習による曖昧性解消入門Koji Sekiguchi
 
Similarity functions in Lucene 4.0
Similarity functions in Lucene 4.0Similarity functions in Lucene 4.0
Similarity functions in Lucene 4.0Koji Sekiguchi
 
Pre rondhuit-naming-story
Pre rondhuit-naming-storyPre rondhuit-naming-story
Pre rondhuit-naming-storyKoji Sekiguchi
 

Mehr von Koji Sekiguchi (20)

An Introduction to NLP4L
An Introduction to NLP4LAn Introduction to NLP4L
An Introduction to NLP4L
 
Nlp4 l intro-20150513
Nlp4 l intro-20150513Nlp4 l intro-20150513
Nlp4 l intro-20150513
 
コーパス学習による Apache Solr の徹底活用
コーパス学習による Apache Solr の徹底活用コーパス学習による Apache Solr の徹底活用
コーパス学習による Apache Solr の徹底活用
 
情報検索の基礎からデータの徹底活用まで
情報検索の基礎からデータの徹底活用まで情報検索の基礎からデータの徹底活用まで
情報検索の基礎からデータの徹底活用まで
 
LUCENE-5252 NGramSynonymTokenizer
LUCENE-5252 NGramSynonymTokenizerLUCENE-5252 NGramSynonymTokenizer
LUCENE-5252 NGramSynonymTokenizer
 
情報検索におけるランキング計算の紹介
情報検索におけるランキング計算の紹介情報検索におけるランキング計算の紹介
情報検索におけるランキング計算の紹介
 
系列パターンマイニングを用いた単語パターン学習とWikipediaからの組織名抽出
系列パターンマイニングを用いた単語パターン学習とWikipediaからの組織名抽出系列パターンマイニングを用いた単語パターン学習とWikipediaからの組織名抽出
系列パターンマイニングを用いた単語パターン学習とWikipediaからの組織名抽出
 
Luceneインデックスの共起単語分析とSolrによる共起単語サジェスチョン
Luceneインデックスの共起単語分析とSolrによる共起単語サジェスチョンLuceneインデックスの共起単語分析とSolrによる共起単語サジェスチョン
Luceneインデックスの共起単語分析とSolrによる共起単語サジェスチョン
 
Html noise reduction
Html noise reductionHtml noise reduction
Html noise reduction
 
Lucene terms extraction
Lucene terms extractionLucene terms extraction
Lucene terms extraction
 
Visualize terms network in Lucene index
Visualize terms network in Lucene indexVisualize terms network in Lucene index
Visualize terms network in Lucene index
 
WikipediaからのSolr用類義語辞書の自動生成
WikipediaからのSolr用類義語辞書の自動生成WikipediaからのSolr用類義語辞書の自動生成
WikipediaからのSolr用類義語辞書の自動生成
 
HMM viterbi
HMM viterbiHMM viterbi
HMM viterbi
 
NLP x Lucene/Solr
NLP x Lucene/SolrNLP x Lucene/Solr
NLP x Lucene/Solr
 
OpenNLP - MEM and Perceptron
OpenNLP - MEM and PerceptronOpenNLP - MEM and Perceptron
OpenNLP - MEM and Perceptron
 
自然言語処理における機械学習による曖昧性解消入門
自然言語処理における機械学習による曖昧性解消入門自然言語処理における機械学習による曖昧性解消入門
自然言語処理における機械学習による曖昧性解消入門
 
Similarity functions in Lucene 4.0
Similarity functions in Lucene 4.0Similarity functions in Lucene 4.0
Similarity functions in Lucene 4.0
 
Pre rondhuit-naming-story
Pre rondhuit-naming-storyPre rondhuit-naming-story
Pre rondhuit-naming-story
 
Lu solr32 34-20110912
Lu solr32 34-20110912Lu solr32 34-20110912
Lu solr32 34-20110912
 
Lucene/Solr 3.1
Lucene/Solr 3.1Lucene/Solr 3.1
Lucene/Solr 3.1
 

Lucene 6819-good-bye-index-time-boost