廖勝蘭,吉建民,俞 暢,陳小平
(1.中國科學技術大學 計算機科學與技術學院,合肥 230026;2.中國科學技術大學 軟件學院,合肥 230031)
隨著人工智能領域的發展,越來越多的語音助手、聊天機器人和服務機器人等融入到人類的生活中。與這些語音助手、機器人進行交流的過程稱為人機交互,而人機交互的第一步就是機器人需要理解用戶的語義意圖。現有的人機交互對話系統主要有任務導向型對話系統和非任務導向型聊天對話系統兩種。在任務型導向對話系統中,當有目的地要求機器人完成某項工作時,機器人必須先理解用戶的意圖。例如,手機上的語音助手需要理解用戶的意圖是查天氣還是撥打電話,餐廳的機器人需要理解用戶的意圖是點餐還是結賬。因此,意圖識別是人機交互系統中極為重要的模塊,并且作為對話系統中的意圖識別模塊,需要具有快速的響應能力。
意圖識別也叫做意圖分類,是一種特殊的文本分類。因為在任務型導向對話系統中,用戶意圖通常具有文本較短、目的性強等特點。意圖分類從傳統的模板匹配方法到統計學習方法,再到目前流行的深度學習方法,已經有大量的研究團隊提出了許多經典的模型。隨著自然語言處理領域深度學習模型的發展,谷歌公司(Google)在2018 年提出的BERT(Bidirectional Encoder Representations from Transformers)模型,使得大規模的預訓練方法成為自然語言處理領域的主流方法[1]。
雖然BERT 模型在自然語言處理領域的各項任務上都能取得很好的效果,但是由于其模型龐大,訓練需要大量數據且耗費大量資源,因此高校及中小企業的科研團隊難以從頭預訓練BERT。因此,如何利用預訓練過的BERT 模型來應用到特定任務上成為一個值得探討的課題。根據文獻[1]中的實驗結果,基于BERT 進行微調的教師模型能得到比Text-CNN[2]和Text-RCNN(Recurrent Convolution Neural Network)[3]等經典模型更高的準確率,但是由于模型規模依然龐大,在任務中預測的時間也相應更長,在應用到實際任務時受到延時等影響。因此,用教師模型在預訓練及微調中獲得的知識,來指導原有小規模模型訓練,從而提升小規模模型的性能。這種訓練方法稱為知識蒸餾(Knowledge Distillation,KD)[4]。
在知識蒸餾的過程中,除原有的小規模數據集外,本文利用一種序列生成對抗網絡(sequence Generative Adversarial Network,seqGAN)[5]模型來生成更多的領域內的無標簽文本。無標簽文本作為原有數據集的擴充,沒有類別標注,可利用擁有大量知識的教師模型來預測數據的類別,作為擴展數據訓練學生模型。通過無標簽文本,教師模型中的知識可以更好地遷移到學生模型,本文選取經典的文本分類模型作為學生模型,對于教師模型,則對預訓練的BERT 模型進行改進,并在實驗過程中對改進模型的性能進行分析和比較。
傳統的意圖分類方法主要是基于手工模板和專家規則的方法,能夠在小數據集上較快實現,但是由于模板和規則具有領域特征,因此難以維護,可移植性較差。文獻[6]研究發現,即使在同一領域內,不同的表達方式也會導致規則模板數量增加,因此會耗費大量的資源。所以,傳統的方法雖然只需要少量數據,但是與領域任務高度相關,且依賴于人工資源。
統計學習方法開始興起后,特征工程加淺層分類器的機器學習模型成為主流。特征工程是指對語料文本進行特征提取,如字、詞特征、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 對各種特征選擇方法,包括信息增益、互信息和卡方統計量等,從實驗上進行了分析和比較[11]。
由于自然語言的離散性質,深度學習很難直接應用到自然語言處理領域。因此,如何解決文本的連續表示是一個難題。詞向量的分布式表示提出后[12],深度學習模型可以提取到文本更深層的特征,從而進行高準確率的分類。隨著深度學習模型在自然語言處理領域的發展和應用,越來越多的學者將卷積神經網絡(Convolutional Neural Network,CNN)[2]、循環神經網絡(Recurrent Neural Network,RNN)[13]和其變體長短時記憶(Long Short-Term Memory,LSTM)[14]、門控循環單元(Gated Recurrent Unit,GRU)[15]和注意力機制[16]等應用于意圖識別任務中。深度學習模型可以免去復雜的人工特征工程,直接在網絡中進行特征提取,實現端到端的訓練過程。
從詞向量的分布式訓練開始,預訓練模型逐漸被人們熟知。最早的CBOW(Continuous Bag of Words)和Skip-gram 模型分別通過利用上下文預測中心詞和利用中心詞預測上下文作為訓練目標,對無標簽數據進行訓練,得到每個詞含有語義信息的詞向量表示[17]。但是這樣訓練得到的詞向量是靜態的,無法解決不同語境下的一詞多義性問題。因此,文獻[18]提出一個雙向LSTM(Bi-LSTM)的語言模型,稱為ELMO(Embedding from Language Models)。ELMO 模型的雙向LSTM 結構產生的詞向量包含左側上文信息和右側下文信息,是上下文相關的動態詞向量,并且輸入語句中每個單詞都能得到對應的3 個詞向量,從底層到頂層分別包含了不同層次的語義信息,可以分別用于特定任務上的詞向量輸入。
但是ELMO 模型基于循環神經網絡結構,其中單元是LSTM,難以并行訓練,自研究人員提出Transformer 模型[19]后,自注意力結構的高度并行化訓練大幅提升了模型的訓練速度,因此該模型具有更深的深度和更強的語義表達能力。Transformer 模型在許多任務上都代替了原來基于RNN 的模型。隨后,基于Transformer 塊結構的GPT(Generative Pre-Training)[20]模型和BERT 模型[1]相繼提出。GPT模型是單向的語言模型,相比循環神經網絡可以捕捉到更長的語義信息,計算速度更快。但是GPT 模型的單向特征會忽略上下文信息,限制了其在更多應用場景的效果。
BERT 模型則是一個基于Transformer 結構的雙向語言模型,采用了掩碼語言模型(Masked Language Model,MLM)和下一句預測(Next Sentence Predict,NSP)兩個方法作為預訓練過程中的任務,并且使用更強大的機器訓練更大規模的數據,使得BERT 的結果達到了全新的高度。在BERT 模型之后,許多研究團隊提出諸多改進方案,包括對語言模型改進用于語言生成的MASS 模型[21]、融合知識圖譜進行改進的ERNIE 模型[22]和用于多任務學習的MTDNN 模型[23]等。

