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

简介: 朴素想法用户输入一个查询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内核设计剖析》

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

这里写图片描述

目录
相关文章
|
算法 算法框架/工具 C++
DL之FastR-CNN:Fast R-CNN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
DL之FastR-CNN:Fast R-CNN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
DL之FastR-CNN:Fast R-CNN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
|
Python 机器学习/深度学习
Cross Entropy Loss 交叉熵损失函数公式推导
表达式 输出标签表示为{0,1}时,损失函数表达式为: $L = -[y log \hat{y} + (1-y)log(1- \hat{y})]$ 二分类 二分类问题,假设 y∈{0,1} 正例:$P(y = 1| x) = \hat{y}$ 反例:$P(y=0|x) = 1-\hat{y}$ 取似然函数 似然函数就是所有样本在参数θ下发生概率最大的那种情况,由于样本独立同分布,因此概率最大的情况就是每个样本发生概率的连乘。
16954 0
|
SQL Java 关系型数据库
Spring Boot 多数据源,整合 Atomikos 实现分布式事务
最近的项目需要整合两个数据库,有些业务逻辑也涉及到两个数据库同时插入、更新的操作;所以就涉及到跨数据库的数据一致性问题。于是基于 `Spring Boot` 整合了 `Atomikos` 的一个项目 demo。
3030 0
|
存储 人工智能 自然语言处理
高级 RAG 技术:提升生成式 AI 系统输出质量与性能鲁棒性【预检索、检索、检索后、生成优化等】
高级 RAG 技术:提升生成式 AI 系统输出质量与性能鲁棒性【预检索、检索、检索后、生成优化等】
高级 RAG 技术:提升生成式 AI 系统输出质量与性能鲁棒性【预检索、检索、检索后、生成优化等】
|
5月前
|
数据采集 人工智能 自然语言处理
开源大模型微调对比:选对模型,让定制化更高效
本文对比Llama 3、Qwen2.5、Mistral三款开源大模型在中文场景下的微调表现,从算力门槛、数据效率、任务适配性等维度分析,结合实战案例与主观评估,为开发者提供选型建议,助力高效构建定制化AI模型。
|
消息中间件 调度 Linux
|
编解码 数据可视化 索引
深入了解Figure的结构与层次
深入了解Figure的结构与层次
415 0
|
人工智能 算法 网络协议
案例酷 | 华南理工大学:智慧校园绿色低碳,“智”有主张
案例酷 | 华南理工大学:智慧校园绿色低碳,“智”有主张
1368 0
|
7月前
|
机器学习/深度学习 人工智能 API
构建AI智能体:二十四、RAG的高效召回方法论:提升RAG系统召回率的三大策略实践
本文探讨了检索增强生成(RAG)系统中的高效召回技术。RAG系统通过检索相关文档增强大语言模型的回答质量,但性能受制于垃圾进,垃圾出原则。为提高召回效果,文章重点分析了三种方法:Small-to-Big通过大小文本块映射兼顾检索精度与上下文丰富度;索引扩展(如HyDE)利用大模型生成假设文档来优化检索;双向改写弥合用户查询与文档表述的差异。这些方法从不同角度解决了RAG系统中的语义鸿沟、词汇不匹配等核心问题,可单独或组合使用。高效召回技术能显著提升RAG系统的回答质量和效率。
1016 5