1. 问题描述

给你若干篇文档,找出这些文档中最相似的两篇文档?

相似性,可以用距离来衡量。而在数学上,可使用余弦来计算两个向量的距离。

\[cos(\vec a, \vec b)=\frac {\vec a*\vec b}{||\vec a||*||\vec b||}\]

因此,用向量来表示文档,然后就可以用余弦来计算两篇文章之间的相似度了。

2. 词袋模型

一篇文档里面有很多很多句子,每个句子又是由一个个的词组成。词袋模型,通俗地讲,就是:把一篇文档看成词袋,里面装着一个个的词。

从而,将一篇文档转化成了一个个的词(或者称之为 term),显然地,文档转化成一个个的词之后,词与词之间的顺序关系丢失了。

3. TF-IDF

在计算文档之间相似度之前,会有一些前提条件:

  • 我们有一个文档集合C,文档集合C里面一共有N篇文档
  • 我们有一个词典D,或者叫词库(Vocabulary),词库里面一共有M个词

3.1 文档到向量的转化

向量是有长度的,向量中的每个元素是数值,比如一个三维实值向量:(1.2,2.8,4.5)

首先将文档通过词袋模型转化成一个个的词,一般地,由于文档中的词都会存在于词典D中,定义一个M维向量(M等于词典大小),若文档中的某个词在词典中出现了,就给这个词赋一个实数值。若未出现,则在相应位置处赋值为0

3.2 使用TF-IDF 衡量每个词(term)的权重

在给定的文档集合C和词典D的情况下,如何来衡量一个词(term)的权重呢?即如何计算这个实数值呢?

3.2.1 tf值

tf(term frequency),是指 term 在某篇文档中出现的频率。假设文档集合中共有10篇文章,词:''国家'',在文档1中出现了6次,那么对于文档1而言,'国家'这个词的tf值为6。因此,tf 是针对单篇文档而言的,即:某个词在这篇文档中出现了多少次。词频是计算文档得分的一个因子,因此为了计算某篇文档的得分,使用的词频指的就是term在这篇文档中出现的次数,而不是term在所有文档中出现的次数。

3.2.2 idf值

'国家'这个词在文档1中的idf值 由 词(term) 出现在各个文档中数目来决定,比如'国家'一共在8篇文档中出现了,那么对于文档1而言,'国家'这个词的idf值由如下公式计算:

\[idf_t=log\frac{N}{df_t}\]

其中,N=10 表示文档集合中共有10篇文章。\(df_t=8\),表示 term 国家 在8篇文档中出现了。因此,idf 值是针对所有文档(文档集合)而言的,即:数一数这个词都出现在哪些文档中。

而TF-IDF,就是将tf值乘以idf值:

\[TF-IDF=tf*idf\]

前面提到,将文档向量化,需要给文档中的每个词赋一个实数值,这个实数值,就是通过tf*idf得到。

4. 总结

在给定文档集合C和词典D的条件下,将某篇文档通过词袋模型表示成一个个的词,而后根据 TF-IDF 为每个词计算出一个实数值;

由于词典D的大小为M,因此将这篇文档转化成一个M维向量,如果词典中某个词未出现在文档中,则这个词的在向量中对应的元素为0,若某个词出现在文档中,则这个词在向量中对应的元素值为这个词的tf-idf值。这样,就把文档表示成向量了,而这就是 向量空间模型(vector space model)。从这里也可看出:向量空间模型并没有catch住词(term)与词(term)之间的关系,它假设各个term之间是相互独立的。即:VSM implies the assumption on the independence between terms
而有了文档向量,也就可以用余弦公式计算文档之间的相似度了。

由于词典一般比较大,比如20万个词左右的汉语词典,而一篇文档中一般只包含几百个词,因此可看出:文档向量是很稀疏的

另外,由于对于文档而言,词与词之间是有顺序的,比如文档开头是哪些词,中间有哪些词,结尾又是哪些词,但表示成向量之后,这个 顺序 信息丢失了。比如下面2篇文档,它们的文档向量是一样的。

Mary is quick than John
John is quick than Mary

总之,在我看来,向量空间模型是一种将文档转化成向量的方式,文档转化成了向量,从而可以在同一维度的空间中表示一个个的文档。向量中的每个元素是一个个的实数,每个元素对应着一个 词(term),实数 是通过tf-idf计算出来的。由此看来,tf-idf也仅仅是一种将词(term)转化成实数的方式,当然我们也可以通过其他方法将 词 转化成实数。而这里的 词 则是由词典定义的,若词典中的某个词 在文档中,则计算这个词的tf-idf值,若某个词不在文档中,则这个词对应的向量元素为0。因此,得到的文档向量是M维的,其中M就是词典的大小---词典中词的个数。

