達觀資料:如何用深度學習做好長文字分類與法律文書智慧化處理
在NLP領域中,文字分類輿情分析等任務相較於文字抽取,和摘要等任務更容易獲得大量標註資料。因此在文字分類領域中深度學習相較於傳統方法更容易獲得比較好的效果。正是有了文字分類模型的快速演進,海量的法律文書可以通過智慧化處理來極大地提高效率。 我們今天就來分析一下當前state of art的文字分類模型以及他們在法律文書智慧化中的應用。
文字分類領域走過路過不可錯過的深度學習模型主要有FastText,TextCNN,HAN,DPCNN。 本文試圖在實踐之後總結一下這些這些分類模型的理論框架,把這些模型相互聯絡起來,讓大家在選擇模型與調參的時候能有一些直覺與靈感。在深度學習這個實踐為王的領域常有人質疑理論理論無用,我個人的感受是理論首先在根據資料特徵篩選模型的時候非常有用,其次在調參的過程中也能大幅提升效率,更重要的是調不出結果的時候,往往腦海裡的那一句“這個模型不應該是這樣的結果”,以及“這不科學”提供了堅持方向信心。
一、文字分類模型詳解
1. FastText
其中FastText結構特別簡單,對於速度要求特別高場合適用,他把一篇文章中所有的詞向量(還可以加上N-gram向量)直接相加求均值,然後過一個單層神經網路來得出最後的分類結果。很顯然,這樣的做法對於複雜的文字分類任務來說丟失了太多的資訊。FastText的一種簡單的增強模型是DAN,改變在於在詞向量平均完成後多疊了幾層全連線神經網路。對應地,FastText也可以看成是DAN全連線神經網路層數為1的的一種特例。

需要特別注意的是,對於不加n-gram向量的FastText模型,他不可能去分辨否定詞的位置,看下面的兩句話:
我不喜歡這類電影,但是喜歡這一個。
我喜歡這類電影,但是不喜歡這一個。
這樣的兩句句子經過詞向量平均以後已經送入單層神經網路的時候已經完全一模一樣了,分類器不可能分辨出這兩句話的區別,只有新增n-gram特徵以後才可能有區別。 因此,在實際應用的時候需要對你的資料有足夠的瞭解。
2.TextCNN
TextCNN相較於fastText模型的結構會複雜一些,在2014年提出,他使用了卷積 + 最大池化這兩個在影象領域非常成功的好基友組合。我們先看一下他的結構。如下圖所示,示意圖中第一層輸入為7*5的詞向量矩陣,其中詞向量維度為5,句子長度為7,然後第二層使用了3組寬度分別為2、3、4的卷積核,圖中每種寬度的卷積核使用了兩個。
其中每個卷積核在整個句子長度上滑動,得到n個啟用值,圖中卷積核滑動的過程中沒有使用padding,因此寬度為4的卷積核在長度為7的句子上滑動得到4個特徵值。然後出場的就是卷積的好基友全域性池化了,每一個卷積核輸出的特徵值列向量通過在整個句子長度上取最大值得到了6個特徵值組成的feature map來供後級分類器作為分類的依據。

我們知道影象處理中卷積的作用是在整幅影象中計算各個區域性區域與卷積核的相似度,一般前幾層的卷積核是可以很方便地做視覺化的,視覺化的結果是前幾層的卷積核是在原始輸入影象中尋找一些簡單的線條。NLP中的卷積核沒法做視覺化,那麼是不是就不能理解他在做什麼了呢,其實可以通過模型的結構來來推斷他的作用。
因為TextCNN中卷積過後直接就是全域性max pooling,那麼它只能是在卷積的過程中計算與某些關鍵詞的相似度, 然後通過max pooling層來得出模型關注那些關鍵詞是否在整個輸入文字中出現,以及最相似的關鍵詞與卷積核的相似度最大有多大。
我們假設中文輸出為字向量,理想情況下一個卷積核代表一個關鍵詞,如下圖所示:

