机器学习基础5--文档相似性检索与度量算法

案例:在阅读文章时,推荐相似的文章.

这个案例简单粗暴,尤其是我看小说的时候,闹书荒的时候,真的很希望有这样的功能.(PS:我现在就职于某小说公司)

那么,如何衡量文章之间的相似度?

在开始讲之前,先提一下elasticsearch.

elasticsearch所使用的索引方式被称为倒排索引.将文档拆分成一个一个的词,然后记录该词出现在哪篇文档的哪个位置.具体解释请参照维基百科.



而在这里,我们将使用和倒排索引类似的方法--词袋模型.

我们有如下一句话.

“Carlos calls the sport futbol. Emily calls the sport soccer.”

1 2 0 2 2 0 1 0 1 1 ...
carlos the tree calls sport cat futbal dog soccer emily ...

我们忽略单词顺序,将其放入一个语料库中.

假设,我有2篇文章已经进行了统计,如下:

1 0 0 0 5 3 0 0 1 0 0 0 0

3 0 0 0 2 0 0 1 0 1 0 0 0

那么,如何判断2篇文章的相似度?

我们使用向量点乘的方式,计算该值.

  1*3 + 0*0 + 0*0 ... + 5*2 + ... = 13

我们计算出相似度为13.

我们再计算下面这一篇:

1 0 0 0 5 3 0 0 1 0 0 0 0

0 0 1 0 0 0 9 0 0 6 0 4 0

  0 + 0 + 0 .... = 0

发现相似度为0.

问题:

  如果我们把文章扩展2倍,看看会发生什么问题.

原来:

  1 0 0 0 5 3 0 0 1 0 0 0 0

  3 0 0 0 2 0 0 1 0 1 0 0 0

相似度=13

扩展2倍:

  2 0 0 0 10 6 0 0 2 0 0 0 0

  6 0 0 0 4  0 0 2 0 2 0 0 2

相似度=52

我们仅仅是将篇幅扩展了2倍而已,然而相似度却变了.我们可以发现,对于越长的文章,这个效果越明显.

那么,应该怎样去解决这个问题?



向量归一化

使用向量归一化,可以将不同长度文章放在同等地位,就不会出现上面的问题了.

计算向量范数:

  计算元素平分总和,取其平方根.

  



区分常用词和生僻词,并增加生僻词的重要性:

  常用词比如说:“the”, “player”, “field”, “goal”

  生僻词比如说:“futbol”, “Messi”

为什么要增加生僻词的重要性呢?

  很容易理解,通常来说,生僻词更能描述这篇文字的独特之处.

那我们应该如何去做:

  在语料库中比较少见的词称为生僻词,增加这些词的权重,等价于强调那些仅在部分文档中出现的词.

  同时,对每个单词,根据其出现在语料库中的文档数,减少权重.

我们将其称为局部常见和全局罕见.我们要找的,就是某种局部出现率和全局罕有率的平衡.

TF-IDF(词频--逆向文件频率法):

  TF,即统计单词出现次数.

  IDF,则是用来根据它来减小这个数的权重.

  下面是IDF的计算方法:

    

为什么使用这个计算公式?

  如公式所示:

    当docs using word越大时,公式越接近log1 = 0

    当docs using word越小时,公式越接近logLARGE -> large

假如: 在64篇文档中,单词the在63篇文档出现1000次,Messi在3篇文档出现5次.以2为底.

  the: log(64/1+63) = 0

  Messi: log(64/1+3) = 4

然后tf * idf

  the: 1000 * 0 = 0

  Messi: 4 * 5 = 20



我们需要一个函数:

  定义一个距离,用来衡量相似度.

1. 我们可以计算本文章和其他文章的相似度,返回一个最优结果.

2. 我们可以计算本文章和其他文章的相似度,返回k个最相关的结果(k-近邻搜索).

end


课程:机器学习基础:案例研究(华盛顿大学)

视频链接: https://www.coursera.org/learn/ml-foundations/lecture/EPR3S/clustering-documents-task-overview

week4 Algorithms for retrieval and measuring similarity of documents

原文地址:https://www.cnblogs.com/redheat/p/9275271.html

时间: 2024-10-28 15:25:36

机器学习基础5--文档相似性检索与度量算法的相关文章

