高作緣, 陶宏才
(西南交通大學計算機與人工智能學院,四川 成都 611756)
在任務型對話機器人[1]的搭建中,準確地理解用戶的意圖、判斷語句中可能包含的行業分類、提取語句中的關鍵信息至關重要。因為對話機器人會依據內容,再結合對話的上下文信息來決定下一步的行為走向。
近年來,隨著大規模預訓練BERT(bidirectional encoder representation from transformers)模型的提出[2],自然語言處理的發展邁入了新階段。BERT 模型采用了雙向的Transformer 作為特征提取器,性能有顯著提升,刷新了自然語言處理的多項記錄[3]。另外,應用遷移學習[4]后的自然語言處理不再受數據源的限制,輕松解決了目標領域數據樣本不足的問題。而RoBERTa-WWM 模型[5]作為BERT 模型的改進版本,采用了更大的模型參數量、更多的訓練數據和更大的batch size,還引入了動態掩碼、文本編碼,比BERT模型更好地推廣到下游任務。因此,本文將以Ro-BERTa-WWM 模型為基礎開展研究,實現意圖識別和行業識別的子任務。在此基礎上,該部分還引入了Focal loss 機制,解決多分類中數據不平衡的問題,提高模型的穩定性和性能。
語義槽填充子任務本質就是序列標注問題[6],主要目的就是提取語句中的實體信息,并填充到對應的語義槽中。在序列標注問題中,BiLSTM+CRF 是非常經典的模型[7]。該模型通過雙向LSTM 能更好地捕捉序列中上下文的信息,提高標注的準確性;通過條件隨機場(CRF)可以獲取全局最優解,避免出現不合理的標注結果。最后,再引入RoBERTa-WWM 模型來獲取語義表示,提高模型的整體性能。綜上,將采用RoBERTa-WWM-BiLSTM-CRF 模型來完成語義槽填充子任務。
自然語言處理常見的任務有文本分類、序列標注、自動文摘等[8]。意圖識別和行業識別實際就是文本分類任務,再加上本質為序列標注任務的語義槽填充,模型需處理3 個子任務。而在傳統的自然語言處理算法中,面對多任務時一般采用不同子任務獨立訓練,最終以結合的方式來完成模型的整合。而在實際的語言表達中,意圖識別、行業識別和語義槽填充3 個子任務并非完全孤立[9],其中一個子任務的預測結果很可能影響其他子任務的預測過程。因此,提出Joint-Ro-BERTa-WWM 模型,將意圖識別、行業識別和語義槽填充進行聯合學習,強化子任務之間的關聯性,提高模型的綜合預測能力。
研究表明[10],像BERT 這樣基于Transformer 的預訓練模型,存在參數設置過多、模型過厚重、計算成本過高的問題。因此,本文基于模型的工程性應用考慮,進一步提出了一種基于模塊替換[11]的壓縮聯合模型Joint-RoBERTa-WWM-of-Theseus,在略微損失預測精度的前提下,大幅加快了預測速度,提高了模型的實時性,更好地為實際工程應用提供服務。
1950年,Turing[12]提出了圖靈測試。之后,圍繞人機對話的研究逐漸成為了人機交互[13]領域中的核心研究內容,而對話系統是實現人機對話最直觀的表現形式。經過基于規則模板的對話系統、統計對話系統和神經對話系統等3 個階段的發展[14],對話系統已經開始向對話機器人演變。在應用場景上,對話機器人可分成3 類:問答型機器人(QA robot)、閑聊型機器人(chat robot)和任務型機器人(task robot)。
問答型機器人主要為一問一答的形式,機器人在解析用戶提出的問題后,需要在知識庫中搜索相關的正確答案并將結果返回給用戶。其中,每次問答均是獨立的,與上下文對話無關。而閑聊型機器人主要以滿足用戶的情感需求為主,通過有趣、個性化的回復與用戶進行互動,較知名產品有微軟的小冰。相對于前面兩類對話機器人,任務型機器人可以滿足更復雜的業務需求,一般指的是機器人為了滿足用戶的需求目標從而產生多輪對話,通過在對話中不斷澄清或調整用戶意圖完成用戶的請求。這就要求機器人能整合上下文信息,根據上一輪對話的內容來決定下一輪對話的子目標。典型的任務型機器人有阿里巴巴的天貓精靈[15]、蘋果的Siri[16]和微軟的Cortana(小娜)[17]。
目前,任務型對話機器人被廣泛使用于不同領域的多個場景,如客服行業、醫療行業、生活娛樂場景等。在生活場景中,任務型對話機器人的出現能夠幫助人們更方便快捷地工作,提高效率。以Siri 為例,它可以幫助機主完成打電話、發短信、播放歌曲等任務。在執行任務的過程中,Siri 需要先對機主的語音消息進行識別,再根據識別結果執行意圖、領域的預測和語義槽填充3 個子任務,最后再根據預測結果做出相應的行為來幫助機主完成該次任務。類似此應用場景,本文的模型將用于搭建電商行業的智能客服機器人,因此模型的預測主要包括了意圖識別、行業識別和語義槽填充3 個子任務。意圖、行業的預測和語義槽填充的樣例如表1 所示。

