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

简介: 朴素想法用户输入一个查询query,query由若干词(term)组成,文档也由若干词(term)组成。

朴素想法

用户输入一个查询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=tflog(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)=qdq×d=ni=1wi,qwi,dni=1w2i,qni=1w2i,d

干扰项

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

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

文档权重

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

score(q,d)=ni=1wi,qwi,dni=1w2i,qni=1w2i,d×boost

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

标准化

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

wt=tflog(totalDocdf)1totalTerm

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

========广告时间========

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

=========================
欢迎关注:

这里写图片描述

目录
相关文章
|
9月前
|
算法 搜索推荐 计算机视觉
图片相似度计算及检索调研
图片相似度计算和相似图片搜索,是图片识别领域两个常见的应用场景。例如搜索相似商品,和相似的图片,在百度、淘宝中都有应用。在某些业务中,也存在对图片相似度的计算和判断。因此,在这里简单介绍一下相关算法。
448 0
|
10小时前
|
存储 NoSQL Redis
深入解析RedisSearch:全文搜索的新维度
深入解析RedisSearch:全文搜索的新维度
11 0
|
1月前
|
人工智能 自然语言处理 开发工具
关键词感知检索
向量检索服务DashVector同时支持Dense Vector(稠密向量)和Sparse Vector(稀疏向量),前者用于模型的高维特征(Embedding)表达,后者用于关键词和词频信息表达。DashVector可以进行关键词感知的向量检索,即Dense Vector和Sparse Vector结合的混合检索。
关键词感知检索
|
10月前
|
机器学习/深度学习 存储 自然语言处理
语义检索系统:基于Milvus 搭建召回系统抽取向量进行检索,加速索引
语义检索系统:基于Milvus 搭建召回系统抽取向量进行检索,加速索引
语义检索系统:基于Milvus 搭建召回系统抽取向量进行检索,加速索引
|
SQL Java
白话Elasticsearch04- 结构化搜索之使用terms query搜索多个值以及多值搜索结果优化
白话Elasticsearch04- 结构化搜索之使用terms query搜索多个值以及多值搜索结果优化
476 0
|
PHP
sphinx(九)根据关键词相似度排序
全文检索通过sphinx搜索出来的内容是没有问题的。这里使用了PHP内置的similar_text函数对文章的描述以及标题进行相似度的计算,然后根据计算之后的相似度数值进行倒叙排序。
105 0
sphinx(九)根据关键词相似度排序
|
Java API Apache
lucene 相关性参考
假期梳理了之前在新浪博客的文档,将一些有用的内容搬到这里。本文是lucene序列原理分享之一:相关性原理。
65 0
|
机器学习/深度学习 搜索推荐 数据处理
这就是搜索引擎读书笔记-day3-5.检索模型与搜索排序
搜索结果排序融合了上百种排序因子,而重要两因素是:用户查询和网页内容相关性 及 网页链接情况。本节介绍内容相关性介绍网页排序
这就是搜索引擎读书笔记-day3-5.检索模型与搜索排序