1、為什么需要文本表示
文字是人類認知過程中產生的高層認知抽象實體,我們需要將其轉換為神經網絡可以處理的數據類型。
2、文本表示的形式
類比於語音圖像,我們希望可以將文字或單詞轉換為向量。
3、文本表示的方法
3.1 one-hot表示
one-hot即獨立熱詞,詞語被表示成一個維度為詞表大小的向量,這個向量中只有一個維度是1其他位置都是0.假如詞表中只有四個個詞“奧巴馬”、“特朗普”、“宣誓”、“就職”,那么他們將被表示為:
奧巴馬:[1 0 0 0]
特朗普:[0 1 0 0]
宣誓: [0 0 1 0]
就職: [0 0 0 1]
one-hot表示的優點是簡單易用,但是有着致命的缺點:
- 如果一個詞表有十萬個單詞,那么就需要十萬維的向量來表示每一個單詞,而每個向量只有一位是1,在儲存上造成大量浪費,在深度學習場景中容易受到維度災難的困擾。
- 奧巴馬和特朗普都是美國總統,而one-hot表示出的兩個向量是正交向量,也就是他們之間毫無關系,這顯然是丟失了相關語義信息。
因此我們需要更好的表示方法。
3.2分布式表示
為了克服one-hot的缺點,。Dagan和Schütze等人提出了分布式表示方法。
其理論基礎就是上下文相似的詞,其語義也相似,這和我們的認知是一致的,當我們在閱讀文章時發現不認識的字,也會通過上下文來猜測字的含義。比如:
昨天奧巴馬宣誓就職
昨天特朗普宣誓就職
如果兩個詞可以互換,那么它們的語義就是相似的,所以奧巴馬和特朗普應該具有相似的語義。
分布式表示方法要做的就是利用上下文信息把每一個詞映射成一個維度固定的短向量,這樣在它們所構成的向量空間中,每個詞都是一個點,就可以通過距離來判斷語義的相似度。
3.2.1基於矩陣的分布式表示
這類方法需要構建一個“詞-上下文”矩陣,從矩陣中獲取詞的表示。在“詞-上下文”矩陣中,每行對應一個詞,每列表示一種不同的上下文,矩陣中的每個元素對應相關詞和上下文的共現次數。在這種表示下,矩陣中的一行,就成為 了對應詞的表示,這種表示描述了該詞的上下文的分布。比如:
I love monkeys
Apes and monkeys love bananas
窗口值設為2
Co-occurrence matrix | I | love | monkeys | and | apes | bananas |
---|---|---|---|---|---|---|
I | 0 | 1 | 1 | 0 | 0 | 0 |
love | 1 | 0 | 2 | 1 | 0 | 1 |
monkeys | 1 | 2 | 0 | 1 | 1 | 1 |
and | 0 | 1 | 1 | 0 | 1 | 0 |
apes | 0 | 0 | 1 | 1 | 0 | 0 |
bananas | 0 | 1 | 1 | 0 | 0 | 0 |
此時的bananas的詞向量就是[0 1 1 0 0 0]
- 在窗口值為2點情況下,共現矩陣中已經含有大量的0,如果我們減少窗口值,共現矩陣就會更加稀疏。此外我們發現
the monkey
的共現次數很多,而這僅僅因為the
本身就被大量使用。因此研究人員提出了多種加權和平滑方法,最常用的有tf-idf、PMI和直接取log。 - 通常原始矩陣是高維且稀疏的,因此需要使用一些降維技術做進一步的處理,比如奇異值分解(SVD)、非負矩陣分解(NMF)、典型關聯分析(CanonicalCorrelationAnalysis,CCA) HellingerPCA(HPCA)。
3.2.2基於神經網絡的分布式式表示
語言模型簡介
語言模型可以對一段文本出現的概率進行估計,估計的概率越大,表明這句話越有可能是‘人話’。
概率計算公式如下:
這里有一個問題,如果一句話很長,那么下式的概率估算會非常困難:
這時我們引入n元模型(n-gram),就是只考慮中心詞附近的n個詞,對條件概率做了如下近似
當n=1表明每個詞都是獨立的,完全不利用上下文信息。而n的值越大表示利用的上下文信息越多。但n的值一般取3,因為n的取值過大,會增大計算量還會造成大量中心詞和上下文共現的次數為零的情況出現。這局限了我們不能更充分的利用上下文。
而使用神經網絡來訓練語言模型,就可以突破這種局限。當網絡訓練成功,其中參數就是我們想要的詞向量。
神經網絡語言模型
提到神經網絡語言模型,首先要理清兩個名詞
- word Embedding:翻譯為詞嵌入,是一組語言模型和特征學習技術的總稱,目的就是把單詞映射成向量。
- word2vec:Google公司在2013年提出的一個工具包,至今被廣泛使用。它是基於神經網絡模型對word Embedding的實現。其中包含了CBOW和Skip-gram兩個語言模型。
神經網絡的結構很簡單,只是一個淺層網絡,中間只有一層隱藏層。
首先來看CBOW模型,它的核心思想是根據上下文來預測中心詞,例如:
昨天特朗普宣誓就職:將權力交還給美國人民
可以近似理解為將特朗普
和就職
作為輸入,那么神經網絡會輸出宣誓
。
那么神經網絡到底是如何工作的呢?下面就是神經網絡的本質-矩陣的運算
將特朗普
和就職
表示成one-hot形式輸入進神經網絡,經過一系列運算輸出一個向量,不斷優化參數矩陣W,使最后輸出的向量與宣誓
的one-hot表示相同,此時W的每一列對應一個詞的詞向量。
此時我們發現,用W的每一列表示單詞,它的維數是4,而使用ont-hot表示的向量維數是9,有效的降低了維數。
同時詞向量還具有了語義信息,一種直觀的感覺,特朗普
和奧巴馬
附近大概率會出現白宮
、美國
等詞,那么把白宮
、美國
作為上下文輸入進網絡,能得到特朗普
也能得到奧巴馬
,這樣訓練出的兩個詞的詞向量一定會是相近的。事實也正是如此:
另外一個有趣的現象是king + man - women = queen
詞向量在有了語義信息后,做加減法也有了意義。
skip-gram模型的核心思想與CBOW相反,它是利用中心詞來預測上下文
引用
Word embeddings: how to transform text into numbers
word2vec 中的數學原理詳解
詞嵌入來龍去脈
Word Embedding與Word2Vec
word2vec概述