傳統(tǒng)的詞向量模型,例如 Word2Vec 和 Glove 學(xué)習(xí)得到的詞向量是固定不變的系吩,即一個單詞只有一種詞向量玖姑,顯然不適合用于多義詞。而 ELMo 算法使用了深度雙向語言模型 (biLM)好芭,只訓(xùn)練語言模型,而單詞的詞向量是在輸入句子實時獲得的逸月,因此詞向量與上下文信息密切相關(guān)栓撞,可以較好地區(qū)分歧義。
1. 靜態(tài)詞向量算法
在之前的文章中介紹了詞嵌入算法 Word2Vec 和 Glove碗硬。與傳統(tǒng)的 one-hot 編碼瓤湘、共現(xiàn)向量相比,詞嵌入算法得到的詞向量維度更低恩尾、也可以比較好地支持一些下游的任務(wù)弛说,例如文檔分類,問答系統(tǒng)等翰意。
但是這兩種算法都是靜態(tài)詞向量算法木人,在數(shù)據(jù)集上訓(xùn)練好一個語言模型之后,每一個詞的詞向量就固定下來了冀偶。后續(xù)使用詞向量時醒第,無論輸入的句子是什么,詞向量都是一樣的进鸠,例如:
”我喜歡吃小米“中的”小米“指一種食物
”小米手機挺好用“中的”小米“指手機品牌
給定上面兩個句子稠曼,在 Word2Vec 和 Glove 中去得到“小米“的詞向量都是一樣的,不能根據(jù)上下文給出更準(zhǔn)確的詞向量客年。
而 ELMo 是一種動態(tài)詞向量算法霞幅,在大型的語料庫里訓(xùn)練一個 biLSTM (雙向LSTM模型)漠吻。下游任務(wù)需要獲取單詞詞向量的時候,將整個句子輸入 biLSTM司恳,利用 biLSTM 的輸出作為單詞的詞向量途乃,包含了上下文信息∪痈担可以理解成耍共,biLSTM 是一個函數(shù),函數(shù)的輸入是一個句子铅鲤,輸出是句子中單詞的詞向量划提。
2. 雙向語言模型
首先介紹什么是雙向語言模型,以及如何通過 biLSTM 得到單詞的詞向量邢享,對 LSTM 不熟悉的童鞋可以參考前一篇文章《循環(huán)神經(jīng)網(wǎng)絡(luò) RNN鹏往、LSTM、GRU》骇塘。
2.1 雙向語言模型
雙向語言模型包括前向模型和后向模型伊履,給定一個包含 N 個單詞的句子 T = [t(1), t(2), ..., t(N)],前向模型需要通過前面的單詞 [t(1), t(2), ..., t(k-1)] 預(yù)測下一個單詞 t(k)款违,而后向模型需要通過后面的單詞唐瀑,預(yù)測前一個單詞。
2.2 使用 biLSTM 得到上下文相關(guān)的詞向量
biLSTM 是一種雙向的循環(huán)神經(jīng)網(wǎng)絡(luò)插爹,包含了前向網(wǎng)絡(luò)與后向網(wǎng)絡(luò)兩部分哄辣。上圖是一個層數(shù) L = 2 的 biLSTM。
每一個單詞 t(i) 的輸入是詞向量赠尾,這個詞向量是固定的力穗,可以使用 Word2Vec 或者 Glove 生成的詞向量,在 ELMo 中使用了 CNN-BIG-LSTM 生成的詞向量气嫁。注意当窗,ELMo 輸入時的詞向量是固定的,ELMo 將輸入的詞向量傳到 biLSTM 得到的才是動態(tài)的寸宵,包含上下文信息崖面。
ELMo 的論文中使用以下符號表示雙向 LSTM 中每一層對應(yīng)第 i 個單詞的輸出 ,前向輸出包含第 i 個單詞之前的語義梯影,后向輸出包含了第 i 個單詞之后的語義巫员。
文章中比較難添加公式,因此使用 h(k,j,→) 表示前向輸出甲棍,使用 h(k,j,←) 表示后向向輸出疏遏,請諒解。每一層的輸出 h(k-1,j,→) 和 h(k+1,j,←) 都是單詞的動態(tài)詞向量。
LSTM 一共 L 層财异,對于前向 LSTM,每一個單詞 t(k-1) 的最后一層輸出 h(k-1,L,→) 用于預(yù)測下一個單詞 t(k)唱遭;對于后向 LSTM戳寸,每一個單詞 t(k+1) 的最后一層輸出 h(k+1,L,←) 用于預(yù)測前一個單詞 t(k)。預(yù)測的過程采用 softmax拷泽, biLSTM 需要優(yōu)化的目標(biāo)函數(shù)如下:
θ(x) 表示單詞輸入時候的詞向量疫鹊,這個詞向量是固定的。θ(s) 表示 softmax 層司致,用于預(yù)測前后的單詞拆吆。θ(LSTM,→) 表示前向 LSTM 的參數(shù),用于計算 h(k-1,L,→)脂矫。θ(LSTM,←) 表示后向 LSTM 的參數(shù)枣耀,用于計算 h(k-1,L,←)。
3. ELMo 算法
3.1 流程介紹
ELMo 中使用的 biLSTM 層數(shù) L = 2庭再,ELMo 首先在大型的數(shù)據(jù)集上訓(xùn)練好模型捞奕,然后再后續(xù)任務(wù)中可以根據(jù)輸入的句子,輸出每一個單詞的詞向量拄轻。例如給定一個句子 T = [t(1), t(2), ..., t(N)]颅围,ELMo 計算詞向量的方法如下:
從靜態(tài)的詞向量表里查找單詞的詞向量 E(1), ..., E(N) 用于輸入。ELMo 使用 CNN-BIG-LSTM 生成的詞向量作為輸入恨搓。
將單詞詞向量 E(1), ..., E(N) 分別輸入第 1 層前向 LSTM 和后向 LSTM院促,得到前向輸出 h(1,1,→), ..., h(N,1,→),和后向輸出 h(1,1,←), ..., h(N,1,←)斧抱。
將前向輸出 h(1,1,→), ..., h(N,1,→) 傳入到第 2 層前向 LSTM常拓,得到第 2 層前向輸出 h(1,2,→), ..., h(N,2,→);將后向輸出 h(1,1,←), ..., h(N,1,←) 傳入到第 2 層后向 LSTM夺姑,得到第 2 層后向輸出 h(1,2,←), ..., h(N,2,←)墩邀。
則單詞 i 最終可以得到的詞向量包括 E(i), h(N,1,→), h(N,1,←), h(N,2,→), h(N,2,←),如果采用 L 層的 biLSTM 則最終可以得到 2L+1 個詞向量盏浙。
3.2 使用詞向量
在上面我們知道句子中一個單詞 i 可以得到 2L+1 個詞向量眉睹,在實際使用的過程中應(yīng)該如何利用這 2L+1 個詞向量?
首先在 ELMo 中使用 CNN-BIG-LSTM 詞向量 E(i) 作為輸入废膘,E(i) 的維度等于 512竹海。然后每一層 LSTM 可以得到兩個詞向量 h(i,layer,→) 和 h(i,layer,←),這兩個向量也都是 512 維丐黄。則對于單詞 i 可以構(gòu)造出 L+1 個詞向量斋配。
h(i,0) 表示兩個 E(i) 直接拼接,表示輸入詞向量,這是靜態(tài)的艰争,1024 維坏瞄。
h(i,j) 表示第 j 層 biLSTM 的兩個輸出詞向量 h(i,j,→) 和 h(i,j,←) 直接拼接,這是動態(tài)的甩卓,1024維鸠匀。
ELMo 中不同層的詞向量往往的側(cè)重點往往是不同的,輸入層采用的 CNN-BIG-LSTM 詞向量可以比較好編碼詞性信息逾柿,第 1 層 LSTM 可以比較好編碼句法信息缀棍,第 2 層 LSTM 可以比較好編碼單詞語義信息。
ELMo 的作者提出了兩種使用詞向量的方法:
第一種是直接使用最后一層 biLSTM 的輸出作為詞向量机错,即 h(i,L)爬范。
第二種是更加通用的做法,將 L+1 個輸出加權(quán)融合在一起弱匪,公式如下青瀑。γ 是一個與任務(wù)相關(guān)的系數(shù),允許不同的 NLP 任務(wù)縮放 ELMo 的向量痢法,可以增加模型的靈活性狱窘。s(task,j) 是使用 softmax 歸一化的權(quán)重系數(shù)。
3.3 ELMo效果
這是論文中的一個例子财搁,上面的是 Glove蘸炸,下面兩行是 ELMo〖獗迹可以看到 Glove 查找 play 的最近鄰搭儒,會出現(xiàn)“游戲”、“表演”提茁、“運動”等相關(guān)的單詞淹禾,可能與 paly 在句子中的實際意思不同。但是在 ELMo 中茴扁,可以看到第一個句子中的 play 是比賽的意思铃岔,其最近鄰句子的 play 也是比賽的意思。而第二個句子的 play 都是表演的意思峭火。說明 ELMo 可以根據(jù)上下文更好地得到一個單詞的詞向量毁习。
4. ELMo 總結(jié)
ELMo 訓(xùn)練語言模型,而不是直接訓(xùn)練得到單詞的詞向量卖丸,在后續(xù)使用中可以把句子傳入語言模型纺且,結(jié)合上下文語義得到單詞更準(zhǔn)確的詞向量。
使用了 biLSTM稍浆,可以同時學(xué)習(xí)得到保存上文信息和下文信息的詞向量载碌。
biLSTM 中不同層得到的詞向量側(cè)重點不同猜嘱,輸入層采用的 CNN-BIG-LSTM 詞向量可以比較好編碼詞性信息,第 1 層 LSTM 可以比較好編碼句法信息嫁艇,第 2 層 LSTM 可以比較好編碼單詞語義信息朗伶。通過多層詞向量的融合得到最終詞向量,最終詞向量可以兼顧多種不同層次的信息步咪。