NLP model — ELMo

陳明佐
我就問一句,怎麼寫?
3 min readJul 22, 2019

Embeddings from Language Models

一個讓NLP從業者頭疼的問題是機器無法理解語句的真正含義

指的是自然語言處理中的上下文問題

傳統的NLP技術和架構能很好地處理基礎任務,但當我們嘗試將上下文納入變量時其效果就會下降

ELMo是一種在詞向量(vector)或詞嵌入(embedding)中表示詞彙的新方法

https://arxiv.org/pdf/1802.05365.pdf

(1)ELMo能夠學習到詞彙用法的複雜性,比如語法、語義。

(2)ELMo能夠學習不同上下文情況下的詞彙多義性。

ELMo的詞向量是在雙層雙向語言模型(two-layer bidirectional language model , biLM)上計算的

這種模型由兩層疊在一起,每層都有前向(forward pass)和後向(backward pass)兩種迭代

  • 上圖中的結構使用字符級卷積神經網絡(convolutional neural network, CNN)來將文本中的詞轉換成原始詞向量(raw word vector)
  • 將這些原始詞向量輸入雙向語言模型中第一層
  • 前向迭代中包含了該詞以及該詞之前的一些詞彙或語境的信息
  • 後向迭代中包含了該詞之後的信息
  • 這兩種迭代的信息組成了中間詞向量(intermediate word vector)
  • 這些中間詞向量被輸入到模型的下一層
  • 最終表示(ELMo)就是原始詞向量和兩個中間詞向量的加權和

因為雙向語言模型的輸入度量是字符而不是詞彙,該模型能捕捉詞的內部結構信息

比如beauty和beautiful,即使不了解這兩個詞的上下文,雙向語言模型也能夠識別出它們的一定程度上的相關性

與word2vec或GLoVe等傳統詞嵌入不同,ELMo中每個詞對應的向量實際上是一個包含該詞的整個句子的函數

因此,同一個詞在不同的上下文中會有不同的詞向量

你可能會問:這種區別會對我處理NLP問題有什麼幫助嗎?讓我通過一個例子來解釋清楚:

我們有以下兩個句子:

  • I read the book yesterday.
  • Can you read the letter now?

第一個句子中的動詞“read”是過去式,而第二個句子中的“read”卻是現在式,這是一種一詞多義現象

傳統的詞嵌入會對兩個句子中的詞“read”生成同樣的向量,所以這些架構無法區別多義詞,它們無法識別詞的上下文

與之相反,ELMo的詞向量能夠很好地解決這種問題。ELMo模型將整個句子輸入方程式中來計算詞嵌入

因此,上例中兩個句子的“read”會有不同的ELMo向量

--

--