日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

[深度学习]自然语言处理 --- ELMo

發(fā)布時間:2023/12/15 pytorch 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [深度学习]自然语言处理 --- ELMo 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文鏈接:Deep contextualized word representations

ELMO,是Embedding from Language Model的縮寫( Peters等人,2018年),通過無監(jiān)督預(yù)訓(xùn)練多層雙向LSTM模型來學(xué)習(xí)帶上下文信息的(Contextualized)單詞表示。

1. Motivation

詞向量在目前NLP技術(shù)發(fā)展和應(yīng)用中具有重要作用,高質(zhì)量的詞向量對下游任務(wù)的效果至關(guān)重要。
傳統(tǒng)word2vec等模型對一個詞的表示是固定的,一成不變的,但現(xiàn)實場景中,同樣的詞在不同語境中往往表達(dá)不同的含義,為此,ELMo應(yīng)運而生。ELMo(Embeddings from Language Models)是一種動態(tài)的,語境化的詞向量表示方法,可以根據(jù)上下文語境來生成相應(yīng)詞的向量表示。

2014年的GloVe的工作中,每個詞對應(yīng)一個vector,對于多義詞無能為力。ELMo的工作對于此,提出了一個較好的解決方案。不同于以往的一個詞對應(yīng)一個向量,是固定的。在ELMo世界里,預(yù)訓(xùn)練好的模型不再只是向量對應(yīng)關(guān)系,而是一個訓(xùn)練好的模型。使用時,將一句話或一段話輸入模型,模型會根據(jù)上線文來推斷每個詞對應(yīng)的詞向量。這樣做之后明顯的好處之一就是對于多義詞,可以結(jié)合前后語境對多義詞進(jìn)行理解。比如appele,可以根據(jù)前后文語境理解為公司或水果。

ELMo通過深度雙向語言模型(biLM)進(jìn)行訓(xùn)練,主要解決了兩個問題:
(1) 學(xué)習(xí)詞匯用法的復(fù)雜特性,如語法和語義;
(2) 學(xué)習(xí)詞匯不同語境下的一詞多義性;

?

一個簡單的例子就是 “蘋果”的詞向量:

句子1:“我 買了 1斤 蘋果”

句子2:“我 新 買了 1個 蘋果 X”

在word2vec算法中,“蘋果”的詞向量固定,無法區(qū)分這兩句話的區(qū)別,而ELMo可以解決語言中的二義性問題,可以帶來性能的顯著提升。

上面兩個文本序列中都出現(xiàn)了“蘋果”這個詞匯,但是在不同的句子中,它們我的含義顯示是不同的,一個屬于水果領(lǐng)域,一個屬于電子產(chǎn)品呢領(lǐng)域,如果針對“蘋果”這個詞匯同時訓(xùn)練兩個詞向量來分別刻畫不同領(lǐng)域的信息呢?答案就是使用ELMo。

PS:

ELMo在中文上確實會比word2vec好很多, 使用中文語料測試成功了, 使用200m新聞?wù)Z料訓(xùn)練語言模型, 然后在對該新聞?wù)Z料進(jìn)行分類(10類)。最終測試結(jié)果使用ELMO比word2vector高近2個百分點, 而且這還是沒有對ELMO優(yōu)化的情況下。

2. Introduction

2.1 ELMo詞向量表示理念

與傳統(tǒng)詞向量用固定向量的表示不同,ELMo是一種動態(tài)詞向量表示方法,其最終訓(xùn)練得到一個語言模型。當(dāng)需要文本s中某個詞w的詞向量表示時,ELMo通過將s作為輸入,得到文本的向量表示,繼而獲得詞w在文本s語境下的詞向量表示。
ELMo模型從大規(guī)模語料上訓(xùn)練得到的深度雙向語言模型(deep biLM)的內(nèi)部狀態(tài)學(xué)習(xí)得到,因此,ELMo的詞向量表示是深度的,是biLM內(nèi)部各層狀態(tài)的線性組合,而非僅僅取LSTM的最后一層。

2.2 ELMo理念的物理意義

ELMo認(rèn)為,通過聯(lián)合biLM的各層內(nèi)部狀態(tài)來表示詞向量可以表達(dá)詞語更為豐富的信息,模型底層隱狀態(tài)表達(dá)詞語的語法信息(eg:適用于詞性標(biāo)注任務(wù)),而上層隱狀態(tài)則捕捉了詞語的語義信息(eg:適用于詞義消歧任務(wù))。
大量實驗證明,ELMo在多種NLP任務(wù)中都獲得極好的效果;另外,前人的工作以及論文最后對ELMo與GoVe的分析則證明,詞向量的深度表示比僅利用LSTM的最后一層的效果更好。

?

3. ELMo原理介紹

前面也說過ELMo最重要的一點是就是訓(xùn)練語言模型,語言模型的結(jié)構(gòu)如下:

?

他們使用的是一個雙向的LSTM語言模型,由一個前向和一個后向語言模型構(gòu)成,目標(biāo)函數(shù)就是取這兩個方向語言模型的最大似然。

前向LSTM結(jié)構(gòu):

??雙向語言模型( bi-LM )是ELMO的基礎(chǔ)。模型的輸入是由n個token構(gòu)成的序列,( x1,…,xn),語言模型根據(jù)歷史的序列預(yù)測(x1.....xi-1)下一個token xi的概率。在正向計算(forwar pass)過程中,根據(jù)歷史之前的序列(x1.....xi-1)預(yù)測第i個token xi的概率

?

反向LSTM結(jié)構(gòu):

在反向計算(backward pass)過程中,根據(jù)歷史之后的序列(xi+1......xn)預(yù)測第i個token xi的概率,

兩個方向上的預(yù)測過程都是由多層LSTMs建模的,給定輸入token xi得到隱狀態(tài)為h→i,?和h←i,?。最后一層的輸出的隱狀態(tài)為hi,L=[h→i,L;h←i,L]作為輸出層的輸入,用于得到最終的輸出yi。模型共享embedding層和softmax層,分別由θe和θs參數(shù)化表示。
?

?

最大似然函數(shù):

該模型的目標(biāo)函數(shù)(loss function)是最小化兩個方向的負(fù)對數(shù)似然( =最大化真實單詞的對數(shù)似然) :

?

ELMo通過以某種方式將隱藏狀態(tài)(和初始嵌入)組合在一起來提出情境化嵌入(連接后加權(quán)求和)。

?

ELMo中最后的向量是將詞的embedding和兩個LSTM的輸出向量做線性疊加。

ELMo是雙向語言模型biLM的多層表示的組合,對于某一個詞語 t,一個L層的雙向語言模型biLM能夠由2L+1個向量表示:

LMo使用雙層BiLSTM來訓(xùn)練語言模型,創(chuàng)新是線性組合不同層的word vectors, 作為最終的word representation. 核心公式:

  • 第一層是普通的word embedding 可以用wrod2vec或者glove來得到,或者使用character level得到token embedding, 這部分是general embedding,上下文無關(guān)。文中使用的character level的CNN+Highway.
  • 后面連接兩個biLSTM 去encode 輸入(同時也有殘差連接), 每一層LSTM得到的輸出(隱狀態(tài)) 作為每個詞的上下文相關(guān)的word vectors.
  • 這樣每個詞就會有(L+1)個詞向量,L為biLSTM的層數(shù).
  • 詞向量的線性組合,針對不同的任務(wù),不同層的向量做不同的權(quán)重加和。 其中權(quán)重s是一個維度為L的vector,參與訓(xùn)練。

因此ELMo的基本輸入單元為句子,每個詞沒有固定的詞向量,是根據(jù)詞的上下文環(huán)境來動態(tài)產(chǎn)生當(dāng)前詞的詞向量,常見的場景可以較好解決一詞多義的問題,這一點跟word2vec與glove等通用詞向量模型是不同的。

?

