廖勝蘭,吉建民,俞 暢,陳小平
(1.中國科學技術大學 計算機科學與技術學院,合肥 230026;2.中國科學技術大學 軟件學院,合肥 230031)
隨著人工智能領域的發(fā)展,越來越多的語音助手、聊天機器人和服務機器人等融入到人類的生活中。與這些語音助手、機器人進行交流的過程稱為人機交互,而人機交互的第一步就是機器人需要理解用戶的語義意圖?,F(xiàn)有的人機交互對話系統(tǒng)主要有任務導向型對話系統(tǒng)和非任務導向型聊天對話系統(tǒng)兩種。在任務型導向?qū)υ捪到y(tǒng)中,當有目的地要求機器人完成某項工作時,機器人必須先理解用戶的意圖。例如,手機上的語音助手需要理解用戶的意圖是查天氣還是撥打電話,餐廳的機器人需要理解用戶的意圖是點餐還是結(jié)賬。因此,意圖識別是人機交互系統(tǒng)中極為重要的模塊,并且作為對話系統(tǒng)中的意圖識別模塊,需要具有快速的響應能力。
意圖識別也叫做意圖分類,是一種特殊的文本分類。因為在任務型導向?qū)υ捪到y(tǒng)中,用戶意圖通常具有文本較短、目的性強等特點。意圖分類從傳統(tǒng)的模板匹配方法到統(tǒng)計學習方法,再到目前流行的深度學習方法,已經(jīng)有大量的研究團隊提出了許多經(jīng)典的模型。隨著自然語言處理領域深度學習模型的發(fā)展,谷歌公司(Google)在2018 年提出的BERT(Bidirectional Encoder Representations from Transformers)模型,使得大規(guī)模的預訓練方法成為自然語言處理領域的主流方法[1]。
雖然BERT 模型在自然語言處理領域的各項任務上都能取得很好的效果,但是由于其模型龐大,訓練需要大量數(shù)據(jù)且耗費大量資源,因此高校及中小企業(yè)的科研團隊難以從頭預訓練BERT。因此,如何利用預訓練過的BERT 模型來應用到特定任務上成為一個值得探討的課題。根據(jù)文獻[1]中的實驗結(jié)果,基于BERT 進行微調(diào)的教師模型能得到比Text-CNN[2]和Text-RCNN(Recurrent Convolution Neural Network)[3]等經(jīng)典模型更高的準確率,但是由于模型規(guī)模依然龐大,在任務中預測的時間也相應更長,在應用到實際任務時受到延時等影響。因此,用教師模型在預訓練及微調(diào)中獲得的知識,來指導原有小規(guī)模模型訓練,從而提升小規(guī)模模型的性能。這種訓練方法稱為知識蒸餾(Knowledge Distillation,KD)[4]。
在知識蒸餾的過程中,除原有的小規(guī)模數(shù)據(jù)集外,本文利用一種序列生成對抗網(wǎng)絡(sequence Generative Adversarial Network,seqGAN)[5]模型來生成更多的領域內(nèi)的無標簽文本。無標簽文本作為原有數(shù)據(jù)集的擴充,沒有類別標注,可利用擁有大量知識的教師模型來預測數(shù)據(jù)的類別,作為擴展數(shù)據(jù)訓練學生模型。通過無標簽文本,教師模型中的知識可以更好地遷移到學生模型,本文選取經(jīng)典的文本分類模型作為學生模型,對于教師模型,則對預訓練的BERT 模型進行改進,并在實驗過程中對改進模型的性能進行分析和比較。
傳統(tǒng)的意圖分類方法主要是基于手工模板和專家規(guī)則的方法,能夠在小數(shù)據(jù)集上較快實現(xiàn),但是由于模板和規(guī)則具有領域特征,因此難以維護,可移植性較差。文獻[6]研究發(fā)現(xiàn),即使在同一領域內(nèi),不同的表達方式也會導致規(guī)則模板數(shù)量增加,因此會耗費大量的資源。所以,傳統(tǒng)的方法雖然只需要少量數(shù)據(jù),但是與領域任務高度相關,且依賴于人工資源。
統(tǒng)計學習方法開始興起后,特征工程加淺層分類器的機器學習模型成為主流。特征工程是指對語料文本進行特征提取,如字、詞特征、N-Gram、TFIDF(Term Frequency-Inverse Document Frequency)特征權重等。分類器的訓練依賴于特征工程中提取的文本特征,常用的分類器有支持向量機(Support Vector Machine,SVM)[7]、邏輯斯蒂克回歸(Logistic Regression,LR)[8]、樸素貝葉斯(Na?ve Bayes,NB)[9]和集成模型Adaboost[10]等。許多研究者在特征的降維和分類器的設計方面做了大量的工作,例如YANG 對各種特征選擇方法,包括信息增益、互信息和卡方統(tǒng)計量等,從實驗上進行了分析和比較[11]。
由于自然語言的離散性質(zhì),深度學習很難直接應用到自然語言處理領域。因此,如何解決文本的連續(xù)表示是一個難題。詞向量的分布式表示提出后[12],深度學習模型可以提取到文本更深層的特征,從而進行高準確率的分類。隨著深度學習模型在自然語言處理領域的發(fā)展和應用,越來越多的學者將卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network,CNN)[2]、循環(huán)神經(jīng)網(wǎng)絡(Recurrent Neural Network,RNN)[13]和其變體長短時記憶(Long Short-Term Memory,LSTM)[14]、門控循環(huán)單元(Gated Recurrent Unit,GRU)[15]和注意力機制[16]等應用于意圖識別任務中。深度學習模型可以免去復雜的人工特征工程,直接在網(wǎng)絡中進行特征提取,實現(xiàn)端到端的訓練過程。
從詞向量的分布式訓練開始,預訓練模型逐漸被人們熟知。最早的CBOW(Continuous Bag of Words)和Skip-gram 模型分別通過利用上下文預測中心詞和利用中心詞預測上下文作為訓練目標,對無標簽數(shù)據(jù)進行訓練,得到每個詞含有語義信息的詞向量表示[17]。但是這樣訓練得到的詞向量是靜態(tài)的,無法解決不同語境下的一詞多義性問題。因此,文獻[18]提出一個雙向LSTM(Bi-LSTM)的語言模型,稱為ELMO(Embedding from Language Models)。ELMO 模型的雙向LSTM 結(jié)構產(chǎn)生的詞向量包含左側(cè)上文信息和右側(cè)下文信息,是上下文相關的動態(tài)詞向量,并且輸入語句中每個單詞都能得到對應的3 個詞向量,從底層到頂層分別包含了不同層次的語義信息,可以分別用于特定任務上的詞向量輸入。
但是ELMO 模型基于循環(huán)神經(jīng)網(wǎng)絡結(jié)構,其中單元是LSTM,難以并行訓練,自研究人員提出Transformer 模型[19]后,自注意力結(jié)構的高度并行化訓練大幅提升了模型的訓練速度,因此該模型具有更深的深度和更強的語義表達能力。Transformer 模型在許多任務上都代替了原來基于RNN 的模型。隨后,基于Transformer 塊結(jié)構的GPT(Generative Pre-Training)[20]模型和BERT 模型[1]相繼提出。GPT模型是單向的語言模型,相比循環(huán)神經(jīng)網(wǎng)絡可以捕捉到更長的語義信息,計算速度更快。但是GPT 模型的單向特征會忽略上下文信息,限制了其在更多應用場景的效果。
BERT 模型則是一個基于Transformer 結(jié)構的雙向語言模型,采用了掩碼語言模型(Masked Language Model,MLM)和下一句預測(Next Sentence Predict,NSP)兩個方法作為預訓練過程中的任務,并且使用更強大的機器訓練更大規(guī)模的數(shù)據(jù),使得BERT 的結(jié)果達到了全新的高度。在BERT 模型之后,許多研究團隊提出諸多改進方案,包括對語言模型改進用于語言生成的MASS 模型[21]、融合知識圖譜進行改進的ERNIE 模型[22]和用于多任務學習的MTDNN 模型[23]等。
圖1 基于知識蒸餾的意圖分類框架Fig.1 Intent classification framework based on knowledge distillation
知識蒸餾的概念最早在計算機視覺領域被提出[4],可以被看作一種模型壓縮方法。“教師-學生”框架將復雜的、學習能力強的教師網(wǎng)絡學到的特征表示知識“蒸餾”出來,傳遞給參數(shù)量小、學習能力弱的學生網(wǎng)絡。
對于一般的分類問題,數(shù)據(jù)的標簽是一個“onehot”類別,也即一條數(shù)據(jù)的類別是固定的,稱為“硬標簽”。但在很多實際情況下,一條數(shù)據(jù)有一定的概率可能屬于其他的類別。比如,在手寫體識別任務中,一個模糊的“3”圖片,由于形狀的相似性,它有一定的概率屬于“2”或“5”類別。因此,在蒸餾過程中,訓練完成的教師網(wǎng)絡在預測時將soft Max 層的標簽概率分布信息提供給學生模型作為指導。這些標簽概率分布包含了類別間信息,文獻[4]將其稱為軟標簽。這種軟標簽中包含的特征信息是“one-hot”類別標簽中沒有的,也是學生模型難以學到的。因此,通過將大型模型的軟標簽信息傳遞給學生模型,可以提高學生模型的學習能力,起到模型壓縮的效果,使得將網(wǎng)絡部署到客戶端成為可能。
本文所提出的知識蒸餾框架如圖1 所示。
知識蒸餾框架步驟以下:
步驟1對于實驗真實數(shù)據(jù)集D,使用seqGAN模型生成大量領域內(nèi)的相似無標簽數(shù)據(jù),構成D′(詳細見本文第3 節(jié))。
步驟2用真實數(shù)據(jù)集D對教師模型進行微調(diào),得到一個準確率高、學習到大量領域知識的模型。
步驟3用教師模型對生成的無標簽數(shù)據(jù)集D′進行預測,對每條數(shù)據(jù)進行標注。
步驟4將數(shù)據(jù)集D和D′合并為D″。
步驟5用所有數(shù)據(jù)D″對學生模型S 進行訓練,同時用數(shù)據(jù)所屬類別硬標簽和教師模型預測得到的軟標簽組成損失函數(shù),作為訓練目標。
步驟6在不需要標注新的數(shù)據(jù),以及不需要其他計算資源的條件下,得到一個準確率高的學生模型。
損失函數(shù)Loss 如式(1)所示:
其中,λ表示兩種損失函數(shù)的平衡參數(shù),si表示學生模型對于當前數(shù)據(jù)的輸出,yi表示one-hot 編碼的分類硬標簽,ti表示教師模型對當前數(shù)據(jù)的輸出,即軟標簽,cross entropy 表示交叉墑?chuàng)p失函數(shù),Ldistill表示教師與學生之間知識蒸餾的損失函數(shù),LCE表示學生模型的輸出與標注的分類硬標簽之間的交叉墑?chuàng)p失函數(shù)。
從損失函數(shù)公式可以看出,模型的目標不僅使預測類別與標注標簽一致,還需要盡量與教師模型的輸出分布保持一致。
本文中的教師模型采用的是大規(guī)模預訓練模型BERT[1]及其變體。許多研究工作已經(jīng)證明,語言模型的預訓練可以提高許多自然語言處理任務的性能。預訓練是指在大量的無標簽文本上,以預測下一個單詞為目標來進行模型的訓練,這樣可以學習到每個單詞的上下文表示,稱為詞向量。訓練得到的詞向量和模型參數(shù)包含了許多在預訓練階段學到的有用的語義信息?;谶@樣預訓練后的模型,只需要用少量的領域數(shù)據(jù)對模型進行微調(diào),即可將模型運用到具體任務中。
BERT 模型結(jié)構如圖2 所示。該模型是一種基于Transformer 結(jié)構[19]的語言表示模型,以掩碼單詞預測和下一句預測作為訓練目標,捕捉了文本中的詞級別和句子級別的語義表示。BERT 最重要的部分就是雙向Transformer 編碼結(jié)構,Transformer 舍棄了RNN 的循環(huán)式網(wǎng)絡結(jié)構,完全基于注意力機制來對一段文本進行建模。Transformer 中的注意力機制稱為自注意力,核心思想是計算一句話中的每個詞對于其他詞的相互關系,從而調(diào)整每個詞的重要性來獲取上下文相關的詞向量。自注意力機制可以實現(xiàn)計算資源的并行化,加速訓練過程,并通過對位置進行編碼添加時序信息。
圖2 BERT 模型示意圖Fig.2 Schematic diagram of BERT model
本文所用的是在中文維基百科數(shù)據(jù)上進行了預訓練后的Bert-base-Chinese 模型。模型結(jié)構是12 個Transformer 模塊層,768 個隱層,12 個self-attention中的head,一共有1.1 億個參數(shù)。
BERT 模型的輸出包括兩種,一種是字符級向量,即輸入的每個字符對應一個向量,另外一種是句子級向量,即BERT 模型輸出最左邊“[CLS]”特殊符號的向量,文獻[1]認為這個向量可以代表整個句子的語義。因此,對于分類任務一般重點關注句子級向量,即分類標識[CLS]的輸出向量h。將這個向量h傳給一個softmax 分類器就可以得到分類結(jié)果的輸出。
本文實驗對標準的BERT 模型進行改進,在BERT 的輸出層取所有輸入字符對應的輸出向量,然后再接上一個文本分類器。本文選取長短時記憶網(wǎng)絡LSTM、卷積神經(jīng)網(wǎng)絡Text-CNN[2]和循環(huán)卷積神經(jīng)網(wǎng)絡Text-RCNN[3]這3 個模型作為BERT 之后的分類器,將BERT 輸出的向量進行計算后得到分類結(jié)果。因此,改進的模型分別稱為BERT+LSTM、BERT+CNN、BERT+RCNN。原始BERT 模型和各個改進模型在數(shù)據(jù)集上微調(diào)后的模型準確率在實驗部分給出。
雖然對BERT 等預訓練模型進行簡單的微調(diào)可以得到較高的準確率,但是這些預訓練模型規(guī)模龐大,預測速度慢??紤]到在實際應用場景中的延時、響應速度等問題,預訓練模型即使微調(diào)后也難以運用到實際應用場景中。例如,在對話系統(tǒng)中,意圖識別模塊需要對用戶話語進行意圖的分類,從而決定當前對話狀態(tài)并給出相應的回答。在這種智能對話系統(tǒng)的情境下,用戶的滿意度就取決于系統(tǒng)的響應速度以及對話的準確性。因此,在移動終端、可攜帶設備等多個場景下,分類模型的預測速度不能太慢,模型的規(guī)模也不能太大。因此,選用幾個經(jīng)典的小規(guī)模文本分類模型作為學生模型,通過用教師模型所學到的知識對學生進行指導訓練,即為“知識蒸餾”。
本文采取兩個經(jīng)典的文本分類模型作為學生模型,即基于文本的卷積神經(jīng)網(wǎng)絡Text-CNN 和基于文本的循環(huán)卷積神經(jīng)網(wǎng)絡Text-RCNN(Text Recurrent Convolution Neural Network)。這兩個模型規(guī)模不大,且分類準確率高,在許多文本分類任務上都能夠使用。
Text-CNN 模型由KIM 等人在2014 年提出[2],其將圖像領域的卷積神經(jīng)網(wǎng)絡應用到自然語言處理領域。該模型將一個句子及其單詞的詞向量看作一個矩陣作為模型的輸入,通過卷積層和池化層提取語義特征進行句子的分類。Text-CNN 由于卷積網(wǎng)絡的并行化計算,執(zhí)行效率高且分類效果較好。Text-RCNN[3]則是一個結(jié)合了RNN 和CNN 各自優(yōu)點的模型。該模型首先利用雙向循環(huán)神經(jīng)網(wǎng)絡(Bi-RNN)來捕捉前后上下文表征,得到一個包含上下文信息和本身詞向量表示的“詞向量”。接著使用CNN 網(wǎng)絡中濾波器filter_size=1 的卷積層,并利用最大池化操作得到與文檔最相關的向量表征,即獲取潛在的最相關語義表示。由于雙向神經(jīng)網(wǎng)絡的編碼使得Text-RCNN 模型能夠捕捉文本中的上下文語義信息,尤其是詞袋模型無法得到的語序含義。
本文運用Text-CNN 和Text-RCNN 模型在進行意圖分類的訓練過程中使用的分詞工具是結(jié)巴分詞,詞嵌入技術是word2vec[17],其他的一些訓練參數(shù)在實驗部分給出。
生成對抗網(wǎng)絡是GOODELLOW 等人在2014 年提出的一種生成式模型[24],最開始用于圖像生成領域。該模型由一個生成網(wǎng)絡和一個判別網(wǎng)絡組成。生成網(wǎng)絡模仿真實數(shù)據(jù)生成相似的樣本分布以欺騙判別網(wǎng)絡,判別網(wǎng)絡在迭代中不斷更新以區(qū)分生成樣本和真實數(shù)據(jù)。生成網(wǎng)絡和判別網(wǎng)絡相互博弈,直至達到那什均衡[25]。
但是傳統(tǒng)的生成對抗網(wǎng)絡很難應用于自然語言處理領域。因為自然語言數(shù)據(jù)本身是離散性質(zhì)的,所以判別器進行判別后的結(jié)果難以通過生成器進行梯度回傳。因此,文獻[5]提出一個使用強化學習中的獎勵機制來代替梯度回傳的seqGAN 模型。seqGAN 以循環(huán)神經(jīng)網(wǎng)絡RNN 作為生成網(wǎng)絡,卷積神經(jīng)網(wǎng)絡CNN 作為判別網(wǎng)絡,可以用于自然語言文本生成。
本文采用文獻[25]中的生成對抗網(wǎng)絡框架,對現(xiàn)有數(shù)據(jù)通過文本生成的方式進行擴充。擴充后的文本樣例如表1 所示,雖然個別生成序列不符合中文語法的現(xiàn)象,但是大部分生成的文本在句子結(jié)構和包含內(nèi)容方面能與真實的意圖文本相似。由于生成的文本雖然符合真實數(shù)據(jù)集的分布,但是沒有標注的類別,因此用真實數(shù)據(jù)微調(diào)后的教師模型對生成文本進行預測,預測得到的類別就作為這條語句的標簽。
表1 真實數(shù)據(jù)與生成數(shù)據(jù)的示例Table 1 Examples of real and generated data
本文采用真實的電力業(yè)務問詢語句作為數(shù)據(jù)集。數(shù)據(jù)集從電力公司供電營業(yè)廳采集,人工整理和標注后得到所有數(shù)據(jù)及其所屬的業(yè)務類別。數(shù)據(jù)集包括9 577條語句以及35 個業(yè)務類別,數(shù)據(jù)集中語句的平均長度為18.41 個字。除了真實數(shù)據(jù)集外,在第3 節(jié)提出了利用seqGAN 模型生成數(shù)據(jù)的數(shù)據(jù)增強方法?;诖朔椒ㄉ闪?0 000 條相似的領域內(nèi)數(shù)據(jù)作為擴充,真實數(shù)據(jù)與生成數(shù)據(jù)的示例見表1。
4.2.1 教師模型參數(shù)
本文采用在中文維基百科數(shù)據(jù)上進行了預訓練后的Bert-base-Chinese 模型作為BERT 基準模型。模型一共12 層,隱層為768 維,采用12 頭模式,共1.1 億個參數(shù)。模型的優(yōu)化方式采用BertAdam 算法對參數(shù)進行更新和微調(diào),初始學習率均為2e-5,預熱參數(shù)warmup 為0.1。微調(diào)訓練時采用批量訓練的方法,且批量大小為32,Dropout 比率默認設置為0.1。而改進后的教師模型則是分別在BERT 模型最后一層加上了Text-CNN 模型、一個雙向LSTM 層和Text-RCNN 模型,構成了BERT+CNN、BERT+LSTM 和BERT+RCNN 模型。
4.2.2 學生模型參數(shù)
本文采用Text-CNN 模型和Text-RCNN 模型作為學生模型。模型訓練時批處理大小為64。其中Text-CNN 模型卷積核尺寸如下[3-5]:每個尺寸下的個數(shù)為100,學習率為0.001,用結(jié)巴分詞工具分詞后采用word2vec 詞向量,詞向量維度為300。同樣,Text-RCNN 模型也采用300 維的word2vec 詞向量,隱層維度為256,學習率為0.001。
4.2.3 知識蒸餾參數(shù)
本文利用知識蒸餾技術進行“教師-學生”架構的訓練。根據(jù)式(1),軟硬標簽的損失函數(shù)都采用交叉墑函數(shù),平衡參數(shù)選為0.5。
本文采用準確率作為實驗模型的評估標準,準確率表示分類正確的數(shù)據(jù)占所有數(shù)據(jù)的比例。
首先用真實的意圖分類數(shù)據(jù)集對教師模型和學生模型分別進行訓練,得到這些模型單獨訓練時的準確率,結(jié)果如表2 所示,原始的Bert-base-Chinese 模型在數(shù)據(jù)集上微調(diào)可以達到92.5%的準確率。將BERT和Text-RCNN 相結(jié)合的教師模型在數(shù)據(jù)集上微調(diào)得到了教師模型中的最高準確率93.7%。學生模型中則是Text-RCNN 模型的準確率最高,達到87.1%。
表2 教師模型和學生模型的準確率Table 2 Comparisom of accuracy of teacher model and student model
得到了教師模型和學生模型的性能后,采用這些教師模型和學生模型進行知識蒸餾的指導訓練。在訓練過程中,分為使用生成數(shù)據(jù)和不使用生成數(shù)據(jù)兩種,分別對應表3 中的da(with data-aug)和woda(without data-aug)。知識蒸餾訓練得到的結(jié)果如表3 所示。表3 中學生模型分別為Text-CNN 和Text-RCNN?!皐ithout KD”表示學生模型單獨訓練時的結(jié)果,作為基準。表中第3 行開始是兩個學生模型分別在4 個教師模型的指導下進行知識蒸餾訓練得到的結(jié)果,其中加粗字體為最優(yōu)結(jié)果。
表3 知識蒸餾訓練結(jié)果Table 3 Training results by knowledge distillation %
可見,本文提出的訓練方法普遍可以使得學生模型準速率有所提高。其中,用準確率最高的教師模型BERT+RCNN 來指導準確率最高的學生模型Text-RCNN 訓練,并且將生成數(shù)據(jù)作為擴充,可以達到最高的90.9%準確率,比單獨的Text-RCNN 學生模型要高出3.8 個百分點。
從實驗結(jié)果可以看出,雖然學生模型無法超越教師模型的準確率,但是可以在教師模型的指導下有所提升,接近教師模型的準確率。學生模型的參數(shù)少、規(guī)模小,準確率最高的教師模型BERT+RCNN的參數(shù)量是學生模型Text-RCNN 的86 倍,如表2 所示。在實際應用時學生模型預測速度更快,更有利于部署到移動端等實際場景。
基于對話系統(tǒng)中的意圖分類問題,本文采用大規(guī)模預訓練模型和“教師-學生”框架的知識蒸餾等技術,構建基于BERT 模型的知識蒸餾意圖分類模型。采用BERT 及其變體作為教師模型,Text-CNN和Text-RCNN 兩個經(jīng)典的文本分類模型作為學生模型,以知識蒸餾的方式進行指導訓練。另外,采用seqGAN 生成對抗網(wǎng)絡來生成領域內(nèi)數(shù)據(jù),增加了訓練時的數(shù)據(jù)量。在真實的用戶意圖數(shù)據(jù)集上進行實驗,結(jié)果表明,本文模型可以使得學生模型準確率最高提升3.8%,接近教師模型的分類性能。由于數(shù)據(jù)集的標注耗費人力資源,目前公開的領域數(shù)據(jù)集都面臨著規(guī)模較小的問題,下一步將研究更有效的數(shù)據(jù)生成方法來擴充數(shù)據(jù)集。