Word2vec, Fasttext, Glove, Elmo, Bert, Flair pre-train Word Embedding源碼+數據Github網址:github.com/zlsdu/Word-E

  • Word2vec
  • Fasttext
  • ULMFit
  • Glove
  • Cove
  • ELMO
  • GPT1.0
  • GPT2.0
  • BERT
  • Flair Embedding

一、Word2vec1、word2vec種語言模型word2vec屬於預測式詞向量模型,兩種Skipgram和CBOW

(1) skipgram通過中間詞預測周圍詞構建網路模型

(2) cbow通過周圍詞預測中間詞構建網路模型

2、word2vec中Tricks:(1) Hierarchicalsoftmax分層softmax最主要的改進既是:不需要對網路W個單詞的輸出計算概率分佈,只需要評估個節點即可

(2) Negativesampling

詳細介紹一下負採樣,word2vec中訓練技巧:負採樣通過模型的一次訓練來解釋負採樣的過程,以skip_gram模型訓練為例進行講解訓練樣本輸入詞是:love,輸出詞是me,如果詞典中有10000個詞,設定訓練出的詞向量大小為300,則開始love和me都是通過one-hot編碼的,在輸出位置上me對應的是1,其他位置都是0,我們認為這些0位置對應的詞即是負樣本,1位置對應的是正樣本,在不採用負採樣情況下隱層到輸出層的參數為300*10000,負採樣的意思即是我們只在9999個負樣本中選擇很少一部分對應的參數進行更新(包括正樣本的也更新),其他沒有挑中的負樣本參數保持不變,例如我們選擇5個negative words進行參數更新,加上一個正樣本總共是6個,因此參數是300*6,大大提高每次訓練的計算效率,論文中指出對於小規模數據集我們選擇5-20個negative words較好,在數據集情況下選擇2-5個負樣本較好(3) Subsamplingof Frequent words頻繁詞的二次採樣,根據論文描述在大的語料庫中,頻繁詞如容易出現很多次的theina提供的信息量遠沒有罕見詞提供的信息量多,因此在後續的訓練中頻繁詞無法提供更多的信息甚至會將網路帶偏,因此提出了頻繁詞二次採樣方式:即在每次訓練時按照如下公式對訓練集的單詞wi進行丟棄:

CBOW模型的優化函數(skipgram模型類似):

(4) word2vec是靜態詞向量預訓練模型,詞向量是固定的,不能解決多義詞問題,無法考慮預料全局信息

二、FasttextfastText是一個快速文本分類演算法,與基於神經網路的分類演算法相比有兩大優點:(1) fastText在保持高精度的情況下加快了訓練速度和測試速度(2) fastText不需要預訓練好的詞向量,fastText會自己訓練詞向量因此fasttext在預訓練上的體現便是我們可以通過fasttext訓練自己預料的詞向量1、fasttext模型架構fastText模型架構和word2vec中的CBOW很相似, 不同之處是fastText預測類別標籤而CBOW預測的是中間詞,即模型架構類似但是模型的任務不同,下面是fasttext的結構圖

2、fasttext中tricksfasttext和word2vec類似還體現在優化tricks上,fasttext的tricks有:(1) Hierarchical softmax:減少計算量(2) n-gram特徵:n-gram好處有可以考慮到語序信息同時也可避免OOV問題fasttext接下來在文本分類專題中會詳細介紹,這裡需明白fasttext能夠快速訓練詞向量提供nlp任務的預訓練Embedding,且實驗證明fasttext是預訓練中的佼佼者

三、ULMFiT1、ULMFiT模型結構

UniversalLanguage Model Fine-tuning通用語言模型微調,主要做文本分類任務

如下圖所示主要是三個模型:(1) General-domainLM pretraining:在一般的大規模語料庫上進行預訓練語言模型(2) Targettask LM fine-tuning:在目標數據集上微調語言模型(3) Targettask classifier fine-tuning:在特定分類任務上微調語言模型

