全文搜索怎么给查询语句与文档相关性打分

朴素想法

用户输入一个查询query,query由若干词(term)组成,文档也由若干词(term)组成。那么怎么评判查询和文档的相关性的高低。

很朴素简单的想法就是文档中包含的term与查询query中包含的term,两者越多相同的则说明越相关。比如query为”animal cat”,文档一内容为”cat dog bird animal”,文档二内容为”cat dog bird tiger”,则认为query与文档二的相关性比文档一的高。

词权重

现在缺少词权重,比如一个文档中cat出现次数为2,而dog次数为1,那么cat的权重应该高一些。比如cat在10个文档出现和在1个文档出现也有不同的权重。

一般来说,可以由两方面来影响某文档某term的权重:

1. 该文档词频(term frequency):该文档出现该term的次数,tf越大说明越重要。

2. 文档词频(document frequency):包含该term的文档数,df越大说明越不重要,说明它更大众。

于是某个term的权重可定为:

wt=tf?log(totalDocdf)

VSM

向量空间模型(VSM)是一个计算俩文本相似性的经典算法。

  1. 将文档和query中term的并集看成是n维空间,每个term是一维。
  2. 将文档中term的权重看成一个n维向量,不存在的term看成权重为0。
  3. 同样将query看成是n维空间,每个term是一维。
  4. 同样将query的term的权重看成一个n维向量,不存在的term看成权重为0。

文档权重向量和query权重向量之间的夹角越小则认为相关性越大。于是,

sim(q,d)=q?d∥q∥×∥d∥=∑ni=1wi,qwi,d∑ni=1w2i,q√∑ni=1w2i,d√

干扰项

  • 表单符号,一般标点符号没有价值,去掉。
  • 停词,停词没有特别的意义,一般不能成为搜索的关键词,比如”the”,”that”,”this”等。

去掉这些干扰项可以让VSM降维,提升计算效率和准确度。

文档权重

对于某些文档可能相对重要点,有些文档没这么重要,这时需要额外的权重来表示。于是相关性得分,

score(q,d)=∑ni=1wi,qwi,d∑ni=1w2i,q√∑ni=1w2i,d√×boost

比如文档一的权重设为1.1,文档二的权重设为1.0,则通过这个权重系数可以向整体分数表达出来。

标准化

前面计算词权重时存在一个问题,文档出现某term次数越多则说明它的权重越大,那么是不是可以说一个包含了1000个term的文档出现了2次cat,就比一个包含了10个term的文档出现了1次cat权重大?于是需要引入标准化来解决这个问题,

wt=tf?log(totalDocdf)?1totalTerm√

通过标准化后减少了文档长度的影响。

欢迎关注:

时间: 2024-12-27 20:23:23

全文搜索怎么给查询语句与文档相关性打分的相关文章

SQL Server 全文搜索 配置、查询初体验

一.使用SQL Server全文搜索配置 要使用SQL Server的全文搜索服务,需要进行如下配置. 1.开启全文搜索服务: 2.开启数据库的全文索引功能: --开启数据库的全文搜索功能 EXEC sp_fulltext_database 'enable'; 3.创建全文索引目录: --创建全文索引目录 CREATE FULLTEXT CATALOG IndexCatalog ON FILEGROUP [PRIMARY] IN PATH 'E:\SQLServerIndex' AS DEFAU

[Elasticsearch] 全文搜索 (三) - match查询和bool查询的关系,提升查询子句

match查询是如何使用bool查询的 现在,你也许意识到了使用了match查询的多词查询只是简单地将生成的term查询包含在了一个bool查询中.通过默认的or操作符,每个term查询都以一个k语句被添加,所以至少一个should语句需要被匹配.以下两个查询是等价的: { "match": { "title": "brown fox"} } { "bool": { "should": [ { "

【MongoDB学习笔记18】MongoDB的查询:find查询内嵌文档

查询内嵌文档和查询普通文档完全相同: 例如: > db.post.find()    { "_id" : ObjectId("54ace1394ba07ed75df68f90"), "name" : { "firstname" : "joe", "lastname" : "schome" }, "age" : 28 }     { "

SharePoint 2013 搜索SharePoint 特定列和特定文档(自定义搜索)

SharePoint 2013 搜索SharePoint 特定列和特定文档 1,操作步骤和图例,因语言和版本的不同 我尽量使用抓图方式. 2.  In Central Administration, in the Application Management section, click Manage service applications. 3.  Click the Search service application. 4.  On the Search Administration p

《结对-自然语言进行数据库查询系统-设计文档》

二〇一七年九月十四日十点一刻少两分钟 关于结对编程的设计文档: 题目:自然语言进行数据库查询系统 编程语言:C# 数据库:MySql ,其他逐渐扩展 软件所要实现的功能: 用户打开软件之后可以连接到数据库,并且通过自然语言进行数据库的查询,例如我想知道小明的学号,如果在数据库中查询需要输入 select ID from 学生表 where name = "小明"才能实现,我们要做的是,输入查询小明的学号,软件就可以将自然语言转换成sql语句进行数据库的查询. 所要实现的功能: 1.进行

MongoDB查询内嵌文档

有文档如下: /* 0 */ { "_id" : ObjectId("55d09915331c571b60035d95"), "title" : "hello world", "comment" : [{ "author" : "joe", "score" : 3 }, { "author" : "tom",

elasticsearch的rest搜索---对于相关度的大牛的文档

目录: 一.针对这次装B 的解释 二.下载,安装插件elasticsearch-1.7.0   三.索引的mapping 四. 查询 五.对于相关度的大牛的文档 五.对于相关度的大牛的文档 http://blog.csdn.net/dm_vincent/article/details/42201789   这个是网址,我这里只是引用,没有抄袭

如何查询python帮助文档;sublime 快捷键

# 帮助文档 1.dir函数式可以查看对象的属性:Python命令窗口输入 dir(str) 即可查看str的属性. 2. 如何查看对象某个属性的帮助文档 ? 如要查看str的split属性,可以用__doc__(双下划线), 使用方法为print(str.split.__doc__) 或者help函数,使用方法为help(str.split). 要注意在python3.4中查看其它模块的对象属性要在help函数中加上‘’,help('time.strftime'): 或者先加载模块 impor

团队-及格成绩查询系统-设计文档

项目名称:象棋游戏 项目参加人员:李一轩.程吉.刘泽宇.苑旺.李瑞鹏.周建伟 项目所需环境及工具:HBuilder.Google浏览器 页面设计:在网页中使用,可以转换到其他科目的成绩查询: 功能设计:可以查询及格成绩和最终成绩,并可以推广到其他专业和年级进行使用: 在程序结束阶段,将对程序进行性能调试和2/5/10原则调试,对其进行最终检测和维护: 预计流程:进入网页->输入成绩(并不用全部都填写)->点击"查询xxx成绩"->输出: