文档排序--相似度模型--VSM

说明:文章内容来源于课程视频和课程ppt。我只学习了课程没有做习题。文章不是翻译,是我对课程的理解。


上文提到文档排序函数是TR的核心。文档排序函数的实现有几种思路,其中一种是基于相似度的模型。这种模型具体是用空间向量模型(Vector Space Model)实现。这篇文章就介绍VSM。

VSM概念

什么是VSM


 VSM定义了两点。
 第一,用词向量(term vector)来表示查询语句、表示文档。英文中的term vector,我们翻译为词向量。但是这里的“词”并不是指汉语中的一个词,具体含义是:基本概念,可以是一个字、一个词、一个短语。每个词表示一个维度,N个词就可以定义N维空间。如上图所示,programming,libarary,presidential,分别定义了三个维度。查询语句的向量表示:q=(x1,x2,...xN)q=(x_1,x_2,...x_N)q=(x1,x2,...xN),文档的向量表示:d=(y1,y2,...yN)d=(y_1,y_2,...y_N)d=(y1,y2,...yN)
 第二,查询语句和文档的相关度正比于查询语句和文档的相似度:relevance(q,d)∝similarity(q,d)=f(q,d)relevance(q,d) ∝ similarity(q,d)=f(q,d)relevance(q,d)similarity(q,d)=f(q,d)

VSM没有定义的

1 怎么定义或者说怎么选择term。只说term是文档集中的基本概念,并未指明什么可以作为term。
 2 向量的表示。用什么值来计算查询向量和文档向量。
 3 相似度怎么计算。
 基于以上几点说VSM其实是一个框架frame。在实践中有好多版本的实现。继续往下看。

VSM实现

来源于ppt的例子。
 query=“news about presidential campaign”
 d1:"… news about …"
 d2:"… news about organic food campaign…"
 d3:"… news of presidential campaign …"
 d4:"… news of presidential campaign … … presidential candidate …"
 d5:"… news of organic food campaign… campaign…campaign…campaign…"

在这个例子中很理想的排序大概应该是:d4,d3。d1,d2,d5其实是不相关文档。

简单实现

BOW+bit-vector+dotproduct 这是一个最简单的实现。
 1 用文档中的每一个词定义一个维度。称为词袋模型(Bag of Word=BOW)。
 2 用Bit-Vector 表示向量。如果词出现则记为1,否则为0。xi,yi∈{0,1}x_i,y_i \in \{0,1\}xi,yi{0,1}
 3 相似度通过点积(dot product)计算。
 最终表示
 q=(x1,x2....yn),xi∈{0,1}q=(x_1,x_2....y_n),x_i \in \{0,1\}q=(x1,x2....yn),xi{0,1}
 d=(y1,y2...yn),yi∈{0,1}d=(y_1,y_2...y_n),y_i \in \{0,1\}d=(y1,y2...yn),yi{0,1}
 sim(q,d)=x1y1+x2y2+....+xNyN=∑i=1Nxiyisim(q,d)=x_1y_1+x_2y_2+....+x_Ny_N=\sum_{i=1}^{N}x_iy_isim(q,d)=x1y1+x2y2+....+xNyN=i=1Nxiyi
 
 计算一下例子。
 V= {news, about, presidential, campaign, food …. }
 q= (1, 1, 1, 1, 0, …)
 d1= (1, 1, 0, 0, 0, …)
 d2= (1, 1, 0, 1, 0, …)
 d3= (1, 0, 1, 1, 0, …)
 …
 f(q,d1)=11+11+0…=2
 f(q,d2)=11+11+0+1*1+…=3
 …
 本算法中sim(q,d)函数的实质就是表示有多少个不同的查询词出现在文档中。
 在d2,d3,d4文档中各出现了3次,值为3,;在d1,d5文档中各出现了2次,值为2。

进阶实现

BOW+term frequency+dotproduct
 问题:d4中 “presidential ”的次数要比d2多,应该排在前面才对。
 解决策略就是使用词频这个信息。
 最终表示
 $q=(x_1,x_2…y_n),x_i 是词是词w_i在查询语句中出现次数在查询语句中出现次数   d=(y_1,y_2…y_n),y_i 是词是词w_i在文档中出现次数在文档中出现次数   sim(q,d)=x_1y_1+x_2y_2+…+x_Ny_N=\sum_{i=1}^{N}x_iy_i$
 
 计算一下例子。
 f(q,d4)=11+10+12+11+0+…=4
 f(q,d2)=…
 …

TF-IDF

