zoukankan      html  css  js  c++  java
  • 搜索之BM25和BM25F模型

    一、引子 BIM(二元如果模型)        

    近期在优化文本相关性,使用到BM25和BM25F模型,可是发现网络上关于BM25和BM25F模型的介绍比較少。在此总结一下,方便记忆,还有一方面搜了一下相关的资料,发现比較少,写下来欢迎大家查阅。

    介绍BM25模型首先要介绍二元独立模型BIM。

    如果一:二元如果

        所谓二元如果,类似于布尔模型的表示方法,一篇文章在由特征表示的时候,以特征“出现”和“不出现”两种情况来表示,也能够理解为相关不相关。

    如果二:词汇独立性如果

        所谓独立性如果,是指文档里出现的单词之间没有不论什么关联,任一个单词在文章中的分布率不依赖于还有一个单词是否出现,这个如果明显与事实不符,可是为了简化计算,非常多地方须要做出独立性如果,这样的如果是普遍的。

        在以上两个如果的前提下,二元独立模型即能够对两个因子P(D|R)和P(D|NR)进行估算(条件概率)。举个简单的样例。文档D中五个单词的出现情况例如以下:{1,0,1,0,1} 0表示不出现,1表示出现。

    用Pi表示第i个单词在相关文档中出现的概率,在已知相关文档集合的情况下,观察到文档D的概率为:

    对于因子P(D|NR)。我们如果用Si表示第i个单词在在不相关文档集合中出现的概率。于是在已知不相关文档集合的情况下。观察到文档D的概率为:


    于是我们能够得到以下的估算


    能够将各个因子规划为两个部分。一部分是在文档D中出现的各个单词的概率乘积,还有一部分是没在文档D中出现的各个单词的概率乘积,于是公式能够理解为以下的形式


    对公式进行一下等价的变换,可得:


    第一部分代表在文章中出现过的单词所计算得到的单词概率乘积,第二部分表示全部特征词计算得到单词概率乘积,它与详细的文档无关,全部文档该项的得分一致,所以在排序中不起作用。能够抹除掉。得到终于的估算公式:


    为了方便计算,对上述公式两边取log,得到:


    那么怎样估算概率Si和Pi呢,假设给定用户查询,我们能确定哪些文档集合构成了相关文档集合,哪些文档构成了不相关文档集合。那么就能够用例如以下的数据对概率进行估算:


    依据上表能够计算出Pi和Si的概率估值,为了避免log(0)。对估值公式进行平滑操作。分子+0.5。分母+1.0



    代入估值公式得到:


            这个公式代表的含义就是,对于同一时候出如今查询Q和文档D中的单词,累加每一个单词的估值结果就是文档D和查询Q的相关性度量,在预先不知道哪些文档相关哪些文档不相关的情况下,能够使用固定值取代,这样的情况下该公式等价于向量空间模型(VSM)中的IDF因子,实际证明该模型的实际使用结果不好,可是它是BM25模型的基础。

    二、BM25模型

    BIM(二元如果模型)对于单词特征,仅仅考虑单词是否在doc中出现过。并没有考虑单词本身的相关特征,BM25在BIM的基础上引入单词在查询中的权值,单词在doc中的权值。以及一些经验參数,所以BM25在实际应用中效果要远远好于BIM模型。


            BM25由3部分组成。第一部分是BIM模型得分,上面也提到了,在一定的情况下该部分等价于IDF,第二部分是查询词在文档D中的权值。f是查询词在文档中的频率。K1和K是经验參数,第三部分是查询词自身的特征。qf是查询词在用户查询中的频率,但一般用户查询都比較短,qf通常是1,K2是经验參数,从上面的公式能够看出BM25是查询中单词的分值叠加得到,每一个单词是一个个体,而整个文档被作为一个总体。

        在第二部分中K因子代表了文档长度的考虑,dl是文档的长度,avdl是文档的平均长度,k1和b是调整參数,b为0时即不考虑文档长度的影响,经验表明b=0.75左右效果比較好。可是也要依据对应的场景进行调整。b越大对文档长度的惩处越大,k1因子用于调整词频,极限情况下k1=0,则第二部分退化成1,及词频特征失效,能够证明k1越大词频的作用越大。

           在我们不知道哪些文档相关,哪些文档不相关的情况下,将相关文档数R及包括查询词相关文档数r设为0,那么第一部分的BIM公式退化成:


    就是IDF因子的定义,N是总文档数。n是查询词的tf信息。0.5是平滑因子。以上就是BM25的定义




    三、BM25F

       BM25F是典型BM25的改进算法。BM25在计算相关性时把文档当做总体来考虑,但随着搜索技术的发展。文档慢慢的被结构化数据所取代。没个文档都会被切分成多个独立的域,尤其是垂直化的搜索。比如网页有可能被切分成标题,内容,主题词等域,这些域对文章主题的贡献不能同等对待,所以权重就要有所偏重。BM25没有考虑这点。所以BM25F在此基础上做了一些改进,就是不再单单的将单词作为个体考虑,并且将文档也依照field划分为个体二考虑,所以BM25F是每一个单词在各个field中分值的加权求和。



    boost是对应域的权值。Lc是field的长度,AVLc是field的平均长度。Bc是调节因子。

    最后BM25F的终于值就是各个field分值的加权求和。


    引用:张俊林《这就是搜索引擎》

    Integrating the Probabilistic Model BM25/BM25F into Lucene.


  • 相关阅读:
    路由的使用
    组件之间的参数传递
    vue组件的全局注册和局部注册
    git版本回退(回退至上个版本,回退至指定版本) git放弃本地所有未提交的修改
    vue工程中的文件
    新建vue项目(webpack-simple)
    NPM install -save 和 -save-dev 傻傻分不清
    动态增加表单vue element ui
    JAVA声明一个对象数组
    调用测试用
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6730403.html
Copyright © 2011-2022 走看看