信息检索与数据挖掘 | (五)文档评分、词项权重计算及向量空间模型

news2024/12/18 16:34:54

目录

📚词项频率及权重计算

🐇词项频率

🐇逆文档频率

🐇tf-idf权重计算

📚向量空间模型

🐇余弦相似度

🐇查询向量

🐇向量相似度计算

📚其他tf-idf权值计算方法

🐇tf的亚线性尺度变换方法

🐇基于最大值的tf归一化

🐇文档权值和查询权重机


我们需要一种方法分配一个分数,如果查询项不出现在文档,分数应该是0,更频繁的查询项的文档,分数越高。

在文档集规模很大的情况下,满足布尔查询的结果文档数量可能非常多,往往会大大超过用户能够浏览的文档数目。因此对搜索引擎来说,对文档进行评分和排序非常重要。

📚词项频率及权重计算

🐇词项频率

  • 首先,我们对于词项t,根据其在文档d中的权重来计算它的得分。最简单的方式是将权重设置为t在文档中的出现次数。这种权重计算的结果称为词项频率(term frequencey),记为 tf_{t,d},其中的两个下标分别对应词项和文档。
  • 对于文档 d,利用上述 tf 权重计算方式(或者任意一个将 tf 映射成实数的权重计算函数)得到的权重集合可以看成是文档的一个经过量化以后得到的浓缩版本。
  • 在这种通常称为词袋模型(bag of words model)的文档视图的情况下,词项在文档中的出现次序被忽略,但是出现的次数非常重要,这和布尔检索形成了鲜明对比。需要指出的是,这里我们只保留了词项在文档中出现的次数。

🐇逆文档频率

  • 原始的词项频率会面临这样一个严重问题,即在和查询进行相关度计算时,所有的词项都被认为是同等重要的。实际上,某些词项对于相关度计算来说几乎没有或很少有区分能力。
  • 例如,在一个有关汽车工业的文档集中,几乎所有的文档都会包含 auto,此时,auto就没区 分能力。为此,我们提出一种机制来降低这些出现次数过多的词项在相关性计算中的重要性。
  • 一个很直接的想法就是给文档集频率collection frequency)较高的词项赋予较低的权重,其中文档集频率指的是词项在文档集中出现的次数。这样,便可以降低具有较高文档集频率的词项的权重。
  • 一个更常用到的因子是文档频率document frequency,它表示的是出现 t 的所有文档的数目。
  • 由于 df 本身往往较大,所以通常需要将它映射到一个较小的取值范围中去。为此,假定所有文档的数目为 N,词项 t idfinverse document frequency, 逆文档频率)的定义如下:

idf_t=log\frac{N}{df_t}

🐇tf-idf权重计算

  • 对于每篇文档中的每个词项,可以将其tf和idf组合在一起形成最终的权值。如下:

tf-idf_{t,d}=tf_{t,d}\times idf_t

  • t 只在少数几篇文档中多次出现时 (对应的df小,idf大), 权重取值最大 (此时能够对这些文档提供最强的 区分能力);
  • t 在一篇文档中出现次数很少,或者在很多文档中出现,权重取值次之(此时对最后 的相关度计算作用不大);
  • 如果 t 在所有文档中都出现,那么权重取值最小。

  • 这样,就可以把文档看成是一个向量(vector),其中的每个分量都对应词典中的一个词项。
  • 分量值为上述公式计算出的权重值。当某词项在文档中没有出现时,其对应的分量值为 0

  • 重合度评分指标overlap score measure),文档d的得分是所有查询词项在文档中的出现次
    tf 之和。当然,我们可以对这种方法进行修正,即不采用 tf 而采用 tf-idf 权重求和:
Score(q,d)=\sum_{t\in q}tf-idf_{t,d}

📚向量空间模型

🐇余弦相似度

  • 假设文档 d 对应的向量用 \vec{V}\left ( d \right )表示,其中每个分量对应一个词项。
  • 针对两篇文档的相似度计算,考虑采用两个文档向量差向量的大小进行计算。但这种计算方式会受文档长度影响。
  • 计算两篇文档相似度的常规方法是求 余弦相似度
sim(d_1,d_2)=\frac{\vec{V}(d_1)\cdot \vec{V}d_2}{|\vec{V}(d_1)|| \vec{V}d_2|}
  • 上述公式除以分母的效果实际上相当于将向量进行长度归一化(欧式归一化),得到单位向量。因此,公式可以重写为:

sim(d_1,d_2)=\vec{v}(d_1)\cdot \vec{v}(d_2)

  • 以上可以看作是两个归一化以后的文档向量的内积,也就是计算两个向量的夹角余弦

  •  我们考虑在给定文档 d(也许是文档集中的某篇文档 di)的前提下在文档集中搜索与之相近的文档的过程。文档相似度计算就非常有用。
  • 很自然地,将一个包含 N 篇文档的文档集看成向量的集合相当于将整个文档集看成一个 M × N 词项—文档矩阵 term-document matrix ),其中矩阵的每行代表一个词项,每列代表一篇
    文档。

