C#实现在:

http://blog.csdn.net/Felomeng/archive/2009/03/25/4023990.aspx

向量空间模型(VSM:Vector space model)是最常用的相似度计算模型,在自然语言处理中有着广泛的应用,这里简单介绍一下其在进行文档间相似度计算时的原理。

假设共有十个词:w1,w2,......,w10,而共有三篇文章,d1,d2和d3。统计所得的词频表(杜撰的,为了便于演示用法)如下:

w1

w2

w3

w4

w5

w6

w7

w8

w9

w10

d1

1

2

5

7

9

d2

3

4

6

8

d3

10

11

12

13

14

15

常用的向量空间公式见下图:

假设计算d1和d2的相似度,那么ai和bi分别表示d1和d2中各个词的词频,我们以Cosine为例:

(得数请读者自己计算,各个数代表什么从上表中可以轻易看出)

为什么叫向量空间模型呢?其实我们可以把每个词给看成一个维度,而词的频率看成其值(有向),即向量,这样每篇文章的词及其频率就构成了一个i维空间图,两个文档的相似度就是两个空间图的接近度。假设文章只有两维的话,那么空间图就可以画在一个平面直角坐标系当中,读者可以假想两篇只有两个词的文章画图进行理解。

我们看到,上面公式的计算量是很大的,尤其当文档中词数量巨大时。那么怎么样来提高运算的效率呢?我们可以采取降维的方法。其实只要理解了向量空间模型原理,就不难理解降维的概念。所谓降维,就是降低维度。具体到文档相似度计算,就是减少词语的数量。常见的可用于降维的词以功能词和停用词为主(如:"的","这"等),事实上,采取降维的策略在很多情况下不仅可以提高效率,还可以提高精度。这也不难理解,比如下面两句话(可能举地不是特别恰当,见谅):

  1. 这是我的饭。
  2. 那是你的饭。

如果把"这"、"那"、"你"、"我"、"是"、"的"都当功能词处理掉,那么相似度就是100%。如果都不去掉,相似度可能只有60%。而这两句话的主题显示是一样的。

倒排词频平滑(Inverse Document Frequency)方法,就是用整个语料中所有词语的词频来调整某篇语料中词语的权重,可以理解为把某篇内词语的频率与全局词频相乘后再代入公式(因为相似度是个相对值,所以只要保证它的值落在0和1之间即可)。

这是一个简单的向量空间模型,实际应用中使用的见《改进向量空间模型》。

向量空间模型(VSM)在文档相似度计算上的简单介绍的更多相关文章

  1. 利用Levenshtein Distance (编辑距离)实现文档相似度计算

    1.首先将word文档解压缩为zip /** * 修改后缀名 */ public static String reName(String path){ File file=new File(path) ...

  2. 一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)

    在目前的软件项目中,都会较多的使用到对文档的操作,用于记录和统计相关业务信息.由于系统自身提供了对文档的相关操作,所以在一定程度上极大的简化了软件使用者的工作量. 在.NET项目中如果用户提出了相关文 ...

  3. -bash: 无法为立即文档创建临时文件: 设备上没有空间---记一次报错

    故障发生原因 测试环境,之前用该机器做过docker-compose,后来有需要用到该机器上的docker环境,需要将旧的docker容器全部删除,由于之前启动是使用docker-compose启动的 ...

  4. 前端css盒模型及标准文档流及浮动问题

    1.盒模型 "box model"这一术语是用来设计和布局时使用,然后在网页中基本上都会显示一些方方正正的盒子.我们称为这种盒子叫盒模型. 盒模型有两种:标准模型和IE模型.这里重 ...

  5. gensim LDA模型提取每篇文档所属主题(概率最大主题所在)

    gensim的LDA算法中很容易提取到每篇文章的主题分布矩阵,但是一般地还需要进一步获取每篇文章归属到哪个主题概率最大的数据,这个在检索gensim文档和网络有关文章后,发现竟然没有. 简单写了一下. ...

  6. 【Ansible 文档】【译文】Ad-Hoc 命令介绍

    Introduction To Ad-Hoc Commands Ad-Hoc命令介绍 下面的例子展示了如何使用 /usr/bin/ansible 来运行ad hoc任务. 什么是ad hoc命令? 一 ...

  7. springboot+swagger接口文档企业实践(上)

    目录 1.引言 2.swagger简介 2.1 swagger 介绍 2.2 springfox.swagger与springboot 3. 使用springboot+swagger构建接口文档 3. ...

  8. 基于Picture Library创建的图片文档库中的上传多个文件功能(upload multiple files)报错怎么解决?

    复现过程 首先,我创建了一个基于Picture Library的图片文档库,名字是 Pic Lib 创建完毕后,我点击它的Upload 下拉菜单,点击Upload Picture按钮 在弹出的对话框中 ...

  9. GrapeCity Documents for Excel 文档API组件 V2.2 新特性介绍

    GrapeCity Documents for Excel 文档API组件 V2.2 正式发布,本次新版本包含诸多重量级产品功能,如:将带有形状的电子表格导出为 PDF.控制分页和电子表格内容.将Ex ...

随机推荐

  1. JAVA基础知识总结:十七

    一.转换流 作用:实现将字节流转换为字符流 a.InputStreamReader:字节字符转换输入流:字节输入流----->字符输入流 b.OutputStreamWriter:字节字符转换输 ...

  2. js怎么把一个数组里面的值作为一个属性添加到另一数组包含的对象里(小程序)

    上面这个需求我说的似乎不太明白,之前也是没有碰到过,也是最近在搞小程序,涉及到小程序前后台数据交互,展示的部分!!不太明白没关系等会我给大家举个例子,就明白了说起来有点拗口,一看就明白了,其实如果是原 ...

  3. FireFox(火狐)浏览器的相关问题

    如何加快FireFox(火狐)浏览器浏览网页速度 大部分网页加载缓慢的原因:1.宽带连接.网速不稳定2.浏览器本身问题,如果多开窗口浏览会占大量内存,而且磁盘空间没有做过优化,就这样电脑资源不够用,也 ...

  4. 20171022xlVBA练手提取入所记录

    Sub GetWordText改进() Dim Wb As Workbook Dim Sht As Worksheet Dim Rng As Range Dim wdApp As Object Dim ...

  5. git 提交代码场景

    1.首次提交代码到master git init git add . git commit -m '' git remote add origin +address git push -u origi ...

  6. display: flex的兼容性写法

    display: -moz-box; /*firefox*/ display: -ms-flexbox; /*IE10*/ display: -webkit-box; /*Safari*/ displ ...

  7. python-day71--django多表双下划线查询及分组聚合及F/Q查询

    #====================================双下划线的跨表查询===============# 前提 此时 related_name=bookList 属性查询: # 查 ...

  8. ubuntu 安装国际qq

    下载地址::http://pan.baidu.com/s/1nt1Nu6P 解压后,输入终端:suao dpkg -i 解压的文件名称.deb 如果你前面安装过qq,你可以输入sudo dpkg -P ...

  9. leetcode-algorithms-29 Divide Two Integers

    leetcode-algorithms-29 Divide Two Integers Given two integers dividend and divisor, divide two integ ...

  10. java动态代理机制

    首先了解代理设计模式,其思想是为其他对象提供一种代理以控制对这个对象的访问. java动态代理就是遵循这种思想,spring中的AOP实现原理就是java的动态代理. 在java的动态代理机制中,有两 ...