1. 程式人生 > >達觀資料王文廣:如何玩轉自然語言理解和深度學習實踐?

達觀資料王文廣:如何玩轉自然語言理解和深度學習實踐?

本文根據達觀資料王文廣在“達觀杯”文字智慧處理挑戰賽期間的技術直播分享整理而成,內容略有刪減。

一、深度學習概述

深度學習是從機器學習基礎上發展起來的,機器學習分為監督學習、非監督學習以及強化學習三種類型。深度學習是在機器學習的基礎上把特徵抽取工作放到裡面一起來完成的,直接實現了端到端的學習。通常我們遇到的深度網路包括:堆疊自編碼器、深度信念網路、卷積神經網路和迴圈神經網路。

下面左邊這張圖是自編碼器的一個網路結構示意圖,自編碼器的特點是輸入和輸出是完全一樣的,它通過將輸入複製到輸出,去學習它在隱層裡面的表示。右邊是堆疊自編碼器,它可以把自編碼器的隱層不斷堆疊起來,形成多層的深度網路。

與堆疊自編碼器一樣,深度信念網路是在限制玻爾茲曼機基礎上疊出來的一個網路,限制玻爾茲曼機是神經網路裡面最基礎的網路結構之一,通過將多個限制玻爾茲曼機堆疊起來形成的深度網路,是深度學習裡面最基本的網路結構之一。

 

深度學習被最廣泛使用的是從卷積神經網路開始的,卷積神經網路的示意圖如這張圖片所示,它通過卷積和對輸入的區域性特徵進行學習,來達到最終的目標。卷積神經網路被廣泛應用於文字處理影象識別當中。

深度學習另外一個被廣泛使用的網路是迴圈神經網路,迴圈神經網路有非常多的變種,這張圖是它其中的一個,叫LSTM,經常被用於語音識別文字處理當中。

從上面網路可以看出來,深度學習是在神經網路的基礎上發展起來的,神經網路早期的效果並不是特別好,但是從兩千零幾年開始,因為海量資料的積累、逐層訓練技術的出現以及以GPU為代表的計算效能的極大提升,使得深度學習能效果越來越好,被廣泛應用於語音識別、計算機視覺、自然語言處理中。自然語言處理就會用到非常多深度學習的演算法。

 

二、自然語言理解概述

自然語言理解所處理的物件是文字,文字是廣泛存在於我們的日常生活和工作當中的,像達觀資料所擅長處理的是正式文字或者長文字,長文字像法律文書、人事檔案、證券專業文書、企業手冊、新聞文章、問答資料、客戶評論意見等都是我們常的文字,它幾乎存在於所有的行業中,金融、法律、媒體、網際網路、政府、公共機構、大型企業,無所不在,如果能夠使用自然語言理解和機器學習的方法,使得大量需要人工處理的海量文件自動化,將會非常大地提高企業和政府部門的工作效率。

 

然而,讓計算機來理解文字是非常難的一件事情,首先,計算機缺乏常識以及專業的背景知識,而人類通常擁有非常豐富的專業知識和背景。比如對“future”的理解,普通人認為是“未來”,但對於金融相關的專業可能就會認為是“期貨”,而“期貨”對金融專業人士來說是一個語境,這是計算機所不存在的一個場景。

 

除此之外,人類說話本身非常的抽象和模糊,通常擁有非常多的歧義或者語境資訊在裡面。我們通常在見到朋友時會說“吃飯了嗎?”“吃飯了嗎”對計算機來說就是“吃飯了嗎”四個字,而對人類來說它通常擁有豐富的隱含意義在裡面。

 

從分詞的角度,我們可以看詞本身的粒度問題,“中華人民共和國”和“中國”本身意義是一樣的。還有指代歸屬問題,當人與人之間交流時候,你說的“你、我、他”能夠自然而然的被替換成相應的目標,而計算機來解決指代歸屬問題也是非常難的一個事情。除此之外,還有同義詞、近義詞、區域性轉義、一詞多義等問題。

比如一詞多義的問題,大家在網路上看到過一個段子,“方便方便,意思意思”然後去理解“方便方便”和“意思意思”不同的意思。計算機同樣存在這個問題,它如何理解“方便方便”和“意思意思”的不同意思和不同的方便程度。

 

再從詞語構造成句子的過程中也會遇到非常多的問題,因為對人類來說,句子之間的部分結構發生顛倒,人類依然能夠正常的理解,但是對計算機來說,它對於像“你上班了嗎?”“班上你了嗎?”就有難度。

 

再往上,語義層面的歧義就更多了,“咬死獵人的狗”如果在沒有上下文語境的情況下,人類也非常的難以理解,到底是狗咬死了獵人,還是某些動物把獵人的狗給咬死了,這就是所謂的語境。

 