4. ELMo實際使用

將BiLMs應(yīng)用到有監(jiān)督NLP任務(wù)

給定一個預(yù)訓(xùn)練好的biLM模型和一個有監(jiān)督的NLP任務(wù),可以很簡單的使用biLM來提升任務(wù)效果,我們只需要用biLM預(yù)測每句話中的詞在biLM各層下的表示。然后,用端任務(wù)模型學(xué)習(xí)這些表示的線性組合,具體如下:

首先對于大多數(shù)NLP任務(wù)最底層(靠近輸入層)的結(jié)構(gòu)基本都一樣,這讓我們可以使用統(tǒng)一的方式將ELMo加進(jìn)去。給定一個詞序列 (t1,....,tN),常規(guī)操作是使用預(yù)訓(xùn)練好的詞嵌入(以及可選的字表示)將這個序列轉(zhuǎn)化為一個上下文無關(guān)的詞表示 (x1,..., xk) ,然后模型下一步輸出一個上下文相關(guān)的表示 hk,這一步可以用RNNs, CNNs,或者前饋神經(jīng)網(wǎng)絡(luò)。

要將ELMo加入到這個模型,我們首先固定住biLM的權(quán)重然后拼接ELMo向量 ELMo-k和 xk ,得到 [xk; ELMo-k] ,將其傳入任務(wù)模型,比如RNN模型。對于一些任務(wù)我們發(fā)現(xiàn)將RNN模型的RNN輸出hk替換為 [hk; ELMo-k]能帶來進(jìn)一步提升。模型其他部分不做改變,我們甚至可以應(yīng)用到更加復(fù)雜的神經(jīng)網(wǎng)絡(luò)中,比如第四部分的SNLI實驗,其biLSTMs后面接了一個雙向注意力層,又比如指代解析實驗中在biLSTMs上面有一個聚類模型作為一層。

最后,我們發(fā)現(xiàn)可以對ELMo添加適當(dāng)?shù)膁ropout,某些望情況下loss上加L2的正則化會帶來好處,通過對ELMo的權(quán)重添加歸納偏置讓其和biLM層的均值保持接近。

?

ELMO 的本質(zhì)思想是:我事先用語言模型學(xué)好一個單詞的 Word Embedding,此時多義詞無法區(qū)分,不過這沒關(guān)系。在我實際使用 Word Embedding 的時候,單詞已經(jīng)具備了特定的上下文了,這個時候我可以根據(jù)上下文單詞的語義去調(diào)整單詞的 Word Embedding 表示,這樣經(jīng)過調(diào)整后的 Word Embedding 更能表達(dá)在這個上下文中的具體含義,自然也就解決了多義詞的問題了。所以 ELMO 本身是個根據(jù)當(dāng)前上下文對 Word Embedding 動態(tài)調(diào)整的思路。

?

ELMO 采用了典型的兩階段過程,第一個階段是利用語言模型進(jìn)行預(yù)訓(xùn)練;第二個階段是在做下游任務(wù)時,從預(yù)訓(xùn)練網(wǎng)絡(luò)中提取對應(yīng)單詞的網(wǎng)絡(luò)各層的 Word Embedding 作為新特征補充到下游任務(wù)中。

上圖展示的是其預(yù)訓(xùn)練過程,它的網(wǎng)絡(luò)結(jié)構(gòu)采用了雙層雙向 LSTM,目前語言模型訓(xùn)練的任務(wù)目標(biāo)是根據(jù)單詞Wi 的上下文去正確預(yù)測單詞 Wi , 之前的單詞序列 Context-before 稱為上文,之后的單詞序列 Context-after 稱為下文。圖中左端的前向雙層LSTM代表正方向編碼器,輸入的是從左到右順序的除了預(yù)測單詞Wi外 的上文 Context-before;右端的逆向雙層 LSTM 代表反方向編碼器,輸入的是從右到左的逆序的句子下文 Context-after;每個編碼器的深度都是兩層 LSTM 疊加。這個網(wǎng)絡(luò)結(jié)構(gòu)其實在 NLP 中是很常用的

