Word2Vec和Embeddings
Word2Vec其實就是通過學習文本來用詞向量的方式表征詞的語義信息,即通過一個嵌入空間使得語義上相似的單詞在該空間內距離很近。Embedding其實就是一個映射,將單詞從原先所屬的空間映射到新的多維空間中,也就是把原先詞所在空間嵌入到一個新的空間中去。我們從直觀角度上來理解一下,cat這個單詞和kitten屬於語義上很相近的詞,而dog和kitten則不是那么相近,iphone這個單詞和kitten的語義就差的更遠了。通過對詞匯表中單詞進行這種數值表示方式的學習(也就是將單詞轉換為詞向量),能夠讓我們基於這樣的數值進行向量化的操作從而得到一些有趣的結論。比如說,如果我們對詞向量kitten、cat以及dog執行這樣的操作:kitten - cat + dog,那么最終得到的嵌入向量(embedded vector)將與puppy這個詞向量十分相近。(https://www.leiphone.com/news/201706/PamWKpfRFEI42McI.html)
對文本提取特征
1、最簡單直接的方式就是 用順序數字表示不同的單詞,進行特征提取
比如:形容女人用漂亮,女孩用可愛
形-0 容-1 女-2 人-3 用-4 漂-5 亮-6 孩-7 可-8 愛-9
則 原句子的特征:0123456789
使用該種方式,由於不用詞語的量綱不一樣,無法進行特征的計算,所以 one-host 表示法就來了
2、使用一維數組表示一個字,句子就是 二維的稀疏矩陣
比如:形容女人用漂亮,女孩用可愛
形-1000000000 容-0100000000 女-0010000000 人-0001000000 用-0000100000 漂-0000010000 亮-0000001000 孩-0000000100 可-0000000010 愛-0000000001 則原句子特征 1000000000 0100000000 0010000000 0001000000 0000100000 0000010000 0000001000 0000000100 0000000010 0000000001
這個相對上面特征表示一個好處是特征計算簡單,直接將稀疏矩陣對應位置相乘相加即可。另外他的劣勢是由於是稀疏矩陣,大部分信息都是0,浪費存儲空間和計算空間,到這就推導出embeddding層的作用了
3、將one-host稀疏矩陣映射為一個 總特征個數/維數 更小的矩陣,叫做embedding層的作用
第2點使用的稀疏矩陣
X = [ 1000000000 0100000000 0010000000 0001000000 0000100000 0000010000 0000001000 0000000100 0000000010 0000000001 ] 使用 w=[ w10 w11 w20 w21 w30 w31 w40 w41 w50 w51 w60 w61 w70 w71 w80 w81 w90 w91 w100 w101 ] X * w = [ w10 w11 w20 w21 w30 w31 w40 w41 w50 w51 w60 w61 w70 w71 w80 w81 w90 w91 w100 w101 ]
以上,10 x 10矩陣,乘以 10 x 2的矩陣,變成了10 x 2矩陣 ,特征大小縮小了 10 / 2 = 5倍。(注:這個地方可以設置為降維,當w取 10 x20 ,就可以實現升維的作用)
看到以上embedding可以降維,你是不是會有信息丟失的擔心的丟失或者這種降維實際有啥意義? 下面從文本降維的例子理解下
4、word-embedding
假設有1000個詞匯量。第一個詞是[1,0,0,0,0,...],其余的詞都是某個位置為1,其余都是0的1000維度的向量,也即one-hot編碼。
從one-hot編碼原理可知,不同詞僅僅是 隨機或者排序后 從先到后在不同的位置設置為1,其余位置設置為0.也就是不同詞之間沒有關系,而這和現實不符。比如:
語義:girl和woman雖然用在不同年齡上,但指的都是女性。man和boy雖然用在不同年齡上,但指的都是男性。
復數:word和words僅僅是復數和單數的差別。
時態:buy和bought表達的都是“買”,但發生的時間不同。
我們更希望用諸如“語義”,“復數”,“時態”等維度去描述一個單詞。每一個維度不再是0或1,而是連續的實數,表示不同的程度。這個就是Distributed representation的方式
神經網絡分析
假設我們的詞匯只有4個,girl, woman, boy, man,下面就思考用兩種不同的表達方式會有什么區別。
One hot representation
盡管我們知道他們彼此的關系,但是計算機並不知道。在神經網絡的輸入層中,每個單詞都會被看作一個節點。 而我們知道訓練神經網絡就是要學習每個連接線的權重。如果只看第一層的權重,下面的情況需要確定4*3個連接線的關系,因為每個維度都彼此獨立,girl的數據不會對其他單詞的訓練產生任何幫助,訓練所需要的數據量,基本就固定在那里了。
Distributed representation
我們這里手動的尋找這四個單詞之間的關系 。可以用兩個節點去表示四個單詞。每個節點取不同值時的意義如下表。 那么girl就可以被編碼成向量[0,1],man可以被編碼成[1,1](第一個維度是gender,,第二個維度是age)
那么這時再來看神經網絡需要學習的連接線的權重就縮小到了2*3。同時,當送入girl為輸入的訓練數據時,因為它是由兩個節點編碼的。那么與girl共享相同連接的其他輸入例子也可以被訓練到(如可以幫助到與其共享female的woman,和child的boy的訓練)。
Word embedding也就是要達到第二個神經網絡所表示的結果,降低訓練所需要的數據量。
而上面的四個單詞可以被拆成2個節點的是由我們人工提供的先驗知識將原始的輸入空間經過 (上圖中的黃色箭頭)投射到了另一個空間(維度更小),所以才能夠降低訓練所需要的數據量。 但是我們沒有辦法一直人工提供,機器學習的宗旨就是讓機器代替人力去發現pattern。
Word embedding就是要從數據中自動學習到輸入空間到Distributed representation空間的 映射
5、那 embedding怎么訓練呢?
問題來了,我們該如何自動尋找到類似上面的關系,將One hot representation轉變成Distributed representation。 我們事先並不明確目標是什么,所以這是一個無監督學習任務。
無監督學習中常用思想是:當得到數據后,我們又不知道目標(輸出)時,
- 方向一:從各個輸入 {
}之間的關系找目標。 如聚類。
- 方向二:並接上以目標輸出
作為新輸入的另一個任務
,同時我們知道的對應
值。用數據
訓練得到
,也就是
,中間的表達
則是我們真正想要的目標。如生成對抗網絡。
Word embedding更偏向於方向二。 同樣是學習一個 ,但訓練后並不使用
,而是只取前半部分的
。
到這里,我們希望所尋找的 既有標簽
,又可以讓
所轉換得到的
的表達具有Distributed representation中所演示的特點。
同時我們還知道,
單詞意思需要放在特定的上下文中去理解。
那么具有相同上下文的單詞,往往是有聯系的。
實例:那這兩個單詞都狗的品種名,而上下文的內容已經暗指了該單詞具有可愛,會舔人的特點。
- 這個可愛的 泰迪 舔了我的臉。
- 這個可愛的 金巴 舔了我的臉。
而從上面這個例子中我們就可以找到一個 :預測上下文。
用輸入單詞作為中心單詞去預測其他單詞
出現在其周邊的可能性。
我們既知道對應的 ,同時該任務
又可以讓
所轉換得到的
的表達具有Distributed representation中所演示的特點。 因為我們讓相似的單詞(如泰迪和金巴)得到相同的輸出(上下文),那么神經網絡就會將泰迪的輸入和金巴的輸入經過神經網絡
得到的泰迪的輸出和金巴的輸出幾乎相同。