動態詞向量算法—ELMo

2020-12-15 NLP學習筆記

傳統的詞向量模型,例如 Word2Vec 和 Glove 學習得到的詞向量是固定不變的,即一個單詞只有一種詞向量,顯然不適合用於多義詞。而 ELMo 算法使用了深度雙向語言模型 (biLM),只訓練語言模型,而單詞的詞向量是在輸入句子實時獲得的,因此詞向量與上下文信息密切相關,可以較好地區分歧義。

1. 靜態詞向量算法

在之前的文章中介紹了詞嵌入算法 Word2Vec 和 Glove。與傳統的 one-hot 編碼、共現向量相比,詞嵌入算法得到的詞向量維度更低、也可以比較好地支持一些下遊的任務,例如文檔分類,問答系統等。

但是這兩種算法都是靜態詞向量算法,在數據集上訓練好一個語言模型之後,每一個詞的詞向量就固定下來了。後續使用詞向量時,無論輸入的句子是什麼,詞向量都是一樣的,例如:

"我喜歡吃小米"中的"小米"指一種食物"小米手機挺好用"中的"小米"指手機品牌給定上面兩個句子,在 Word2Vec 和 Glove 中去得到"小米"的詞向量都是一樣的,不能根據上下文給出更準確的詞向量。

ELMo是一種動態詞向量算法,在大型的語料庫裡訓練一個 biLSTM (雙向LSTM模型)。下遊任務需要獲取單詞詞向量的時候,將整個句子輸入 biLSTM,利用 biLSTM 的輸出作為單詞的詞向量,包含了上下文信息。可以理解成,biLSTM 是一個函數,函數的輸入是一個句子,輸出是句子中單詞的詞向量。

2. 雙向語言模型

首先介紹什麼是雙向語言模型,以及如何通過 biLSTM 得到單詞的詞向量,對 LSTM 不熟悉的童鞋可以參考前一篇文章循環神經網絡 RNN、LSTM、GRU

2.1 雙向語言模型

雙向語言模型包括前向模型後向模型,給定一個包含 N 個單詞的句子 T = [t(1), t(2), ..., t(N)],前向模型需要通過前面的單詞 [t(1), t(2), ..., t(k-1)] 預測下一個單詞 t(k),而後向模型需要通過後面的單詞,預測前一個單詞。

2.2 使用 biLSTM 得到上下文相關的詞向量

2 層的 biLSTM 模型

biLSTM 是一種雙向的循環神經網絡,包含了前向網絡與後向網絡兩部分。上圖是一個層數 L = 2 的 biLSTM。

每一個單詞 t(i) 的輸入是詞向量,這個詞向量是固定的,可以使用 Word2Vec 或者 Glove 生成的詞向量,在 ELMo 中使用了 CNN-BIG-LSTM生成的詞向量。注意,ELMo 輸入時的詞向量是固定的,ELMo 將輸入的詞向量傳到 biLSTM 得到的才是動態的,包含上下文信息。

ELMo 的論文中使用以下符號表示雙向 LSTM 中每一層對應第 i 個單詞的輸出前向輸出包含第 i 個單詞之前的語義,後向輸出包含了第 i 個單詞之後的語義。

文章中比較難添加公式,因此使用 h(k,j,→) 表示前向輸出,使用 h(k,j,←) 表示後向向輸出,請諒解。每一層的輸出 h(k-1,j,→) 和 h(k+1,j,←) 都是單詞的動態詞向量

LSTM 一共 L 層,對於前向 LSTM,每一個單詞 t(k-1) 的最後一層輸出 h(k-1,L,→) 用於預測下一個單詞 t(k);對於後向 LSTM,每一個單詞 t(k+1) 的最後一層輸出 h(k+1,L,←) 用於預測前一個單詞 t(k)。預測的過程採用 softmax, biLSTM 需要優化的目標函數如下:

θ(x) 表示單詞輸入時候的詞向量,這個詞向量是固定的。θ(s) 表示 softmax 層,用於預測前後的單詞。θ(LSTM,→) 表示前向 LSTM 的參數,用於計算 h(k-1,L,→)。θ(LSTM,←) 表示後向 LSTM 的參數,用於計算 h(k-1,L,←)。

3. ELMo 算法

3.1 流程介紹

ELMo 模型

ELMo 中使用的 biLSTM 層數 L = 2,ELMo 首先在大型的數據集上訓練好模型,然後再後續任務中可以根據輸入的句子,輸出每一個單詞的詞向量。例如給定一個句子 T = [t(1), t(2), ..., t(N)],ELMo 計算詞向量的方法如下:

從靜態的詞向量表裡查找單詞的詞向量 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 個詞向量,在實際使用的過程中應該如何利用這 2L+1 個詞向量?

首先在 ELMo 中使用 CNN-BIG-LSTM 詞向量 E(i) 作為輸入,E(i) 的維度等於 512。然後每一層 LSTM 可以得到兩個詞向量 h(i,layer,→) 和 h(i,layer,←),這兩個向量也都是 512 維。則對於單詞 i 可以構造出 L+1 個詞向量。

h(i,0) 表示兩個 E(i) 直接拼接,表示輸入詞向量,這是靜態的,1024 維。

h(i,j) 表示第 j 層 biLSTM 的兩個輸出詞向量 h(i,j,→) 和 h(i,j,←) 直接拼接,這是動態的,1024維。

ELMo 中不同層的詞向量往往的側重點往往是不同的,輸入層採用的 CNN-BIG-LSTM 詞向量可以比較好編碼詞性信息,第 1 層 LSTM 可以比較好編碼句法信息,第 2 層 LSTM 可以比較好編碼單詞語義信息。

ELMo 的作者提出了兩種使用詞向量的方法:

第一種是直接使用最後一層 biLSTM 的輸出作為詞向量,即 h(i,L)。

第二種是更加通用的做法,將 L+1 個輸出加權融合在一起,公式如下。γ 是一個與任務相關的係數,允許不同的 NLP 任務縮放 ELMo 的向量,可以增加模型的靈活性。s(task,j) 是使用 softmax 歸一化的權重係數。

3.3 ELMo效果

ELMo 論文中的例子

這是論文中的一個例子,上面的是 Glove,下面兩行是 ELMo。可以看到 Glove 查找 play 的最近鄰,會出現「遊戲」、「表演」、「運動」等相關的單詞,可能與 paly 在句子中的實際意思不同。但是在 ELMo 中,可以看到第一個句子中的 play 是比賽的意思,其最近鄰句子的 play 也是比賽的意思。而第二個句子的 play 都是表演的意思。說明 ELMo 可以根據上下文更好地得到一個單詞的詞向量。

4. ELMo 總結

ELMo 訓練語言模型,而不是直接訓練得到單詞的詞向量,在後續使用中可以把句子傳入語言模型,結合上下文語義得到單詞更準確的詞向量。

使用了 biLSTM,可以同時學習得到保存上文信息和下文信息的詞向量。

biLSTM 中不同層得到的詞向量側重點不同,輸入層採用的 CNN-BIG-LSTM 詞向量可以比較好編碼詞性信息,第 1 層 LSTM 可以比較好編碼句法信息,第 2 層 LSTM 可以比較好編碼單詞語義信息。通過多層詞向量的融合得到最終詞向量,最終詞向量可以兼顧多種不同層次的信息。

參考文獻

1. Deep contextualized word representations

https://arxiv.org/pdf/1810.04805.pdf

2. 知乎:ELMo原理解析及簡單上手使用

https://zhuanlan.zhihu.com/p/51679783

