随笔 - 109  文章 - 0  评论 - 32 
  2010年1月7日

向量空间模型将文档映射为一个特征向量V(d)=(t11(d);…;tn, ωn(d)),其中ti(i=1,2, …,n)为一列互不雷同的词条项,ωi(d)为ti在d中的权值, 一般被定义为ti在d中出现频率tfi(d)的函数,即 clip_image002

在信息检索中常用的词条权值计算方法为 TF-IDF 函数,其中N为所有文档的数目,ni为含有词条ti的文档数目。TF-IDF公式有很多变种,下面是一个常用的TF-IDF公式: clip_image004

clip_image002[6]

根据TF-IDF公式,文档集中包含某一词条的文档越多,说明它区分文档类别属性的能力越低,其权值越小;另一方面,某一文档中某一词条出现的频率越高,说明它区分文档内容属性的能力越强,其权值越大。

两文档之间的相似度可以用其对应的向量之间的夹角余弦来表示,即文档di,dj的相似度可以表示为

clip_image008

进行查询的过程中,先将查询条件Q进行向量化,主要依据布尔模型:

当ti在查询条件Q中时,将对应的第i坐标置为1,否则置为0,即

clip_image010

从而文档d与查询Q的相似度为

clip_image012

根据文档之间的相似度,结合机器学习的一些算法如神经网络算法,K-近邻算法和贝叶斯分类算法等,可以将文档集分类划分为一些小的文档子集。

在查询过程中,可以计算出每个文档与查询的相似度,进而可以根据相似度的大小,将查询的结果进行排序。

向量空间模型可以实现文档的自动分类和对查询结果的相似度排序,能够有效提高检索效率;它的缺点是相似度的计算量大,当有新文档加入时,则必须重新计算词的权值。


文章来自:”http://hi.baidu.com/my%5Flough/blog/item/ed82560017191b82e850cdcf%2Ehtml
posted @ 2010-01-07 14:24 Myhsg 阅读(91) 评论(0) 编辑

直接使用词的个数在比较词数很多和词数很少的文档时存在着问题。例如文档I中含有10000个词,而词a出现了10次;文档II中含有100个词,而a出现了5次。这样在相似度计算时,文档Ia对最后结果的影响比文档II中的a要大。这显然是不合理的,因为a只点文档I0.1%而却占文档II5%。为了解决这类问题,我们引入词频(TF)和反词频(IDF)两个概念。

其中TF = f/m,其中f表示当前词在当前文档中出现的次数,而m表示当前文档中出现次数最多的词的次数。这样TF值就在01之间。这样做可以减少文档中词的频率不合理分布所引起的误差。

IDF = log2 (n/nj) + 1,其中n表示在整个语料中文档的总数,而nj表示含有当前词的文档数。这样做可以减少在语料范围内词频分布不均匀造成的相似度误差。

最后,将这两项相乘得到T = TF * IDF,用这个量替代《向量空间模型(VSM)在文档相似度计算上的简单介绍》中的简单词频,就可以得到实际应用中常用的向量空间模型了。

posted @ 2010-01-07 10:59 Myhsg 阅读(51) 评论(0) 编辑

一: 不同区域的权重计算

1.  对出现在文档的不通区域的term赋予不同的权值,例如title,author,body等,这样需要在倒排表中记录term每一次出现的位置

2. 对不同的区域赋予不通的权值,Gi, 使得 Sum(Gi) = 1

3. 对于这个Gi的值,可以通过机器学习的方法来确定:给定一个文档集合和query,以及query与文档之间的相似性,然后假定一个表达式,采用这个样本来计算各种系数

二:出现频率的权重计算

1. 在这种模型下,文档被认为是词的集合,词的出现位置和顺序都不重要,重要的是词的出现次数,同样地query也做这样的处理,因此“我比你好”和“你比我好” 是一样的

1. term在某一篇文档中的频率tf, 在一个文档集合内的频率cf,在文档集合内包含该term的文档数df

2. 如果只用tf,则语气词等的权重会最大,或者是专业文章内,例如自动化的文章中自动化会出现很多次,因此用自动化就不能区分开这些文章,因此要借助于cf或者df

3. 由于df比cf具有更好的作用来区分不同词与文档的相关性,因此采用df配合tf来决定term在文档里的权重

4. 定义idf = log(N / df), N是文档总数

5. term的权重 = tf * idf

6. 因此,定义query与文档的权重关系为:score(q,d) = for t in q :  sum += tf(t,d) * idf(t)

7. 因此,将文档表示为一个term以及term权重的向量,V = (t1, t2, ..., tn), 因此计算V1 与 V2的相似性可以如下的公式:

sim(V1, V2) = V1 * V2 / (|V1| * | V2|), 分子是向量的点乘,分母是向量长度的乘积,如果将V1, V2表示为有方向的直线,这实际是在计算这两条线夹角的cos值

8. 将query也看成是term的向量集合,query中的term权重可以简单地设定为相等

三. 对tf,df的一些变化

1. 一般不会说如果词在文档内出现20次,则记为20,因此必须采用公式来计算tf,一般是tf = 1 + log(出现次数)

2. 上面计算出来的tf会在很大的范围内,差别很大,因此需要将其范围变小,同时引入平滑因子来降低不同值之间的差距,缩小范围是因为tf需要在不同的文档间计算,否则一篇很长的文章内的词会具有很大的tf值,这样会降低其他文章的权重,会影响相关性。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tianqio/archive/2009/05/24/4212434.aspx

posted @ 2010-01-07 10:54 Myhsg 阅读(56) 评论(0) 编辑