四.OC基础--1.文档安装和方法重载,2.self和super&static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&私有方法,6.description方法

四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 3. 方法重载: 是指在一个类中定义多个同名的方法 在OC中没有重载 2.self和super&static, self和super: 1. self理解: 谁调用当前方法, self就代表谁. 比如: 在对象方法中,self代表的是对象, 因为只有对象才可以调用对象方法 在类方法中, self代表的

用Python做SVD文档聚类---奇异值分解----文档相似性----LSI(潜在语义分析)

转载请注明出处:电子科技大学EClab——落叶花开http://www.cnblogs.com/nlp-yekai/p/3848528.html SVD,即奇异值分解,在自然语言处理中,用来做潜在语义分析即LSI,或者LSA.最早见文章 An introduction to latent semantic analysis SVD的有关资料,从很多大牛的博客中整理了一下,然后自己写了个python版本,放上来,跟大家分享- 关于SVD的讲解,参考博客 本文由LeftNotEasy发布于http:

服务端零基础架设文档

python基础环境搭建 window下环境变量设置 设置后可以方便的使用python命令行,以及python路径下的Script工具. 1.python的安装路径 2.python script 工具的路径 这两个路径加入到path环境变量中去 pywin32 安装 在window下需要访问系统api的地方都需要用到pywin32.可以根据自己的python版本去下载对应的pywin32的安装包.下载地址:http://sourceforge.net/projects/pywin32/file

使用Lucene实现多个文档关键词检索demo(一)

在进行demo前先到http://www.ibm.com/developerworks/cn/java/j-lo-lucene1/了解关于lucene的一些基本概念,忽略其中的代码实例,因为年代久远,而我的这篇文档正是补充其中代码部分. 了解了基本概念后,接下来就可以开始完成demo了. 首先在http://www.apache.org/dyn/closer.cgi/lucene/java/4.10.0下载lucene包,这里我使用的是最新的4.10版,由于最新版与网上其他lucene使用dem

使用Lucene实现多个文档关键词检索demo(二)

上次在使用Lucene建立索引时使用的时自带的StandAnalyzer分词器,而这个分词器在对中文进行分词时只是机械的按字进行划分,因此使用它lucene就不能很好的对中文索引,也就不能实现对中文关键词的检索了,因此其实上次的实践只能对英文进行. 为了解决这个问题,可以使用IKAnalyzer,它是以开源项目Lucene为应用主体的,结合词典分词和文法分析算法的中文分词组件.它支持中英文等分词. 接下来就用它来改善检索功能,首先是下载IKAnalyzer开发包,我将开发包上传到了这里密钥:7j

S1/软件技术基础/02-Word文档编辑

设置自动更正选项:单击“office按钮”→“Word选项”→“校对”→“自动更正选项”按钮,打击后打开“自动更正”对话框,我们就可以根据提示信息进行设置. 使用修订功能:单击“审阅”功能选项卡→“修订”功能面板→“修订”按钮,吃屎Word文档就进入了修订状态.而后你对他的删除和修改等操作都是红色的修订字.修订完以后,取消修订状态,别人就可以根据你的修订修改文档了.

UI 基础----Xcode 文档路径,模拟器路径

Xcode文档安装路径 /Applications/Xcode.app/Contents/Developer/Documentation/DocSets Xcode模拟器安装路径 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs 著作权声明:本文为作者原创,欢迎转载分享.请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!

angular基础入门文档以及博客汇集

angular入门 anrualar知识点 相对应文档 来源 注解析 ng-class http://www.cnblogs.com/whitewolf/archive/2013/05/22/3092184.html CSDN 实现class的控制                                                                                                                              

软件基础1Word文档编辑

word文档编辑 启动Word2010 创建文档,<你好word>. 编辑文字. 保存的三种方式. ctrl+s. 点击文件选择保存,或另存为. 快速工具栏保存按钮. 设置字体 1.通过工具栏设置,选择或输入,要设置的字体和字号. 2.通过右键,选择字体可以进行详细字体设计 复制粘贴和全选 1.ctrl+A全选或按住鼠标左键选择要复制或剪切的文字. 2.ctrl+C复制 3.ctrl+V粘贴 4.ctrl+X剪切 5也可以通过剪切版进行复制粘贴,剪切版可以保存多个复制内容 查找 快捷键ctrl