量空间模型
在向量空间模型中,文本泛指各种机器可读的记录。用D(Document)表示,特征项(Term,用t表示)是指出现在文档D中且能够代表该文档 内容的基本语言单位,主要是由词或者短语构成,文本可以用特征项集表示为D(T1,T2,…,Tn),其中Tk是特征项,1<=k<=N。例 如一篇文档中有a、b、c、d四个特征项,那么这篇文档就可以表示为D(a,b,c,d)。对含有n个特征项的文本而言,通常会给每个特征项赋予一定的权 重表示其重要程度。即D=D(T1,W1;T2,W2;…,Tn,Wn),简记为D=D(W1,W2,…,Wn),我们把它叫做文本D的向量表示。其中 Wk是Tk的权重,1<=k<=N。在上面那个例子中,假设a、b、c、d的权重分别为30,20,20,10,那么该文本的向量表示为 D(30,20,20,10)。在向量空间模型中,两个文本D1和D2之间的内容相关度Sim(D1,D2)常用向量之间夹角的余弦值表示,公式为:
其中,W1k、W2k分别表示文本D1和D2第K个特征项的权值,1<=k<=N。
在
自动归类中,我们可以利用类似的方法来计算待归类文档和某类目的相关度。例如文本D1的特征项为a,b,c,d,权值分别为30,20,20,10,类目
C1的特征项为a,c,d,e,权值分别为40,30,20,10,则D1的向量表示为D1(30,20,20,10,0),C1的向量表示为
C1(40,0,30,20,10),则根据上式计算出来的文本D1与类目C1相关度是0.86
那个相关度0.86是怎么算出来的?
是这样的,抛开你的前面的赘述
在数学当中,n维向量是 V{v1, v2, v3, ..., vn}
他的模: |v| = sqrt ( v1*v1 + v2*v2 + ... + vn*vn )
两个向量的点击 m*n = n1*m1 + n2*m2 + ...... + nn*mn
相似度 = (m*n) /(|m|*|n|)
物理意义就是两个向量的空间夹角的余弦数值
对于你的例子
d1*c1 = 30*40 + 20*0 + 20*30 + 10*20 + 0*10 = 2000
|d1| = sqrt(30*30 +20*20 + 20*20 + 10*10 + 0*0) = sqrt(1800)
|c1| = sqrt(40*40 + 0*0 + 30*30 + 20*20 + 10*10) = sqrt(3000)
相似度 = d1*c1/(|d1|*|c1|)= 2000/sqrt(1800*3000)= 0.86066
tf即term frequency, 表示一个term t出现在document d中的次数,这是文档中一个很重要的概念。出现次数更多意味着重要程度越高,但是需要注意的是,相关度的提高并不是和次数的提高成同比的。因此通常tf需要做如下的处理
w1= log10(tf+1)
这样做就是要弱化次数对于相关度的影响
df即document frequency,表示一个term在整个文档集中出现的频率。与tf相反,一个term的重要程度是随着它在语料库中出现的频率成反比的。比如 and,or等词在几乎所有文档中都出现,那么这些词的意义就很弱,而一些专业词汇只在几篇文档中出现过,显然意义更加重要。idf就是df取倒数,这里 只是为了表示方便。
同样,为了弱化频率的效果,我们也做如下处理
w2= log10(N/df) 其中N为文档总数,df是文档term在所有文档集合中出现的次数。
需要注明的是,tf和idf的计算有很多中变体,不一定要完全使用上面的公式,很多情况还要根据文档集合的大小具体分析。
有了上面的tfidf作为权重,我们可以很简单的计算所有词的权重,然后用一个N维的向量来表示一个文档,同样用N维的向量来表示query,query中如果没有对应的term,则该维权重为0。
于是,利用我们的数据知识,我们可以知道,在同样的空间中,如果两个向量的夹角越小,说明两个向量越相似,反之两个向量越无关。因此使用cosine定理,我们可以很简单地得到向量之间的相似度
空间向量模型可以说是信息检索中相当常见并且非常重要的模型之一。理解起来非常简单直观,并且效果也是不错的。希望对大家有所帮助。