BM25算法的全称是 Okapi BM25,是一种二元独立模型的扩展,也可以用来做搜索的相关度排序。

Sphinx的默认相关性算法就是用的BM25。Lucene4.0之后也可以选择使用BM25算法(默认是TF-IDF)。如果你使用的solr,只需要修改schema.xml,加入下面这行就可以

  1. <similarity class="solr.BM25Similarity"/>

BM25也是基于词频的算分公式,分词对它的算分结果也很重要

IDF公式

  • f(qi,D):就是词频
  • |D|:[给定文档]D长度。
  • avgdl:索引中所有文档长度。

抽象点看,BM25的公式其实和TF-IDF公式大同小异,可以也可以当做 = ∑ idf(q) * fx(tf),

只不过,BM25的idf和tf都做了一些变形,特别是tf公式,还加入了两个经验参数k1和b,K1和b用来调整精准度,一般情况下我们取K1=2,b=0.75

至于BM25和TF-IDF 哪种相关性算法更更好,我认为依赖于搜索质量评估标准

Solr相似度算法二:BM25Similarity的更多相关文章

  1. Solr相似度算法二:Okapi BM25

    地址:https://en.wikipedia.org/wiki/Okapi_BM25   In information retrieval, Okapi BM25 (BM stands for Be ...

  2. elasticsearch算法之词项相似度算法(二)

    六.莱文斯坦编辑距离 前边的几种距离计算方法都是针对相同长度的词项,莱文斯坦编辑距离可以计算两个长度不同的单词之间的距离:莱文斯坦编辑距离是通过添加.删除.或者将一个字符替换为另外一个字符所需的最小编 ...

  3. Solr相似度算法四:IBSimilarity

    Information based:它与Diveragence from randomness模型非常相似.与DFR相似度模型类似,据说该模型也适用于自然语言类的文本.

  4. Solr相似度算法三:DRFSimilarity

    该Similarity 实现了  divergence from randomness (偏离随机性)框架,这是一种基于同名概率模型的相似度模型. 该 similarity有以下配置选项: basic ...

  5. Solr相似度算法三:DRFSimilarity框架介绍

    地址:http://terrier.org/docs/v3.5/dfr_description.html The Divergence from Randomness (DFR) paradigm i ...

  6. TensorFlow 入门之手写识别(MNIST) softmax算法 二

    TensorFlow 入门之手写识别(MNIST) softmax算法 二 MNIST Fly softmax回归 softmax回归算法 TensorFlow实现softmax softmax回归算 ...

  7. elasticsearch算法之词项相似度算法(一)

    一.词项相似度 elasticsearch支持拼写纠错,其建议词的获取就需要进行词项相似度的计算:今天我们来通过不同的距离算法来学习一下词项相似度算法: 二.数据准备 计算词项相似度,就需要首先将词项 ...

  8. 文本相似度算法——空间向量模型的余弦算法和TF-IDF

    1.信息检索中的重要发明TF-IDF TF-IDF是一种统计方法,TF-IDF的主要思想是,如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分 ...

  9. 文本相似度 余弦值相似度算法 VS L氏编辑距离(动态规划)

    设置n为字符串s的长度.("我是个小仙女") 设置m为字符串t的长度.("我不是个小仙女") 如果n等于0,返回m并退出.如果m等于0,返回n并退出.构造两个向 ...

随机推荐

  1. python的with用法

    转自http://blog.kissdata.com/2014/05/23/python-with.html With语句是什么? 有一些任务,可能事先需要设置,事后做清理工作.对于这种场景,Pyth ...

  2. DP系列——树形DP(Codeforces543D-Road Improvement)

    一.题目链接 http://codeforces.com/problemset/problem/543/D 二.题意 给一棵树,一开始所有路都是坏的.询问,以每个节点$i$为树根,要求从树根节点到其他 ...

  3. Autofac Property Injection and Method Injection

    While constructor parameter injection is the preferred method of passing values to a component being ...

  4. 【DataGuard】部署Data Guard相关参数详解 (转载)

    原文地址:[DataGuard]部署Data Guard相关参数详解 作者:secooler    有关物理Data Guard部署参考<[DataGuard]同一台主机实现物理Data Gua ...

  5. 新建网站与新建Asp.Net Web 应用程序的区别

    .net网站和应用程序区别,网站是动态执行的不用编译,他只依赖于自己的文档本身,甚至你用aspx里直接写jsp代码都可以,其实网站可以说只是在.net平台中打开的文档,相当于最初的记事本编码,他并不需 ...

  6. 30_java之DButils工具类

    01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类 * a: 概述 * DBUtils是java编程中的数据库操作实用工具,小巧简单实用. * DBUtils ...

  7. react之引用echarts

    react之引用echarts npm: npm install echarts --save 代码: import React, { Component } from 'react'; // 引入 ...

  8. 【C#】串口操作实用类

    做工业通 信有很长时间了,特别是串口(232/485),有VB/VC/C各种版本的串口操作代码,这些代码也经过了多年的现场考验,应该说是比较健壮的代码,但 是目前却没有C#相对成熟的串口操作代码,最近 ...

  9. leetcode38

    public class Solution { public string CountAndSay(int n) { //1 //11 //21 //1211 //111221 //312211 // ...

  10. du熊的机器人

    [du熊的机器人] Description du熊正在玩一个别人刚送给它的机器人.这个机器人只能在一个棋盘中行走,棋盘的左上角格子为(0, 0),右下角格子为(X, Y). du熊控制这个机器人从棋盘 ...