引言
自然語言處理(NLP)主要是研究實現(xiàn)人與計算機之間用自然語言進行有效通信的各種理論和方法?;谏窠?jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)技術(shù)具有強大的表達能力、端到端解決問題的能力,因而在NLP任務(wù)的應(yīng)用上越來越廣泛和有效。
近日,百度PaddlePaddle開源了語義表示模型ERNIE,在多個中文NLP任務(wù)上表現(xiàn)超越了谷歌的BERT(請參考鏈接),展示了百度在NLP技術(shù)的領(lǐng)先能力,同時也表明PaddlePaddle作為國內(nèi)目前唯一功能完備的深度學(xué)習(xí)平臺,在不斷得夯實框架能力, 并引領(lǐng)技術(shù)進步。實際上除了ERNIE,PaddlePaddle官方還有很多其他的NLP模型,覆蓋了包括語義表示、語義匹配、閱讀理解、機器翻譯、語言模型、情感傾向分析、詞法分析等各項NLP任務(wù)。本文將對這些模型做一些梳理和介紹。
語義表示-ERNIE
知識增強的語義表示模型 ERNIE(Enhanced Representation through kNowledge IntEgration)通過對詞、實體等語義單元的掩碼,使得模型學(xué)習(xí)完整概念的語義表示。相較于 BERT 學(xué)習(xí)原始語言信號,ERNIE 直接對先驗語義知識單元進行建模,增強了模型語義表示能力。
ERNIE 模型本身保持基于字特征輸入建模,使得模型在應(yīng)用時不需要依賴其他信息,具備更強的通用性和可擴展性。相對詞特征輸入模型,字特征可建模字的組合語義,例如建模紅色,綠色,藍色等表示顏色的詞語時,通過相同字的語義組合學(xué)到詞之間的語義關(guān)系。
此外,ERNIE 的訓(xùn)練語料引入了多源數(shù)據(jù)知識。除了百科類文章建模,還對新聞資訊類、論壇對話類數(shù)據(jù)進行學(xué)習(xí),這里重點介紹下論壇對話建模。對于對話數(shù)據(jù)的學(xué)習(xí)是語義表示的重要途徑,往往相同回復(fù)對應(yīng)的 Query 語義相似。基于該假設(shè),ERINE 采用 DLM(Dialogue Language Model)建模 Query-Response 對話結(jié)構(gòu),將對話 Pair 對作為輸入,引入 Dialogue Embedding 標識對話的角色,利用 Dialogue Response Loss 學(xué)習(xí)對話的隱式關(guān)系,通過該方法建模進一步提升模型語義表示能力。
ERNIE在語言推斷、語義相似度、命名實體識別、情感分析、問答匹配等自然語言處理(NLP)各類中文任務(wù)上的驗證顯示,模型效果全面超越 BERT,如下表所示。
項目地址:
ERNIE: https://github.com/PaddlePaddle/LARK/tree/develop/ERNIE
語義匹配-DAM,AnyQ-SimNet
語義匹配是一種用來衡量文本相似度的NLP任務(wù)。很多NLP的任務(wù)可以轉(zhuǎn)化為語義匹配問題。比如搜索可以認為是查詢詞與文檔之間的語義匹配問題,對話系統(tǒng)、智能客服可以認為是問題和回答之間的語義匹配問題。
PaddlePaddle官方提供了兩種語義匹配相關(guān)的模型:DAM和AnyQ-SimNet。
n 深度注意力匹配網(wǎng)絡(luò)DAM(Deep Attention Matching Network)
DAM 是一個完全基于 Attention 機制的神經(jīng)匹配網(wǎng)絡(luò)。DAM 的動機是為了在多輪對話中,捕獲不同顆粒度的對話元素中的語義依賴,從而更好地在多輪上下文語境中回復(fù)。它可用于檢索式聊天機器人多輪對話中應(yīng)答的選擇。
DAM受啟發(fā)于機器翻譯的Transformer模型。將Transformer關(guān)鍵的注意力機制從兩個方面進行拓展,并將其引入到一個統(tǒng)一的網(wǎng)絡(luò)之中。
自注意力機制(Self-Attention)
通過從詞嵌入中疊加注意力機制,逐漸捕獲不同顆粒度的語義表示。這些多粒度的語義表示有助于探索上下文和回答的語義依賴。
互注意力機制(Cross-Attention)
貫穿于上下文和回答的注意力機制,可以捕獲不同語段對的依賴關(guān)系,從而在多輪上下文的匹配回答中為文本關(guān)系提供互補信息。
DAM模型網(wǎng)絡(luò)結(jié)構(gòu)
該模型在Ubuntu和豆瓣對話兩個語料庫上測試了多輪對話任務(wù),如下表所示,相比其他模型有最優(yōu)的效果。
DAM模型的效果對比
PaddlePaddle開源的DAM項目提供了數(shù)據(jù)準備、模型訓(xùn)練和推理等詳細的應(yīng)用步驟。該項目的地址為:https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleNLP/deep_attention_matching_net
n SimNet
SimNet 是百度自主研發(fā)的語義匹配框架,該框架在百度內(nèi)有廣泛的應(yīng)用,主要包括 BOW、CNN、RNN、MM-DNN 等核心網(wǎng)絡(luò)結(jié)構(gòu)形式,同時基于該框架也集成了學(xué)術(shù)界主流的語義匹配模型。使用 SimNet 構(gòu)建出的模型可以便捷的加入AnyQ系統(tǒng)中,增強AnyQ系統(tǒng)的語義匹配能力。
Paddle版本Simnet提供了BOW,CNN,LSTM及GRU四種網(wǎng)絡(luò)實現(xiàn),可以通過配置文件的形式靈活選擇您需要的網(wǎng)絡(luò),損失函數(shù),訓(xùn)練方式。
PaddlePaddle官方提供了完整的數(shù)據(jù)準備、訓(xùn)練和推理的相關(guān)使用方法。
SimNet項目鏈接:
https://github.com/baidu/AnyQ/tree/master/tools/simnet/train/paddle
閱讀理解-DuReader
機器閱讀理解是指讓機器像人類一樣閱讀文本,提煉文本信息并回答相關(guān)問題。對人類而言,閱讀理解是獲取外部知識的一項基本且重要的能力。同樣,對機器而言,機器閱讀理解能力也是新一代機器人應(yīng)具備的基礎(chǔ)能力。
DuReader 是一個解決閱讀理解問題的端到端模型,可以根據(jù)已給的文章段落來回答問題。模型通過雙向Attention 機制捕捉問題和原文之間的交互關(guān)系,生成 Query-Aware 的原文表示,最終基于 Query-Aware 的原文表示通過 Point Network 預(yù)測答案范圍。
DuReader模型在最大的中文 MRC 開放數(shù)據(jù)集——百度閱讀理解數(shù)據(jù)集上,達到了當(dāng)前最好效果。該數(shù)據(jù)集聚焦于回答真實世界中開放問題,相比其他數(shù)據(jù)集,它的優(yōu)點包括真實的問題、真實的文章、真實的回答、真實的場景和翔實的標注。
DuReader受啟發(fā)于三個經(jīng)典的閱讀理解模型(Bi-DAF、Match-LSTM和R-NET),是一個雙向多階段模型,共有5層:
詞嵌入層——用預(yù)訓(xùn)練詞嵌入模型將每一個詞映射到一個矢量上
編碼層——用雙向LSTM網(wǎng)絡(luò)為每一個問題和段落的位置抽取上下文信息
Attention flow層——耦合問題和上下文矢量,為上下文中的每一個詞生成query-aware特征矢量
Fusion層——利用雙向LSTM網(wǎng)絡(luò)捕獲上下文的詞之間的相互信息
解碼層——通過問題的attention池化的answer point網(wǎng)絡(luò)定位答案在段落中的位置。
Paddle Github鏈接:
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleNLP/machine_reading_comprehension
機器翻譯-Transformer
Transformer 最早是谷歌提出的一種用以完成機器翻譯等 Seq2Seq 學(xué)習(xí)任務(wù)的一種全新網(wǎng)絡(luò)結(jié)構(gòu),它完全使用 Attention 機制來實現(xiàn)序列到序列的建模,相比于以往NLP模型里使用RNN或者編碼-解碼結(jié)構(gòu),具有計算復(fù)雜度小、并行度高、容易學(xué)習(xí)長程依賴等優(yōu)勢, 整體網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1:Transfomer模型結(jié)構(gòu)
Encoder 由若干相同的 layer 堆疊組成,每個 layer 主要由多頭注意力(Multi-Head Attention)和全連接的前饋(Feed-Forward)網(wǎng)絡(luò)這兩個 sub-layer 構(gòu)成。
Multi-Head Attention 在這里用于實現(xiàn) Self-Attention,相比于簡單的 Attention 機制,其將輸入進行多路線性變換后分別計算 Attention 的結(jié)果,并將所有結(jié)果拼接后再次進行線性變換作為輸出。參見圖2,其中 Attention 使用的是點積(Dot-Product),并在點積后進行了 scale 的處理以避免因點積結(jié)果過大進入 softmax 的飽和區(qū)域。
Feed-Forward 網(wǎng)絡(luò)會對序列中的每個位置進行相同的計算(Position-wise),其采用的是兩次線性變換中間加以 ReLU 激活的結(jié)構(gòu)。
圖2多頭注意力(Multi-Head Attention)
此外,每個 sub-layer 后還施以 Residual Connection 和 Layer Normalization 來促進梯度傳播和模型收斂。
PaddlePaddle官方提供了該模型的數(shù)據(jù)準備、訓(xùn)練和推理等方法。
目前在未使用 model average 的情況下,英德翻譯 base model 和 big model 八卡訓(xùn)練 100K 個 iteration 后測試 BLEU 值如下表所示:
Transformer 模型支持同步或者異步的分布式訓(xùn)練。Paddle官方提供了詳細的配置方法。
Github項目地址:
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleNLP/machine_reading_comprehension
語言模型-LSTM,GRU
RNN、LSTM和GRU是深度學(xué)習(xí)在NLP中應(yīng)用的基礎(chǔ)語言模型。
RNN模型在同一個單元中,每個時刻利用當(dāng)前和之前輸入,產(chǎn)生當(dāng)前時刻的輸出,能夠解決一定時序的問題,但是受到短時記憶影響,很難將信息從較早的時間傳到較晚的時間。LSTM通過引入門結(jié)構(gòu)(forget,input,output三種門結(jié)構(gòu)),能夠?qū)⑿蛄械男畔⒁恢眰鬟f下去,能夠?qū)⑤^早的信息也引入到較晚的時間中來,從而客服短時記憶。
GRU與LSTM非常相似,但是只有兩個門(update,reset),因而參數(shù)更少,結(jié)構(gòu)簡單,訓(xùn)練更簡單。
Paddle提供了基于Penn Tree Bank (PTB)數(shù)據(jù)集的經(jīng)典循環(huán)神經(jīng)網(wǎng)絡(luò)LSTM語言模型實現(xiàn),通過學(xué)習(xí)訓(xùn)練數(shù)據(jù)中的序列關(guān)系,可以預(yù)測一個句子出現(xiàn)的的概率。
Paddle也提供了基于Penn Tree Bank (PTB)數(shù)據(jù)集的經(jīng)典循環(huán)神經(jīng)網(wǎng)絡(luò)GRU語言模型實現(xiàn),在LSTM模型基礎(chǔ)上做了一些簡化,保持效果基本持平的前提下,模型參數(shù)更少、速度更快。
Github鏈接:
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleNLP/language_model/lstm
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleNLP/language_model/gru
情感傾向分析-Senta
情感傾向分析針對帶有主觀描述的中文文本,可自動判斷該文本的情感極性類別并給出相應(yīng)的置信度。情感類型分為積極、消極、 中性。情感傾向分析能夠幫助企業(yè)理解用戶消費習(xí)慣、分析熱點話題和危機輿情監(jiān)控,為企業(yè)提供有力的決策支持。
Senta 模型是目前最好的中文情感分析模型,可自動判斷中文文本的情感極性類別并給出相應(yīng)的置信度。它包含有以下模型:
Bow(Bag Of Words)模型-- 是一個非序列模型。使用基本的全連接結(jié)構(gòu)。
淺層CNN模型--是一個基礎(chǔ)的序列模型,能夠處理變長的序列輸入,提取一個局部區(qū)域之內(nèi)的特征。
單層GRU模型--序列模型,能夠較好地解序列文本中長距離依賴的問題。
單層LSTM模型--序列模型,能夠較好地解決序列文本中長距離依賴的問題。
雙向LSTM模型--序列模型,通過采用雙向LSTM結(jié)構(gòu),更好地捕獲句子中的語義特征。百度AI平臺上情感傾向分析模塊采用此模型進行訓(xùn)練和預(yù)測。下圖展示了這種模型的原理。
基于Bi-LSTM的情感分類模型
總體來說,基于Bi-LSTM的情感分類模型包括三層:單詞語義層,句子語義層,輸出層。1.單詞語義層,主要是將輸入文本中的每個單詞轉(zhuǎn)化為連續(xù)的語義矢量表示,也就是單詞的Embedding。2.句子語義層,通過Bi-LSTM網(wǎng)絡(luò)結(jié)構(gòu),將單詞語義的序列轉(zhuǎn)化為整個句子的語義表示。3.輸出層,基于句子語義計算情感傾向的概率。
在PaddlePaddle的該模型項目地址上,給出來在C-API目錄下給出了bilstm_net模型的下載腳本download.sh,可供用戶下載使用(模型可支持C-API、python兩種預(yù)測方式),該模型在百度自建數(shù)據(jù)集上的效果分類準確率為90%。
Github項目地址:
https://github.com/baidu/Senta
中文詞法分析-LAC
LAC是一個聯(lián)合的詞法分析模型,能夠整體性地完成中文分詞、詞性標注、專名識別等NLP任務(wù)。LAC既可以認為是Lexical Analysis of Chinese的首字母縮寫,也可以認為是LAC Analyzes Chinese的遞歸縮寫。
中文分詞 -- 是將連續(xù)的自然語言文本,切分成具有語義合理性和完整性的詞匯序列的過程
詞性標注(Part-of-Speech tagging 或POS tagging)-- 是指為自然語言文本中的每個詞匯賦予一個詞性的過程
命名實體識別(Named Entity Recognition 簡稱NER)-- 即"專名識別",是指識別自然語言文本中具有特定意義的實體,主要包括人名、地名、機構(gòu)名、時間日期等
LAC基于一個堆疊的雙向 GRU 結(jié)構(gòu)(Bi-GRU-CRF),在長文本上準確復(fù)刻了百度AI開放平臺上的詞法分析算法。網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示。
用兩個Bi-GRU 堆疊的Bi-GRU-CRF網(wǎng)絡(luò)
Bi-GRU是GRU網(wǎng)絡(luò)的一種拓展,由一個反向的GRU與一個正向的GRU耦合而成,將一個完整的句子作為。兩個GRU的輸入相同,但是訓(xùn)練方向相反。兩個網(wǎng)絡(luò)的結(jié)果拼接以后作為輸出。堆疊多個Bi-GRU可以形成深度的網(wǎng)絡(luò),從而能夠促進語義的表示能力。本模型堆疊了兩層Bi-GRU。之后,將Bi-GRU的輸出連到一個全連接層。它將Bi-GRU 層的輸出轉(zhuǎn)為一個多維度矢量,矢量的維度是所有可能標簽的數(shù)量。整個網(wǎng)絡(luò)最上方,使用了CRF(條件隨機場)對最后的標簽做聯(lián)合解碼。
效果方面,分詞、詞性、專名識別的整體準確率95.5%;單獨評估專名識別任務(wù),F(xiàn)值87.1%(準確90.3,召回85.4%),總體略優(yōu)于開放平臺版本。在效果優(yōu)化的基礎(chǔ)上,LAC的模型簡潔高效,內(nèi)存開銷不到100M,而速度則比百度AI開放平臺提高了57%。
Github 鏈接:
https://github.com/baidu/lac
PaddlePaddle官方模型庫Github地址
https://github.com/PaddlePaddle/models
PaddlePaddle Github項目地址:
https://github.com/PaddlePaddle