免费域名申请网站空间,ui设计做网站,办公室装饰,万网有网站建设吗向量空间模型VSM#xff1a;
VSM的介绍#xff1a;
一个文档可以由文档中的一系列关键词组成#xff0c;而VSM则是用这些关键词的向量组成一篇文档#xff0c;其中的每个分量代表词项在文档中的相对重要性。
VSM的例子#xff1a;
比如说#xff0c;一个文档有分词和去停…向量空间模型VSM
VSM的介绍
一个文档可以由文档中的一系列关键词组成而VSM则是用这些关键词的向量组成一篇文档其中的每个分量代表词项在文档中的相对重要性。
VSM的例子
比如说一个文档有分词和去停用词之后有N个关键词或许去重后就有M个关键词文档关键词相应的表示为d1,d2,d3,...,dn而每个关键词都有一个对应的权重w1,w1,...,wn。对于一篇文档来说或许所含的关键词项比较少文档向量化后的向量维度可能不是很大。而对于多个文档2篇文档或两篇文档以上则需要合并所有文档的关键词关键词不能重复形成一个不重复的关键词集合这个关键词集合的个数就是每个文档向量化后的向量的维度。打个比方说总共有2篇文档A和B其中A有5个不重复的关键词a1,a2,a3,a4,a5,B有6个关键词b1,b2,b3,b4,b5,b6,而且假设b1和a3重复则可以形成一个简单的关键词集a1,a2,a3,a4,a5,,b2,b3,b4,b5,b6则A文档的向量可以表示为ta1,ta2,ta3,ta4,ta5,0,0,0,0,0,B文档可以表示为0,0,tb1,0,0,tb2,tb3,tb4,tb5,tb6其中的tb表示的对应的词汇的权重。
最后关键词的权重一般都是有TF-IDF来表示这样的表示更加科学更能反映出关键词在文档中的重要性而如果仅仅是为数不大的文档进行比较并且关键词集也不是特别大则可以采用词项的词频来表示其权重这种表示方法其实不怎么科学。
TF-IDF权重计算
TF的由来
以前在文档搜索的时候我们只考虑词项在不在文档中在就是1不在就是0。其实这并不科学因为那些出现了很多次的词项和只出现了一次的词项会处于等同的地位就是大家都是1.按照常理来说文档中词项出现的频率越高那么就意味着这个词项在文档中的地位就越高相应的权重就越大。而这个权重就是词项出现的次数这样的权重计算结果被称为词频term frequency,用TF来表示。
IDF的出现
在用TF来表示权重的时候会出现一个严重的问题就是所有 的词项都被认为是一样重要的。但在实际中某些词项对文本相关性的计算来说毫无意义举个例子所有的文档都含有汽车这个词汇那么这个词汇就没有区分能力。解决这个问题的直接办法就是让那些在文档集合中出现频率较高的词项获得一个比较低的权重而那些文档出现频率较低的词项应该获得一个较高的权重。
为了获得出现词项T的所有的文档的数目我们需要引进一个文档频率df。由于df一般都比较大为了便于计算需要把它映射成一个较小的范围。我们假设一个文档集里的所有的文档的数目是N而词项的逆文档频率IDF。计算的表达式如下所示通过这个idf我们就可以实现罕见词的idf比较高高频词的idf比较低。
TF-IDF的计算
TF-IDF TF * IDF
有了这个公式我们就可以对文档向量化后的每个词给予一个权重若不含这个词则权重为0。
余弦相似度的计算
有了上面的基础知识我们可以将每个分好词和去停用词的文档进行文档向量化并计算出每一个词项的权重而且每个文档的向量的维度都是一样的我们比较两篇文档的相似性就可以通过计算这两个向量之间的cos夹角来得出。下面给出cos的计算公式分母是每篇文档向量的模的乘积分子是两个向量的乘积cos值越趋向于1则说明两篇文档越相似反之越不相似。
文本比较实例
对文本进行去停用词和分词
文本未分词前如下图所示文本分词和去停用词后如下图所示词频统计和文档向量化
对经过上一步处理过的文档我们可以统计每个文档中的词项的词频并且将其向量化下面我直接给出文档向量化之后的结果。注意在这里由于只是比较两篇文档的相似性所以我只用了tf来作为词项的权重并未使用tf-idf向量化后的结果是
[1,1,1,1,1,1,1,1,1,1,1,1,1,1]
两篇文档进行相似度的计算我会给出两篇文档的原文和最终计算的相似度
文档原文如下所示文档A的内容文档B的内容余弦相似度代码实现
1 importmath2 #两篇待比较的文档的路径
3 sourcefile 1.txt
4 s2 2.txt
5
6 #关键词统计和词频统计以列表形式返回
7 defCount(resfile):8 t {}9 infile open(resfile, r, encodingutf-8)10 f infile.readlines()11 count len(f)12 #print(count)
13 infile.close()14
15 s open(resfile, r, encodingutf-8)16 i 017 while i