BOW+TF-IDF+dotproduct
 
 
 问题:d2与d3,虽然都命中3个词,但是显然命中presidential比命中about得分要高。presidential含有更重要的信息嘛。
 解决策略:使用逆文档频率IDF,在越多文档中出现,权重越低。
 IDF=logM+1kIDF=log\dfrac{M+1}{k}IDF=logkM+1,M是文档集中文档数量,k是词在多少个文档中出现。
 
 可以看到当k=1的时候,IDF=log(M+1);当k=M的时候IDF接近0。
 
 最终表示
 $q=(x_1,x_2…y_n),x_i 是词是词w_i在查询语句中出现次数在查询语句中出现次数   d=(y_1,y_2…y_n),y_i =c(w_i,d)*IDF(w_i),c(w_i,d)是是w_i在文档中的出现次数,在文档中的出现次数,IDF(w_i)是是w_i在整个文档集中的逆文档频率。在整个文档集中的逆文档频率。   sim(q,d)=x_1y_1+x_2y_2+…+x_Ny_N=\sum_{i=1}^{N}x_iy_i$
 
 计算例子
 V= {news, about, presidential, campaign, food …. }
 IDF(W)= 1.5 1.0 2.5 3.1 1.8
 f(q,d2)=5.6 , f(q,d3)=7.1问题解决。但是f(q,d5)=13.9。我们在最开始就分析了排在前面的文档应该是d4,d3。

TF变形

sim(q,d)=f(q,d)=∑i=1Nxiyi=∑w∈q∩dc(w,q)c(w,d)logM+1df(w)sim(q,d)=f(q,d)=\sum_{i=1}^{N}x_iy_i=\sum_{w \in q\cap d}c(w,q)c(w,d)log\dfrac{M+1}{df(w)}sim(q,d)=f(q,d)=i=1Nxiyi=wqdc(w,q)c(w,d)logdf(w)M+1,df(w)是指词w的文档量。
 问题:d5的打分太高了:13.9,分值高是因为“campaign”的频率太高。当一个词从无到有,有重要价值。但一个文档中包含某个词3-5次,与10次基本上不会有太大差异。所以要适当降低词频的影响。
 解决方法1:被称为“亚线性变换(Sublinear TF Transformation)”。使用log函数。函数1:y=xy=xy=x,函数2:y=log(1+x)y=log(1+x)y=log(1+x),函数1的增长率要比函数2大多了。
 

f(q,d)=∑w∈q∩dc(w,q)ln[1+c(w,d)]logM+1df(w)f(q,d)=\sum_{w \in q\cap d}c(w,q)ln[1+c(w,d)]log\dfrac{M+1}{df(w)}f(q,d)=wqdc(w,q)ln[1+c(w,d)]logdf(w)M+1

解决方法2:被称为“BM25变换”。这种变换需要为词频设置一个最大值。假设最大值为6,超过6的词频都没有区别。函数y=(k+1)xx+ky=\dfrac{(k+1)x}{x+k}y=x+k(k+1)x,函数值会无线接近于k+1。实践证明BM25变换是非常健壮和有效的(robust and effective)。
 
 

f(q,d)=∑w∈q∩dc(w,q)(k+1)c(w,d)c(w,d)+klogM+1df(w)f(q,d)=\sum_{w \in q\cap d}c(w,q)\dfrac{(k+1)c(w,d)}{c(w,d)+k}log\dfrac{M+1}{df(w)}f(q,d)=wqdc(w,q)c(w,d)+k(k+1)c(w,d)logdf(w)M+1

文档长度变形

问题:当一个文档很长的时候,会更容易出现一个词,一个词的频率也更可能高。所以我们需要惩罚一下长文档。一个文档很长可能因为两个原因:一种是文档内容很详细,做了很多必要的描述;还有一种情况是一个大的文档中讲述了很多内容,每个内容一个小的段落,这样的文档其实是一个一个的小文档。在第二种情况中,词的相关度计算出来是不同的:从长文档中计算与从短文档中计算。
 
 解决:算法称为Pivoted Length Normalization。这里同样也有一个参数需要选择:平均文档长度avdl。函数:normalizer=1−b+bdavdlnormalizer=1-b+b\dfrac{d}{avdl}normalizer=1b+bavdld,参数b是惩罚因子,b∈[0,1]b \in [0,1]b[0,1]
 
 normalizer会放在相似度函数f(q,d)f(q,d)f(q,d)的分母上。
 当b=0,所有值都为1,没有惩罚。
 当b>0,当文档长度<<<avdl,normalizer<1,f(q,d)会增加;当文档产度>avdl,normalizer>1,f(q,d)会减小。
 
 最后的公式
 TF亚线性变换:f(q,d)=∑w∈q∩dc(w,q)ln[1+c(w,d)]1−b+bdavdllogM+1df(w)f(q,d)=\sum_{w \in q\cap d}c(w,q)\dfrac{ln[1+c(w,d)]}{1-b+b\dfrac{d}{avdl}}log\dfrac{M+1}{df(w)}f(q,d)=wqdc(w,q)1b+bavdldln[1+c(w,d)]logdf(w)M+1
 BM25变换:f(q,d)=∑w∈q∩dc(w,q)(k+1)c(w,d)c(w,d)+k(1−b+bdavdl)logM+1df(w)f(q,d)=\sum_{w \in q\cap d}c(w,q)\dfrac{(k+1)c(w,d)}{c(w,d)+k(1-b+b\dfrac{d}{avdl})}log\dfrac{M+1}{df(w)}f(q,d)=wqdc(w,q)c(w,d)+k(1b+bavdld)(k+1)c(w,d)logdf(w)M+1
 
 考虑文档长度其实是把词频转为词频率,便于比较。