圖1 基于知識蒸餾的意圖分類框架Fig.1 Intent classification framework based on knowledge distillation
知識蒸餾的概念最早在計算機視覺領域被提出[4],可以被看作一種模型壓縮方法。“教師-學生”框架將復雜的、學習能力強的教師網絡學到的特征表示知識“蒸餾”出來,傳遞給參數量小、學習能力弱的學生網絡。
對于一般的分類問題,數據的標簽是一個“onehot”類別,也即一條數據的類別是固定的,稱為“硬標簽”。但在很多實際情況下,一條數據有一定的概率可能屬于其他的類別。比如,在手寫體識別任務中,一個模糊的“3”圖片,由于形狀的相似性,它有一定的概率屬于“2”或“5”類別。因此,在蒸餾過程中,訓練完成的教師網絡在預測時將soft Max 層的標簽概率分布信息提供給學生模型作為指導。這些標簽概率分布包含了類別間信息,文獻[4]將其稱為軟標簽。這種軟標簽中包含的特征信息是“one-hot”類別標簽中沒有的,也是學生模型難以學到的。因此,通過將大型模型的軟標簽信息傳遞給學生模型,可以提高學生模型的學習能力,起到模型壓縮的效果,使得將網絡部署到客戶端成為可能。
本文所提出的知識蒸餾框架如圖1 所示。
知識蒸餾框架步驟以下:
步驟1對于實驗真實數據集D,使用seqGAN模型生成大量領域內的相似無標簽數據,構成D′(詳細見本文第3 節)。
步驟2用真實數據集D對教師模型進行微調,得到一個準確率高、學習到大量領域知識的模型。
步驟3用教師模型對生成的無標簽數據集D′進行預測,對每條數據進行標注。
步驟4將數據集D和D′合并為D″。
步驟5用所有數據D″對學生模型S 進行訓練,同時用數據所屬類別硬標簽和教師模型預測得到的軟標簽組成損失函數,作為訓練目標。
步驟6在不需要標注新的數據,以及不需要其他計算資源的條件下,得到一個準確率高的學生模型。
損失函數Loss 如式(1)所示:

