在NLP領(lǐng)域中,文本分類輿情分析等任務(wù)相較于文本抽取,和摘要等任務(wù)更容易獲得大量標(biāo)注數(shù)據(jù)。因此在文本分類領(lǐng)域中深度學(xué)習(xí)相較于傳統(tǒng)方法更容易獲得比較好的效果。正是有了文本分類模型的快速演進,海量的法律文書可以通過智能化處理來極大地提高效率。我們今天就來分析一下當(dāng)前state of the art的文本分類模型以及他們在法律文書智能化中的應(yīng)用。
?
文本分類領(lǐng)域走過路過不可錯過的深度學(xué)習(xí)模型主要有FastText,TextCNN,HAN,DPCNN。本文試圖在實踐之后總結(jié)一下這些這些分類模型的理論框架,把這些模型相互聯(lián)系起來,讓大家在選擇模型與調(diào)參的時候能有一些直覺與靈感。在深度學(xué)習(xí)這個實踐為王的領(lǐng)域常有人質(zhì)疑理論理論無用,我個人的感受是理論首先在根據(jù)數(shù)據(jù)特征篩選模型的時候非常有用,其次在調(diào)參的過程中也能大幅提升效率,更重要的是調(diào)不出結(jié)果的時候,往往腦海里的那一句“這個模型不應(yīng)該是這樣的結(jié)果”,以及“這不科學(xué)”提供了堅持方向信心。
?
FastText
其中FastText結(jié)構(gòu)特別簡單,對于速度要求特別高場合適用,他把一篇文章中所有的詞向量(還可以加上N-gram向量)直接相加求均值,然后過一個單層神經(jīng)網(wǎng)絡(luò)來得出最后的分類結(jié)果。很顯然,這樣的做法對于復(fù)雜的文本分類任務(wù)來說丟失了太多的信息。FastText的一種簡單的增強模型是DAN,改變在于在詞向量平均完成后多疊了幾層全連接神經(jīng)網(wǎng)絡(luò)。對應(yīng)地,F(xiàn)astText也可以看成是DAN全連接神經(jīng)網(wǎng)絡(luò)層數(shù)為1的的一種特例。
圖1 2層DAN網(wǎng)絡(luò)
需要特別注意的是,對于不加n-gram向量的FastText模型,他不可能去分辨否定詞的位置,看下面的兩句話:
我不喜歡這類電影,但是喜歡這一個。
我喜歡這類電影,但是不喜歡這一個。
這樣的兩句句子經(jīng)過詞向量平均以后已經(jīng)送入單層神經(jīng)網(wǎng)絡(luò)的時候已經(jīng)完全一模一樣了,分類器不可能分辨出這兩句話的區(qū)別,只有添加n-gram特征以后才可能有區(qū)別。因此,在實際應(yīng)用的時候需要對你的數(shù)據(jù)有足夠的了解。
TextCNN
TextCNN相較于fastText模型的結(jié)構(gòu)會復(fù)雜一些,在2014年提出,他使用了卷積 + 最大池化這兩個在圖像領(lǐng)域非常成功的好基友組合。我們先看一下他的結(jié)構(gòu)。如下圖所示,示意圖中第一層輸入為7*5的詞向量矩陣,其中詞向量維度為5,句子長度為7,然后第二層使用了3組寬度分別為2、3、4的卷積核,圖中每種寬度的卷積核使用了兩個。
?
其中每個卷積核在整個句子長度上滑動,得到n個激活值,圖中卷積核滑動的過程中沒有使用padding,因此寬度為4的卷積核在長度為7的句子上滑動得到4個特征值。然后出場的就是卷積的好基友全局池化了,每一個卷積核輸出的特征值列向量通過在整個句子長度上取最大值得到了6個特征值組成的feature map來供后級分類器作為分類的依據(jù)。
圖2 TextCNN結(jié)構(gòu)
我們知道圖像處理中卷積的作用是在整幅圖像中計算各個局部區(qū)域與卷積核的相似度,一般前幾層的卷積核是可以很方便地做可視化的,可視化的結(jié)果是前幾層的卷積核是在原始輸入圖像中尋找一些簡單的線條。NLP中的卷積核沒法做可視化,那么是不是就不能理解他在做什么了呢,其實可以通過模型的結(jié)構(gòu)來來推斷他的作用。因為TextCNN中卷積過后直接就是全局max pooling,那么它只能是在卷積的過程中計算與某些關(guān)鍵詞的相似度,然后通過max pooling層來得出模型關(guān)注那些關(guān)鍵詞是否在整個輸入文本中出現(xiàn),以及最相似的關(guān)鍵詞與卷積核的相似度最大有多大。我們假設(shè)中文輸出為字向量,理想情況下一個卷積核代表一個關(guān)鍵詞,如下圖所示:
圖3 TextCNN卷積核的意義示意圖
比如說一個2分類輿情分析任務(wù)中,如果把整個模型當(dāng)成一個黑箱,那么去檢測他的輸出結(jié)果,會發(fā)現(xiàn)這個模型對于輸入文本中是否含有“喜歡”,“熱愛”這樣的詞特別敏感,那么他是怎么做到的呢?整個模型中能夠做到遍歷整個句子去計算關(guān)鍵詞相似度的只有卷積的部分,因為后面直接是對整個句子長度的max pooling。但是因為模型面對的是字向量,并不是字,所以他一個卷積核可能是只學(xué)了半個關(guān)鍵詞詞向量,然后還有另外的卷積核學(xué)了另外半個關(guān)鍵詞詞向量,最后在分類器的地方這些特征值被累加得到了最終的結(jié)果。
TextCNN模型最大的問題也是這個全局的max pooling丟失了結(jié)構(gòu)信息,因此很難去發(fā)現(xiàn)文本中的轉(zhuǎn)折關(guān)系等復(fù)雜模式,TextCNN只能知道哪些關(guān)鍵詞是否在文本中出現(xiàn)了,以及相似度強度分布,而不可能知道哪些關(guān)鍵詞出現(xiàn)了幾次以及出現(xiàn)這些關(guān)鍵詞出現(xiàn)順序。假想一下如果把這個中間結(jié)果給人來判斷,人類也很難得到對于復(fù)雜文本的分類結(jié)果,所以機器顯然也做不到。針對這個問題,可以嘗試k-max pooling做一些優(yōu)化,k-max pooling針對每個卷積核都不只保留最大的值,他保留前k個最大值,并且保留這些值出現(xiàn)的順序,也即按照文本中的位置順序來排列這k個最大值。在某些比較復(fù)雜的文本上相對于1-max pooling會有提升。
?
HAN(Hierarchy Attention Network)
相較于TextCNN,HAN最大的進步在于完全保留了文章的結(jié)構(gòu)信息,并且特別難能可貴的是,基于attention結(jié)構(gòu)有很強的解釋性。
他的結(jié)構(gòu)如下圖所示:
圖4 HAN結(jié)構(gòu)
輸入詞向量序列后,通過詞級別的Bi-GRU后,每個詞都會有一個對應(yīng)的Bi-GRU輸出的隱向量h,再通過uw向量與每個時間步的h向量點積得到attention權(quán)重,然后把h序列做一個根據(jù)attention權(quán)重的加權(quán)和,得到句子summary向量s2,每個句子再通過同樣的Bi-GRU結(jié)構(gòu)再加attention得到最終輸出的文檔特征向量v向量,然后v向量通過后級dense層再加分類器得到最終的文本分類結(jié)果。模型結(jié)構(gòu)非常符合人的從詞->句子->再到篇章的理解過程。
最重要的是該模型在提供了更好的分類精度的情況下,可視化效果非常好。同時在調(diào)參過程中,我們發(fā)現(xiàn)attention部分對于模型的表達能力影響非常大,整個模型在所有位置調(diào)整L2-Loss對模型表達能力帶來的影響遠(yuǎn)不如在兩處attention的地方大,這同時也能解釋為什么可視化效果比較好,因為attention對于模型的輸出貢獻很大,而attention又恰恰是可以可視化的。
?
下面我們來看一下他在法律領(lǐng)域罪名預(yù)測任務(wù)上的可視化效果。下面的可視化的結(jié)果并不是找了極少數(shù)效果好的,而是大部分情況下模型的可視化能夠解釋他的輸出。需要注意的是,此處為了讓不太重要句子中相對重要的詞并不完全不可見,詞的亮度=sqrt(句子權(quán)重)*詞權(quán)重。
?
在非常長的文本中,HAN覺得中間那些完全是廢話,不如那句“公訴機關(guān)認(rèn)為”有用,就放棄了。
?
圖5 HAN attention可視化1
?
如下圖所示,模型雖然在文本第二行中看到了竊取的字樣,但是他認(rèn)為這個案件中主要的事件是搶劫,這就是保留文本結(jié)構(gòu)的好處。
?
圖6 HAN attention可視化2
可以看到并不是所有的深度學(xué)習(xí)模型都是不可以理解的,這種可解釋性也會給實際應(yīng)用帶來很多幫助。
DPCNN
上面的幾個模型,論神經(jīng)網(wǎng)絡(luò)的層數(shù),都不深,大致就只有2~3層左右。大家都知道何凱明大神的ResNet是CV中的里程碑,15年參加ImageNet的時候top-5誤差率相較于上一年的冠軍GoogleNet直接降低了將近一半,證明了網(wǎng)絡(luò)的深度是非常重要的。
圖7 ImageNet歷年冠軍
那么問題來了,在文本分類領(lǐng)域網(wǎng)絡(luò)深度提升會帶來分類精度的大幅提升嗎?我們在一些比較復(fù)雜的任務(wù)中,以及數(shù)據(jù)量比較大(百萬級)的情況下有提升,但不是ResNet那種決定性的提升。
?
DPCNN的主要結(jié)構(gòu)如下圖所示:
?
圖8 DPCNN結(jié)構(gòu)
?
從詞向量開始(本文的重點在于模型的大結(jié)構(gòu),因此不去詳解文中的region embedding部分,直接將整個部分認(rèn)為是一種詞向量的輸出。)先做了兩次寬度為3,filter數(shù)量為250個的卷積,然后開始做兩兩相鄰的max-pooling,假設(shè)輸入句子長度padding到1024個詞,那么在頭兩個卷積完成以后句子長度仍然為1024。在block 1的pooling位置,max pooling的width=3,stride=2,也即序列中相鄰的3個時間步中每一維feature map取這三個位置中最大的一個留下,也即位置0,1,2中取一個最大值,然后,移動2個時間步,在2,3,4時間步中取一次max,那么pooling輸出的序列長度就是511。
?
后面以此類推,序列長度是呈指數(shù)級下降的,這也是文章名字Deep Pyramid的由來。然后通過兩個卷積的非線性變換,提取更深層次的特征,再在輸出的地方疊加上未經(jīng)過兩次卷積的quick connection通路(ResNet中使得深層網(wǎng)絡(luò)更容易訓(xùn)練的關(guān)鍵)。因為每個block中的max pooling只是相鄰的兩個位置做max-pooling,所以每次丟失的結(jié)構(gòu)信息很少,后面的卷積層又能提取更加抽象的特征出來。所以最終模型可以在不丟失太多結(jié)構(gòu)信息的情況下,同時又做了比較深層的非線性變換。
我們實際測試中在非線性度要求比較高的分類任務(wù)中DPCNN會比HAN精度高,并且由于他是基于CNN的,訓(xùn)練速度比基于GRU的HAN也要快很多。
達觀數(shù)據(jù)在法律文書智能化處理中也應(yīng)用了上面的幾個模型,并在此基礎(chǔ)上做法律行業(yè)針對性的優(yōu)化。在剛剛結(jié)束的“法研杯”法律人工智能大賽中達觀數(shù)據(jù)代表隊取得了單項三等獎的成績。
?
以裁判文書智能化處理為例,達觀數(shù)據(jù)可以通過上述的文本分類器根據(jù)一段犯罪事實來向法律工作者推薦與描述的犯罪事實相關(guān)的罪名,法律條文,甚至是刑期的預(yù)測等。
?
下面以裁判文書網(wǎng)的一篇裁判文書為例,我們截取其中的犯罪事實部分文字,輸入模型。模型會根據(jù)輸入的文字判斷此段分類事實對應(yīng)的罪名,并且高亮出犯罪事實中的關(guān)鍵內(nèi)容。
截取裁判文書網(wǎng)中的犯罪事實部分:
?
圖9 裁判文書樣例
輸入模型:
“公訴機關(guān)指控:2017年6月30日22時左右,被告人耿艷峰醉酒駕駛冀T×××××號比亞迪小型轎車沿東孫莊村東水泥路由西向東行駛,行至事發(fā)處,與對向被告人孫漢斌無證醉酒駕駛無牌二輪摩托車發(fā)生碰撞。造成兩車不同程度損壞,孫漢斌受傷的道路交通事故。經(jīng)衡水市公安局物證鑒定所檢驗:耿艷峰血液酒精含量為283.11mg/lOOmL;孫漢斌血液酒精含量為95.75mg/mL。經(jīng)武強縣交通警察大隊認(rèn)定:耿艷峰、孫漢斌均負(fù)此事故的同等責(zé)任。”
? 得到結(jié)果:
?
圖10 模型輸出結(jié)果
模型會輸出預(yù)測的罪名以及相關(guān)法條的推薦結(jié)果,能夠極大地提高律師的效率。并且模型還能將關(guān)鍵的句子以及詞高亮出來給律師進一步仔細(xì)審閱提供方便。
目前在刑法相關(guān)的大量樣本上罪名預(yù)測與相關(guān)法條推薦的準(zhǔn)確率在90%左右。刑期由于存在不同年代不同地區(qū)存在一些差異,目前模型的輸出結(jié)果還不能特別直觀地給出評估。
?
目前state of the art的深度學(xué)習(xí)文本分類模型在十萬~百萬級以上的數(shù)據(jù)上已經(jīng)能取得相當(dāng)不錯的效果,并且也有一些可解釋性非常強的模型可用。要在實際業(yè)務(wù)中把文本分類模型用好,除了像文中深入分析理論以外,在大量的業(yè)務(wù)實踐中總結(jié)經(jīng)驗也是必不可少的。達觀在裁判文書處理等實際任務(wù)上實測輸出結(jié)果也非常不錯,并且達觀的深度學(xué)習(xí)文本分類技術(shù)也會在各個業(yè)務(wù)應(yīng)用中不斷優(yōu)化升級,希望能為法律行業(yè)的智能化以及效率優(yōu)化作出一些貢獻。
?
參考文獻:
1.Joulin, Armand, et al. “Bag of Tricks forEfficient Text Classification.”?Proceedings of the 15th Conferenceof the European Chapter of the Association for Computational Linguistics:Volume 2, Short Papers. Vol. 2. 2017.
2.Iyyer, Mohit, et al. “Deep unorderedcomposition rivals syntactic methods for text classification.”?Proceedingsof the 53rd Annual Meeting of the Association for Computational Linguistics andthe 7th International Joint Conference on Natural Language Processing (Volume1: Long Papers). Vol. 1. 2015.
3.Kim, Yoon. “Convolutional Neural Networksfor Sentence Classification.”?Proceedings of the 2014 Conferenceon Empirical Methods in Natural Language Processing (EMNLP). 2014.
4.Yang, Zichao, et al. “Hierarchicalattention networks for document classification.”?Proceedings of the2016 Conference of the North American Chapter of the Association forComputational Linguistics: Human Language Technologies. 2016.
5.Johnson, Rie, and Tong Zhang. “Deeppyramid convolutional neural networks for text categorization.”?Proceedingsof the 55th Annual Meeting of the Association for Computational Linguistics(Volume 1: Long Papers). Vol. 1. 2017.