Lucene在进行关键词查询的时候,默认用TF-IDF算法来计算关键词和文档的相关性,用这个数据排序

TF:词频,IDF:逆向文档频率,TF-IDF是一种统计方法,或者被称为向量空间模型,名字听起来很复杂,但是它其实只包含了两个简单规则

  1. 某个词或短语在一篇文章中出现的次数越多,越相关
  2. 整个文档集合中包含某个词的文档数量越少,这个词越重要

所以一个term的TF-IDF相关性等于 TF * IDF

这两个规则非常简单,这就是TF-IDF的核心规则,第二个的规则其实有缺陷的,他单纯地认为文本频率小的单词就越重要,文本频率大的单词就越无用,显然这并不是完全正确的。并不能有效地反映单词的重要程度和特征词的分布情况,比如说搜索web文档的时候,处于HTML不同结构的特征词中对文章内容的反映程度不同,应该有不同的权重

TF-IDF的优点是算法简单,运算速度很快

Lucene为了提高可编程行,在上述规则做了一些扩充,就是加入一些编程接口,对不同的查询做了权重归一化处理,但是核心公式还是TF * IDF

Lucene算法公式如下

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项 的权重

各种编程插口显得很麻烦,可以不使用,所以我们可以把Lucence的算分公式进行简化

score(q,d) = coord(q,d) · ∑ ( tf(t in d) · idf(t)2 )

结论

  1. TF-IDF 算法是以 term为基础的,term就是最小的分词单元,这说明分词算法对基于统计的ranking无比重要,如果你对中文用单字切分,那么就会损失所有的语义相关性,这个时候 搜索只是当做一种高效的全文匹配方法
  2. 按照规则1 某个词或短语在一篇文章中出现的次数越多,越相关 一定要去除掉stop word,因为这些词出现的频率太高了,也就是TF的值很大,会严重干扰算分结果
  3. TF和IDF在生成索引的时候,就会计算出来: TF会和DocID保存在一起(docIDs的一部分),而IDF= 总文档数 / 当前term拥有的docIDs 长度

本文地址: http://lutaf.com/210.htm 鲁塔弗原创文章,欢迎转载,请附带原文链接

Lucene TF-IDF 相关性算分公式(转)的更多相关文章

  1. Solr相似度算法一:Lucene TF-IDF 相关性算分公式

    Lucene在进行关键词查询的时候,默认用TF-IDF算法来计算关键词和文档的相关性,用这个数据排序 TF:词频,IDF:逆向文档频率,TF-IDF是一种统计方法,或者被称为向量空间模型,名字听起来很 ...

  2. Lucene TF-IDF 相关性算分公式

    转自: http://lutaf.com/210.htm Lucene在进行关键词查询的时候,默认用TF-IDF算法来计算关键词和文档的相关性,用这个数据排序 TF:词频,IDF:逆向文档频率,TF- ...

  3. ElasticStack学习(九):深入ElasticSearch搜索之词项、全文本、结构化搜索及相关性算分

    一.基于词项与全文的搜索 1.词项 Term(词项)是表达语意的最小单位,搜索和利用统计语言模型进行自然语言处理都需要处理Term. Term的使用说明: 1)Term Level Query:Ter ...

  4. 关于使用Filter降低Lucene tf idf打分计算的调研

    将query改成filter,lucene中有个QueryWrapperFilter性能比较差,所以基本上都须要自己写filter.包含TermFilter,ExactPhraseFilter,Con ...

  5. Elasticsearch从入门到放弃:浅谈算分

    今天来聊一个 Elasticsearch 的另一个关键概念--相关性算分.在查询 API 的结果中,我们经常会看到 _score 这个字段,它就是用来表示相关性算分的字段,而相关性就是描述一个文档和查 ...

  6. 影响ES相关度算分的因素

    相关性算分 指文档与查询语句间的相关度,通过倒排索引可以获取与查询语句相匹配的文档列表   如何将最符合用户查询需求的文档放到前列呢? 本质问题是一个排序的问题,排序的依据是相关性算分,确定倒排索引哪 ...

  7. tf idf公式及sklearn中TfidfVectorizer

    在文本挖掘预处理之向量化与Hash Trick中我们讲到在文本挖掘的预处理中,向量化之后一般都伴随着TF-IDF的处理,那么什么是TF-IDF,为什么一般我们要加这一步预处理呢?这里就对TF-IDF的 ...

  8. TF/IDF(term frequency/inverse document frequency)

    TF/IDF(term frequency/inverse document frequency) 的概念被公认为信息检索中最重要的发明. 一. TF/IDF描述单个term与特定document的相 ...

  9. 基于TF/IDF的聚类算法原理

        一.TF/IDF描述单个term与特定document的相关性TF(Term Frequency): 表示一个term与某个document的相关性. 公式为这个term在document中出 ...

随机推荐

  1. 如何在没有安装微软Excel环境下操作Excel文件?

    在以前接触的项目中,由于很多客户对微软Excel的操作比较熟练,客户经常要求系统支持对Excel文件的读写.用.NET传统方法对Excel进行读写时,往往会涉及到不同版本兼容的问题,导致在本地测试一切 ...

  2. CountUp.js – 让数字以非常有趣的动画方式显示

    CountUp.js 无依赖的.轻量级的 JavaScript 类,可以用来快速创建以一种更有趣的动画方式显示数值数据.尽管它的名字叫 countUp,但其实可以在两个方向进行变化,这是根据你传递的 ...

  3. ZedGraph饼图---傻瓜版

    GraphPane pGraphPane=this.zedGraphControl1.GraphPane;//调用饼图类 pGraphPane.Title.Text = "重金属含量分析图& ...

  4. Linux学习心得之 双显卡、中文输入法及svn初步使用

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Linux学习心得之 双显卡.中文输入法及svn初步使用 1.前言 2.Linux双显卡解决 ...

  5. RecyclerView局部刷新那点事

    1.局部刷新的引入 提到RecyclerView,我们首先想到的是ListView,对于ListView的局部刷新,我们之前已经有解决方案,[android:ListView的局部刷新]当时的解决方案 ...

  6. Android上的MVP:如何组织显示层的内容

    MVP(Model View Presenter)模式是著名的MVC(Model View Controller)模式的一个演化版本,目前它在Android应用开发中越来越重要了,大家也都在讨论关于M ...

  7. iOS7.0后隐藏状态栏(UIStatusBar)

    现象: 升级到iOS7后,UIStatusBar的出现导致现有UI界面乱掉了. 原因: 由于写死了某些控件的绝对位置,原先隐藏UIStatusBar的代码没有在iOS7中起作用 解决方法: iOS7以 ...

  8. minix2.0内核组织结构与公用头文件说明

    Minix2.0操作系统的源代码由两个目录组成:include/目录和src/目录 include/目录包含了操作系统所有的头文件(即.h文件) src/目录下包含了操作系统所有的源文件(.c或.s文 ...

  9. 【读书笔记】iOS网络-错误处理的经验法则

    一,在接口契约中处理错误. 二,错误状态可能不正确. 设备模糊地确认操作是崇拜失败的.比如,移动应用发出HTTP请求以在两个账户间转账.请求被银行系统接收并正确地处理:然而,由于网络失败应答却丢失了, ...

  10. sdk的目录结构及其功能

    sdk的目录结构及其功能 add-ons: 这里面保存着附加库,比如GoogleMaps,当然你如果安装OphoneSDK,这里也会有一些类库在里面. build-tools: 各个版本的sdk编译工 ...