向量空間模型(VSM:Vector space model)是最常用的相似度計算模型,在自然語言處理中有着廣泛的應用,這裏簡單介紹一下其在進行文檔間相似度計算時的原理。
假設共有十個詞:w1,w2,......,w10,而共有三篇文章,d1,d2和d3。統計所得的詞頻表(杜撰的,爲了便於演示用法)如下:
|
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 |
常用的向量空間公式見下圖:
假設計算d1和d2的相似度,那麼ai和bi分別表示d1和d2中各個詞的詞頻,我們以Cosine爲例:
(得數請讀者自己計算,各個數代表什麼從上表中可以輕易看出)
爲什麼叫向量空間模型呢?其實我們可以把每個詞給看成一個維度,而詞的頻率看成其值(有向),即向量,這樣每篇文章的詞及其頻率就構成了一個i維空間圖,兩個文檔的相似度就是兩個空間圖的接近度。假設文章只有兩維的話,那麼空間圖就可以畫在一個平面直角座標系當中,讀者可以假想兩篇只有兩個詞的文章畫圖進行理解。
我們看到,上面公式的計算量是很大的,尤其當文檔中詞數量巨大時。那麼怎麼樣來提高運算的效率呢?我們可以採取降維的方法。其實只要理解了向量空間模型原理,就不難理解降維的概念。所謂降維,就是降低維度。具體到文檔相似度計算,就是減少詞語的數量。常見的可用於降維的詞以功能詞和停用詞爲主(如:"的","這"等),事實上,採取降維的策略在很多情況下不僅可以提高效率,還可以提高精度。這也不難理解,比如下面兩句話(可能舉地不是特別恰當,見諒):
- 這是我的飯。
- 那是你的飯。
如果把"這"、"那"、"你"、"我"、"是"、"的"都當功能詞處理掉,那麼相似度就是100%。如果都不去掉,相似度可能只有60%。而這兩句話的主題顯示是一樣的。
倒排詞頻平滑(Inverse Document Frequency)方法,就是用整個語料中所有詞語的詞頻來調整某篇語料中詞語的權重,可以理解爲把某篇內詞語的頻率與全局詞頻相乘後再代入公式(因爲相似度是個相對值,所以只要保證它的值落在0和1之間即可)。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
直接使用詞的個數在比較詞數很多和詞數很少的文檔時存在着問題。例如文檔I中含有10000個詞,而詞a出現了10次;文檔II中含有100個詞,而a出現了5次。這樣在相似度計算時,文檔I中a對最後結果的影響比文檔II中的a要大。這顯然是不合理的,因爲a只點文檔I的0.1%而卻佔文檔II的5%。爲了解決這類問題,我們引入詞頻(TF)和反詞頻(IDF)兩個概念。