向量空間模型

向量空間模型是一個把文本文件表示為標識符（比如索引）向量的代數模型。它應用於資訊過濾、資訊檢索、索引以及相關排序。SMART是第一個使用這個模型的資訊檢索系統。

## 定義

文檔和查詢都用向量來表示。

$$d_j = ( w_{1,j} ,w_{2,j} , ... ,w_{t,j} )$$

$$q = ( w_{1,q} ,w_{2,q} , ... ,w_{t,q} )$$

每一維都對應於一個個別的詞組。如果某個詞組出現在了文檔中，那它在向量中的值就非零。已經發展出了不少的方法來計算這些值，這些值叫做（詞組）權重。其中一種最為知名的方式是tf-idf權重（見下面的例子）。

詞組的定義按不同應用而定。典型的詞組就是一個單一的詞、關鍵詞、或者較長的短語。如果將詞語選為詞組，那麼向量的維數就是詞彙表中的詞語個數（出現在語料庫中的不同詞語的個數）。

通過向量運算，可以對各文檔和各查詢作比較。

## 應用

據文檔相似度理論的假設，如要在一次關鍵詞查詢中計算各文檔間的相關排序，只需比較每個文檔向量和原先查詢向量（跟文檔向量的類型是相同的）之間的角度偏差。

實際上，計算向量之間夾角的餘弦比直接計算夾角本身要簡單。

$$\cos{\theta} = \frac{\mathbf{d_2} \cdot \mathbf{q}}{\left\| \mathbf{d_2} \right\| \left \| \mathbf{q} \right\|}$$

其中$\mathbf{d_2} \cdot \mathbf{q}$是文檔向量（即右圖中的d2）和查詢向量（圖中的q）的點乘。$\left\| \mathbf{d_2} \right\|$是向量d2的模，而 $\left\| \mathbf{q} \right\|$是向量q的模。向量的模通過下面的公式來計算：

$$\left\| \mathbf{v} \right\| = \sqrt{\sum_{i=1}^n v_i^2}$$

由於這個模型所考慮的所有向量都是每個元素嚴格非負的，因此如果餘弦值為零，則表示查詢向量和文檔向量是正交的，即不符合（換句話說，就是檢索項在文檔中沒有找到）。如果要了解詳細的資訊可以查看餘弦相似性這條目。

## 範例：tf-idf權重

在Salton，Wong和Yang 提出的傳統向量空間模型中，一個詞組在文檔向量中的權重就是局部參數和全局參數的乘積，這就是著名的tf-idf模型（詞頻-逆向文檔頻率）。文檔的權重向量d就是$\mathbf{v}_d = [w_{1,d}, w_{2,d}, \ldots, w_{N,d}]^T$，其中

$$w_{t,d} = \mathrm{tf}_{t,d} \cdot \log{\frac{|D|}{|\{d' \in D \, | \, t \in d'\}|}}$$

- $\mathrm{tf}_{t,d}$是詞組t在文檔d中出現的頻率（一個局部參數）
- $\log{\frac{|D|}{|\{d' \in D \, | \, t \in d'\}|}}$是逆向文檔頻率（一個全局參數）。$|D|$是文檔集中的文檔總數；$|\{d' \in D \, | \, t \in d'\}|$是含有詞組t的文檔數。

文檔dj和查詢q之間的餘弦相似度通過以下公式來計算：

$$\mathrm{sim}(d_j,q) = \frac{\mathbf{d_j} \cdot \mathbf{q}}{\left\| \mathbf{d_j} \right\| \left \| \mathbf{q} \right\|} = \frac{\sum _{i=1}^N w_{i,j}w_{i,q}}{\sqrt{\sum _{i=1}^N w_{i,j}^2}\sqrt{\sum _{i=1}^N w_{i,q}^2}}$$

在較簡單的詞組計數模型（Term Count Model）中，詞組的權重不包含全局參數，而是單純的計算詞組出現的次數：$w_{t,d} = \mathrm{tf}_{t,d}$。

## 優點

相對於標準布爾模型（Standard Boolean model），向量空間模型具有如下優點：

- 基於線性代數的簡單模型
- 詞組的權重不是二元的
- 文檔和查詢之間的相似度取值是連續的
- 允許根據文檔間可能的相關性來進行排序
- 允許局部匹配

## 局限

向量空間模型有如下局限：

- 不適用於較長的文檔，因為它的相似值不理想（過小的內積和過高的維數）。
- 檢索詞組必須與文檔中出現的詞組精確匹配；詞語子字串可能會導致「假陽性」匹配。
- 語義敏感度不佳；具有相同的語境但使用不同的詞組的文檔不能被關聯起來，導致「假陰性匹配」。
- 詞組在文檔中出現的順序在向量形式中無法表示出來。
- 假定詞組在統計上是獨立的。
- 權重是直觀上獲得的而不夠正式。

然而，這些局限中的多數能夠通過集合各種方法來解決，包括數學上的技術（比如奇異值分解）和詞彙資料庫（比如WordNet）。

## 基於及擴展了向量空間模型的模型

基於及擴展了向量空間模型的模型包括：

- 廣義向量空間模型
- （增強的）基於主題的向量空間模型
- 潛在語義學
- 潛在語義索引
- DSIR模型
- 詞彙鑑別（Term Discrimination）
- Rocchio分類

## 以向量空間模型為工具的軟體

使用向量空間模型做實驗或者想基於它們實現研究服務的人或許會對以下的這些軟體包感興趣。

### 免費開放的軟體資源

- Apache Lucene.這是一個高性能的軟體，用java寫的功能全面的文本搜尋引擎。
- SemanticVectors.語義向量索引，將隨機投影演算法（類似於潛在的語義分析）應用於Apache Lucene構建的文本詞組矩陣。
- Gensim是一個Python+NumPy的向量空間模型的框架。它包含對Tf–idf、潛在的語義索引、隨機投影和潛在的狄利克雷邊界的增值演算法（有效利用記憶體空間）。
- Antonio Gulli開發的 Compressed vector space in C++
- Text to Matrix Generator (TMG)用於一系列特殊文本挖掘的matlab工具箱。（1）指標化（2）檢索（3）降維（4）聚類（5）分類。大多數的TMG都是用matlab編寫的，小部分是用Perl編寫的。它包括了LSI的實現和聚類、NMF以及其他方法。
- SenseClusters，通過潛在的語義分析和單詞的同現矩陣來進行文本和詞組聚類的一個公開軟體包。
- S-Space Package，通過「統計語義」實現的的檢索程序集成。

## 進一步參考

- G. Salton, A. Wong, and C. S. Yang (1975), " A Vector Space Model for Automatic Indexing," Communications of the ACM, vol. 18, nr. 11, pages 613–620. （Article in which a vector space model was presented）
- David Dubin (2004), The Most Influential Paper Gerard Salton Never Wrote （Explains the history of the Vector Space Model and the non-existence of a frequently cited publication）
- Description of the vector space model
- Description of the classic vector space model by Dr E Garcia

## 另見

- 反向索引
- 複合詞組處理（Compound term processing）