除了語境之外,還有比較多的領域知識、專家知識,比如最近爆雷非常多的P2P,有一個特點是利息比較高。當利息高過了一定程度,存在問題的概率比較高了。這類專家的知識對計算機來說也是一個問題。

 

“企業清算時按投資年復率20%給予補償”,這句話如果存在合同當中,往往是需要注意的點。因為通常不超過12%,20%的利率過高。這個『過高』是寫錯了、還是因為其他特殊原因,遇到這種問題時就需要通過雙重確認,來確保文字的正確。

 

為了解決這些問題,我們使用各種機器學習和深度學習的方法來建立模型,通過海量的文字進行訓練這個模型來預測未來。這個方式有點類似於人腦,人是要通過學習,學習很多專業知識,當學完知識之後,在未來遇到這些問題時,就會通過類似於機器學習的模型來實現預測和判斷。

 

 

在建立這些模型的過程中,我們通常會分為字詞級分析、段落級分析、篇章級分析。

字詞級分析是我們通常所遇到的像分詞、命名實體識別、同義詞分析等。段落級分析是從句子到段落層面來對文字進行建模,它一般包括依存文法分析、文字糾錯等。從段落往上是篇章級分析,篇章級分析更多是語義層面的理解,它通常包括像文字相似度、主題模型、文章的聚類分類和標籤提取。

 

三、文字語義分析及其應用實踐

文字語義分析首先是表示學習。表示學習通常傳統上對文字的表示是通過One-hot編碼來實現的,在深度學習出來以後,往往使用稠密的向量編碼來對文字表示。

詞向量的稠密表示具有非常大的以上,一方面是它的維度降低得非常多,一般情況下200-300維就足夠以表達中文的詞彙,而one-hot編碼往往需要50萬-100萬維來表示。除此之外,詞向量還能表達詞的語義層面的相似性。

 

對詞向量經典的訓練方法是谷歌發表的原始的“Word2Vec”這篇論文裡提到的兩種方法,詞袋模型和跳躍表。詞袋模型是用詞的上下文資訊來表示這個詞本身,而跳躍表則是用詞的本身來表達詞的上下文資訊。在“Word2Vec”基礎之上還發展出包含了全域性資訊的GloVe方法。

 

除了詞向量之外,深度學習的各種網路結構也被用來進行文字分析。比如對句子進行分類,可以使用卷積神經網路來實現。

 層次注意力模型最新的一個網路,它最早被使用來對評論進行打分。層次注意力模型有一個非常大的優點,就是它考慮了文字或者是篇章的結構,它是從開始,到句子的一個注意力模型,再到整個篇章是另一個注意力模型。它另外的一個優點是可以把整個網路結構的引數可視化出來,來解釋詞、句子對目標的貢獻的大小。

除此之外,另外一篇最新的論文所提出來的金字塔結構的卷積神經網路模型,可以非常高效的對長文字進行表示學習,最終達到一個非常好的分類效果或者標籤提取類效果

 

除了分類和標籤提取之外,資訊抽取也可以用深度學習來實現,達觀通常會把資訊抽取問題轉化成四種類型的分類問題來實現的,這樣就可以充分利用前面所提到的各種網路結構,比如層次注意力模型和金字塔結構的卷積神經網路。

 

對於像NER或者分詞這種任務來說,我們也會使用“深度學習+CRF”的方法來實現,這張PPT裡面講的就是使用“詞向量+LSTM+CRF”方法來實現NER。       

像這張使用“詞向量+Bi-SLTM+CRF”通常情況下效果都是非常好的。但是對於某些特定場景下它還會有一些不足,比如非常專業的文獻,這種情況下會遇到非常低頻的詞彙,如何對這些低頻的詞彙進行處理是我們需要考慮的一個問題。

 

達觀資料採用了一個方法,是把低頻詞彙專業領域的詞彙通過某種表示,和原始的詞向量一起拼接,作為LSTM和CRF的輸入,來實現對這些低頻詞彙問題的解決。充分利用這些深度學習的模型和應用實踐所總結出來的經驗,我們可以非常高效的去處理像企業通常所遇到的合同、簡歷、工單、新聞、使用者評論、產品說明這些文件。

 

四、推薦系統及其應用實踐

推薦系統非常的火熱,像今日頭條和抖音這種通過演算法推薦使用者所感興趣的東西,讓使用者不離開APP,都是非常成功的案例。國內類似於的 趣頭條都比較小的企業或者APP也非常多,它們往往會選擇一家像達觀這樣的SaaS服務來實現它們的推薦系統。       

 

