[NLP]高級詞向量表達之ELMo詳解

一、引言

詞向量是自然語言處理任務中非常重要的一個部分,詞向量的表徵能力很大程度上影響了自然語言處理模型的效果。如論文中所述,詞向量需要解決兩個問題:
(1)詞使用的複雜特性,如句法和語法。
(2)如何在具體的語境下使用詞,比如多義詞的問題。
傳統的詞向量比如word2vec能夠解決第一類問題,但是無法解決第二類問題。比如:「12號地鐵線馬上就要開通了,以後我們出行就更加方便了。」和「你什麼時候方便,我們一起吃個飯。」這兩個句子中的「方便」用word2vec學習到的詞向量就無法區分,因爲word2vec學習的是一個固定的詞向量,它只能用同一個詞向量來表示一個詞不同的語義,而elmo就能處理這種多義詞的問題。

作者認爲好的詞表徵模型應該同時兼顧兩個問題:一是詞語用法在語義和語法上的複雜特點;二是隨着語言環境的改變,這些用法也應該隨之改變。作者提出了deep contextualized word representation 方法來解決以上兩個問題。

這種算法的特點是:每一個詞語的表徵都是整個輸入語句的函數。具體做法就是先在大語料上以language model爲目標訓練出bidirectional LSTM模型,然後利用LSTM產生詞語的表徵。ELMo故而得名(Embeddings from Language Models)。爲了應用在下游的NLP任務中,一般先利用下游任務的語料庫(注意這裏忽略掉label)進行language model的微調,這種微調相當於一種 domain transfer; 然後才利用label的信息進行supervised learning。

ELMo表徵是「深」的,就是說它們是biLM的所有層的內部表徵的函數。這樣做的好處是能夠產生豐富的詞語表徵。高層的LSTM的狀態可以捕捉詞語意義中和語境相關的那方面的特徵(比如可以用來做語義的消歧),而低層的LSTM可以找到語法方面的特徵(比如可以做詞性標註)。如果把它們結合在一起,在下游的NLP任務中會體現優勢。

ELMo顧名思義是從Language Models得來的embeddings,確切的說是來自於Bidirectional language models。具體可以表示爲: 在這裏插入圖片描述

在這裏插入圖片描述
這裏的(t1,t2,…,tN)(t1,t2,…,tN)是一系列的tokens
作爲語言模型可能有不同的表達方法,最經典的方法是利用多層的LSTM,ELMo的語言模型也採取了這種方式。所以這個Bidirectional LM由stacked bidirectional LSTM來表示。

二、elmo模型結構
2層biLSTM;
biLSTM層向量維度4096維;
投影層詞向量維度:512維。
從最底層詞嵌入層到第一層biLSTM輸出層之間還有一個殘差連接。
1、網絡結構
一個輸入層、一個卷積層、一個池化層。
2、原始輸入
單個詞的字符表示
(embedding_dimension, num——character)即(特徵維度,字符數量)
圖片所示爲(4,9)。
elmo中使用的是(16,50),即一個詞的最大長度爲50,每一個字符用16維表示。
3、卷積
圖中,卷積核大小爲(4,3)的有4個(每一行代表一個卷積核卷積後得到的結果),大小爲(4,2)的有3個,大小爲(4,4)的有5個。
elmo中使用的卷積核的個數是2048個,分別是[1, 32], [2, 32], [3, 64], [4, 128], [5, 256], [6, 512], [7, 1024](第一維代表寬度,第二維代表個數)。
4、池化
對每一行進行最大池化,將池化結果拼接起來,形成維度爲卷積核個數的詞向量。
所以,elmo中的初始詞向量是2048維,然後經過線性變化轉化爲512維。
————————————————
版權聲明:本文爲CSDN博主「三·川」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_44081621/article/details/86649821
Elmo主要使用了一個兩層雙向的LSTM語言模型,常見的有兩種表示方式,可結合起來理解,如下:
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述將前向和後向中用於詞表示和用於Softmax的參數聯繫起來,也就是說,在兩個方向共享了一些權重參數,而不是使用完全獨立的參數在這裏插入圖片描述
在這裏插入圖片描述具體來講如何使用ElMo產生的表徵呢?對於一個supervised NLP任務,可以分以下三步:

產生pre-trained biLM模型。模型由兩層bi-LSTM組成,之間用residual connection連接起來。
在任務語料上(注意是語料,忽略label)fine tuning上一步得到的biLM模型。可以把這一步看爲biLM的domain transfer。
利用ELMo的word embedding來對任務進行訓練。通常的做法是把它們作爲輸入加到已有的模型中,一般能夠明顯的提高原模型的表現。
印象中太深的NLP方面的模型基本沒有,這和Computer Vision領域非常不一樣。 當然這也是所解決問題的本質決定: Image的特徵提取在人腦裏就是從低階到高階的過程,深層網絡有助於高級特徵的實現。對於語言來講很難定義這樣的一個過程,這篇文章的兩層biLM加residual connection的架構比較少見(Google的transformor是多層網絡+residual connection一個例子)。文章認爲低層和高層的LSTM功能有差異:低層能夠提取語法方面的信息;高層擅於捕捉語義特徵。

其實ELMo不僅可以作爲下游模型的輸入,也可以直接提供給下游模型的輸出層。

ELMo提高了模型的效果,這說明它產生的word vectors捕捉到其他的word vectors沒有的信息。直覺上來講,biLM一定能夠根據context區別詞語的用法。下表比較了Glove和biLM在play這個多義詞上的解釋。
在這裏插入圖片描述
對於Glove來說,play的近義詞同時涵蓋了不同的語法上的用法:動詞(playing, played), 名詞(players,game)。
但是biLM能夠同時區分語法和語義:第一個例子裏的play名詞,表示擊球,第二個例子中play也是名詞,表示表演。顯然biLM能夠在表示詞語嵌入時考慮到context的信息。

ELMo向量與具體NLP任務的結合

在這裏插入圖片描述

ELMo模型的優缺點

優點:

效果好,在大部分任務上都較傳統模型有提升。實驗證實ELMo相比於詞向量,可以更好地捕捉到語法和語義層面的信息。
傳統的預訓練詞向量只能提供一層表徵,而且詞彙量受到限制。ELMo所提供的是character-level的表徵,對詞彙量沒有限制。

缺點:速度較慢,對每個token編碼都要通過language model計算得出。

適用任務

Question Answering問題回答
Textual entailment文本蘊涵
Semantic role labeling語義角色標註
Coreference resolution指代消解
Named entity extraction命名實體提取
Sentiment analysis情感分析

總結

ELMo在處理很多NLP下游任務中表現非常優異。但是我想這跟它集中在產生更好的詞語級別的embedding是有關係的。過去介紹到的一些其他的算法,比如Quick thoughts也是利用了語言模型作爲句子的encoder;還有InferSent使用biLSTM作爲encoder。和ELMo相比,它們都顯得「野心」太大:它們爲下游的NLP任務提供了句子embedding的解決方案:即直接利用它們的pretrained encoder,最終的預測無非是加上softmax的classifier。
對比而言ELMo要單純很多,它只提供了word級別的解決方案:利用它的pretrained biLM來產生word embedding,然後提供給下游的模型。這裏的模型往往是sequence model,其效果已經在相應的NLP任務上得到驗證。這時有了新的兼具語法語義及環境特徵的word embedding的加持,難怪效果會更好。更不要說,ELMo還在任務語料庫上小心翼翼的再進行過一輪微調,更是保證了對新domain的adaptation。

ELMo使得詞彙的向量表示可以同時考慮語境和語法,解決了一詞多義的情況。
不過ELMo本質是一個模型,在不同的任務、不同的上下文中,同一個詞得到的詞向量都是不一樣的,因此,計算詞彙的相似度時就會變得比較麻煩。

在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述