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

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

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

这里写图片描述

目录
相关文章
|
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}$ 取似然函数 似然函数就是所有样本在参数θ下发生概率最大的那种情况,由于样本独立同分布,因此概率最大的情况就是每个样本发生概率的连乘。
16402 0
|
Windows
关于 Qt设置置顶窗口,透明部分显示黑色底色(已设置透明窗口) 的解决方法
关于 Qt设置置顶窗口,透明部分显示黑色底色(已设置透明窗口) 的解决方法
关于 Qt设置置顶窗口,透明部分显示黑色底色(已设置透明窗口) 的解决方法
|
11月前
|
测试技术 数据库 Python
Python装饰器实战:打造高效性能计时工具
在数据分析中,处理大规模数据时,分析代码性能至关重要。本文介绍如何使用Python装饰器实现性能计时工具,在不改变现有代码的基础上,方便快速地测试函数执行时间。该方法具有侵入性小、复用性强、灵活度高等优点,有助于快速发现性能瓶颈并优化代码。通过设置循环次数参数,可以更准确地评估函数的平均执行时间,提升开发效率。
276 61
Python装饰器实战:打造高效性能计时工具
|
12月前
|
NoSQL 应用服务中间件 API
Redis是如何建立连接和处理命令的
本文主要讲述 Redis 是如何监听客户端发出的set、get等命令的。
1599 160
|
11月前
|
Ubuntu Linux 测试技术
Python 虚拟环境配置
本文总结了 Python 开发中的环境配置、常用操作和常见错误处理。重点介绍了如何使用 `virtualenv` 搭建虚拟环境,解决依赖冲突问题,并保持系统环境的干净。同时,详细说明了依赖库的安装与管理方法,包括使用 `pip install` 安装依赖、生成和使用 `requirements.txt` 文件,以及查看 Python 文档和修改环境变量等实用技巧。
773 60
|
12月前
|
SQL 安全 关系型数据库
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
事务是MySQL中一组不可分割的操作集合,确保所有操作要么全部成功,要么全部失败。本文利用SQL演示并总结了事务操作、事务四大特性、并发事务问题、事务隔离级别。
4859 56
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
|
10月前
|
自然语言处理 API 开发者
DeepSeek-Free-API:DeepSeekV3免费的api接口,需要使用api方式的同学可以参考一下这个项目,可以收藏起来试一下
嗨,大家好,我是小华同学。今天为大家介绍一个开源项目——DeepSeek V3 Free 服务。该项目基于 DeepSeek-V3 R1 大模型,提供免费、高性能的 API,支持高速流式输出、多轮对话、联网搜索和深度思考等功能。适用于智能客服、内容创作、教育辅助等场景。部署方式灵活,支持 Docker、Docker-compose、Render、Vercel 和原生部署。欢迎关注我们,获取更多优质开源项目和高效工作学习方法。
2655 15
|
11月前
|
负载均衡 容灾 Cloud Native
云原生应用网关进阶:阿里云网络ALB Ingress 全能增强
在过去半年,ALB Ingress Controller推出了多项高级特性,包括支持AScript自定义脚本、慢启动、连接优雅中断等功能,增强了产品的灵活性和用户体验。此外,还推出了ingress2Albconfig工具,方便用户从Nginx Ingress迁移到ALB Ingress,以及通过Webhook服务实现更智能的配置校验,减少错误配置带来的影响。在容灾部署方面,支持了多集群网关,提高了系统的高可用性和容灾能力。这些改进旨在为用户提供更强大、更安全的云原生网关解决方案。
1327 25
|
容灾 测试技术 数据库
怎么保证后端服务稳定性,怎么做容灾
【10月更文挑战第28天】保证后端服务稳定性及做好容灾措施是一个系统工程,需要从多个方面进行考虑和实施
|
12月前
|
应用服务中间件 Linux 网络安全
nginx安装部署ssl证书,同时支持http与https方式访问
为了使HTTP服务支持HTTPS访问,需生成并安装SSL证书,并确保Nginx支持SSL模块。首先,在`/usr/local/nginx`目录下生成RSA密钥、证书申请文件及自签名证书。接着,确认Nginx已安装SSL模块,若未安装则重新编译Nginx加入该模块。最后,编辑`nginx.conf`配置文件,启用并配置HTTPS服务器部分,指定证书路径和监听端口(如20000),保存后重启Nginx完成部署。
3677 8