🐇查询向量

  • 将文档表示成向量的一个令人信服的理由是也可以将查询表示成向量
  • 将查询和文档看成两个向量,然后通过计算两者间的余弦相似度来衡量查询Q与文档D之间的相关性。文档或查询向量定义如下: 假设语料库中包含N个词项, 那么文档与查询向量的维数就是N,每一维度对应一个词项。
  • 我们将查询看成词袋,那么就可以将查询当成一篇极短的文档来表示成向量,进而通过计算查询向量与文档向量的余弦相似度来对所有文档进行排名。这样即使一篇文档不包含所有的查询词项也可能会获得较高的余弦得分。
  • 总结下来,整个检索过程就是:计算查询向量和文档集中每个文档向量的余弦相似度,结果按照得分排序,并选择得分最高的 K 篇文档。实际这个过程的代价很大,因为每次相似度计算都是数万维向量之间的内积计算,具体计算方法后续进行讨论。

🐇向量相似度计算

  • 通常情况下,一个典型检索系统的配置包括:一批文档组成的文档集,其中每篇文档表示成一个向量;一个自由文本查询,也表示成一个向量;正整数 K
  • 检索系统的目标是,给定查询,从文档集合中返回得分最高的 K 篇文档。
  • 向量相似度的基本算法

📚其他tf-idf权值计算方法

🐇tf的亚线性尺度变换方法

  • 即使一个词项在文档中出现了 20 次,它所携带信息的重要性也不可能是只出现1 次的词项的 20 倍。也就是说,在把一个文档复制20次之后,该文档的重要性也不应该说是比原文档大。
  • 因此,可对原始的词项频率进行修改,而不仅仅是计算词项出现的次数。
  • 采用原始词项频率的对数函数:
Wf_{t,d}=\left\{\begin{matrix} 1+logtf_{t,d} ,&tf_{t,d}>0, & \\ 0, & others. & \end{matrix}\right.
  • 基于上述方式,tf就可以用wf来替代,于是就可以得到:

wf-idf_{t,d}=wf_{t,d}\times idf_t

🐇基于最大值的tf归一化

  • 采用文档中最大的词项频率对所有词项的频率进行归一化。
ntf_{t,d}=a+(1-a)\frac{tf_{t,d}}{tf_{max}(d)}
  • 阻尼系数a是一个0到1之间的数,通常取0.4,而在一些早期的工作中使用的是 0.5
  • a 主要起平滑smoothing)作用。
  • 这里进行平滑的基本思路是当 tf 适度变化时(如从 1 变到 2 ),使用平滑技术来保证因其引起的 ntf 的波动不会非常剧烈。
  • 我们发现,由于长文档中词项反复出现的可能性大,所以长文档中的词项频率倾向于取更大的值。这显然是不公平的,而 最大 tf 归一化方法的主要思路就是 减轻这种不公平所带来的影响

🐇文档权值和查询权重机制

  • SMART系统:给不同的tf,idf实现方式命名

  •  文档向量和查询向量权重计算方法的组合字母表示为 ddd.qqq
  • 3 位字母代表文档向量的权重计算方法,而后 3 位字母代表查询向量的权重计算方法。
  • 每个 3 位字母组合中的1 位字母表示权重计算中的 tf 因子,第 2 位表示 df 因子,第 3 位表示归一化形式。
  • 比如:一个普遍使用的权重计算机制是 lnc.ltc ,这表明文档向量采用了对数 tf 计算方法、没有采用 idf 因子(同时基于效 率和效果的考虑)及采用余弦归一化方法,而此时查询向量则采用了对数 tf 计算方法、 idf 权重因子 及余弦归一化方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1121995.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【OpenGL】五、光照

