「機器學習_8」Bag-of-Words

                      Bag-of-Words

1.文字問題

2. 什麼是Bag-of-Words(具體例子)

3. 侷限性

 

1.文字問題

文本建模的一個問題是它很雜亂,機器學習算法之類的技術更喜歡定義明確的固定長度輸入和輸出。

機器學習算法無法直接處理原始文本;文本必須轉換爲數字。具體來說,是數字向量

在語言處理中,矢量x是從文本數據中導出的,以便反映文本的各種語言特性。

這稱爲特徵提取或特徵編碼。

一種流行且簡單的使用文本數據進行特徵提取的方法稱爲 Bag-of-Words.

 

2. 什麼是Bag-of-Words

詞袋模型或簡稱BoW是一種從文本中提取特徵以用於建模的方法,例如用於機器學習算法。

該方法非常簡單和靈活,可以用於從文檔提取特徵的多種方式。

詞袋是描述文檔中單詞出現的文本表示。它涉及兩件事:

  1. 已知單詞的詞彙表。
  2. 已知單詞存在的一種度量。

它被稱爲單詞的“  ”,因爲有關文檔中單詞順序或結構的任何信息都將被丟棄。該模型僅關注已知單詞是否出現在文檔中,而不關注文檔中的何處。

句子和文檔的一種非常常見的特徵提取過程是詞袋法(BOW)。在這種方法中,我們查看文本中單詞的直方圖,即將每個單詞計數視爲一個特徵。

此外,僅從內容上我們就可以瞭解有關文檔含義的信息。

詞袋可以根據需要簡單或複雜。複雜性在於決定如何設計已知單詞(或標記)的詞彙表以及如何對已知單詞的存在進行度量。

我們將仔細研究這兩個問題。

詞袋模型的示例

讓我們用一個實際的例子來具體說明單詞模型。

步驟1:收集資料

下面是查爾斯·狄更斯(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, 1, 0, 0, 0, 0]

另外幾個的表示如下:

1

2

3

"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]

單詞的所有排序都名義上被丟棄,我們有一致的方式從語料庫中的任何文檔中提取特徵,以備建模時使用。

與已知單詞的詞彙重疊的新文檔,但可能包含詞彙之外的單詞,仍可以進行編碼,僅對已知單詞的出現進行評分,而忽略未知單詞。您可以看到它如何自然地擴展到大詞彙量和大文檔。

 

管理詞彙

隨着詞彙量的增加,文檔的向量表示也隨之增加。

在前面的示例中,文檔向量的長度等於已知單詞的數量。

您可以想象,對於一個非常大的語料庫(例如數千本書),向量的長度可能是數千個或數百萬個位置。此外,每個文檔在詞彙表中可能只包含很少的已知單詞。

這將導致矢量具有很多零分,稱爲稀疏矢量或稀疏表示

建模時,稀疏向量需要更多的內存和計算資源,而大量的位置或維數會使建模過程對傳統算法非常具有挑戰性。

有一些簡單的文本清除技術可以用在第一步,例如

  • 忽略大小寫
  • 忽略標點符號
  • 忽略不包含很多信息的頻繁單詞,稱爲停用詞,例如“ a”,“ of”等。
  • 修復拼寫錯誤的單詞。
  • 使用詞幹算法將詞減少到詞幹(例如,從“播放”中“播放”)。

一種更復雜的方法是創建分組詞的詞彙表。這既改變了詞彙的範圍,又使詞袋能夠從文檔中獲取更多含義。

在這種方法中,每個單詞或標記都稱爲“gram”。反過來,創建兩個單詞對的詞彙表又稱爲bigram模型。同樣,僅對出現在語料庫中的二元模型進行建模,而不是對所有可能的二元模型進行建模。

N-gram的簡單介紹

:一個2 gram(通常更稱爲雙字母組)是一個兩個單詞的單詞序列,例如“ please turn”,“ turn your”或“ your homework”,以及3 gram(通常更稱爲三字母)是由三個詞組成的單詞序列,例如““please turn your”, or “turn your homework”


因此對於該文本(“It was the best of times” )的分詞爲:

  • “it was”
  • “was the”
  • “the best”
  • “best of”
  • “of times”

然後,詞彙表跟蹤單詞的三元組稱爲三元組模型,通用方法稱爲n元組模型,其中n表示分組單詞的數量。

通常,對於文檔分類之類的任務,簡單的bigram方法比單個單詞袋模型更好。

 

計分單詞

一旦選擇了詞彙表,就需要對示例文檔中單詞的出現進行評分。在實際的示例中,我們已經看到一種非常簡單的評分方法:單詞存在與否的二進制評分。

一些其他簡單的計分方法包括:

  • 計數。計算每個單詞在文檔中出現的次數。
  • 頻率。計算文檔中所有單詞中每個單詞出現在文檔中的頻率。

 

3. 詞袋的侷限性

該模型非常易於理解和實施,併爲您在特定文本數據上的自定義提供了很大的靈活性。

它已成功用於預測問題,例如語言建模和文檔分類

但是,它存在一些缺點,例如:

  • 詞彙表:詞彙表需要仔細設計,尤其是爲了管理尺寸,這會影響文檔表示的稀疏性。
  • 稀疏:由於計算原因(空間和時間複雜度)以及信息原因,稀疏表示難以建模,而挑戰在於模型在如此大的表示空間中利用很少的信息。
  • 含義放棄單詞順序會忽略上下文,從而忽略文檔中單詞的含義(語義)。上下文和含義可以爲模型提供很多幫助,如果建模可以說明不同排列的相同單詞(“this is interesting” vs “is this interesting”),同義詞(“old bike” vs “used bike”)之間的差異。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章