在NLP之詞袋模型一中介紹了最基本利用詞袋模型(Bag of Words)進行詞向量表達對方法,本文介紹幾種提升詞袋模型性能的方法。
提升詞袋模型性能的方法主要在以下幾個方面:
- 詞袋的管理
- 詞向量表達方法的選擇
詞袋的管理
管理詞袋包括:詞袋的創建、詞袋的維護。
爲了更好的管理詞袋,我們首先考慮以下幾個方面:
- 詞袋可能會很大,特別是當我們處理較多文本的時候。
- 詞袋很大的話,容易導致詞向量比較稀疏(即0值特別多)。
因此,通過合理的方法壓縮詞袋的大小是很有必要的。壓縮詞袋的方法包括且不限於:
- 忽略人名、地名等對象的名字
- 忽略標點符號
- 忽略高頻且無意義的詞,如:a,the,的,了
- 自動改正拼寫錯誤的詞
- 將單詞的變形(如過去式、過去分詞)統一轉化爲詞幹
- 。。。
此外,還有一種略微複雜點的方法:用詞組來組成詞袋。以前詞袋中是一個個的單詞,現在換成詞組的形式,不僅可以減少詞袋的size,而且會更有意義。這種方法就是N-gram。
N-gram
什麼是N-gram,看下面幾個例子就明白了。
2-gram下對上文第一句話的分詞:
“it was”
“was the”
“the best”
“best of”
“of times”
詞向量表達方法的選擇
詞向量中值的分值(數值大小)
一旦選擇了詞彙表,就需要對示例文檔中單詞的出現進行評分。
在上文的示例中,我們已經看到了一種非常簡單的評分方法:對單詞存在與否的二進制評分。
還有一些額外的簡單評分方法包括:
- 計數:計算每個單詞在文檔中出現的次數。
- 頻率:計算文檔中所有單詞中每個單詞出現在文檔中的頻率。
使用hash算法
計算機科學中的哈希函數是一種將數據映射到固定大小的數字集的數學運算。我們可以使用hash(word)的值來表示文本。 這解決了對於大文本語料庫具有非常大的詞彙表的問題,因爲我們可以選擇哈希空間的大小,進而降低hash後的詞向量的維度和稀疏程度。
Google提出的word2vec算法本質上就是一種hash算法。
TF-IDF
對單詞頻率進行評分的問題在於,高頻率的單詞在文檔中開始占主導地位(例如,較大的分數),但它所包含的信息量可能沒有一些中頻率的單詞來得多。比如在科研論文的分類裏,論文中的常常會多次提及一項技術的專有名詞,但該專有名詞的詞頻可能仍然低於“驗證”,“研究”這種詞。
一種方法是通過它們在所有文檔(即語料庫)中出現的頻率來重新調整單詞的頻率,對那些在所有文檔中頻繁出現的頻繁單詞(如“the”)的分數進行一定的衰減。這種評分方法稱爲TF-IDF,其中:
- TF:是當前文檔中單詞頻率的得分,,其中,歸一化係數通常是最高頻單詞在文本中出現的次數。
- IDF:是對文檔中單詞的罕見程度的評分,。
- TF-IDF:兩者相乘,TF-IDF = .
關於TF-IDF的更多信息,詳見阮一峯的博客。