推薦系統的基本過程是像這張PPT裡面所講的一樣,通過對原始的資料進行處理,使用到自然語言理解裡面的分詞和NER技術,使用文字的分類、主題模型、情感分析等,把這個分析結果放到搜尋引擎,達觀使用的搜尋引擎是Elasticsearch叢集,在這些叢集裡面會實現一個初步的Ranking處理。

 

以搜尋引擎為基礎,我們使用各種推薦演算法,像協同過濾基於內容的推薦演算法,以及深度學習出來以後的神經網路協同過濾的方法,來對這種文件進行推薦。不同的推薦演算法會在同個場景下推薦出不同的內容,在這個基礎上我們會使用一些融合演算法,來把這些不同演算法推薦的結果進行融合。我們常用的推薦融合演算法包括GBDT、SVD等。

 

在深度學習上也有一些演算法,DeepFM這種演算法也可以用來做演算法融合,做推薦內容的融合。通過融合演算法把不同推薦演算法、推薦內容給融合起來之後,還會根據APP所要求的業務規則和過濾規則,來對這些內容進行過濾,最終把這些過濾好的結果傳送給使用者,這個是我們整個推薦系統的一個基本的過程。

對於推薦系統來說,底層的像協同規律或者基於內容推薦非常成熟的演算法,在演算法之上如何獲得更好的效果,我們會利用最前沿的深度學習推薦演算法的技術。推薦系統的效果往往取決於演算法的好壞。

 

除了傳統的像 CF這種演算法之外,我們也嘗試了非常多深度學習層面的演算法,像Wide&Deep這個演算法就是一個例子,Wide&Deep是我們嘗試的一種演算法。

這張PPT講的是Wide&Deep網路結構,左邊是一個Wide模型,Wide模型它一般常用LR,它非常高效,可以對非常大的維度的輸入進行非常高效的學習。這些輸入一般是使用者點選行為反饋資料。

 

Wide&Deep模型的Deep是右邊這個模型所展示的,它是個多層的神經網路,多層神經網路可以對原始特徵進行學習,學習出一些人工特徵所無法抽象出來的一部分特徵。通過聯合訓練,將Wide模型的輸出和Deep神經網路的輸出結合起來,獲得更好的效果。

 

在實踐中,Wide模型一般是使用者反饋這種,通過LR這種非常高效的方法,把使用者反饋實時的體現到推薦結果上。而Deep模型一般是用來訓練像Item這種資料,可以通過離線的方法,使用非常長的時間,訓練出一個更好的效果出來。Wide&Deep的優勢是把實時反饋對文章的深層理解結合起來,從而獲得更好的效果。

 

在Wide&Deep之外,我們也嘗試了神經網路協同過濾,神經網路協同過濾是在協同過濾的基礎上、使用神經網路的方法來實現更好的效果。     

 

這是一個神經網路協同過濾的示意圖,左下角這個輸入是user層面的向量,而右下角這個輸入是Item層面的向量,將user向量和Item向量輸入到一個多層的神經網路上,可以通過大規模離線訓練的方法,來獲得一個比較好的協同過濾的效果。

 

這個網路結構和通常的網路結構非常相似的,一般情況下它是對user和Item通過embedding的方式,這個embedding就跟前面講的word2vec是一樣的,通過embedding把user和Item變成一個稠密編碼,然後輸入到一個多層的神經網路上。輸入就是user、Item之間的分數值,這個網路就是一個簡單的迴歸模型,通過非常多層的神經網路的非線形特性來實現比傳統簡單CRF的效果會好非常多。

 

知識圖譜是當前非常熱門的一個方向。如何把知識圖譜和深度學習結合起來應用到推薦系統裡面,是我們去做的一個嘗試。

這張圖可以簡單的分成三個部分,左上角這部分是普通的注意力網路結構,它通過將使用者所感興趣的Item跟普通的候選集的Item進行學習,學習出一個權值,這個全值可以用來表示使用者對這個新聞感興趣的程度。左下角這個網路是是將item的內容通過表示學習學習出item的向量表示。右邊大圖是將左邊這兩個圖學習出來的結果,用類似於前面提到的神經網路協同過濾的方式把它給組合起來,形成了推薦系統裡對使用者推薦內容候選級的學習過程。通過這種方法,在某種場景下我們可以得到更好的效果。

 

綜合前面這些推薦演算法形成的推薦系統,可以非常有效的去做好個性化推薦、相關推薦熱門推薦等各種內容,它可以廣泛應用在像資訊推薦,也可以應用到簡歷推薦上。比如可以在HR釋出一個JD的時候,給HR推薦滿足這些JD要求的簡歷。對其他場景也可以使用推薦演算法來實現,對於一個案件,可以推薦這個案件相關的其他案件,或者適用於這個案件的一些法律條文。商品推薦則是更常見的內容,它其實也是推薦系統最初使用的一個應用場景。

 

