Keras NLP——詞袋模型

一.文本問題

對文本進行建模的一個問題是:機器學習算法不能直接使用原始文本,因爲對於目前的計算機和機器學習算法而言,輸入和輸出是固定長度的,所以文本必須在被模型應用之前轉換爲固定長度的數字向量。詞袋模型是一種爲了使用機器學習算法處理文本、對文本建模表示文本數據的方法,在語言建模和文檔分類問題上取得了巨大成功。

二.什麼是詞袋?

詞袋模型(簡稱BoW)是一種從文本中提取特徵以用於機器處理的建模方法,該方法非常簡單和靈活,並且可以採取多種方式從文檔中提取特徵。詞袋是文本的表示,用於描述文檔中單詞的出現,它涉及兩個方面:1)已知單詞的詞彙;2)衡量已知單詞的存在。之所以被稱爲“詞袋”,因爲有關文檔中單詞的順序或結構等任何信息都將被丟棄。詞袋模型僅關注文檔中是否出現已知單詞,而不關心文檔中該詞的位置。作爲句子和文檔特徵提取的一個非常常見的方法,詞袋模型將每個單詞計數視爲一個特徵,如果文檔具有相似的特徵組合,則文檔是相似的。詞袋模型的複雜性在於決定如何設計已知單詞(或標記)的詞彙以及如何對已知單詞的重要性進行評分。

三.詞袋模型的例子

1.收集數據

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

3.創建文檔向量

接下來就是對每個文檔中的單詞進行重要性評分,目標是將每個自由文本文檔轉換爲一個向量,我們可以將其用作機器學習模型的輸入或輸出。上述例子中詞彙表有10個單詞,所以使用10的固定長度來表示文檔,在向量中有一個位置來對每個單詞進行重要性評分。最簡單的評分方法是將單詞的存在標記爲布爾值,0表示沒有這個單詞,1表示有這個單詞。使用詞彙表中列出單詞的任意排序,可以逐步瀏覽所有的文檔並將其轉換爲二進制向量,比如該文檔集的評分如下:

"It was the best of times"=[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],

從上面的表示結果看,所有單詞的排序都被丟棄了,使用這個方法從語料庫中任何文檔中提取特徵,用於構建機器學習建模。新文檔中會包含詞彙表中的單詞,但是也有可能包含不在詞彙表中的單詞,已知單詞使用原有的詞彙表就很容易編碼了,但詞彙表中不包含的單詞就會被忽略掉,所以擴展詞彙表適應新文檔也是詞袋模型必須要面對的一個工作。

四.管理詞彙

隨着詞彙量的增加,文檔的向量表示也會增加。在上述的示例中,文檔向量的長度等於已知單詞的數量。對於一個非常大的語料庫,例如數千本書,矢量的長度可能是數千或數百萬個位置。但是每個文檔只僅僅使用了詞彙表中很少的單詞,這導致具有許多零分數的向量,稱爲稀疏向量或稀疏表示。稀疏向量在建模時需要更多的存儲器和計算資源,對於傳統算法大量數據或高維度會使建模過程非常具有挑戰性。因此,當使用詞袋模型時,存在減小詞彙量的壓力。有一些簡單的文本清理技術可用作第一步,例如:

  • 無視案例
  • 忽略標點符號
  • 忽略不包含太多信息的常用詞(停用詞)
  • 修復拼寫錯誤的單詞
  • 使用詞幹算法將單詞減少到詞幹
    更復雜的方法是創建分組詞的詞彙表。這既改變了詞彙表的範圍,又允許詞袋從文檔中捕獲更多的含義。在這種方法中,每個單詞或標記稱爲gram。反過來,創建雙字對詞彙表稱爲二元組模型,只有出現在語料庫中的二元詞組被建模,而不是所有可能的二元詞組。n-gram是一個n-token單詞序列:2-gram(通常稱爲bigram)是一個雙字序列,一個3-gram(通常稱爲三元音)是一個三字詞序列。把每三個詞在記錄在一起作爲一個原子詞的詞彙表稱爲三元組模型,一般方法稱爲n-gram模型,其中n表示分組單詞的數量。對於像文檔分類這樣的任務,通常一個簡單的二元組方法比1-gram的詞袋模型更好。二元詞袋模型比一元詞袋模型能力更強大。

五.計算每個詞的分值

一旦選擇了詞彙表,就需要對示例文檔中單詞的出現進行評分。在上述的示例中,用的是非常簡單的評分方法:對單詞存在與否的二進制表示。

1.字哈希

哈希函數是一種將數據映射到固定大小的數字集的數學運算。例如,在編程時在哈希表中使用它們,其中可能將名稱轉換爲數字以進行快速查找。在詞彙表中使用已知單詞的哈希表示,解決了對於大文本語料庫具有非常大的詞彙表的問題,因爲可以選擇哈希空間的大小,該大小又是文檔的向量表示的大小。

2.TF-IDF

對單詞頻率進行評分的問題在於,高頻率詞在文檔中占主導地位(例如,得分較高),但可能沒什麼意義,很多文檔的內容往往是由一些頻率適中的詞表述出來的。一種方法是通過它們在所有文檔中出現的頻率來重新調整單詞的頻率,使得在所有文檔中頻繁出現的頻繁單詞的分數也會收到懲罰。這種評分方法稱爲術語頻率-反向文檔頻率,或簡稱爲TF-IDF,其中:

  • Term Frequency:是當前文檔中單詞頻率的得分
  • Inverse Document Frequency:是對文檔中單詞的罕見程度的評分。
    分數是一個權重,並非所有單詞都同樣重要或有趣。分數具有突出顯示給定文檔中不同(包含有用信息)單詞的效果。
    因此,罕見術語的idf很高,而常用術語的idf可能很低。

六.詞袋的侷限性

詞袋模型非常易於理解和實現,併爲特定文本數據提供了很大的靈活性。它在語言建模和文檔分類等預測問題上取得了巨大成功。然而,它有一些缺點,例如:

  • 詞彙表需要精心設計,最重要的是爲了管理大小,這會影響文檔表示的稀疏性
  • 由於計算原因(空間和時間複雜性)以及信息原因,稀疏表示更難以建模,其中挑戰是模型在如此大的表示空間中如何利用如此少的信息
  • 丟棄單詞順序忽略了上下文,而忽略了文檔中單詞的含義(語義)。上下文和意義可以爲模型提供很多東西,比如告訴不同排列的相同單詞之間的差異,同義詞等。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章