将文档转化成了向量,文档之间的比较,就可以转化成向量的比较。因此,就能回答给定若干篇文档,哪两篇文档最相关这样的问题了。在实际应用中,比如Lucene中的TF-IDF Similarity就是基于VSM来实现的。从VSM Model到Lucene Conceptual Scoring Formula 再到 Lucene Practical Scoring Formula,解释了在实际应用中,我们输入一个查询字符串,Lucene是如何计算文档的得分,从而找出与查询字符串最相关的文档的。

参考:《An Introduction to Information Retrieval》第6章

原文:http://www.cnblogs.com/hapjin/p/8687527.html

向量空间模型(Vector Space Model)的理解的更多相关文章

  1. Solr相似度名词:VSM(Vector Space Model)向量空间模型

    最近想学习下Lucene ,以前运行的Demo就感觉很神奇,什么原理呢,尤其是查找相似度最高的.最优的结果.索性就直接跳到这个问题看,很多资料都提到了VSM(Vector Space Model)即向 ...

  2. 向量空间模型(Vector Space Model)

    搜索结果排序是搜索引擎最核心的构成部分,很大程度上决定了搜索引擎的质量好坏.虽然搜索引擎在实际结果排序时考虑了上百个相关因子,但最重要的因素还是用户查询与网页内容的相关性.(ps:百度最臭名朝著的“竞 ...

  3. 转:Lucene之计算相似度模型VSM(Vector Space Model) : tf-idf与交叉熵关系,cos余弦相似度

    原文:http://blog.csdn.net/zhangbinfly/article/details/7734118 最近想学习下Lucene ,以前运行的Demo就感觉很神奇,什么原理呢,尤其是查 ...

  4. ES搜索排序,文档相关度评分介绍——Vector Space Model

    Vector Space Model The vector space model provides a way of comparing a multiterm query against a do ...

  5. 向量空间模型实现文档查询(Vector Space Model to realize document query)

    xml中文档(query)的结构: <topic> <number>CIRB010TopicZH006</number> <title>科索沃難民潮&l ...

  6. [IR课程笔记]向量空间模型(Vector Space Model)

    VSM思想 把文档表示成R|v|上的向量,从而可以计算文档与文档之间的相似度(根据欧氏距离或者余弦夹角) 那么,如何将文档将文档表示为向量呢? 首先,需要选取基向量/dimensions,基向量须是线 ...

  7. 扩展:向量空间模型算法(Vector Space Model)

  8. 12.扩展:向量空间模型算法(Vector Space Model)

  9. 向量空间模型(VSM)在文档相似度计算上的简单介绍

    C#实现在: http://blog.csdn.net/Felomeng/archive/2009/03/25/4023990.aspx 向量空间模型(VSM:Vector space model)是 ...

随机推荐

  1. Redhat 用代理连外网

    设置 /etc/yum.conf 添加proxy=http://web-proxy.corp.xx.com:8080 /etc/yum.repos.d/rhel-source.repo 里面改成ena ...

  2. HR_Hash Tables: Ransom Note

    1 题目重点:whole words | case-sensitive #!/bin/python3 import math import os import random import re imp ...

  3. Spring 依赖注入优化

    Spring 依赖注入优化 原创: carl.zhao SpringForAll社区 今天 Spring 最大的好处就是依赖注入,关于什么是依赖注入,在Stack Overflow上面有一个问题,如何 ...

  4. 使用Docker for Windows初体验

    https://www.baidu.com/link?url=61Kwadwh6h__2Vmjf7lAKVo1RjhsULAqERcMXYnYzkLKrRVpygwBJVnjultH8zbq& ...

  5. poj2054 Color a Tree

    神题.这题是巨毒瘤... 自己写真可谓是: 排空驭气奔如电,上天入地求之遍 上穷碧落下黄泉,两处茫茫皆不见 由于我们知道:不是树形时,不停选值最大的节点可以得到最小代价. 那么我们就能想出一个错误的贪 ...

  6. A1006. Sign In and Sign Out

    At the beginning of every day, the first person who signs in the computer room will unlock the door, ...

  7. Luogu P4070 [SDOI2016]生成魔咒

    题目链接 \(Click\) \(Here\) 其实是看后缀数组资料看到这个题目的,但是一眼反应显然后缀自动机,每次维护添加节点后的答案贡献即可,唯一不友好的一点是需要平衡树维护,这里因为复杂度不卡而 ...

  8. node.js(小案例)_实现学生信息增删改

    一.前言 本节内容主要对小案例做一个总结: 1.如何开始搭建小项目 2.路由设计 3.模块应用 4.项目源码以及实现过程github地址: 项目演示如下: 二.主要内容 1.项目的关键性js源码: 项 ...

  9. 字节转字符 OutputStreamWriter

    package cn.lideng.demo4; import java.io.FileNotFoundException; import java.io.FileOutputStream; impo ...

  10. 推荐几个Mac插件帮你提升工作效率

    下面这篇文章是小编看到的很好的文章,分享给大家,小编前几天也整理了很多mac专题文章.更多专题,可关注[磨人的小妖精],查看我的文章,也可上[风云社区 SCOEE],查找和下载相关软件资源. (一)综 ...