NLP model — ELMo
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向量