使用這個網(wǎng)絡(luò)結(jié)構(gòu)利用大量語料做語言模型任務(wù)就能預(yù)先訓(xùn)練好這個網(wǎng)絡(luò),如果訓(xùn)練好這個網(wǎng)絡(luò)后,輸入一個新句子Snew,句子中每個單詞都能得到對應(yīng)的三個Embedding:最底層是單詞的 Word Embedding,往上走是第一層雙向LSTM中對應(yīng)單詞位置的 Embedding,這層編碼單詞的句法信息更多一些;再往上走是第二層LSTM中對應(yīng)單詞位置的 Embedding,這層編碼單詞的語義信息更多一些。也就是說,ELMO 的預(yù)訓(xùn)練過程不僅僅學(xué)會單詞的 Word Embedding,還學(xué)會了一個雙層雙向的LSTM網(wǎng)絡(luò)結(jié)構(gòu),而這兩者后面都有用。

?

上面介紹的是 ELMO 的第一階段:預(yù)訓(xùn)練階段。那么預(yù)訓(xùn)練好網(wǎng)絡(luò)結(jié)構(gòu)后,如何給下游任務(wù)使用呢?

上圖展示了下游任務(wù)的使用過程,比如我們的下游任務(wù)仍然是 QA 問題,此時對于問句 X,我們可以先將句子 X 作為預(yù)訓(xùn)練好的 ELMO 網(wǎng)絡(luò)的輸入,這樣句子 X 中每個單詞在 ELMO 網(wǎng)絡(luò)中都能獲得對應(yīng)的三個 Embedding,之后給予這三個 Embedding 中的每一個 Embedding 一個權(quán)重a,這個權(quán)重可以學(xué)習(xí)得來,根據(jù)各自權(quán)重累加求和,將三個 Embedding 整合成一個。然后將整合后的這個 Embedding 作為 X 句在自己任務(wù)的那個網(wǎng)絡(luò)結(jié)構(gòu)中對應(yīng)單詞的輸入,以此作為補充的新特征給下游任務(wù)使用。

對于上圖所示下游任務(wù) QA 中的回答句子 Y 來說也是如此處理。

因為 ELMO給下游提供的是每個單詞的特征形式,所以這一類預(yù)訓(xùn)練的方法被稱為“Feature-based Pre-Training”。至于為何這么做能夠達(dá)到區(qū)分多義詞的效果,你可以想一想,其實比較容易想明白原因。

?

5. ELMo缺點

ELMO仍然存在兩個比較明顯的不足:

??? 1、使用Bi-LSTM模型構(gòu)建語言模型,捕捉語義、長距離依賴和task-specific特征抽取、并行計算的能力弱于基于Self-Attention的Transformer模型。論文《Why Self-Attention? A Targeted Evaluation of Neural Machine Translation Architectures》,已經(jīng)證明Transformer已經(jīng)在捕捉長距離特征依賴、語義特征、任務(wù)相關(guān)特征和并行計算的能力,優(yōu)于LSTM和CNN。關(guān)于CNN、LSTM和Transformer的詳細(xì)對比,可以參考張俊林老師的文章:《放棄幻想,全面擁抱Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較》。

?2、通過拼接(word embedding,Forward hidden state,backward hidden state)方式融合特征的方式,削弱了語言模型特征抽取的能力。

因此,GPT、BERT、MT-DNN和GPT-2基于Transformer構(gòu)建LM,解決了問題一;對各種NLP任務(wù)進(jìn)行改造,以適應(yīng)pre-trained模型,即預(yù)訓(xùn)練的模型結(jié)構(gòu)不變,只是改變輸入的組織方式,很好的避免了問題2;具體的任務(wù)改造基本類似。

?

參考:

NAACL2018:高級詞向量(ELMo)詳解(超詳細(xì)) 經(jīng)典

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的[深度学习]自然语言处理 --- ELMo的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。