達觀的推薦系統結合前面提到的各種深度學習自然語言理解各種各樣的演算法,來實現一個非常好的推薦效果。除此之外,我們也有非常多行業應用經驗,比如招商銀行的掌上生活個性化推薦,使用的就是達觀給它們做的私有化部署推薦系統。像澎湃新聞APP,它們的新聞推薦系統是用我們的SaaS服務來實現的。

五、文件智慧處理及其應用實踐

我們在自然語言理解環節提到,文件的種類是非常豐富的,企業面臨的文件也是非常多的,應用場景也是各種各樣。比如對財務報表來說,需要的是資訊抽取,如何把財務報表變成一個結構化的資料。而對於合同來說它包括兩方面的內容,一方面是寫合同的時候是否寫得符合合同法和企業內部的法務規定;另一方面則是針對稽核合同的人,是否放過了一個不符合合同規定的條款,或者,如何去防止合同裡面陰陽合同的情況出現。

 

其他還包括文件的智慧搜尋,如何去搜一大篇幾百頁文章裡的某些文字,然後把對應的欄位給顯示出來。應用場景包括,員工剛入職一家公司,需要一個公司手冊一樣的內容,想理解報銷或者請假是怎麼去走流程的時候,就要去搜這個文件。如何做到不需要展示給員工整個文件,而是直接給到員工對應的章節,對於企業則是一個能夠確實提高員工工作效率的問題。這些問題都是達觀所擅長解決的。

除了讀、搜、審之外,還有一個場景是更好的利用深度學習和自然語言理解來幫助寫文件的人更好更快的寫作,比如輔助去寫新聞、報告等。

 

下面,我以場景來做技術層面的解析,比如文字分類.前面提到了非常多深度學習的分類器,還包括一些傳統學習的分類器,都可以用來做文字分類。傳統學習優勢是在語料比較少的時候,比如JD就是職位描述,這種場景下一般企業的職位描述就是幾百個或者幾千個,從深度學習的方法去實現,可能效果並不是特別好,這種情況下我們會選擇像傳統的方法,決策數或者SVM來實現對JD的分類。而對於簡歷,簡歷的規模往往JD的100倍以上,這種情況下我們就可以用前面提到的層次注意力模型和金字塔結構的CNN來實現對簡歷的分類。

 

除了分類之外,像資訊抽取通常使用的是CRF,CRF可以達到一個比較好的效果,它的標註語料要求可能比較低,幾百到一兩千份就能夠實現比較好的效果。當企業有更多語料的時候,我們就可以使用深度學習的方法來實現。前面已經提到過,我們可以把資訊抽取轉化成分類問題來實現,前面提到的各種分類演算法,像金字塔結構的CNN和層疊注意力模型都可以用來做分類。

 

除此之外,我們在推薦系統環節所提到的像Wide&Deep這種演算法,結合LR和深度網路的方法,也可以用來做這個資訊抽取的事情。

 

這個方式說起來也比較簡單,可以把CRF當作Wide模型,然後用深度網路Deep模型,用聯合訓練方法把它們結合起來,這樣可以實現類似於遷移學習的效果,就是我們可以預先訓練好一個深度網路,然後把深度網路給固化起來。在面對企業沒有大量GPU的時候,我們只要重新去訓練這個Wide,Wide模型可以使用比較簡單的像CRFPP等工具來實現。這種方法可以很好的均衡資源的使用和效果。

 

除了企業對文件抽取有要求之外,其實文件的智慧比對也是一個非常重要的應用場景,這種比對是在文件的資訊抽取之上構建的。在資訊抽取之上,我們通常使用規則來實現比對這個功能,只要資訊抽取的效果足夠好,比對效果一般都不會太差。

這是我們實際的一些應用場景,它通過資訊抽取技術關鍵資訊給抽取出來,然後使用各種業務規則對合同進行智慧審閱。這種簡單的方法就可以達到非常高的效果,可以替企業節省大量的法務人員。單個文件的審閱時間節省得非常多,同時可以讓企業節省200個法務的人力。人工智慧和文字智慧審閱的使用,可以給企業帶來非常大的收益,同時可以讓這200個人做更有意義的工作。這個是合同審閱的效果圖。      

       

六、總結

這是達觀使用的架構圖,我們可以把輸入通過各種特徵工程,使用傳統的方法來做機器學習,也可以通過Embedding的方式使用各種深度網路來實現,最終會使用一些融合演算法,來把不同模型的結果輸出做演算法融合,最後做些後處理,比如各種業務規則、各種過濾條件、各種在國內特殊國情所不能出現的內容都要過濾掉,得到一個結果出來。

並不僅僅是深度學習效果好就使用它,我們會根據具體的應用場景來選擇。如當資料規模小的時候就無法使用深度學習來做。