如何进一步提高VSM的效果

从词的维度改进。例如可以去掉停止词、做词的变换(stemmed words)、使用短语、语义索引、n元模型等待。
 改进相似度函数。例如可以用欧式距离、用余弦距离表示相似度。实践中证明点积还是最适合的。

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

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

相关文章

第二十五期:搞定Linux Shell文本处理工具,看完这篇集锦就够了

Linux Shell是一种基本功&#xff0c;由于怪异的语法加之较差的可读性&#xff0c;通常被Python等脚本代替。既然是基本功&#xff0c;那就需要掌握&#xff0c;毕竟学习Shell脚本的过程中&#xff0c;还是能了解到很多Linux系统的内容。 Linux Shell是一种基本功&#xff0c;由…

【数据结构与算法】递归树

1.树、二叉树 2.二叉查找树 3.平衡二叉树、红黑树 4.递归树 一、什么是递归树 如果我们把这个一层一层的分解过程画成图&#xff0c;它其实就是一棵树。我们给这棵树起一个名字&#xff0c;叫作递归树。 时间复杂度分析的递归树法 分析每一步核心操作的时间复杂度分析树高&…

【02】Kubernets:使用 kubeadm 部署 K8S 集群

写在前面的话 通过上一节&#xff0c;知道了 K8S 有 Master / Node 组成&#xff0c;但是具体怎么个组成法&#xff0c;就是这一节具体谈的内容。概念性的东西我们会尽量以实验的形式将其复现。 部署 K8S 集群 互联网常用的 K8S 集群部署方式&#xff1a; 1. kubeadm&#xff0…

构建一个文本搜索系统

说明&#xff1a;文章内容来源于课程视频和课程ppt。我只学习了课程没有做习题。文章不是翻译&#xff0c;是我对课程的理解。 1 TR的主要构成 在文章中文本检索系统全文检索系统TR System  从图中看到(红色的方框)TR的主要过程有&#xff1a;分词(Tokenizer)、索引(Indexer)…

[Linux][Ubuntu]Linux实习常用操作/Debug总结

一、 Win下装Jupter 1.安装anaconda 配置环境变量 打开jupyter 2.切换目录 装软件 二、 移动复制粘贴上锁文件 sudo nautilus 三、 视频播放 sudo nano /etc/environment 添加QT_X11_NO_MITSHM1 四、 修改阿里源 提高下载速度 1.1打开software&updates 1.2 打…

第二十六期:100 个网络基础知识普及,看完成半个网络高手

本篇文章是关于100个网络基础知识普及&#xff0c;看完成半个网络高手!下面&#xff0c;我们一起来看。 作者&#xff1a;佚名来源 本篇文章是关于100个网络基础知识普及&#xff0c;看完成半个网络高手!下面&#xff0c;我们一起来看。 1)什么是链接? 链接是指两个设备之间…

团队冲刺第一天

今天要做什么&#xff1a;每个人都在网上学习Android软件开发的知识&#xff0c;完成简单的操作&#xff0c;实现简单功能。 明天要做什么&#xff1a;学习各种控件的作用&#xff0c;用法 站立会议照片&#xff1a; 任务看板照片&#xff1a; 燃尽图&#xff1a; 转载于:https…

[Leetcode][第679题][JAVA][24点游戏][回溯][暴力]

【问题描述】[困难] 【解答思路】 回溯 时间复杂度&#xff1a;O(1) 空间复杂度&#xff1a;O(1) class Solution {static final int TARGET 24;static final double EPSILON 1e-6;static final int ADD 0,MULTIPLY1,SUBTRACT 2,DIVIDE 3;public boolean judgePoint24(int…

第二十七期:网络爬虫程序员被抓,我们还敢爬虫吗?细数那些Java爬虫技术

最近&#xff0c;某大数据科技公司因为涉嫌非法抓取某招聘网站用户的简历信息&#xff0c;公司被查封&#xff0c;负责编写抓取程序的程序员也将面临坐牢。 作者&#xff1a;架构之路来源 最近&#xff0c;某大数据科技公司因为涉嫌非法抓取某招聘网站用户的简历信息&#xff…

文本搜索系统的评估

说明&#xff1a;文章内容来源于课程视频和课程ppt。我只学习了课程没有做习题。文章不是翻译&#xff0c;是我对课程的理解。  这部分本应该继续说反馈(FeedBack)的。但是课程中安排的是评估(Evaluation)。评估是用于衡量搜索引擎质量的。反馈是为了提高搜索引擎质量而进行的…

UE3客户端服务器GamePlay框架

客户端(当前玩家)与服务器对应关系图&#xff1a; 整体上看&#xff0c;UE3的GamePlay框架使用的是MVC架构 ① 橙色的Actor对象及橙色箭头相连的成员变量只会被同步给Owner客户端 Controller&#xff1a;控制器&#xff0c;包括PlayerController和AIController InventoryManage…

[Leetcode][第201题][JAVA][数字范围按位与][位运算][Brian Kernighan]

【问题描述】[中等] 【解答思路】 1. 暴力 逐位与 &#xff0c;只需要判断i 0 或 i 2147483647 的话&#xff0c;就跳出 for 循环即可。 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a;O(1) public int rangeBitwiseAnd(int m, int n) {//m 要赋值给 i&#xff0c;所…

文档排序模型--查询似然Query Likelihood

在概率模型中&#xff0c;我们定义排序函数是基于文档与查询之间的相关度、可能性来做的。f(d,q) p(R1|d,q), R ∈{0,1}。概率模型有几个小分类&#xff1a;   经典概率模型——>BM25   语言模型Language Model —–>Query Likelihood   Divergence from rando…

第五十二期:甲骨文遭遇“中年危机”:继阿里后,再被亚马逊永久抛弃

42岁的甲骨文迎来“中年危机”。10月15日&#xff0c;亚马逊AWS技术布道者Jeff Barr在AWS官网宣布亚马逊消费者业务永久弃用甲骨文(Oracle)数据库。 作者&#xff1a;温暖来源&#xff1a;镁客网 42岁的甲骨文迎来“中年危机”。 10月15日&#xff0c;亚马逊AWS技术布道者Jef…

[Leetcode][第461题][JAVA][汉明距离][位运算][Brian Kernighan]

【问题描述】[简单] 【解答思路】 1. 内置位计数功能 时间复杂度&#xff1a;O(1) 空间复杂度&#xff1a;O(1) class Solution {public int hammingDistance(int x, int y) {return Integer.bitCount(x ^ y); } }2. 移位 时间复杂度&#xff1a;O(1) 空间复杂度&#xff1…

第二十八期:Notepad++ 新 Logo 出炉,官网全新改版采用自适应设计

Notepad 的推特帐号发布了关于 notepad 的消息。与旧版 Logo 相比&#xff0c;新 Logo 整体的变化不大&#xff0c;不过官方则表示新版 Logo 比旧版的更吸引人&#xff0c;也更加简洁且更具意义。 新旧 Logo 对比如下&#xff08;左边为旧版 Logo&#xff09;&#xff1a; 除了…

React Navigation 导航栏样式调整+底部角标消息提示

五一佳节匆匆而过&#xff0c;有人选择在外面看人山人海&#xff0c;有人选择宅在家中度过五一&#xff0c;也有人依然坚守在第一线&#xff0c;致敬&#xff01; 这是坚持学习react-native的第二篇文章&#xff0c;可能会迟到&#xff0c;但是绝不会缺席&#xff0c;这篇要涉及…

反馈(Feedback)

说明&#xff1a;文章内容来源于课程视频和课程ppt。我只学习了课程没有做习题。文章不是翻译&#xff0c;是我对课程的理解。  终于到了第四部分了。之前提到过的&#xff0c;一个文本检索系统分词索引打分反馈。前面三部分都已经在前面的文档中介绍了。现在看反馈。反馈是根…

【数据结构与算法】堆

一&#xff1a;如何理解“堆” 1&#xff0c;堆是一个完全二叉树&#xff1b; 完全二叉树要求除了最后一层&#xff0c;其他层的节点都是满的&#xff0c;最后一层的节点都靠左排列。 2&#xff0c;堆中每个节点都必须大于等于&#xff08;或小于等于&#xff09;其子树中每个…

第五十三期:资深技术Leader肺腑忠告:如何成为技术大牛?

这篇文章&#xff0c;对于每一个想成为技术大牛的人来说都值得仔细阅读好几遍。 作者&#xff1a;曹乐来源&#xff1a;再成长一次 图片来自 Pexels 双生说&#xff1a;曹乐是典型学霸&#xff0c;清华本硕&#xff0c;多年互联网大厂研发经验&#xff0c;所以“资深”。我刚…