OpenGL Lighting 文章目录 OpenGL Lighting一、 冯氏光照模型(Phong Lighting Model)环境光(Ambient lighting)漫反射光照(Diffuse lighting)漫反射光照(Specular Lighting) 二、 材质(Materials)光照贴图(…

JUC并发编程笔记2

省流: 自己笔记,划走~~~~ 缓存更新策略

vue3里面vant组件的标签页使用?

一、绑一个v-model事件 二、让activeName的初始为0也就是默认是显示第一个标签页的下标 三、给标签页下面的东西进行一个判断 想让哪个优先显示就把哪个判断作为初始值存入

【试题040】多个逻辑或例题2

1.题目:设int n0;,执行表达式n ||(n-1) ||(n0)||(n1)||(n2)后n的值是 ? 2.代码解析: 逻辑或 || 运算符是一个短路运算符,它从左到右依次计算表达式,如果遇到一个为真(非零)的值&am…

No171.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

第一章概述

一、学习目的与要求 本章对软件测试作了概括性的介绍,目的是使学生对软件测试有个初步的认识。通过本章的学习,应使学生掌握软件测试的基本概念,了解软件测试的发展历程和行业现状,掌握软件测试技术的分类,理解软件测试…

【JAVA-Day49】Java LinkedList集合详解

Java LinkedList集合详解 摘要引言Java LinkedList集合详解一、什么是LinkedList集合1.1 链表数据结构1.2 双向链表1.3 动态大小1.4 插入和删除元素1.5 适用场景 二、LinkedList集合的使用2.1 创建 LinkedList 集合、添加元素、遍历元素2.2 在指定位置插入元素2.3 获取指定位置…

模拟 Junit 框架

需求 定义若干个方法,只要加了MyTest注解,就可以在启动时被触发执行 分析 定义一个自定义注解MyTest,只能注解方法,存活范围是一直都在定义若干个方法,只要有MyTest注解的方法就能在启动时被触发执行,没有这…

开源博客项目Blog .NET Core源码学习(5:mapster使用浅析)

开源博客项目Blog使用mapster框架映射对象,主要是在数据库表对象及前端数据对象之间进行映射,本文学习并记录项目中mapster的使用方式。   App.Hosting项目的program文件中调用builder.Services.AddMapper函数进行对象模型自动映射,而该函数…

numpy矩阵画框框

在n>5(n是奇数)的nn数组中,用*画外方框和内接菱形。 (本笔记适合熟悉numpy的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那…

二维码智慧门牌管理系统升级解决方案:突破传统,实现质检与抽检的个性化配置

文章目录 前言一、引入“独立质检”二、个性化抽检类别设定三、触发重采要素的功能升级四、升级优势与展望 前言 在数字化时代,智慧门牌管理系统已经成为社会管理的重要工具。为了满足各种复杂需求,系统升级是必然趋势。本次升级主要针对质检和抽检两大…

Python+requests+exce接口自动化测试框架

一、接口自动化测试框架 二、工程目录 三、Excel测试用例设计 四、基础数据base 封装post/get:runmethod.py #!/usr/bin/env python3 # -*-coding:utf-8-*- # __author__: hunterimport requests import jsonclass RunMain:def send_get(self, url, data):res req…

Ragnar Locker勒索软件开发者在法国被逮捕

导语:在一次跨国行动中,执法机构逮捕了与Ragnar Locker勒索软件团伙有关的一名恶意软件开发者,并查封了该团伙的暗网网站。Ragnar Locker勒索软件团伙自2020年以来在全球范围内对168家国际公司进行了攻击。此次行动是法国、捷克、德国、意大利…

搭建网站七牛云CDN加速配置

打开七牛云后台;添加域名; 添加需要加速的域名,比如我添加的是motoshare.cn 源站配置,这里要用IP地址,访问的目录下面要有能访问测试的文件,尽量不要用源站域名,这个只能用加速二级域名&#x…

git版本升级

2.17.1之前执行指令:git update(现在大部分应该都不用这个指令,都高于这个版本) 2.17.1之后执行指令:git update-git-for-windows 可通过git --version查看版本 如图所示 等待安装成功即可

蓝桥杯每日一题2023.10.22

题目描述 灵能传输 - 蓝桥云课 (lanqiao.cn) 题目分析 发现每一次的灵能传输都是对前缀和s[i - 1]和s[i]的一次交换 故为求max(s[i], s[i - 1])的最小值(发现当s单调时可以成立) 由于s[0]和s[n]的位置不变,但是s[0]和s[n]不一定是最大值或…

使用CMake构建一个简单的C++项目

文章目录 一. 构建一个简单的项目二. 构建过程1. 创建程序源文件2. 编写CMakeList.txt文件3. 构建项目并编译源代码 附件 一. 构建一个简单的项目 最基本的CMake项目是从单个源代码文件构建的可执行文件。对于像这样的简单项目,只需要一个包含三个命令的CMakeLists…

Egg.js项目EJS模块引擎

1.介绍 灵活的视图渲染:使用 egg-view-ejs 插件,你可以轻松地在 Egg.js 项目中使用 EJS 模板引擎进行视图渲染。EJS 是一种简洁、灵活的模板语言,可以帮助你构建动态的 HTML 页面。 内置模板缓存:egg-view-ejs 插件内置了模板缓存…

react 学习 —— 16、使用 ref 操作 DOM

什么时候使用 ref 操作 DOM? 有时你可能需要访问由 React 管理的 DOM 元素 —— 例如,让一个节点获得焦点、滚动到它或测量它的尺寸和位置。在 React 中没有内置的方法来做这些事情,所以你需要一个指向 DOM 节点的 ref 来实现。 怎么使用 r…

蓝桥杯中级题目之组合(c++)

系列文章目录 数位递增数_睡觉觉觉得的博客-CSDN博客拉线开关。_睡觉觉觉得的博客-CSDN博客蓝桥杯中级题目之数字组合(c)_睡觉觉觉得的博客-CSDN博客 文章目录 系列文章目录前言一、个人名片二、描述三、输入输出以及代码示例1.输入2.输出3.代码示例 总…