通用的天然語言處理(natural language processing, nlp)過程以下:網絡
因爲模型以張量爲輸入,所以面對nlp數據集,第一個任務就是將文本轉爲向量,是本文談論的重點。其中大概有如下幾種方法:框架
利用傳統特徵如詞頻、tf-idf等對文本進行編碼,而後扔到LinearSVC
中,若是是二分類任務,效果基本還行,並且比較簡單。這些特徵的缺點在於:工具
效果比較吃數據集,若是數據集自己的詞比較散,效果會不好學習
不具有通用性動畫
計算比較慢,相比於利用word embedding + frozen而言ui
Word Embeddind是一種預訓練技術。編碼
在CV任務中,經常使用層級CNN結構,通常會使用CNN方法加以輔助。對於層級CNN結構來講,不一樣層級的神經元學習到不一樣類型的圖像特徵,由底向上造成層級結構,所以越接近底層的神經元學習到特徵越具備通用型(好比邊角線、弧線等基礎特徵),越高層神經元學習到的特徵越與具體任務相關。3d
所以,可使用ImageNet等大型數據集對網絡進行預訓練,抽取其底層任務無關的特徵提取器的參數對特定任務的網絡進行初始化:code
NLP語言模型 語言模型包括文法語言模型和統計語言模型,通常咱們指統計語言模型。 統計語言模型:把句子(sequence of word)看做一個隨機事件,以相應機率描述其屬於某種語言集合的可能性。給定一個詞聚集合V,對於一個由V中的詞構成的序列
,賦予機率
衡量其複合天然語法語義的置信度 常見的統計語言模型由N-gram Modelorm
那麼容易想到在nlp領域也可使用預訓練的方式對語義進行提取,其中最先的工做多是2003年的神經網絡語言模型(NNLM),在2013年深度學習火爆以後開始收到重視,word embedding是網絡訓練的副產品,是一個由詞向量組成的矩陣。2013年最火的用語言模型作word embedding的工具是word2vec。
Word2Vec的網絡結構和NNLM相似,區別在於訓練方法:
嘗試word2vec可使用
gensim
庫
WordEmbedding的問題在於:多義詞問題,它的訓練方式致使無論單詞的上下文都是預測相同的這個單詞,致使兩種不一樣的上下文信息都會編碼到相應的word embedding空間
Deep contextualized word representation -- Embedding from Language Models,提供了多義詞問題的解決方案。WordEmbedding在訓練好以後每一個單詞的表達就固定了,不會跟着context進行變化,也就是說它的embedding是靜態的。
ELMO的本質思想是:使用語言模型訓練單詞的WordEmbedding,實際使用時根據上下文單詞的語義進行調整,即根據上下文對Word Embedding進行調整。
ELMO採起了兩階段訓練過程:
缺點(與GPT和Bert對比):
Transformer Transformer是個疊加的Self Attention構成的深度網絡。注意力機制指掃描全局得到須要重點關注的目標區域,抑制無用信息。 Attention機制通常依附於Encoder-Decoder框架,單純的Encoder-Decoder通常用於輸入輸出維度不一致,那麼就利用Encoder將其編碼爲固定長度的信息向量(中間語義表示),再使用Decoder進行解碼,其缺點在於:
- 中間語義表示長度有限,可能存在信息損耗
- Decoder根據中間語義表示即句子的全局信息進行解碼,沒法注重句子的局部信息
引入Attention模型後至關於給每一個單詞都增長了權重,能夠關注於局部信息了 動畫演示 本質上Attention是對Source中元素的Value值進行加權求和(Source就是句子,元素就是每一個單詞,其value就是embedding):
Self Attention也稱爲intra Attention,attention機制中Source和Target內容不同,Self Attention機制是句子內部元素之間發生Attention的機制(能夠看做Source=Target的特殊狀況)。Self Attention能夠捕獲同一個句子中單詞之間的一些句法特徵/語義特徵,它直接捕獲兩個單詞的特徵,不一樣於RNN的序列計算(這會致使越遠的單詞有效捕獲的可能性越小)
Generative Pre-Training一樣使用兩階段過程:
與ELMO不一樣之處在於:
缺點:
Bert採用GPT徹底相同的兩階段模型(不一樣之處在於它使用了雙向且預訓練語言模型的數據規模更大),因此其實:
那麼問題就在於Transformer如何雙向使用進行訓練呢?
[MASK]
或者其餘詞對須要預測的詞進行替換
MASK
標記的,所以不能只針對這個標記進行訓練Bert的輸入由三種embedding進行疊加: