詞嵌入向量(Word Embedding)的建模

2021-08-28 14:15:32 字數 2486 閱讀 4017

從前面的定義,我們期望在隱層中找到乙個/組嵌入函式w(這裡採用lookup table的方式),使得![3]具體的,假設指定固定的向量維度,w("籃球")=(0.2, -0.4, 0.7, ...),w("蘋果")=(0.0, 0.6, -0.1, ...),w初始化時可以賦值給每個維度乙個隨機數,並通過與output層連線建立學習模型/任務後得到有意義的向量。

接下來來看看如何建立和訓練模型。

接下來我們需要構建整體的似然函式進行優化:

目標函式

分別建立input層-隱層及隱層-output層的連線函式(rglm),input層和隱層的函式上面已給出,如果假設p(y|w)為正態分佈,則 log-likelihood loss便是(negative) l2 loss:![7],如果假設p(y|w)為多項分布,則likelihood loss便是softmax loss:![8]從訓練樣本可以看出,output層為多分類,即隱層-output可採用softmax loss.

為了準確**output word,該網路需要根據上述損失函式學習引數矩陣w和r(output層),實際上,對於我們來說,整個學習任務是為了學習隱層的w函式,即隱層節點引數。當然對於其他任務,比如神經網路推薦或fasttext,網路構造過程類似,只是學習的任務是學習輸出層的引數和結構。

模型訓練

常規優化方法會採用梯度下降和反向傳播,由上面的樣本定義,我們的訓練樣本中input和output均以one-hot表示,向量極其稀疏(通常完整字典表會是幾十萬維,假設200000),僅有乙個位置的數值為1,其餘均為0,如果input到隱層的嵌入函式採用常見方式的話,假設節點數即嵌入向量維度為200,則隱層引數矩陣每個樣本的迭代將會是1x200000的向量和200000x200矩陣的相乘,顯然會帶來巨大計算資源的消耗,其實每個樣本的隱層引數僅需要根據one-hot向量中數值為1的索引對應的隱層引數引數矩陣的該索引行對應的向量取出即可:

經過抽象後我們可以得到上面定義的embedding函式/引數矩陣:

這種方式其實聯絡上面提到的lookup table就容易理解了,即模型中的隱層權重矩陣便成了乙個」查詢表「(lookup table),進行矩陣計算時,只需要直接去查輸入的one-hot向量中提取非零位置的索引,在隱層的對應行輸出就是每個輸入單詞的「嵌入詞向量」,該過程即完成了嵌入的動作。

對於輸出層:

經過隱層的嵌入計算,input word會被對映為1x200的dense向量,再餵給輸出層經過softmax的分類器的計算,對隨機給定任意output word的嵌入向量計算其**概率:![8],這樣基於同一input word,替換不同的beta(output word的嵌入向量)得到不同output word的**概率。 至此,資料的表示及目標損失函式的定義以及模型訓練過程已拆解完畢。接下來,再看看訓練效能提公升和優化的方法。

基於上面的拆解,我們會發現其實訓練過程涉及的引數數量會非常龐大,以上面的200000個單詞的字典表為例,隱層嵌入200維的詞向量,那麼每次迭代的輸入-隱層權重矩陣和隱層-輸出層的權重矩陣都會有 200000 x 200 = 4000萬個權重,在如此龐大的神經網路中進行梯度下降是相當慢的,而且需要大量的訓練資料來調整這些權重並且避免過擬合。所以對效能的要求仍然很高,雖然上面已經採用lookup table的方式簡化了一些計算,針對這個問題,word2vec的作者在**提出了有效的方法,叫「negative sampling」,每個訓練樣本的訓練只會更新一小部分的模型權重,從而降低計算負擔,甚至是詞向量的質量。基於對假設是,我們的資料中存在大量冗餘和噪音,舉例:對於「的」這種常用高頻單詞,我們會發現一些問題:當我們得到成對的單詞訓練樣本時,**("的", "籃球") *這樣的訓練樣本並不會給我們提供關於「籃球」更多的語義資訊,因為「的」這樣的噪音詞在大部分單詞的上下文中幾乎都會出現。由於在語料中「的」這樣的常用詞出現概率很大,因此我們將會有大量的(」的「,...)這樣的訓練樣本,而這些樣本數量遠遠超過了我們學習「的」這個詞向量所需的訓練樣本數。所以在設計抽樣方法的時候可以對這樣的樣本直接排除在訓練樣本之外,對於其他樣本對隨機抽取少量的負樣本進行引數的更新,而不是對one-hot向量中所有200000個位置對樣本都進行計算,從而大大提高訓練效率。

上面敘述的有點繁雜,總結起來就是在對給定input word計算softmax時,不去更新所有詞表中word的輸出概率,而是從該樣本的output word之外隨機抽樣有限個(比如只抽樣5個word)作為負樣本計算其概率,進一步進行梯度和引數的更新。也就是說通過負樣本抽樣對於每次訓練只更新(5+1)個beta向量對應的引數,也就是2006=1200個引數,這樣與4000萬個相比,需要更新的引數佔比僅為0.003%,效率提公升可想而知。

「無意中發現了乙個巨牛的人工智慧教程,忍不住分享一下給大家。教程不僅是零基礎,通俗易懂,而且非常風趣幽默,像看**一樣!覺得太牛了,所以分享給大家。點這裡可以跳轉到教程。」

詞向量 詞嵌入 word embedding

embedding 嵌入 embedding 嵌入,在數學上表示乙個對映f x y,是將x所在的空間對映到y所在空間上去,並且在x空間中每乙個x有y空間中唯一的y與其對應。嵌入,也就是把x在y空間中找到乙個位置嵌入,乙個x嵌入為乙個唯一的y。word embedding 詞嵌入 也就是把當前預料文字...

學習筆記 詞向量與詞嵌入

詞 向量 叫做 詞向量化 文字向量化 vectorize 是指將文字轉換為數值張量的過程 多種實現方法 將文字分割為單詞,並將每個單詞轉換為乙個向量。將文字分割為字元,並將每個字元轉換為乙個向量。提取單詞或字元的 n gram n元 並將每個 n gram 轉換為乙個向量。n gram 是多個連續單...

詞向量嵌入的深入研究

最近做專案想把bert的詞向量提出來用,好好研究了一下詞向量的嵌入。傳統詞向量嵌入主要就是word2vec和keras.layers.embedding層了,除此之外還打算講一下bert的詞向量應用 不管是用word2vec embedding層還是bert,每個詞都會被先編碼為乙個數字,你的資料集...