表1 子任務結果樣例
BERT 模型的訓練過程主要包含掩碼語言模型(mask language model, MLM)和下一句預測(next sentence prediction, NSP)兩個重要任務。其中,掩碼語言模型的原理是隨機選取輸入序列中15%的Token,在已經選取的Token 中,以80%的概率用標記[MASK]替換掉原始Token,以10%的概率將原始Token 替換為隨機Token,以剩余10%的概率保持原有Token,這樣可以大大提高模型的泛化能力。而NSP 主要用于判斷兩個句子之間的關系,對自然語言推理(natural language inference, NLI)這樣的下游任務起到至關重要的作用。
對比BERT 模型,RoBERTa 模型的改進主要體現在:(1)RoBERTa 模型移除了NSP 任務,采用Full-Sentences 方式,可以從一篇或多篇文章中連續抽取句子填充到模型的輸入序列中,提高了效率。(2)BERT模型采用的是Character 級別的字節對編碼(byte-pair encoding, BPE),詞表大小僅有30 KB;而RoBERTa 模型采用了Byte 級別的字節對編碼,詞表大小50 KB左右,比BERT 模型詞表大近70%。(3)BERT 模型只在數據預處理期間執行一次掩碼,得到一個靜態掩碼,這樣會導致每次訓練時mask 位置都相同,使模型學習的語句模式比較單一;而RoBERTa 模型采用動態掩碼,每次向模型輸入一個序列時都會隨機地mask 不同的Token,可以保證模型逐漸適應不同的掩碼策略,學習不同的語言表征。(4)RoBERTa 模型通過采用更大的batch size、更多的訓練數據和訓練步驟,較BERT模型表現更好。通過以上4 個方面的改進,RoBERTa模型在自然語言理解基準測試RACE、GLUE 和SQuAD 中達到了SOTA。
而RoBERTa-WWM 模型就是在RoBERTa 模型的基礎上,采用全詞掩碼(whole word masking, WWM)策略。在中文文本中,采用原始策略可能會使一個詞語中只有部分字被mask,而采用WWM 策略可以使整個詞語都被mask,這樣能增強文本的表示效果。
在模型結構上,RoBERTa-WWM 模型繼承了BERT模型的特點,由12 層雙向Transformer 組成。初始文本輸入,用W={w1,w2,w3,…,wn}表示;模型的輸入為該文本字向量、段向量和位置向量的和,用E={e1,e2,e3,…,en}表示;模型的輸出向量用T={t1,t2,t3,…,tn}表示。RoBERTa-WWM 模型結構如圖1 所示。

圖1 RoBERTa-WWM 模型結構圖
循環神經網絡(recurrent neural network, RNN)是一種用來處理序列數據的神經網絡[19],它能挖掘數據中的時序信息和語義信息。但是,在實際應用中,RNN因為單元堆疊導致梯度爆炸或消失較明顯。為解決這個問題,Hochreiter 等[20]在1997年提出了長短期記憶(long short-term memory,LSTM)網絡概念。LSTM 作為RNN 的一種變體,通過在隱藏層加入記憶單元和門控制器結構,使其具備長期記憶的能力。在LSTM 中,每個重復的神經元都有三類門,分別為遺忘門(ft)、輸入門(it)和輸出門(ot)。LSTM 的單元結構如圖2 所示。

