评测任务实战:中文文本分类技术实践与分享 - PaperWeekly 第49期
作者丨陸晨昱
單位丨義語智能科技(上海)有限公司
聯系方式丨chenyu@deepbrain.ai
1. 引言
隨著人工智能的大熱,人機對話技術也受到了各界廣泛的關注。在第六屆全國社會媒體處理大會(SMP 2017)上,專委會舉辦了一場中文人機對話技術評測(ECDT)。評測包含兩個任務,任務一為用戶意圖領域分類;任務二為特定域任務型人機對話在線評測。筆者代表我司參加了其中的任務一:意圖分類。該任務的內容是根據用戶請求的文本(通常為一個句子的長度)進行意圖的分類,因而筆者就將其理解為文本分類了。?
在整個人機對話系統中,意圖分類是非常重要的一環,其性能好壞直接影響后續功能模塊的執行,進而影響整個系統的表現。傳統的文本分類算法很大程度上依賴于精心挑選的特征和設置的規則,依靠人為加入的對某一特定語言的先驗知識來實現分類。
隨著深度學習的興起,各種基于深度神經網絡的分類模型在圖像、語音等領域都取得了令人矚目的成績。近年來,深度學習也被廣泛應用于自然語言處理領域,文本分類便是其中一個熱門課題。?
文本分類是一個典型的序列分類問題。根據給定的字符序列,我們需要輸出其對應的類別標簽。常見的用于文本分類的深度學習模型有卷積神經網絡、循環神經網絡、注意力機制等。由于深度學習最大程度上簡化了特征工程和預處理,模型結構與訓練方法的選擇是影響結果好壞的重要因素。?
在本次測評中,我司基于深度學習的文本分類模型在封閉與開放測試中均取得了第二名的成績[1]。這里說句題外話,本來任務一設置開放與封閉測試兩個子任務的初衷是允許參賽方在開放測試中可以使用額外的標注數據來訓練模型。奈何我司人手不足,獲取標注數據一事只好作罷。最終我司提交開放與封閉測試的是同一個模型,都只使用了封閉測試的標注數據。細心的讀者可能會發現,我司在開放與封閉測試中的成績是相同的。
言歸正傳,下面筆者就與大家分享在此次評測中收獲的一些實踐心得。
2. 模型結構
卷積神經網絡[2]在序列分類任務中有著出色的表現。針對本次評測中意圖分類任務的特點,模型無需具有長跨度的記憶能力。同時,相比循環神經網絡,卷積神經網絡有著更好的并行性能。因此在該任務中卷積網絡是一個合理的選擇。
由于自然語言處理中的輸入是離散且稀疏的,建模能力較強的模型在文本分類任務上很容易發生過擬合。所以通常我們在模型的選取上偏向小而簡單的模型,例如較少層數的卷積網絡,甚至是一個簡單的線性分類器往往反而效果更好。在實踐過程中筆者發現,在文本分類任務上,簡單的增加網絡層數反而會引起模型的性能下降。
為了解決這個問題,使得在文本分類任務上應用更深更復雜的卷積網絡成為可能,筆者進一步嘗試了殘差網絡[3]。殘差卷積網絡的思想是通過在模塊的輸入輸出之間引入跳躍連接,來讓中間的卷積層學習一個殘差函數。經過實驗后發現,殘差網絡的加入確實能給多層卷積網絡模型的效果帶來顯著的改善。
△?Figure 1:自抑制殘差卷積模塊結構
那么,有沒有比傳統的殘差網絡模塊更優的結構呢?帶著這個問題,筆者實驗了不同結構的殘差模塊,提出了如圖1所示的自抑制殘差卷積模塊(Self-Inhibiting Residual Convolution Block)。
與一般殘差模塊不同的是,我們將卷積操作的輸出通過修正線性單元(relu)激活函數,然后取其負值與該模塊的輸入相加。由于 relu 函數非負的特性,在經過這樣一個模塊的處理后,輸出相對輸入是“被抑制”的。實驗結果表明,該自抑制殘差卷積模塊相比傳統的殘差模塊有更強的泛化能力,效果更好。
△?Figure 2:文本分類模型結構
最終的模型結構如圖2所示,整個文本分類模型由多個串聯的自抑制殘差卷積模塊與最大池化層交替構成。
其中,卷積與最大池化均為一維操作,作用于輸入序列的“時間”軸上。在整個模型中,卷積核的大小統一為 3,最大池化的窗長統一為 2。模型的隱層大小與字嵌入、類嵌入維數均為 512。另外,殘差網絡要求模塊的輸入與輸出大小匹配,因此在卷積與最大池化操作中,我們用 0 值填充輸入序列的兩端,使得這兩種操作的輸出與輸入有相同的形狀。
3. 訓練流程
字向量預訓練
與傳統方法不同的是,基于深度學習的文本分類模型是數據驅動的。給定訓練樣本及標簽,模型會學習到對分類任務有用的特征及規則。由于整個模型的參數是隨機初始化的,且我們沒有人為的引入任何語言的先驗知識,在數據較少的情況下訓練得到的模型可能泛化能力不足。
我們的模型中采用字作為輸入單元,因此為了讓模型對輸入的字有一個初步的“認識”,可以采用無監督訓練的方式對字向量做預訓練。筆者采用的方法是用無標簽的短文本語料訓練一個變分自編碼器[4],而后取其中的字嵌入矩陣作為分類模型中字向量的初始值。當然,在后續的有監督訓練中,經過預訓練的字向量同分類模型中的其它隨機初始化的參數一樣進行更新迭代,進一步調優。
具體而言,在預訓練階段,我們準備了 6 億量級的無標簽短文本語料,構建了一個變分自編碼器,將輸入文本映射到連續的語義空間后,再用一個生成器重現原句子。同時,我們用一個標準的高斯分布作為先驗來約束句子的語義表征。訓練后的模型可用來采樣生成短句子。當然,我們需要的只是這個模型中訓練得到的字嵌入矩陣。
數據預處理
接下來是文本分類訓練數據的預處理。由于我們采用字作為輸入單元,因而無需對文本做分詞。在預處理中,筆者僅做了去除標點符號這一操作。加入這一步驟的原因有二:其一是對數據進行檢視后,我們認為標點符號并不包含對文本分類有用的信息;另外,我們用于預訓練的無標簽文本是不包含標點符號的,因此預訓練得到的字向量中也不包含標點符號。
交叉熵訓練
準備好訓練數據后,我們采用傳統的監督學習方式訓練文本分類模型。訓練的損失函數為輸出分布與真實標簽的交叉熵。訓練中,筆者使用 adam 優化器[5]來做迭代優化,這也是當前主流的一個優化器。參數方面,學習率設定為 0.001,批(batch)大小設為 64,訓練時長固定為 500 步。同時,為了減少訓練時間,我們對不同長度的訓練文本做了分組(bucketing)。
考慮到訓練集中各類別樣本的數量可能存在不均衡的情況,筆者在訓練中調整了采樣的策略:首先將不同類別標簽的樣本分組,采樣時先隨機挑選類別組,再從選中的類別組中選出一條樣本。這樣做可以保證最終每個批中不同類別的樣本出現的概率是均等的。
集成學習
實驗中,筆者進行了多次重復的訓練過程,得到的模型在測試中的表現有小幅浮動。進一步檢視模型分類錯誤的句子,筆者發現每個模型在出錯的句子上不盡相同。為了進一步提升模型的性能,我們引入了集成學習[6]。在集成學習中,我們綜合多個模型的決策來生成最終的結果。該方法可以避免單個模型的不足,顯著提升整個系統的魯棒性。
我們采用的是同構集成。訓練中,我們構建了 32 個相同結構的分類模型并隨機初始化以不同的參數。所有模型的字向量則統一加載由預訓練得到的字嵌入矩陣。訓練中的每一步我們都隨機采樣得到 32 個不同的批,分別輸入不同模型進行并行訓練。在測試階段,我們將所有模型輸出的概率分布的平均值作為最終的輸出,并取其中的最大值所在類作為輸出類別。
4. 結果分析
△?Table 1:模型分類錯誤的部分樣本
通過對模型分類錯誤的句子的分析,我們可以提出一些可能帶來改進的工作方向。由于評測中我們無法接觸測試集,筆者用驗證集作為測試集來測試模型。表1中列出了部分具有代表性的分類錯誤的樣本。筆者粗略的將這些出錯樣本分為三類,并且認為這三類錯誤是在現有的解決方案框架下難以糾正的:?
1) 其中像是“可以幫買火車票嗎”、“今天什么天氣”應該屬于樣本有誤。結合訓練數據與類別含義來看,模型輸出的類別更準確一些。?
2) “我想看電影臺北飄雪”、“打開貓撲”這兩個樣本則是可能屬于多個類別。如用戶是想在線播放,則前一句應屬于 cmd_video;若是想去電影院看,則應屬于 cmd_cinemas。同理,貓撲可以是指網站,也可以是手機上的 app。在這種情況下,僅根據文本的信息無法做出可靠的正確分類。我們認為在實際產品中,需結合額外的場景信息或用戶的上下文信息來做出判斷。如信息缺失,則可以通過詢問用戶的方式來進一步確認。?
3) 由于訓練樣本數量較少,而某些類別包含大量的領域相關詞匯的,是給定的訓練樣本遠遠無法覆蓋的。這種情況導致了模型無法分清“三安光電”是股票還是視頻,錯認為“鼻息肉”是某一種菜名。針對這類錯誤,提升訓練樣本的數量可能可以帶來一些改善。我們認為更好的辦法是引入領域相關知識,例如構建股票名與常見病癥名的數據庫來做檢索等。?
深度學習是一類強力的工具。然而在解決實際問題中,筆者認為僅依賴深度學習是遠遠不夠的。基于對問題的深刻理解,將深度學習與傳統方法、與業務、場景相結合,才能產出讓用戶滿意的效果。
5. 參考文獻
[1] http://ir.hit.edu.cn/SMP2017-ECDT-RANK?
[2] X. Zhang, J. Zhao, and Y. LeCun, “Character-level Convolutional Networks for Text Classification,” 2015 Conference on Neural Information Processing Systems, pp. 3057–3061, 2015.?
[3] K. He, X. Zhang, S. Ren, and J. Sun, “Deep Residual Learning for Image Recognition,” 2016 IEEE Conference on Computer Vision and Pattern Recognition, pp. 770–778, 2016.?
[4] D. P. Kingma and M. Welling, “Auto-Encoding Variational Bayes,” arXiv:1312.6114, 2013.
[5] D. P. Kingma and J. L. Ba, “Adam: a Method for Stochastic Optimization,” 2015 International Conference on Learning Representations, pp. 1–15, 2015.?
[6] L. K. Hansen and P. Salamon, “Neural Network Ensembles,” IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 12, no. 10, pp. 993–1001, 1990.
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
總結
以上是生活随笔為你收集整理的评测任务实战:中文文本分类技术实践与分享 - PaperWeekly 第49期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度强化学习实战:Tensorflow实
- 下一篇: 让聊天机器人同你聊得更带劲 - 对话策略