其中,λ表示兩種損失函數的平衡參數,si表示學生模型對于當前數據的輸出,yi表示one-hot 編碼的分類硬標簽,ti表示教師模型對當前數據的輸出,即軟標簽,cross entropy 表示交叉墑損失函數,Ldistill表示教師與學生之間知識蒸餾的損失函數,LCE表示學生模型的輸出與標注的分類硬標簽之間的交叉墑損失函數。
從損失函數公式可以看出,模型的目標不僅使預測類別與標注標簽一致,還需要盡量與教師模型的輸出分布保持一致。
本文中的教師模型采用的是大規模預訓練模型BERT[1]及其變體。許多研究工作已經證明,語言模型的預訓練可以提高許多自然語言處理任務的性能。預訓練是指在大量的無標簽文本上,以預測下一個單詞為目標來進行模型的訓練,這樣可以學習到每個單詞的上下文表示,稱為詞向量。訓練得到的詞向量和模型參數包含了許多在預訓練階段學到的有用的語義信息。基于這樣預訓練后的模型,只需要用少量的領域數據對模型進行微調,即可將模型運用到具體任務中。
BERT 模型結構如圖2 所示。該模型是一種基于Transformer 結構[19]的語言表示模型,以掩碼單詞預測和下一句預測作為訓練目標,捕捉了文本中的詞級別和句子級別的語義表示。BERT 最重要的部分就是雙向Transformer 編碼結構,Transformer 舍棄了RNN 的循環式網絡結構,完全基于注意力機制來對一段文本進行建模。Transformer 中的注意力機制稱為自注意力,核心思想是計算一句話中的每個詞對于其他詞的相互關系,從而調整每個詞的重要性來獲取上下文相關的詞向量。自注意力機制可以實現計算資源的并行化,加速訓練過程,并通過對位置進行編碼添加時序信息。