圖2 LSTM 單元結構圖
在LSTM 中,第一步,計算遺忘門,確定要遺忘的信息。遺忘門由ht-1和xt線性變換后通過sigmoid 函數計算輸出后并與Ct-1相乘。遺忘門的計算如下:
第二步,確定要記憶的信息,通過sigmoid 函數決定需要更新的值it,再通過tanh 函數創建一個新的候選值向量,并將其加入到神經元狀態中,對神經元狀態進行更新得到Ct。第二步的計算如下:
第三步,基于當前時刻的隱藏層狀態來決定最終的輸出。首先使用sigmoid 函數決定輸出神經元狀態的部分ot,再使用tanh 函數處理神經元狀態,最后與門控值相乘后即可得到當前時刻的輸出ht。第三步的計算如下:
在此基礎上,Fukada[21]提出了雙向長短期記憶(bi-directional long short-term memory, BiLSTM)網絡概念,更好地捕捉雙向的語義依賴。BiLSTM 模型由前向LSTM 和后向LSTM 組成,相較于單向LSTM,它可以獲得更加完整的上下文語義信息。但是BiLSTM 模型的輸出沒有考慮標簽之間的約束和依賴關系,可能會輸出無效的序列。如預測的實體開頭應該是“B-”而非“I-”,句子的開頭應該是“B-”或“O”。為了解決這個問題,在模型中引入條件隨機場(condition random field, CRF)模型,為BiLSTM 模型的輸出添加約束關系,保證輸出序列的正確性。CRF 由Lafferty 等[22]于2001年提出,結合最大熵模型和隱馬爾科夫模型的特點,在序列標注任務中表現突出。在CRF 中,對于指定的輸入序列x=(x1,x2,…,xt),預測序列y=(y1,y2,…,yt)的得分:
式中,P為BiLSTM 的輸出,A為轉移分數矩陣,Ai,j為標簽i轉移到標簽j的分數。進一步,預測序列Y產生的概率:
綜上,在BiLSTM 模型后接入條件隨機場可以保證最終獲取一個有效的預測結果,得到全局最優序列。
意圖識別和行業識別這兩個子任務本質就是文本分類問題,本文將使用RoBERTa-WWM 模型通過對下游任務進行微調來實現。模型的初始輸入是文本語句,語句經過分詞后形成“[CLS] 語句[SEP]”的結構。“[CLS]”標簽先經過Encoder 的向量表征,再經過Pooler 后就能得到句子的向量表征,最后通過softmax 函數就可以實現文本分類任務,輸出句子所屬的意圖和行業。
在實驗過程中發現,數據集中的意圖類別分布極其不均勻,導致模型的穩定性較差。因此,在處理意圖識別和行業識別這兩個多分類子任務時,引入Focal loss[23]機制,通過改進損失函數來兼顧數據量少的類別。這樣,既不影響數據集的原始分布,也能有效提高模型的性能。Focal loss 是交叉熵損失函數(CE loss)的優化版本,簡單的二分類交叉熵損失函數如下:
為方便表示,可化簡為:
針對類別不均勻問題,傳統的做法是α-balanced CE,即在CE loss 前增加權重系數α,以此來平衡各類別的分布情況。其中,數據量少的類別α越大,而數據量多的類別α越小。α-balanced CE 的表示如下:
但是,α-balanced CE 只平衡了不同類別對于模型的影響,它無法區分容易樣本和困難樣本,可能導致容易樣本主導梯度而困難樣本影響輕微的問題。因此,在模型中引入Focal loss,以在平衡各類別分布的同時,加強困難樣本對loss 的影響,削弱容易樣本的重要性。Focal loss 函數表示:
其中(1-pt)γ是調節因子,γ控制了樣本權重的下降程度。
語義槽填充子任務本質上是序列標注問題,本文將使用RoBERTa-WWM-BiLSTM-CRF 模型來實現該任務。該模型主要分為3 層:首先,在RoBERTa-WWM層,將初始輸入的文本語句轉換為向量;其次,在BiLSTM 層中,RoBERTa-WWM 層的向量輸出將作為該層的輸入,提取上下文信息;最后,在CRF 層,通過施加約束和標簽間的依賴關系保證獲取有效的預測結果,獲得全局最優序列。
在實際的文本語義中,意圖識別、行業識別和語義槽填充3 個子任務并非是獨立的,三者之間存在較強的關聯性,其中一個子任務可能對另外兩個子任務的預測過程產生一定的影響。因此,提出Joint-RoBERTa-WWM 聯合模型,采用多任務學習(multitask learning)的方式將3 個子任務進行聯合學習,通過最小化3個子任務的損失來建立統一的聯合損失函數。若用LI(θ)、LD(θ)、LS(θ)分別表示意圖識別、行業識別和語義槽填充3 個子任務的損失函數,則聯合損失函數為
Joint-RoBERTa-WWM 聯合模型的結構如圖3 所示。

圖3 Joint-RoBERTa-WWM 聯合模型結構圖
目前,基于Transformer 的預訓練模型已經占據了自然語言處理領域舉足輕重的地位。但有研究表明[24],這其實是得益于它們“過度參數化”的特點,它們包括了數百萬甚至十億個參數,導致計算成本高并且效率低下,嚴重阻礙了模型在生產環境中的應用。Xu C 等[11]提出BERT-of-Theseus,這是一種基于模塊替換的模型壓縮方法。相比于傳統的知識蒸餾[25],該方法在對初始模型進行壓縮后可以保證壓縮模型的結構與初始模型仍然相似,使整個壓縮過程更加簡捷。BERT-of-Theseus 壓縮方法可以將原始的12 層BERT教師模型P={prd1,prd2,…,prd12},壓縮成一個6 層的學生模型S={scc1,scc2,…,scc6},具體可以分為兩個階段:
(i)第一階段是模塊替換訓練。將每個教師模塊prdi替換為相應的學生模塊scci。若第i個模塊的輸出向量表示為yi,則教師模型第i+1 個模塊的前向計算輸出:
對于第i+1 個模塊,通過伯努利分布采樣一個隨機變量ri+1,采樣概率為p,如下:
則第i+1 個模塊在學生模型中的最終輸出為
其中*表示按元素計算的乘法。
第一階段的替換流程如圖4 所示。

