詞袋模型的通俗介紹
更多深度文章,請關注雲計算頻道:https://yq.aliyun.com/cloud
所謂的詞袋(Bag-of-words)模型是一種用機器學習算法對文本進行建模時表示文本數據的方法。
在本教程中,你將了解到自然語言處理中的特征抽取方法。
完成本教程後,你將知道:
1.什麼是詞袋(Bag-of-words)模型,以及為什麼需要用它來表示文本。
2.如何為一組文檔開發一個詞袋(Bag-of-word)模型。
3.如何使用不同的技術準備詞匯和單詞。
教程概述
本教程分為6部分; 它們是:
1ã文本問題。
2ã什麼是詞袋(Bag-of-Words)?
3ãBag-of-Words模型的例子。
4ã管理詞匯(managing vocabulary)。
5ã得分詞(scoring words)
6ã詞袋(Bag-of-Words)的局限。
1、文本問題
機器學習這樣的技術比較喜歡被定義好的固定長度的輸入和輸出,因此不固定輸入輸出是文本建模的一個問題。
機器學習算法不能直接處理原始文本,文本必須轉換成數字。具體來說,是數字的向量。
“在語言處理中,向量x是由文本數據派生而來的,以反映文本的各種語言屬性。”在自然語言處理中神經網絡方法,2017年。
這被稱為特征提取或特征編碼。這是一種流行的、簡單的文本數據提取方法被稱為文本的詞匯模型。
2、什麼是詞袋(Bag-of-Words)?
一個簡單的詞袋模型(BOW),是一種使用機器學習算法。從文本中提取特征的方法。該方法非常簡單和靈活,可以用於從文檔中提取各種功能的各種方法。詞袋(Bag-of-words)是描述文檔中單詞出現的文本的一種表示形式。它涉及兩件方麵:
1.已知詞匯的集合。
2.測試已知單詞的存在。
因為文檔中單詞是以沒有邏輯的順序的放置,所以稱為單詞的“袋子”。該模型隻關注文檔中是否出現已知的單詞,並不關注文檔中的出現的單詞。
“bag-of-words方法(BOW)是句子和文件的一個非常常見的特征提取程序。在這種方法中,我們查看文本中單詞的直方圖,也就是將每個單詞計數作為一個特性。”- 自然語言處理中的神經網絡方法,2017。
詞袋(bag-of-words)可以像你喜歡的那樣簡單或複雜。其複雜性在於決定如何設計已知單詞(或令牌)的詞匯量以及如何統計已知單詞的存在。
接下來我們將仔細研究這兩個問題。
3、詞袋(Bag-of-Words)模型的例子
讓我們用一個有效的例子來製作一個詞袋(bag-of-words)模型。
步驟1:收集數據
以下是Gutenberg項目中Charles Dickens的《雙城記》一書中的前幾行文字。
“It was the best of times,
it was the worst of times,
it was the age of wisdom,
it was the age of foolishness,”
對於這個小示例,我們將每一行視為一個單獨的“文檔”,將4行視為整個文檔。
步驟2:設計詞匯
現在我們可以列出我們的模型詞匯表中的所有單詞:
• “it”
• “was”
• “the”
• “best”
• “of”
• “times”
• “worst”
• “age”
• “wisdom”
• “foolishness”
這是一個由包括24個詞組成的語料庫中其中包含10個詞匯。
步驟3:創建文檔向量
下一步是在每個文檔中記錄單詞。目的是將自由文本的每個文檔轉換為一個文本向量,這樣我們就可以將其用作機器學習模型的輸入或輸出。
因為我們知道詞匯有10,所以我們可以使用固定長度為10的文檔,來表示向量中的每一個單詞的位置。
最簡單的設計方法是將單詞的存在標記為布爾值,0表示缺席,1表示存在。使用我們的詞匯表中列出的任意順序排列,我們可以通過第一個文檔(“It was the best of times”),並將其轉換為二進製向量。
該文件的評分如下所示:
· “it” = 1
· “was” = 1
· “the” = 1
· “best” = 1
· “of” = 1
· “times” = 1
· “worst” = 0
· “age” = 0
· “wisdom” = 0
· “foolishness” = 0
作為二進製向量,如下所示:
[1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
其他三份文檔如下:
"it was the worst of times" = [1, 1, 1, 0, 1, 1, 1, 0, 0, 0]
"it was the age of wisdom" = [1, 1, 1, 0, 1, 0, 0, 1, 1, 0]
"it was the age of foolishness" = [1, 1, 1, 0, 1, 0, 0, 1, 0, 1]
這些傳統的文檔式詞的所有排序都被丟棄了,我們可以用這種通用的方法來從我們語料庫中的任何文檔來提取特征,進而可以用於建模。但可能包含新的詞匯,但仍然可以進行編碼,其中隻有已知單詞的出現被統計,而未知單詞將被忽略。
你可以想到這種方式將如何自然的擴展到更大型的文檔。
4、詞匯管理(Managing Vocabulary)
隨著詞匯量的增加,文檔的向量表示也將隨之增加。在前麵的示例中,文檔向量的長度等於已知單詞的數量。你可以想象,對於一個非常大的語料庫,比如成千上萬的詞匯量,向量的長度可能達到成千上萬。此外,每個單一的文檔可能包含詞匯中已知的詞匯量很少。
這就產生了很多零向量,稱為稀疏向量(sparse vector)或稀疏表示(sparse representation)。
稀疏向量在建模時需要更多的內存和計算資源,大量的位置或維度使建模過程使用傳統算法非常具有挑戰性。
因此,當使用詞袋(bag-of-words)模型時可以迫使其減小詞匯量的大小。
當然,也有一些簡單的文本清理技術可以作為第一步,如:
• 忽視案例。
• 忽略標點符號。
• 忽略沒有太多信息的頻繁單詞(又被稱為停止詞),如“a”,“of”等。
• 修正拚錯的單詞。
• 使用詞幹算法減少詞語(例如“播放”)。
一種更複雜的方法是創建分組單詞的詞匯表。這兩者都改變了詞匯表的範圍,並允許詞袋(bag-of-words)從文檔中獲取更多的意義。
在這種方法中,每個單詞或標記被稱為“gram”。創建兩個詞對的詞匯又被稱為二元模型(bigarm)。再次,隻有出現在語料庫中的bigarm,而非所有的bigram都能被稱為二元模型。
一個N-gram是一個N符號的單詞序列:一個2-gram(更常稱為二進製)是一個兩個字的序列,如“please turn”,“turn your”或“your homework”,一個3-gram(更通常稱為三元組)是一個三個字的序列,如“please turn your”或“turn your homework”。-語音和語言處理,2009。
例如,上一節的第一行文字中的雙字:“It was the best of time”如下:
• “it was”
• “was the”
• “the best”
• “best of”
• “of time”
• 然後,詞匯跟蹤三元組的單詞稱為三元模型,通用方法稱為n-gram模型,其中n表示分組單詞的數量。
通常,簡單的二元組方法比用於文檔分類的任務的1-gram 詞袋(bag-of-words)模型簡單的多。
“一個bag-of-bigrams表示比詞袋(bag-of-words)更強大,在許多情況下該觀點難以被推翻。”-,自然語言處理中的神經網絡方法,2017。
5、詞的統計
一旦選擇了詞匯表,就需要對示例文檔中的單詞進行統計。在上麵的例子中,我們已經看到一個非常簡單的評分方法:用二進製來表示單詞的存在或不存在。
其他一些的簡單評分方法包括:
• 計數:計算每個單詞在文檔中出現的次數。
• 頻率:在文檔中的所有單詞中計算每個單詞在文檔中出現的頻率。
(1)散列詞(Word Hashing)
從計算機科學來看,一個哈希函數是將數據映射到一個固定大小的數字的數學。例如,我們在哈希表中使用它們,在編程時,可能會將名稱轉換為數字,以便快速查找。
我們可以在我們的詞匯表中使用已知單詞的散列表示。這解決了對大型文本語料庫非常大的問題,因為我們可以選擇散列空間的大小,也可以完成文檔的向量表示。
在目標散列空間中,對相同的整數索引進行散列處理。然後可以用二進製的分數或計數來得分。
這被稱為“哈希技巧(hash trick)”或“特征散列(feature hashing)”。而其所麵對的挑戰在於選擇一個散列空間來容納所選的詞匯表大小,將衝突的可能性和交換的稀疏性最小化。
(2)TF-IDF
詞頻統計的問題是,在整片文檔中的高頻率單詞雖然占主導地位,但是可能隻是在特定領域的單詞包含著少量信息內容,整體不會包含很多的“信息內容”。
一種方法是通過在所有文檔中單詞出現的頻率來重新調整單詞出現的頻率,以便對所有文檔中頻繁出現的頻繁單詞(如the)的分數帶來壞的影響。
這種統計方法稱為術語頻率 - 逆文檔頻率,簡稱為TF-IDF,其中:
• 術語頻率:是本文檔中單詞頻率的得分。
• 逆文檔頻率:是在文檔中罕見單詞的得分。
分數是一個權衡的結果,不是所有的詞都同樣重要或有用。分數具有在給定文檔中突出顯示不同的單詞(包含有用信息)的效果。
“因此,一個罕見的術語的idf是高的,而一個頻繁的術語的idf可能很低。”——“信息檢索簡介”,2008年。
6、詞袋(Bag-of-words)的限製
詞袋(Bag-of-words)模型非常易於理解和實施,並為定製特定的文本數據提供了很大的靈活性。
它在語言建模和文檔分類等預測問題上取得了很大的成功。
然而,它有一些缺點,比如:
• 詞匯:詞匯需要仔細的設計,特別是為了管理文檔的大小,這會影響文檔表示的稀疏性。
• 稀疏性:由於計算的原因(空間和時間複雜性)以及信息的原因,稀疏表示更難模擬,因為模型在如此龐大的代表空間中利用這麼少的信息麵臨著巨大挑戰。
• 含義:丟棄詞序忽略了上下文,進而又影響在文檔中的詞語的意義(語義)。上下文和意義可以提供很多模型,如果模型可以區分相同的單詞不同的排列(“這是有趣的”vs“這是有趣的”),同義詞(“舊自行車”vs“二手自行車”)。
相關資料:
1.維基百科上的詞袋模型。
2.維基百科上的N-gram。
3.tf-idf在維基百科解釋。
總結
在本教程中,你發現了使用文本數據進行特征提取的詞袋模型。
具體來說,你學到了:
• 詞袋模型是什麼,為什麼我們需要它。
• 如何通過應用一個詞袋的模型來處理文檔的集合。
本文由北郵@愛可可-愛生活 老師推薦,阿裏雲雲棲社區組織翻譯。
文章原標題《A Gentle Introduction to the Bag-of-Words Model》
譯者:烏拉烏拉,審校:袁虎。
文章為簡譯,更為詳細的內容,請查看原文文章。
最後更新:2017-10-14 09:33:10