圖2 BERT 模型示意圖Fig.2 Schematic diagram of BERT model
本文所用的是在中文維基百科數據上進行了預訓練后的Bert-base-Chinese 模型。模型結構是12 個Transformer 模塊層,768 個隱層,12 個self-attention中的head,一共有1.1 億個參數。
BERT 模型的輸出包括兩種,一種是字符級向量,即輸入的每個字符對應一個向量,另外一種是句子級向量,即BERT 模型輸出最左邊“[CLS]”特殊符號的向量,文獻[1]認為這個向量可以代表整個句子的語義。因此,對于分類任務一般重點關注句子級向量,即分類標識[CLS]的輸出向量h。將這個向量h傳給一個softmax 分類器就可以得到分類結果的輸出。
本文實驗對標準的BERT 模型進行改進,在BERT 的輸出層取所有輸入字符對應的輸出向量,然后再接上一個文本分類器。本文選取長短時記憶網絡LSTM、卷積神經網絡Text-CNN[2]和循環卷積神經網絡Text-RCNN[3]這3 個模型作為BERT 之后的分類器,將BERT 輸出的向量進行計算后得到分類結果。因此,改進的模型分別稱為BERT+LSTM、BERT+CNN、BERT+RCNN。原始BERT 模型和各個改進模型在數據集上微調后的模型準確率在實驗部分給出。
雖然對BERT 等預訓練模型進行簡單的微調可以得到較高的準確率,但是這些預訓練模型規模龐大,預測速度慢。考慮到在實際應用場景中的延時、響應速度等問題,預訓練模型即使微調后也難以運用到實際應用場景中。例如,在對話系統中,意圖識別模塊需要對用戶話語進行意圖的分類,從而決定當前對話狀態并給出相應的回答。在這種智能對話系統的情境下,用戶的滿意度就取決于系統的響應速度以及對話的準確性。因此,在移動終端、可攜帶設備等多個場景下,分類模型的預測速度不能太慢,模型的規模也不能太大。因此,選用幾個經典的小規模文本分類模型作為學生模型,通過用教師模型所學到的知識對學生進行指導訓練,即為“知識蒸餾”。
本文采取兩個經典的文本分類模型作為學生模型,即基于文本的卷積神經網絡Text-CNN 和基于文本的循環卷積神經網絡Text-RCNN(Text Recurrent Convolution Neural Network)。這兩個模型規模不大,且分類準確率高,在許多文本分類任務上都能夠使用。
Text-CNN 模型由KIM 等人在2014 年提出[2],其將圖像領域的卷積神經網絡應用到自然語言處理領域。該模型將一個句子及其單詞的詞向量看作一個矩陣作為模型的輸入,通過卷積層和池化層提取語義特征進行句子的分類。Text-CNN 由于卷積網絡的并行化計算,執行效率高且分類效果較好。Text-RCNN[3]則是一個結合了RNN 和CNN 各自優點的模型。該模型首先利用雙向循環神經網絡(Bi-RNN)來捕捉前后上下文表征,得到一個包含上下文信息和本身詞向量表示的“詞向量”。接著使用CNN 網絡中濾波器filter_size=1 的卷積層,并利用最大池化操作得到與文檔最相關的向量表征,即獲取潛在的最相關語義表示。由于雙向神經網絡的編碼使得Text-RCNN 模型能夠捕捉文本中的上下文語義信息,尤其是詞袋模型無法得到的語序含義。
本文運用Text-CNN 和Text-RCNN 模型在進行意圖分類的訓練過程中使用的分詞工具是結巴分詞,詞嵌入技術是word2vec[17],其他的一些訓練參數在實驗部分給出。
生成對抗網絡是GOODELLOW 等人在2014 年提出的一種生成式模型[24],最開始用于圖像生成領域。該模型由一個生成網絡和一個判別網絡組成。生成網絡模仿真實數據生成相似的樣本分布以欺騙判別網絡,判別網絡在迭代中不斷更新以區分生成樣本和真實數據。生成網絡和判別網絡相互博弈,直至達到那什均衡[25]。
但是傳統的生成對抗網絡很難應用于自然語言處理領域。因為自然語言數據本身是離散性質的,所以判別器進行判別后的結果難以通過生成器進行梯度回傳。因此,文獻[5]提出一個使用強化學習中的獎勵機制來代替梯度回傳的seqGAN 模型。seqGAN 以循環神經網絡RNN 作為生成網絡,卷積神經網絡CNN 作為判別網絡,可以用于自然語言文本生成。
本文采用文獻[25]中的生成對抗網絡框架,對現有數據通過文本生成的方式進行擴充。擴充后的文本樣例如表1 所示,雖然個別生成序列不符合中文語法的現象,但是大部分生成的文本在句子結構和包含內容方面能與真實的意圖文本相似。由于生成的文本雖然符合真實數據集的分布,但是沒有標注的類別,因此用真實數據微調后的教師模型對生成文本進行預測,預測得到的類別就作為這條語句的標簽。