比如說一個2分類輿情分析任務中,如果把整個模型當成一個黑箱,那麼去檢測他的輸出結果,會發現這個模型對於輸入文字中是否含有“喜歡”,“熱愛”這樣的詞特別敏感,那麼他是怎麼做到的呢?
整個模型中能夠做到遍歷整個句子去計算關鍵詞相似度的只有卷積的部分,因為後面直接是對整個句子長度的max pooling。但是因為模型面對的是字向量,並不是字, 所以他一個卷積核可能是隻學了半個關鍵詞詞向量,然後還有另外的卷積核學了另外半個關鍵詞詞向量,最後在分類器的地方這些特徵值被累加得到了最終的結果。
TextCNN模型最大的問題也是這個全域性的max pooling丟失了結構資訊,因此很難去發現文字中的轉折關係等複雜模式, TextCNN只能知道哪些關鍵詞是否在文字中出現了,以及相似度強度分佈,而不可能知道哪些關鍵詞出現了幾次以及出現這些關鍵詞出現順序。
假想一下如果把這個中間結果給人來判斷,人類也很難得到對於複雜文字的分類結果,所以機器顯然也做不到。 針對這個問題,可以嘗試k-max pooling做一些優化,k-max pooling針對每個卷積核都不只保留最大的值, 他保留前k個最大值,並且保留這些值出現的順序,也即按照文字中的位置順序來排列這k個最大值。在某些比較複雜的文字上相對於1-max pooling會有提升。
3.HAN(Hierarchy Attention Network)
相較於TextCNN,HAN最大的進步在於完全保留了文章的結構資訊,並且特別難能可貴的是,基於attention結構有很強的解釋性。
他的結構如下圖所示:

輸入詞向量序列後,通過詞級別的Bi-GRU後,每個詞都會有一個對應的Bi-GRU輸出的隱向量 h ,再通過 uw 向量與每個時間步的 h 向量點積得到attention權重,然後把 h 序列做一個根據attention權重的加權和,得到句子summary向量 s2 ,每個句子再通過同樣的Bi-GRU結構再加attention得到最終輸出的文件特徵向量 v 向量,然後 v 向量通過後級dense層再加分類器得到最終的文字分類結果。模型結構非常符合人的從詞->句子->再到篇章的理解過程。
最重要的是該模型在提供了更好的分類精度的情況下,視覺化效果非常好。同時在調參過程中,我們發現attention部分對於模型的表達能力影響非常大, 整個模型在所有位置調整L2-Loss對模型表達能力帶來的影響遠不如在兩處attention的地方大,這同時也能解釋為什麼視覺化效果比較好,因為attention對於模型的輸出貢獻很大,而attention又恰恰是可以視覺化的。
下面我們來看一下他在法律領域罪名預測任務上的視覺化效果。下面的視覺化的結果並不是找了極少數效果好的,而是大部分情況下模型的視覺化能夠解釋他的輸出。需要注意的是, 此處為了讓不太重要句子中相對重要的詞並不完全不可見,詞的亮度=sqrt(句子權重)*詞權重。
在非常長的文字中,HAN覺得中間那些完全是廢話,不如那句“公訴機關認為”有用,就放棄了。

如下圖所示,模型雖然在文字第二行中看到了竊取的字樣,但是他認為這個案件中主要的事件是搶劫,這就是保留文字結構的好處。

可以看到並不是所有的深度學習模型都是不可以理解的,這種可解釋性也會給實際應用帶來很多幫助。
4.DPCNN
上面的幾個模型,論神經網路的層數,都不深,大致就只有2~3層左右。大家都知道何凱明大神的ResNet是CV中的里程碑,15年參加ImageNet的時候top-5誤差率相較於上一年的冠軍GoogleNet直接降低了將近一半,證明了網路的深度是非常重要的。

那麼問題來了,在文字分類領域網路深度提升會帶來分類精度的大幅提升嗎?我們在一些比較複雜的任務中,以及資料量比較大(百萬級)的情況下有提升,但不是ResNet那種決定性的提升。
DPCNN的主要結構如下圖所示:

從詞向量開始(本文的重點在於模型的大結構,因此不去詳解文中的region embedding部分,直接將整個部分認為是一種詞向量的輸出。)先做了兩次寬度為3,filter數量為250個的卷積,然後開始做兩兩相鄰的max-pooling,假設輸入句子長度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。
後面以此類推,序列長度是呈指數級下降的,這也是文章名字Deep Pyramid的由來。然後通過兩個卷積的非線性變換,提取更深層次的特徵,再在輸出的地方疊加上未經過兩次卷積的quick connection通路(ResNet中使得深層網路更容易訓練的關鍵)。因為每個block中的max pooling只是相鄰的兩個位置做max-pooling,所以每次丟失的結構資訊很少,後面的卷積層又能提取更加抽象的特徵出來。所以最終模型可以在不丟失太多結構資訊的情況下,同時又做了比較深層的非線性變換。
我們實際測試中在非線性度要求比較高的分類任務中DPCNN會比HAN精度高,並且由於他是基於CNN的,訓練速度比基於GRU的HAN也要快很多。
二、法律文書智慧化應用
達觀資料在法律文書智慧化處理中也應用了上面的幾個模型,並在此基礎上做法律行業針對性的優化。 在剛剛結束的“法研杯”法律人工智慧大賽中達觀資料代表隊取得了單項三等獎的成績。
以裁判文書智慧化處理為例,達觀資料可以通過上述的文字分類器根據一段犯罪事實來向法律工作者推薦與描述的犯罪事實相關的罪名,法律條文,甚至是刑期的預測等。
下面以裁判文書網的一篇裁判文書為例,我們擷取其中的犯罪事實部分文字,輸入模型。模型會根據輸入的文字判斷此段分類事實對應的罪名,並且高亮出犯罪事實中的關鍵內容。
擷取裁判文書網中的犯罪事實部分:

輸入模型:
“ 公訴機關指控:2017年6月30日22時左右,被告人耿豔峰醉酒駕駛冀T×××××號比亞迪小型轎車沿東孫莊村東水泥路由西向東行駛,行至事發處,與對向被告人孫漢斌無證醉酒駕駛無牌二輪摩托車發生碰撞。造成兩車不同程度損壞,孫漢斌受傷的道路交通事故。經衡水市公安局物證鑑定所檢驗:耿豔峰血液酒精含量為283.11mg/lOOmL;孫漢斌血液酒精含量為95.75mg/mL。經武強縣交通警察大隊認定:耿豔峰、孫漢斌均負此事故的同等責任。 ”
得到結果:

模型會輸出預測的罪名以及相關法條的推薦結果,能夠極大地提高律師的效率。並且模型還能將關鍵的句子以及詞高亮出來給律師進一步仔細審閱提供方便。
目前在刑法相關的大量樣本上罪名預測與相關法條推薦的準確率在90%左右。刑期由於存在不同年代不同地區存在一些差異,目前模型的輸出結果還不能特別直觀地給出評估。
三、總結
目前state of the art的深度學習文字發分類模型在十萬~百萬級以上的資料上已經能取得相當不錯的效果,並且也有一些可解釋性非常強的模型可用。要在實際業務中把文字分類模型用好,除了像文中深入分析理論以外,在大量的業務實踐中總結經驗也是必不可少的。達觀在裁判文書處理等實際任務上實測輸出結果也非常不錯,並且達觀的深度學習文字分類技術也會在各個業務應用中不斷優化升級,希望能為法律行業的智慧化以及效率優化作出一些貢獻。
參考文獻:
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.
本文作者
曾彥能: 達觀資料NLP演算法工程師,負責達觀資料NLP深度學習演算法的研究、優化,以及在文字挖掘系統中的具體應用。對文字分類,序列標註模型有深入的研究。曾作為主要成員之一代表達觀資料參加2018中國"法研杯" 法律智慧挑戰賽獲得單項三等獎。