C#實現(xiàn)在:
http://blog.csdn.net/Felomeng/archive/2009/03/25/4023990.aspx
向量空間模型(VSM:Vector space model)是最常用的相似度計算模型,在自然語言處理中有著廣泛的應(yīng)用,這里簡單介紹一下其在進行文檔間相似度計算時的原理。
假設(shè)共有十個詞:w1,w2,......,w10,而共有三篇文章,d1,d2和d3。統(tǒng)計所得的詞頻表(杜撰的,為了便于演示用法)如下:
| 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 |
常用的向量空間公式見下圖:
假設(shè)計算d1和d2的相似度,那么ai和bi分別表示d1和d2中各個詞的詞頻,我們以Cosine為例:
(得數(shù)請讀者自己計算,各個數(shù)代表什么從上表中可以輕易看出)
為什么叫向量空間模型呢?其實我們可以把每個詞給看成一個維度,而詞的頻率看成其值(有向),即向量,這樣每篇文章的詞及其頻率就構(gòu)成了一個i維空間圖,兩個文檔的相似度就是兩個空間圖的接近度。假設(shè)文章只有兩維的話,那么空間圖就可以畫在一個平面直角坐標(biāo)系當(dāng)中,讀者可以假想兩篇只有兩個詞的文章畫圖進行理解。
我們看到,上面公式的計算量是很大的,尤其當(dāng)文檔中詞數(shù)量巨大時。那么怎么樣來提高運算的效率呢?我們可以采取降維的方法。其實只要理解了向量空間模型原理,就不難理解降維的概念。所謂降維,就是降低維度。具體到文檔相似度計算,就是減少詞語的數(shù)量。常見的可用于降維的詞以功能詞和停用詞為主(如:"的","這"等),事實上,采取降維的策略在很多情況下不僅可以提高效率,還可以提高精度。這也不難理解,比如下面兩句話(可能舉地不是特別恰當(dāng),見諒):
如果把"這"、"那"、"你"、"我"、"是"、"的"都當(dāng)功能詞處理掉,那么相似度就是100%。如果都不去掉,相似度可能只有60%。而這兩句話的主題顯示是一樣的。
倒排詞頻平滑(Inverse Document Frequency)方法,就是用整個語料中所有詞語的詞頻來調(diào)整某篇語料中詞語的權(quán)重,可以理解為把某篇內(nèi)詞語的頻率與全局詞頻相乘后再代入公式(因為相似度是個相對值,所以只要保證它的值落在0和1之間即可)。
這是一個簡單的向量空間模型,實際應(yīng)用中使用的見《改進向量空間模型》。