表1 真實數據與生成數據的示例Table 1 Examples of real and generated data
本文采用真實的電力業務問詢語句作為數據集。數據集從電力公司供電營業廳采集,人工整理和標注后得到所有數據及其所屬的業務類別。數據集包括9 577條語句以及35 個業務類別,數據集中語句的平均長度為18.41 個字。除了真實數據集外,在第3 節提出了利用seqGAN 模型生成數據的數據增強方法。基于此方法生成了10 000 條相似的領域內數據作為擴充,真實數據與生成數據的示例見表1。
4.2.1 教師模型參數
本文采用在中文維基百科數據上進行了預訓練后的Bert-base-Chinese 模型作為BERT 基準模型。模型一共12 層,隱層為768 維,采用12 頭模式,共1.1 億個參數。模型的優化方式采用BertAdam 算法對參數進行更新和微調,初始學習率均為2e-5,預熱參數warmup 為0.1。微調訓練時采用批量訓練的方法,且批量大小為32,Dropout 比率默認設置為0.1。而改進后的教師模型則是分別在BERT 模型最后一層加上了Text-CNN 模型、一個雙向LSTM 層和Text-RCNN 模型,構成了BERT+CNN、BERT+LSTM 和BERT+RCNN 模型。
4.2.2 學生模型參數
本文采用Text-CNN 模型和Text-RCNN 模型作為學生模型。模型訓練時批處理大小為64。其中Text-CNN 模型卷積核尺寸如下[3-5]:每個尺寸下的個數為100,學習率為0.001,用結巴分詞工具分詞后采用word2vec 詞向量,詞向量維度為300。同樣,Text-RCNN 模型也采用300 維的word2vec 詞向量,隱層維度為256,學習率為0.001。
4.2.3 知識蒸餾參數
本文利用知識蒸餾技術進行“教師-學生”架構的訓練。根據式(1),軟硬標簽的損失函數都采用交叉墑函數,平衡參數選為0.5。
本文采用準確率作為實驗模型的評估標準,準確率表示分類正確的數據占所有數據的比例。
首先用真實的意圖分類數據集對教師模型和學生模型分別進行訓練,得到這些模型單獨訓練時的準確率,結果如表2 所示,原始的Bert-base-Chinese 模型在數據集上微調可以達到92.5%的準確率。將BERT和Text-RCNN 相結合的教師模型在數據集上微調得到了教師模型中的最高準確率93.7%。學生模型中則是Text-RCNN 模型的準確率最高,達到87.1%。

表2 教師模型和學生模型的準確率Table 2 Comparisom of accuracy of teacher model and student model
得到了教師模型和學生模型的性能后,采用這些教師模型和學生模型進行知識蒸餾的指導訓練。在訓練過程中,分為使用生成數據和不使用生成數據兩種,分別對應表3 中的da(with data-aug)和woda(without data-aug)。知識蒸餾訓練得到的結果如表3 所示。表3 中學生模型分別為Text-CNN 和Text-RCNN。“without KD”表示學生模型單獨訓練時的結果,作為基準。表中第3 行開始是兩個學生模型分別在4 個教師模型的指導下進行知識蒸餾訓練得到的結果,其中加粗字體為最優結果。

表3 知識蒸餾訓練結果Table 3 Training results by knowledge distillation %
可見,本文提出的訓練方法普遍可以使得學生模型準速率有所提高。其中,用準確率最高的教師模型BERT+RCNN 來指導準確率最高的學生模型Text-RCNN 訓練,并且將生成數據作為擴充,可以達到最高的90.9%準確率,比單獨的Text-RCNN 學生模型要高出3.8 個百分點。
從實驗結果可以看出,雖然學生模型無法超越教師模型的準確率,但是可以在教師模型的指導下有所提升,接近教師模型的準確率。學生模型的參數少、規模小,準確率最高的教師模型BERT+RCNN的參數量是學生模型Text-RCNN 的86 倍,如表2 所示。在實際應用時學生模型預測速度更快,更有利于部署到移動端等實際場景。
基于對話系統中的意圖分類問題,本文采用大規模預訓練模型和“教師-學生”框架的知識蒸餾等技術,構建基于BERT 模型的知識蒸餾意圖分類模型。采用BERT 及其變體作為教師模型,Text-CNN和Text-RCNN 兩個經典的文本分類模型作為學生模型,以知識蒸餾的方式進行指導訓練。另外,采用seqGAN 生成對抗網絡來生成領域內數據,增加了訓練時的數據量。在真實的用戶意圖數據集上進行實驗,結果表明,本文模型可以使得學生模型準確率最高提升3.8%,接近教師模型的分類性能。由于數據集的標注耗費人力資源,目前公開的領域數據集都面臨著規模較小的問題,下一步將研究更有效的數據生成方法來擴充數據集。