Solr相似性算法

it2024-10-05  17

Solr相似性算法

介绍

Solr 4及之前的版本默认采用VSM(向量空间模型)进行相似度的计算(或打分)。之后的版本,则采用Okapi BM25(一种二元独立模型的扩展),属于概率模型。

检索模型通常分为:

二元模型向量空间模型(VSM) tfidf基于关键词的检索概率模型 Okapi BM25机器学习模型

similarity标签

<similarity>用于声明相似度计算模型,可以由用户定制。 示例如下: <similarity class="solr.DFRSimilarityFactory"> <str name="basicModel">P</str> <str name="afterEffect">L</str> <str name="normalization">H2</str> <float name="c">7</float> </similarity>

该标签能够支持特定field type的相似度计算。

VSM

VSM的score公式如下: score(q,d) = coord(q,d) · queryNorm(q) · ∑ ( tf(t in d) · idf(t)2 · t.getBoost() · norm(t,d) )

tf(t in d ), = frequency½idf(t) = 1 +log(文档总数/(包含t的文档数+1))coord(q,d) 评分因子,。越多的查询项在一个文档中,说明些文档的匹配程序越高,比如说,查询"A B C",那么同时包含A/B/C3个词的文档 是3分,只包含A/B的文档是2分,coord可以在query中关掉的queryNorm(q)查询的标准查询,使不同查询之间可以比较t.getBoost() 和 norm(t,d) 都是提供的可编程接口,可以调整 field/文档/query项的权重

Okapi BM25

https://events.static.linuxfound.org/sites/events/files/slides/bm25.pdf

Score(q, d) = ∑ idf(t) · ( tf(t in d) · (k + 1) ) / ( tf(t in d) + k · (1 – b + b · |d| / avgdl ) t in q Where: t = term; d = document; q = query; i = index tf(t in d) = numTermOccurrencesInDocument ½ idf(t) = 1 + log (numDocs / (docFreq + 1)) |d| = ∑ 1 t in d avgdl = ( ∑ |d| ) / ( ∑ 1 ) ) d in i d in i k = Free parameter. Usually ~1.2 to 2.0. Increases term frequency saturation point. b = Free parameter. Usually ~0.75. Increases impact of document normalization.

## Learning to Rank (LTR) solr也是支持LTR的。 这一块要求有Machine Learning的基础。没有的话,就边看文档,边查吧。像我这样的,只能先跳过了(-_-)。 具体可以看文档:https://lucene.apache.org/solr/guide/6_6/learning-to-rank.htmlhttps://www.microsoft.com/en-us/research/project/mslr/https://events.static.linuxfound.org/sites/events/files/slides/bm25.pdfhttp://opensourceconnections.com/blog/2014/12/08/title-search-when-relevancy-is-only-skin-deep/https://lucene.apache.org/solr/guide/6_6/relevance.html

转载于:https://www.cnblogs.com/lotushy/p/8406143.html

最新回复(0)