2、ULMFit中Tricks在Target task LM fine-tuning階段:(1) Two-stagefine-tuning:在特徵數據集和分類兩階段fine-tuning

(2) Discriminativefine-tuning:為網路的每一層都設置了學習率,因為網路不同層捕獲不同信息,因此進行不同程度的微調

(3) Slantedtriangular learning rates:傾斜三角學習率,意思是為了使參數更快的適應任務的特徵,在模型開始訓練時快速收斂到參數空間,再細化參數

在Target task classifier fine-tuning階段tricks:(1) concatpooling:將最後隱層狀態按max-pooled或mean-pooled拼接起來

(2) guadualunfreezing: 過度微調會導致語音模型捕獲的信息遺忘,而過於謹慎的微調會導致收斂緩慢,採用的是逐步微調方法,逐層微調(3) BPTTfor text classification:時間反向傳播,實現大輸入序列的梯度傳播(4) Bidirectional language model:雙向語言模型

四、Glove1、Glove矩陣分解模型Glove是一種矩陣分解式詞向量預訓練模型,如果我們要得到目標詞w的預訓練Embedding目標詞w的Embedding表示取決於同語境中的詞c的共現關係,因此引入矩陣分解的共現矩陣M,下面先給出共現矩陣M定義:|Vw|行,每行對應Vw中出現的詞w|Vc|列,每列對應Vc中出現的詞c

Mij表示wi和cj之間的某種關聯程度,最簡單的聯繫是w和c共同出現的次數

重點來了,Glove中定義w和c的關聯度為:

Glove共現矩陣分解方式:

Glove分解誤差及優化目標定義:

2、Glove中的優缺點(1) 優點:glove矩陣分解是基於全局預料的,而word2vec是基於部分預料訓練的(2) 缺點:glove和word2vec、fasttext一樣詞向量都是靜態的,無法解決多義詞問題,另外通過glove損失函數,還會發現glove有一個致命問題,看下解釋:

看上面的公式,glove損失函數顯示,在glove得出的詞向量上加上任意一個常數向量後,仍舊是損失函數的解,這問題就較大,如我們加上一個特別的常數,詞向量就是十分接近了,這樣就失去了詞向量的表示含義,因此用glove訓練出詞向量後要進行check

五、Cove1、Cove模型結構模型首先在一個Encoder-Decoder機器翻譯的訓練任務上進行預訓練,預訓練模型訓練好之後只取Embedding層和Encoder層,然後在新的任務上設置task-specific model,用預訓練好的Embedding層和Encodeer層作為輸入,最後在新的任務場景下進行訓練

預訓練模型Encoder部分使用的是Bi-LSTM,並在下游任務中結合了glove向量作為表示

在效果上要優於glove的多種任務,但缺點是大多還是利用下游任務的模型表現

六、ELMO1、ELMO模型結構ELMO首先根據名字Embedding from language model便可以ELMO是一個基於語言模型的詞向量預訓練模型,其次ELMO區別於word2vec、fasttext、glove靜態詞向量無法表示多義詞,ELMO是動態詞向量,不僅解決了多義詞問題而且保證了在詞性上相同ELMO模型使用語言模型Language Model進行訓練,ELMO預訓練後每個單詞對應三個Embedding向量:(1) 底層對應的是Word Embedding,提取word的信息(2) 第一層雙向LSTM對應是Syntactic Embedding,提取高於word的句法信息(3) 第二層雙向LSTM對應的是Semantic Embedding,提取高於句法的語法信息ELMO在下游任務中是將每個單詞對應的三個Embedding按照各自權重進行累加整合成一個作為新特徵給下游任務使用,如下圖所示:

在Bert論文中也給出了ELMO的模型圖,比上圖更簡潔易於理解:

下面通過公式來再深入理解一下ELMO的雙向LSTM語言模型,有一個前向和後向的語言模型構成,目標函數是取這兩個方向語言模型的最大似然給定N個tokens,前向LSTM結構為:

後向LSTM結構為:

Bi-LSTM的目標函數既是最大化前向和後向的對數似然和:

