文本深度特征提取
注:本文內容摘自《深度學習算法實踐》
為何要研究文本深度特征?
——因為文本深度特征無論對於文本分類還是文本預測,都是非常重要的。
文本特征的提取說白了就是將自然語言理解的問題轉化成機器學習的問題。第一步肯定是找一種合適的方法,把語言表達數學化,即用可量化的方式來表示文本的特征。
下面將簡單介紹一下文本的深度特征是如何量化的。
-
詞特征表示
文本的深度特征有四種表示方法:
-
詞表法
顧名思義,就是把詞進行剔重、排序,和相對應的序號一一對應,形成字典。
舉個例子:
"今天天氣甚好"
(今天,1)
(天氣,2)
(甚好,3)
那么,今天天氣甚好,用向量表達就是[1,2,3],這樣就方便扔到模型中進行計算了。
一般來說,對於Embedding層的輸入基本上都使用詞表示法處理后的向量表達。
Embedding層是什么?
是將詞表中的單詞在字典中的位置(索引)映射為固定維度的稠密的向量。
在Embedding這種結構出現之前,一般先用word2vec計算詞向量,然后將詞向量作為模型的輸入層,計算詞向量部分和模型是兩個部分,而embedding出現后,就將這兩個部分合並在一個模型中,輸入層數據不是詞向量,而是詞在字典中的位置。Embedding主要不是作為降維使用,而是作為一種特征表示使用。
-
One-Hot表示
原理很簡單,就是將每個詞表示為一個向量,向量的長度就是句子的長度。在向量中,該詞出現的位置填1,其他位置填0,那么這個向量就代表了當前的詞。
缺點:存儲空間浪費巨大,矩陣稀疏問題明顯。不利於存儲和處理,也就是我們常說的維度災難。
-
n-gram模型
n-gram模型也叫N元模型,是自然語言處理中一個重要的概念。它突出的是一個組的思想。1gram可以是一個單詞或者是一個中文漢字。對於字符串s,n-gram就是按長度N切分原詞得到的詞段。通常在NLP中,可以基於一定的語料庫,利用n-gram來預計或者表示一個句子,另一方面,可以用n-gram來評估兩個字符串之間的差異程度。
Unigram指的是單字;Bigram指的是雙字;Trigram指的是三個字。
舉個例子:
首先分詞:
分詞結果:
魯迅/老師/生前/是/一位/革命家,死后/仍然/是。
調用ngram函數,定義n=3時的輸出結果為:
魯迅/老師/生前
老師/生前/是/
生前/是/一位/
/是/一位/革命家
。。。
skip-gram,"skip"就是指需要跳過多少個字符,其參數也多了一個K來決定輸入值需要跳過幾個詞。
模糊匹配算法的關鍵在於如何衡量兩個相似單詞之間的差異,這個差異用書面語言稱為"距離"。這種基於距離的衡量有很多種方法,而n-gram就是其中的一種。
有學者提出下面的公式來表示這種距離。
假設我們要比較字符串s和字符串t,要算出這兩句話的距離,可以應用下面的公式:
|s中的n-gram數| + |t中的n-gram數| - N*|s和t共有的n-gram數|
字符串s=" 魯迅/老師/生前/是/一位/革命家,死后/仍然/是。"
字符串t="魯迅/老師/生前/是/一位/革命家/和/作家/,有/很多/偉大/的/作品"
s 的3-gram數為9,t的3-gram數為11。共有4,根據公式(9+11)-3*4 = 8。
則這兩句話的距離為8。
利用n-gram可以衡量詞和詞之間的距離,進而能衡量詞與詞之間的關系???
--------------------------這里不應該是衡量的是句子和句子之間的距離嗎?
除了用n-gram直接提取特征外,還有什么方法能更進一步,用一組固定向量來表示一個詞呢?詞嵌入(Word Embedding)給了我們答案。
-
分布表示和詞嵌入特征表示
Distributed Representation(分布表示)最早由Hinton在1986年提出。它是一種低維實數向量,這種向量一般長成下面的樣子。
[1.2,3,23,3434,-5435,3242,…]
維度以50維和100維比較常見,當然了,這種向量的表示不是唯一的。
一段文本的語義分散在一個低維空間的不同維度上,相當於將不同的文本分散到空間中不同的區域。分布表示是文本的一種表現形式,具體維稠密、低維、連續的向量。向量的每一維都表示文本的某種潛在的語法或語義特征。
2003年Bengio提出NPLM的時候,在模型中去學習每個詞的一個連續向量表示,並經過Tmoas Mikolov等人的發展,發展出Word Embedding(詞嵌入)。
詞嵌入就是將每個詞映射為一個向量。
Word Embedding 使尋找相關或者相似的詞成為可能。向量的距離可以用最傳統的歐式距離來衡量,也可以用cos夾角來衡量。用這種方式表示的向量,"明天"和"今天"的距離會遠遠小於"明天"和"你"的距離,甚至在可能的理想情況下,"明天"和"今天"的表示應該是基本一致的。
這樣兩個詞之間就可以進行比較了。當然,在這個方法下相似度高的兩個詞,並不具有相同的語義,它只能反映出兩者經常在相近的上下文環境中出現。
前文提到在Embedding這種結構出現之前,一般先用word2vec計算詞向量,word2vec也是詞嵌入的一種實現方式。它目前使用的神經網絡模型有兩種:CBOW和skip-gram。
這兩種模型都很簡單粗暴。
在CBOW方法里,訓練目標是給定一個word的context,預測word的概率;
在skip-gram方法里,訓練目標則是給定一個word,預測word的context的概率。
skip-gram的輸入是當前詞的詞向量,而輸出是周圍詞的詞向量。也就是說,通過當前詞來預測周圍的詞,而cbow模型正好是將輸入輸出調轉。