相關焦點

  • NLP中的詞向量對比:word2vec/glove/fastText/elmo/GPT/bert
    目錄一、文本表示和各詞向量間的對比 1、文本表示哪些方法?2、怎麼從語言模型理解詞向量?怎麼理解分布式假設?3、傳統的詞向量有什麼問題?怎麼解決?各種詞向量的特點是什麼?4、word2vec和NNLM對比有什麼區別?(word2vec vs NNLM)5、word2vec和fastText對比有什麼區別?
  • 詞向量詳解:從word2vec、glove、ELMo到BERT
    目前,詞向量(又叫詞嵌入)已經成為NLP領域各種任務的必備一步,而且隨著bert elmo,gpt等預訓練模型的發展,詞向量演變為知識表示方法,但其本質思想不變。學習各種詞向量訓練原理可以很好地掌握NLP各種方法。生成詞向量的方法有很多種,本文重點介紹word2vec,glove和bert。
  • ELMo教你用算法分辨女人心
    這一思路適用於所有機器學習算法。你不需要了解其他分支,但是你應該具備足夠的知識來將其用於模型改進中。現在,讓我們回到ELMo的工作方式。ELMo字向量是在兩層雙向語言模型(biLM)之上計算的。這個biLM模型有兩層堆疊在一起。每層有2個通道-前向通道和後向通道:
  • 【NLP高頻面試題】詞表徵
    、GPT、bert 怎麼理解詞向量的分布式假設?其基本想法是:概念上而言,它是指把一個維數為所有詞的數量的高維空間嵌入到一個維數低得多的連續向量空間中,每個單詞或詞組被映射為實數域上的向量,向量的每一維度都沒有實際意義,而整體代表一個具體概念。訓練邏輯:相同上下文語境的詞有似含義,也就是有相似的向量。
  • NLP詳細教程:手把手教你用ELMo模型提取文本特徵(附代碼&論文)
    ELMo是一種在詞向量(vector)或詞嵌入(embedding)中表示詞彙的新方法。這些詞嵌入方法在下列幾種NLP問題中能有效生成最先進(SOAT)的結果:前向迭代中包含了該詞以及該詞之前的一些詞彙或語境的信息後向迭代中包含了該詞之後的信息這兩種迭代的信息組成了中間詞向量(intermediate word vector)這些中間詞向量被輸入到模型的下一層最終表示(ELMo)就是原始詞向量和兩個中間詞向量的加權和因為雙向語言模型的輸入度量是字符而不是詞彙,該模型能捕捉詞的內部結構信息
  • 獨家 | NLP詳細教程:手把手教你用ELMo模型提取文本特徵(附代碼&論文)
    ELMo是一種在詞向量(vector)或詞嵌入(embedding)中表示詞彙的新方法。這些詞嵌入方法在下列幾種NLP問題中能有效生成最先進(SOAT)的結果:前向迭代中包含了該詞以及該詞之前的一些詞彙或語境的信息後向迭代中包含了該詞之後的信息這兩種迭代的信息組成了中間詞向量(intermediate word vector)這些中間詞向量被輸入到模型的下一層最終表示(ELMo)就是原始詞向量和兩個中間詞向量的加權和因為雙向語言模型的輸入度量是字符而不是詞彙,該模型能捕捉詞的內部結構信息
  • 詞向量學習算法 Word2Vec
    Word2Vec 是 google 在2013年提出的詞向量模型,通過 Word2Vec 可以用數值向量表示單詞,且在向量空間中可以很好地衡量兩個單詞的相似性。 1.
  • 飛槳帶你了解:基於百科類數據訓練的ELMo中文預訓練模型
    目前 LARK 家族最新最重要的三種算法,分別是 ELMo , BERT 和 ERNIE 。你一定不知道,這三個普通的名字,竟然包含著一個有趣的秘密。真相,即將揭開!ELMo 模型核心是一個雙層雙向的 LSTM 網絡,與傳統的 word2vec 算法中詞向量一成不變相比, ELMo 會根據上下文改變語義 embedding 。
  • 飛槳帶你了解:基於百科類數據訓練的 ELMo 中文預訓練模型
    再回頭看看  你還記得那三個算法的名字麼  ELMo,BERT,ERNIE  竟然都是美國經典動畫片  《Sesame Street(芝麻街)》裡面的卡通人物!!!  ELMo模型核心是一個雙層雙向的LSTM網絡,與傳統的word2vec算法中詞向量一成不變相比,ELMo會根據上下文改變語義embedding。
  • 【NLP/AI算法面試必備-2】NLP/AI面試全記錄
    (word2vec vs glove vs LSA)6、 elmo、GPT、bert三者之間有什麼區別?(elmo vs GPT vs bert)7、LSTM和GRU的區別?三、其他算法問題1、怎麼進行單個樣本的學習?2、 決策樹 bagging boosting  adaboost  區別?RF的特徵隨機目的是什麼?
  • 從詞嵌入到含義嵌入:概覽含義向量表示方法
    知識增強詞表示,主要有兩種思路,一為修改模型的目標函數,以便在學習過程中納入知識資源的信息,一為在後處理階段改進預訓練的詞嵌入。後者通常稱為retrofitting(改裝)。其直覺為,在詞向量空間中,移動知識資源中聯繫密切的單詞對應的向量表示,使其更為接近。retrofitting模型的主要目標函數為最小化下式:
  • Word2vec如何得到詞向量
    得到你想要的processed corpus之後,將他們的one-hot向量作為word2vec的輸入,通過word2vec訓練低維詞向量(word embedding)就ok了。不得不說word2vec是個很棒的工具,目前有兩種訓練模型(CBOW和Skip-gram),兩種加速算法(Negative Sample與Hierarchical Softmax)。
  • 詞向量因何存在:一段往計算機輸入文字的歷史
    所有詞向量算法底層的思想是:詞形向量的每個維度上的值是一個有待優化的參數。我們通過優化這些參數,最佳地擬合觀測到的數據中的單詞模式。由於我們將這些參數視為連續的值,而且擬合數據的概念可以作為光滑、連續的目標函數來操作,因此可以通過基於梯度下降的迭代式算法完成優化。研究人員對獲取分布式詞向量的方法進行了大量的探索。
  • 乾貨 | Word2Vec是如何得到詞向量的?
    ,若侵權,請聯繫後臺刪文處理   前言word2vec是如何得到詞向量的?得到你想要的processed corpus之後,將他們的one-hot向量作為word2vec的輸入,通過word2vec訓練低維詞向量(word embedding)就ok了。不得不說word2vec是個很棒的工具,目前有兩種訓練模型(CBOW和Skip-gram),兩種加速算法(Negative Sample與Hierarchical Softmax)。
  • NLP·一、詞向量Word Embedding(一)
    一、詞嵌入/詞向量為什麼可行一句話概括就是:一個詞的語義由其上下文的單詞決定。
  • 手把手教你PaddlePaddle 做詞向量模型 SkipGram實戰
    得到詞向量副產品;今天要講解的就是 SkipGram 模型就屬於第三種方法,它的主要思想是利用的詞義的分布式表示。1、什麼是詞向量首先我們需要了解什麼是詞向量。NLP 和圖像不太一樣,圖像的輸入本身就是一個有數值特徵的矩陣,而 NLP 的輸入通常只是一堆自然語言的符號,它們本身是不具備數學特性的。因此,在計算語言學中,我們通常會希望用數值向量來表示這些符號。
  • 詞向量背後精妙的數學
    隨遇幾乎所有處理語言的程序,它們現在的默認輸入就已經是詞向量了。然而,對於最簡單的word2vec,我們似乎仍有一些不了解的地方。Word2Vec的Skip-gram架構Word2Vec的核心思想,就是要用一些較短的向量來表示不同的詞。而向量與向量之間的關係,則可以表示詞與詞之間的關係。總結來說,常常使用的有兩種關係:首先是向量之間的夾角,用以表示詞與詞之間「含義的相似度」。
  • 機器不學習:word2vec是如何得到詞向量的?
    機器不學習 jqbxx.com -機器學習、深度學習好網站word2vec是如何得到詞向量的?這個問題比較大。得到你想要的processed corpus之後,將他們的one-hot向量作為word2vec的輸入,通過word2vec訓練低維詞向量(word embedding)就ok了。不得不說word2vec是個很棒的工具,目前有兩種訓練模型(CBOW和Skip-gram),兩種加速算法(Negative Sample與Hierarchical Softmax)。
  • 嵌入向量能否理解數字?BERT竟不如ELMo?
    圖 1:研究者訓練了一個 probing model,基於詞嵌入對 [-500, 500] 區間內隨機 80% 的整數進行數字解碼,如「71」→ 71.0。研究者繪製了模型對 [-2000, 2000] 區間中所有數字的預測結果。