Lucene TFIDF打分公式
还没读TFIDFSimilarity的代码,读了一下lucene的文档,没有特复杂,感觉还是非常严谨的。
对于查询q和文档d,如果查询为纯token查询,套用向量空间模型(VSM),相似度度量使用余弦,另外再加一个coord(q,d)即d中满足q中must和should查询条件个数的度量(预计通常是m / n了)。cos直接用向量点积除以两个向量的模(euclidean norm)。
cos = v(q) * v(d) / (|v(q)| * |v(d)|)
sim = coord(q,d) * cos
当中:
v(q) = (idf(t),...)
v(d) = (tf,...)
当中tf并不是简单的term freq,而是其平方根,这非常可能是为了让其模刚好是doclen。
idf = 1 + log(numDocs / (1 + docFreq),因此这个公式里面,tf的数值被弱化了。
在文档的lucene practical scoring formula,当中对于|v(q)|的计算被归到queryNorm上(queryNorm = 1 / |v(q)|) ,对于|v(d)|的计算被归到norm(t, d)中(norm(t,d) = 1 / |v(d)|)。
queryNorm中有个query bootst值,偶认为对于纯tf idf计算(无论query多长总是能够展开成一级)没什么意义,并且对最后总分没影响,仅仅是能够对不同query的结果进行比較。
queryNorm中另一个t.getBoost(),这个事实上非常重要,能够是一个主要调參的地方,由于term boost能够包括field boost的信息,所以能够在search时进行设置,有了term boost,v(q)变为:
v(q) = (idf(t) * t.getBoost(),...)
|v(d)|的计算归结到norm(t,d)中,当中引入field.getBoost另整个公式不严谨,由于点积中没有乘以这个数字,模也不是正常计算的了,再加上t.getBoost()就能够包括field boost信息,还有每一个field保存的norm值仅仅用一个字节表示,精度非常差,我认为这个norm值不有用,倒不如直接用lengthNorm(我倒是非常好奇没有norm值,lucene怎么处理的)。
參考文献:
http://lucene.apache.org/core/4_0_0/core/org/apache/lucene/search/similarities/TFIDFSimilarity.html
Lucene TFIDF打分公式的更多相关文章
- Lucene学习总结之六:Lucene打分公式的数学推导
在进行Lucene的搜索过程解析之前,有必要单独的一张把Lucene score公式的推导,各部分的意义阐述一下.因为Lucene的搜索过程,很重要的一个步骤就是逐步的计算各部分的分数. Lucene ...
- Lucene打分公式的数学推导
原文出自:http://www.cnblogs.com/forfuture1978/archive/2010/03/07/1680007.html 在进行Lucene的搜索过程解析之前,有必要单独的一 ...
- Lucene学习总结之六:Lucene打分公式的数学推导 2014-06-25 14:20 384人阅读 评论(0) 收藏
在进行Lucene的搜索过程解析之前,有必要单独的一张把Lucene score公式的推导,各部分的意义阐述一下.因为Lucene的搜索过程,很重要的一个步骤就是逐步的计算各部分的分数. Lucene ...
- lucene评分推导公式
在进行Lucene的搜索过程解析之前,有必要单独的一张把Lucene score公式的推导,各部分的意义阐述一下.因为Lucene的搜索过程,很重要的一个步骤就是逐步的计算各部分的分数. Lucene ...
- lucene实战--打分算法没有那么难!
作为一个开放源代码项目,Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用,甚至某些商业软件也采用了L ...
- Lucene TFIDFSimilarity评分公式详解
版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/zteny/article/details/ ...
- Lucene TF-IDF 相关性算分公式(转)
Lucene在进行关键词查询的时候,默认用TF-IDF算法来计算关键词和文档的相关性,用这个数据排序 TF:词频,IDF:逆向文档频率,TF-IDF是一种统计方法,或者被称为向量空间模型,名字听起来很 ...
- Solr相似度算法一:Lucene TF-IDF 相关性算分公式
Lucene在进行关键词查询的时候,默认用TF-IDF算法来计算关键词和文档的相关性,用这个数据排序 TF:词频,IDF:逆向文档频率,TF-IDF是一种统计方法,或者被称为向量空间模型,名字听起来很 ...
- Lucene TF-IDF 相关性算分公式
转自: http://lutaf.com/210.htm Lucene在进行关键词查询的时候,默认用TF-IDF算法来计算关键词和文档的相关性,用这个数据排序 TF:词频,IDF:逆向文档频率,TF- ...
随机推荐
- day7面向对象--反射
反射 通过字符串映射或修改程序运行时的状态.属性.方法, 有以下4个方法 1.getattr(object, name[, default]) -> value Get a named ...
- php读取xml中cdata部分方法
本例使用php的simplexml:XML(eventtrackdata.xml'): <eventdata> <event> <date>2012.05.11&l ...
- 003 JTA的使用与理解
一:认识JTA 1.介绍 事物的ACID. 事务是计算机应用中不可或缺的组件模型,它保证了用户操作的原子性 ( Atomicity ).一致性 ( Consistency ).隔离性 ( Isolat ...
- .NET Runtime version 2.0.50727.xxx 执行引擎错误。 (Fatal Execution Engine Error)
如题问题困扰本人良久. 尝试VS2005.VS2008.VS2010均出现过次问题. 主要现象: 1. Window设计器会崩溃,直接挂掉.(当逐条注释掉一些静态构造函数内的代码是情况好转) 2. 发 ...
- 标准c库函数与Linux下系统函数库 区别 (即带不带缓冲区的学习)
我们都知道,C语言在UNIX/Linux系统下有一套系统调用(系统函数),比如文件操作open().close().write().read()等,而标准C语言的库函数中也有一套对文件的操作函数fop ...
- Swift2.0语言教程之类的方法
Swift2.0语言教程之类的方法 Swift2.0语言的方法 方法其实就是函数,只不过它被定义在了类中.在Swift中,根据被使用的方式不同,方法分为了实例方法和类型方法两种.这两种方法的定义也和O ...
- phantomjs-prebuilt@2.1.16 install: `node install.js`
今天运行vue项目安装项目依赖(npm install)的时候,报这个错误: 解决办法: npm -g install phantomjs-prebuilt@2.1.16 --ignore-scrip ...
- java知识回顾
一.构造方法能不能被继承 当然不能,1.构造方法是类的唯一入口 2.构造方法与类名相同 3.子类构造方法中隐式的调用了父类的构造方法 二.值传递和引用传递.不变类和可变类.直接赋值和浅拷贝和深拷贝 ...
- opencv 支持向量机SVM分类器
支持向量机SVM是从线性可分情况下的最优分类面提出的.所谓最优分类,就是要求分类线不但能够将两类无错误的分开,而且两类之间的分类间隔最大,前者是保证经验风险最小(为0),而通过后面的讨论我们看到,使分 ...
- alpha冲刺——代码规范、冲刺任务与计划(追光的人)
代码规范 代码规范整合了自身项目实践还有诸多好的大公司的代码规范.如阿里巴巴开发手册.华为Java规范.W3C前端规范等. 由于内容过于详细和细致,为了方便查看,将其放置在了showDoc网站上(同时 ...