Solr相似性算法

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.html
https://www.microsoft.com/en-us/research/project/mslr/
https://events.static.linuxfound.org/sites/events/files/slides/bm25.pdf
http://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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值