(一)、NLP四大類任務:
1.序列标注:這是最典型的 NLP 任務,比如中文分詞,詞性标注,命名實體識别,語義角色标注等都可以歸入這一類問題,它的特點是句子中每個單詞要求模型根據上下文都要給出一個分類類别。
2.分類任務:比如我們常見的文本分類,情感計算等都可以歸入這一類。它的特點是不管文章有多長,總體給出一個分類類别即可。
3.句子關系判斷:比如 QA,語義改寫,自然語言推理等任務都是這個模式,它的特點是給定兩個句子,模型判斷出兩個句子是否具備某種語義關系。
4.生成式任務:比如機器翻譯,文本摘要,寫詩造句,對對聯,看圖說話等都屬于這一類。它的特點是輸入文本内容後,需要自主生成另外一段文字。
(二)、NLP算法發展史
1. NNLM(Neural Network language model):
簡述:通過多個上文輸入,預測輸出,應用了word Embedding方法,但是此word Embedding是沒有上下文的word Embedding,也就是word直接用one-hot表示,然後乘以一個向量權重矩陣(這個向量矩陣其實就是word Embedding向量矩陣,是我們訓練得到的)得到該word的word Embedding向量。
實作功能:将上文的t-1個詞輸入,預測第t個詞
網絡結構:将前t-1個詞的one-hot編碼向量輸入網絡,分别乘以一個共享的word Embedding向量矩陣C,得到t-1個word Embedding向量,然後将t-1個向量進行concat,然後經過激活函數tanh激活後,輸入到softmax層進行機率預測。
NNLM模型圖如下:

缺點:NNLM所求解的word Embedding矩陣C沒有包含上下文的資訊,隻是一個獨立的個體。
2. word2vec:
簡述:引入了基于上下文的word Embedding,即用上文的單詞和下文的單詞共同預測文中單詞(cbow),或者是用文中單詞來預測上文以及下文的單詞(Skip-gram),進而訓練出一個包含所有詞的word Embedding向量矩陣(如:在下圖中,cbow中的以及Skip-gram中的w(t)就是我們訓練出的word Embdding向量)
CBOW模型(Continuous Bag of Words)和Skip-gram模型如下圖:
實作功能:訓練一個word Embedding權重向量矩陣
網絡結構:上圖中将x(t)的上文單詞x(1)、x(2)…x(t-1)以及下文單詞x(t+1)、x(t+2)…輸入到網絡中訓練隐藏層(hidden layer)的x(t)的word Embdding向量,最終我們所需要的權重矩陣是網絡中輸入層到隐藏層的權重矩陣,隐藏層到輸出層的權重矩陣隻是我們用來訓練前面的權重矩陣的,在大樣本,海量資料文本訓練的過程中,就能訓練出每個word的Embedding向量(也就是hidded layer的向量),将所有的word Embedding向量組合就是一個word Embedding向量矩陣,也就是我們常用的word Embedding表
CBOW模型具體結構:
缺點: word2vec計算的word Embedding向量,無法區分多義詞的不同語義,在什麼語義下的word Embedding向量都表示相同。
3. Seq2Seq:
簡述:Seq2Seq模型的核心思想,通過深度神經網絡将一個定長(零填充機制實作定長)的輸入序列信号轉換為輸出的序列信号,這一過程由編碼和解碼兩個過程構成。在經典的實作中,編碼器和解碼器各由一個循環神經網絡(RNN,LSTM,GRU均可)構成,在Seq2Seq中,兩個循環神經網絡是共同訓練的(具體見:Seq2Seq模型)
實作功能:實作了将一個序列信号轉化成一個不定長的序列輸出
網絡結構:由編碼器(Encoder)和解碼器(Decoder)組成,Encoder是個GRU(或者是RNN和LSTM),它會周遊輸入的每一個word(詞),每個時刻的輸入是上一個時刻的隐狀态和輸入,然後會有一個輸出和新的隐狀态。這個新的隐狀态會作為下一個時刻的輸入隐狀态。每個時刻都有一個隐狀态輸出,對于Seq2Seq模型來說,我們通常隻保留最後一個時刻的隐狀态,認為它編碼了整個句子的語義,但是後面我們會用到Attention機制,它還會用到Encoder每個時刻隐狀态的輸出。Encoder處理結束後會把最後一個時刻的隐狀态作為Decoder的初始隐狀态。
Seq2Seq模型如下:
注意力機制的提出:解決了Seq2Seq的兩個缺陷,即難以記憶長句子,壓縮損失資訊.
添加注意力機制的Seq2Seq:
計算過程:Decoder層輸出的隐藏層狀态與Encoder所有隐藏層狀态作點積得到的結果,進行softmax,然後将softmax的結果與Encoder所有隐藏層狀态做乘法,并将結果相加,所得到的注意力權重再與原隐藏狀态concat,再将所得到的注意力狀态與輸入一起預測(訓練)輸出。
4. ELMO(Embedding from language model):
簡述:使用了雙向LSTM(RNN或者GRU)進行訓練,ELMO 的預訓練過程不僅僅學會單詞的 Word Embedding,還學會了一個雙層雙向的 LSTM 網絡結構。
改進:解決了多義詞問題
缺點:LSTM抽取特征能力不夠強
5. openAI GPT(Generative Pre-Training):
簡述:第一個階段是利用語言模型進行預訓練,第二階段通過 Fine-tuning 的模式解決下遊任務,使用了單向Transformer來進行訓練,即隻采用 上文來進行預測,而抛開了下文。
優點:使用Transformer作為特征抽取器,Transformer特征抽取能力明顯強于LSTM。
缺點:使用了單向的語言模型,即隻考慮了上文,沒有考慮下文。
6. BERT(Bidirectional Encoder Representations from Transformers):
簡述:Bert 采用和 GPT 完全相同的兩階段模型,首先是語言模型預訓練;其次是使Fine-Tuning 模式解決下遊任務。和 GPT 的最主要不同在于在預訓練階段采用Transformer的雙向語言模型。
BERT的輸入表示如下圖:
BERT在不同任務上的Fine-tuning:
如上述a,b,c,d四圖所示,通過Fine-tuning,bert可實作以下不同的四類任務:
a.句子關系分類:是否連續,二分類問題,需加上一個起始和終結符号,句子之間加個分隔符即可
b.單句分類:可以看成是文本分類任務,多分類問題,需增加起始和終結符号,輸出部分和句子關系判斷任務類似改造
c.問答系統:可以附着在 Seq2Seq 結構上,Encoder 部分是個深度 Transformer 結構,Decoder 部分也是個深度 Transformer 結構。根據任務選擇不同的預訓練資料初始化 Encoder 和 Decoder 即可
d.序列标注:輸入部分和單句分類是一樣的,隻需要輸出部分 Transformer 最後一層每個單詞對應位置都進行分類即可
改進:使用雙向的Transformer、Masked LM以及句子級預測(Next Sentence Prediction)
優點:幾乎可以做任何 NLP 的下遊任務,具備普适性