2、ELMO的優缺點ELMO的優點便是使用了雙層Bi-LSTM,並且最終模型學到的是Word Embedding + Syntactic Embedding + Semantic Embedding的線性組合ELMO相較於Bert模型來說,有以下缺點:(1) ELMO在特徵抽取器選擇方面使用的是LSTM,而不是更好用Transformer,Bert中使用的便是Transformer,Transformer是個疊加的自注意力機制構成的深度網路,是目前NLP裏最強的特徵提取器(2) ELMO採用雙向拼接融合特徵,相對於Bert一體化融合特徵方式可能較弱

七、GPT1.01、GPT1.0模型結構GPT1.0使用語言模型進行預訓練,通過Fine-tuning的模式解決下有任務GPT1.0和ELMO相比最大的兩點不同(1) 特徵抽取器使用的是Transformer而不是RNN(2) GPT預訓練仍舊採用的是以語言模型作為目標任務,但是採用的是單向的語言模型,而不是ELMO和Bert中的雙向語言模型,這也是GPT1.0甚至是GPT2.0與Bert模型相比最大的區別Bert論文中給出了GPT模型的簡要結構,可以看出輸入是Word Embedding,然後是兩層單向的語言模型,特徵提取器使用的是Transformer

根據論文GPT1.0訓練模型使用的任務包含以下三個:(1) Textual entailment: For entailment tasks, we concatenate the premisep and hypothesis h token sequences, with a delimiter token ($) in between(2) Similarity句子相似度(3) Question Answer and Commonsense Reasoning

2、GPT中Tricks(1) 特徵提取器使用了Transformer替代RNN(2) Discriminative fine tuning:意思是對於特定的任務有區別的進行下游任務的微調,即模型會感知輸入的數據對於進行轉化,最小程度修改模型結構

八、GPT2.01、GPT2.0模型結構GPT2.0模型結構和GPT1.0大致相同,仍舊是採用單向語言模型預訓練,特徵提取使用的是Transformer,GPT2.0相對於GPT1.0主要是做了以下三點大的改進(1) transformer模型由原來24層疊加的block變成了48層,參數15億(2) 更大網路自然需要更多數據,因此數據採用質量更高數量更大的涵蓋範圍更廣的數據WebText(3) 使用無監督進行下游任務而不是fine-tuning當然還有一些小的改變如對transformer結構進行了微調,主要還是增大了網路層次 2、對GPT2.0的應用理解雖然大多數感覺GPT不如Bert,因為它和Bert特徵提取器都使用的是Transformer,但是它使用的是單向語言模型,不似Bert的雙向語言模型效果那麼好,但是GPT在一個方面還是完勝Bert的,那就是序列生成任務上,如摘要生成,自動生成自然語言的句子和段落,這歸因於GPT的預訓練任務

九、BERT1、Bert模型結構Bert相信NLPer都相當熟悉了,Bert模型主要兩個特點(1) 特徵提取器使用的是transformer(2) 預訓練使用的是雙向語言模型

Bert還有突出的地方在於它的預訓練任務上,Bert採用了兩個預訓練任務:Masked語言模型(本質上是CBOW)、NextSentence Prediction(1) Masked語言模型:隨機選擇語料中15%的單詞,把它摳掉,也就是用[Mask]掩碼代替原始單詞,然後要求模型去正確預測被摳掉的單詞,但15%詞中只有80%會被替換成mask,10%被替換成另一個詞,10%的詞不發生改變(2) Next SentencePrediction:指語言模型訓練的時候,分兩種情況選擇句子,一種是正確拼接兩個順序句子,一種是從語料庫中隨機選擇一個句子拼接到句子後面,做mask任務時順帶做句子關係預測,因此BERT的預訓練是一個多任務過程在因為Bert預訓練預料豐富模型龐大,Bert的可適用的下游任務也很多,Bert可以對於上述四大任務改造下游任務,應用廣泛:(1) 序列標註:分詞、POS Tag、NER、語義標註(2) 分類任務:文本分類、情感計算(3) 句子關係判斷:Entailment、QA、自然語言推斷(4) 生成式任務:機器翻譯、文本摘要等