圖4 第一階段替換流程圖
(ii)第二階段是學生模型S自身的微調,讓所有的學生模塊都參與到訓練中,最后組合成學生模型S:
第二階段的訓練流程如圖5 所示。

圖5 第二階段訓練流程圖
經過以上兩個階段,每個prdi模塊都壓縮成更小的scci模塊,這樣教師模型P被壓縮成一個更小的學生模型S。借助Theseus 壓縮的思想,Joint-RoBERTa-WWM 模型經過相同的方法進行壓縮后,便構成了本文所提出的Joint-RoBERTa-WWM-of-Theseus 模型,大幅提高了模型的預測速度,使模型能更好地服務于生產環境。
實驗環境如下:Windows10 操作系統,Ryzen 5 5600X@3.70 GHz CPU,NVIDIA GeForce RTX 3070 顯卡,16 GB內存。另外,實驗中采用Python 編程語言和Tensorflow 深度學習框架實現模型的搭建。
以某大賽提供的真實對話數據為基礎,添加了通過Scrapy 框架爬取的某電商平臺4 個品類共9865 條商品數據,抽取、標注了3075 條文本語料作為實驗數據集。在數據集中,共有4 個行業分類、14 個意圖分類和22 個槽位。數據分布不平衡的問題在多分類任務,尤其是在意圖識別子任務中,表現得尤其明顯,圖6 展示了不同意圖在數據集中的分布對比。由圖可以看出,不同的類別之間數據量相差較大。因此,在模型的調優過程中解決數據分布不平衡的問題是十分必要的。

圖6 各類意圖分布情況
實驗中采用Adam 優化器;設置的最大文本長度是128;學習率為0.00002;RoBERTa-WWM 層數為12層,隱藏層大小為768;訓練時加入早停機制,并設置Dropout 比例為0.5 來避免過擬合;為使損失函數下降更穩定,設置Warmpu 比例為0.1;在進行Theseus 壓縮時,模塊替換概率設置為0.5。實驗中主要的超參數如表2 所示。

表2 超參數設置
在實驗中,采取F1值作為模型的評價指標,同時兼顧準確率和召回率。若用F1I、F1D、F1S分別表示意圖識別、行業識別和語義槽填充3 個子任務的F1值,則模型整體的F1:
實驗將Joint-RoBERTa-WWM 模型和Joint-BERT模型進行比較,并對比了Joint-RoBERTa-WWM 模型在使用CE loss、α-balanced CE、Focal loss 等不同的損失函數時的表現情況,證明了Joint-RoBERTa-WWM 模型使用Focal loss 解決數據不平衡問題的優勢。這些模型的對比實驗結果如表3 所示。

表3 模型對比實驗結果
另外,實驗將Joint-RoBERTa-WWM-of-Theseus 模型、Joint-RoBERTa-WWM 模型進行對比,證明經過Theseus 方法壓縮,可以使模型在略微損失精度的前提下,大幅提高預測速度,幫助其為生產環境提供性能良好的實時預測服務。為了模擬真實生產環境下的模型運行情況,實驗使用Flask 框架分別將兩個模型接口化部署后,測試900 條不同文本的實時預測接口請求平均時長并將其作為評估標準,對比兩個模型的預測速度,對比結果如表4 所示。經過實驗驗證發現,通過Theseus 方法壓縮后的聯合模型預測速度可以提高至壓縮前的2.33倍,為模型在實際生產環境中的順利使用奠定了基礎。

表4 模型壓縮前后預測速度對比
在任務型對話機器人的應用場景下,提出了Joint-RoBERTa-WWM-of-Theseus 壓縮聯合模型。該模型充分考慮不同子任務之間的相互影響,將意圖識別、行業識別和語義槽填充3 個子任務進行聯合學習訓練;其次,在多分類子任務中引入了Focal loss 機制,通過損失函數的優化來解決數據分布不平衡問題;另外,采用Theseus 方法將模型進行壓縮,使模型以很小的精度損失為代價換取了更快的預測速度,大幅提高了其在生產環境下的服務能力。實驗表明,Joint-RoBERTa-WWM-of-Theseus 壓縮聯合模型為任務型對話機器人的搭建提供了良好的算法基礎。