2、Bert中的細節理解看下圖,Bert在訓練和使用過程中注意的一些小細節:(1) Bert訓練的詞向量不是完整的,而是WordPiece Embedding,因此要通過Bert模型得到英文Word Embedding要將WrodPiece Embeddings轉化為Word Embedding(2) Bert預訓練模型的輸入向量是Token Embeddings + Segment Embeddings + Position Embeddings(3) 在對Bert模型微調進行下游任務時,需要知道Bert模型輸出什麼傳入下游任務模型,即是開頭[CLS]出的向量Special Classification Embeddings

3、特徵提取器插播說到NLP中的特徵提取器這裡說一下,目前NLP常用的特徵提取方式有CNN、RNN和Transformer,下面簡要比較:(1) CNN的最大優點是易於做並行計算,所以速度快,但是在捕獲NLP的序列關係尤其是長距離特徵方面天然有缺陷(2) RNN一直受困於其並行計算能力,這是因為它本身結構的序列性依賴導致的(3) Transformer同時具備並行性好,又適合捕獲長距離特徵這裡順便放上ELMO、GPT、BERT的對比圖,其中ELMO特徵提取器使用的是RNN,GPT和Bert使用的是Transformer,GPT使用的是單向語言模型,ELMO和BERT使用的是雙向語言模型

4、Attention機制插播為了更好理解Transformer這裡希望可以通俗簡短的介紹一下Attention機制(1) 從機器翻譯(Encoder-Decoder)角度看一下Attention機制(下面圖片引自網路)

先看上面第一張圖,是傳統的機器翻譯,Y1由[X1, X2, X3, X4]編碼得到,可以看出[X1, X2, X3, X4]對翻譯得到詞Y1貢獻度沒有區別再看第二張圖是Attention+ 機器翻譯,每個輸出的詞Y受輸入X1, X2, X3, X4影響的權重不同,這個權重便是由Attention計算,因此可以把Attention機制看成注意力分配係數,計算輸入每一項對輸出權重影響大小(2) 從一個機器翻譯實例理解Attention機制,瞭解一下Attention如何對權重進行計算(下面圖片引自網路)

首先由原始數據經過矩陣變化得到Q、K、V向量,如下圖(下圖引自網路)

以單詞Thinking為例,先用Thinking的q向量和所有詞的k向量相乘,使用下面公式:

這種得到每個單詞對單詞Thinking的貢獻權重,然後再用得到的權重和每個單詞的向量v相乘,得到最終Thinking向量的輸出

還有Self-attention和Multi-head attention都是在Attention上進行一些改動,這樣不詳細介紹

十、Flair EmbeddingFlair Embedding預訓練目前聽到的還不太多,當時有論文證明在NER任務上目前比BERT效果還要好,其他任務還不確定,下面是在NER任務上的對比

這裡結合論文簡要介紹一下FlairEmbedding的預訓練模型,並給出Flair Embedding源碼github地址,上面詳細介紹了Flair Embedding的使用1、Flair Embedding預訓練模型A trained characterlanguage model to produce a novel type of word embeddin as contextual stringembeddings(1) pre-train on largeunlabeled corpora,(2) capture word meaningin context and therefore produce different embeddings for polysemous wordsdepending on their usage(3) model words andcontext fundamentally as sequences of characters, to both better handle rareand misspelled words as well as model subword structures such as prefixes andendings.

Character languagemodel: 2048 * 1 layer1 Billion word corpus in1 week for 1 GPUSequence tagging model:150 epochs256 * 1LayerClassic word embedding:GloVe , characterfeature: 25 * 1 layer 2、Flair Embedding使用flairEmbedding使用地址: github.com/zalandoresea,裡面詳細接受了Flair Embedding的介紹,並且集成了ElMO和BERT的使用

本文完結,後續持續出NLP相關文章,堅持用心寫文章,感興趣歡迎關注

推薦閱讀:
相關文章