當前位置:
首頁 > 最新 > 百分點首席演算法科學家蘇海波:深度學習在文本分析中的應用

百分點首席演算法科學家蘇海波:深度學習在文本分析中的應用

乾貨速覽

春節期間,想必你已經體驗過了百分點集團和人民日報聯合推出的AI春節送祝福的應用——AI李白,那麼,你知道它是如何實現智能作詩的嗎?

百分點集團服務於團中央七千萬團員的自動問答機器人——小青機器人,你知道它是如何自動回答青年們關注的就業問題和情感問題的?

在這裡,百分點首席演算法科學家蘇海波博士為你詳細解剖,深度學習在文本分析中的技術和應用。以下為乾貨分享:

記得2011年前後,流量廣告、計算廣告、推薦演算法,以及用戶畫像這些都是特別熱門的話題。在這些領域的有很多場景都可以用到機器學習,比如廣告的推薦、推薦的商品排序,以及用戶畫像的各種人口統計學特徵的預測等等。

那個時候使用的最多的就是傳統的各種機器學習模型,工業界很常見的邏輯回歸模型:SVM、GBDT等等。這種傳統機器學習模型工作量最大的地方,有百分之六七十的工作量都在特徵工程,要根據業務的特點設計大量的Feature,去幫助提升模型預測的泛化能力,尤其是像廣告的點擊率預估這種問題,特徵的好壞直接決定了最終的效果。

有些公司專門做特徵的團隊就有上百人,因為這部分的工作量是非常大的,那麼在面臨這種工作量如此巨大的特徵工程時,有沒有辦法去改善甚至解決這方面的問題呢?

深度學習在這方面就做得特別好,它通過pre-training可以將數據裡面的特徵自動提取出來,再直接基於原始的數據,就能訓練出一個模型,而且它的效果相比傳統的機器學習有顯著的改善,這就是為什麼說深度學習在這些年得到了這麼火熱的歡迎,以及在工業界得到了大量的使用。

大家都知道,其實深度學習採用的神經網路,尤其是神經網路很複雜的時候,訓練的時間特別長,有時候甚至幾天、一個月都是常見的。這麼長的時間顯然會影響神經網路在實際問題當中的應用,那麼有什麼辦法呢?

隨著最近幾年,大數據技術的各種發展,以及GPU計算能力的大幅度提升,使得神經網路的計算效率得到了顯著的提升,因此深度學習也取得了很大的成功。

最開始是在圖像,然後慢慢應用在語音領域,但最近幾年在NLP的很多問題上也取得了顯著的成功。

百分點的整個NLP演算法體系分為三層:

底層是機器學習平台,裡面包括各種傳統的統計模型類的方法:邏輯回歸、最大熵、HMM和CRF,這些都是在NLP裡面用的很多的。同時還包括Deep Learning,其中有CNN,LSTM等等,還有GRU;

中間層是NLP常見的基礎的任務,包括分詞詞性標註、命名實體、情感分析、文本分類等等,這一層會用到底層的機器學習平台的各種模型,來解決這些基本的問題;

最上面一層是NLP的各種應用的場景,比如說智能審核、智能采編、自動問答,以及文本的自動生成、知識圖譜等等,也會用到中間層的各種基本的NLP模塊。

接下來我們重點分析一下深度學習如何在一些基本的NLP任務當中使用,包括分詞、命名實體以及情感分析這三塊。

首先看一下,分詞NER這兩個基本任務。如果對NLP有些了解的人都知道,這方面的傳統方法主要包括兩大類:

字典規則的匹配,比如分詞的最大增強匹配、反向匹配、方向匹配等等,這些都是用了字典規則的方法;

傳統的機器學習方法,比如說常見的隱馬爾可夫(HMM)、條件隨機場(CRF)、最大熵馬爾可夫模型(MEMM)等等。

這些方法有什麼問題?

首先它們有大量的特徵工作要做,就是剛說的傳統的機器學習方法存在一個非常大的問題,就是它需要大量的人工來做;

第二個問題是領域的移植性問題,比如說在金融領域做了一個分詞模型,可能依靠了大量的詞典和規則,但是可能轉移到一個新的領域,比如說媒體這個領域時候,又要做很多詞庫和規則,移植性很差;

第三就是一些未登錄詞的識別效果也很差,因此大家才希望能夠用深度學習來做。

首先第一個方面,它能夠解決特徵工程的問題,避免了大量的人力工作;同時它的領域移植性要好的多,整個工作量能得到顯著的降低;此外,在新詞識別這塊的效果也好很多。

那麼具體採用的是一個什麼模型呢?

在實際工作中採用的是LSTM+CRF的組合。該組合在這方面已經得到了非常成功的使用,它把一個分詞和命名實體識別問題轉化為了一個序列標註問題。

可以看一下左邊這張圖,拿命名實體來說,序列標註前首先建立一個標準,B開頭代表實體的首字、I代表實體的非首字:B-PER和I-PER代表的就是人名的首字,和人名的非首字,同樣地點和組織機構也是這麼來表示的。

「中國很大」這樣四個字用模型來給它做標註:「中」是什麼?中國首先是一個地點名,那麼把「中」就標識為地名的一個首字,B-LOC;「國」就是代表地名的一個非首字,代表中間的這個字,I-LOC;「很」和「大」這兩個字都代表它們不屬於任何一個實體的一部分,因此都標示為O。

在上面整個圖中,就是LSTM上面加了一個CRF層,CRF就是條件隨機場,相信學過自然語言處理的同學對CRF已經非常熟悉了。

在整個深度學習領域當中,一類問題是分類問題,比如說人臉的識別、目標的識別等等,用傳統的前饋神經網路就能做得很好;還有另外一類問題特別依賴於序列之間的關係,這種依賴關係對於整個任務的結果有很大的影響,這時候就需要用到循環神經網路——RNN。

RNN在求解的過程中會有遇到一個梯度消失的問題。經過了多年的研究,最後出來了LSTM模型,它很好的解決了這個問題。它在應用這種基於序列的問題上有很好的表現,同時應用場景非常廣泛。

根據輸入和輸出的情況可以分為下面四種:

首先是一對一,對中文的分詞,比如輸入了一個詞,要給它一個唯一的標註,同時還包括其他命名實體、文本生成,這些都是一對一的問題。

第二類是多對一,比如說情感分析,輸入的是一段文字,但輸出的是情感,比如某件事是好還是壞,或者正面還是負面,其他的還有文本分類、視頻主題分類等等。

第三個是多對多,比如機器翻譯,輸入一段文字,輸入是一段中文出來的是一段英文,還有聊天機器人等等。

最後一種是一對多,輸入的是一張圖片,給它輸出一張文字序列,LSTM應用的就是這種情況。

LSTM解決的是序列的問題。

看圖中的這樣一個網路,對於傳統的神經網路模型,輸出的Ht,只依賴於輸入的Xt,它跟前一個單元是沒有什麼依賴關係的。但是在LSTM中每一個單元t時刻的輸出,與前一個時刻t-1之間的狀態,是有一個比較強的依賴關係。

可能大家在學習經常會比較費解什麼叫t時刻,什麼叫t-1時刻,就拿剛才的這個例子來說,「中國很大」這四個字,「中」它就是t=1這個時刻,它的輸出就是B-LOC這樣一個標註;「國」就是t=2時刻,它的前一個時刻就是「中」,「國」的輸出是I-LOC;那麼「很」就是t= 3時刻,「大」就是t=4時刻。

這樣類比的時間序列關係,大家碰到時刻這個概念的時候一定要理解,它是跟一句話能夠對應起來的。這個時刻就代表了這個字在一句話當中的位置,做了這樣一個類比,大家一定要首先理解這一點。

在LSTM當中,t時刻是依賴於t-1的,具體是個什麼樣的依賴?

在這個結構當中有個非常重要的元素: 單元狀態C。

Ct-1是t-1時刻神經網路單元的輸出,它是LSTM具備長短期記憶能力的關鍵,它就像一個鏈一樣,在不斷的傳輸,不斷會有信息的衰減,也會有信息的新增加,不斷的從t-1時刻不斷的往右邊傳遞到最後一個時刻。

在整個長期狀態的傳播當中會有三個控制開關去決定狀態C是怎麼傳遞的。

從t時刻傳遞到最後一個時刻經過了這樣三個門: 遺忘門、輸入門和輸出門。

首先看一下遺忘門ft。

ft是個向量,向量中的每個元素取值是0到1之間,那麼ft的取值決定了Ct-1的狀態過濾多少信息,並傳遞到第t個狀態。比如說如果ft=0,表示所有的信息都被卡住了,一點都傳不過去;如果t=1,表示t-1時刻的狀態信息,全部都傳到Ct那邊去了,它表示的是這樣一個物理含義。

第二個門叫輸入門。

也就是這裡的It,It它是由Xt和Ht共同決定的,它也是一個向量,每個元素也是在0到1之間。那麼它和輸入Xt一起決定了從輸入當中要提取什麼樣的信息,來傳播給單元狀態Ct,它決定了從輸入Xt獲取什麼樣的信息往下個時刻去傳。

再看一下輸出門。

輸出門的Ot,取值也是個向量,取值0到1之間。那麼它是決定了t時刻的輸出和狀態C之間是個什麼樣的關係。可以看到t時刻的狀態Ct,它是用兩部分組成的,一部分就是Ct-1傳遞過來的,過濾出來的一部分信息,另外一部分信息是從輸入Xt裡面直接抽取出來的信息,它是兩部分信息合成的一個結果。那麼有了Ct之後,再結合輸出門Ot,就能直接計算出t時刻的輸出Ht。

剛才的解釋就是對輸入門、輸出門、遺忘門的一個解釋。整個的網路單元看起來比較複雜,其實它都是有一個明確的物理的含義,整個的核心就是:去解釋每個神經網路的單元狀態Ct是如何傳遞到下一個時刻、如何進行信息的衰減,以及如何從狀態t時刻的輸入去提取新的信息讓Ct得到更新。理解神經網路當中的物理含義是非常重要的。

再看一下,LSTM結合CRF的數學原理。好多同學一看到這個數學公式,可能腦袋就大了,其實你真正理解它的物理含義以後,它們並沒有那麼複雜。

圖中的下方的輸入X代表了每個字向量,這個字向量可以通過大量的語料,通過無監督的方式訓練出來。Y對應是輸入的每個字,它輸出的標註是什麼。

那麼有了對應的輸入輸出,有了大規模的訓練語料以後,那麼如何來求解這個模型的參數?

可以看的出來,整個這一層LSTM』s ouput非常的關鍵:s(x,y),它由兩部分組成:一部分是加Ay,y+1,它代表著Y輸出的標註從第I個狀態轉移到I+1的狀態,所轉移得到這樣一個分數。

另外一部分就是Pi,yi,代表的是整個LSTM的輸出。

當LSTM輸出的Pi,yi,再加上了CRF狀態之間的轉移分數,進行一個求和,這樣將兩個模型的特性都比較好的融合在一起,輸出s(x,y)這樣一個分數之後,進行歸一化,就得到P(Y|X)。同時,每個輸入對應著一個標註,通過反向傳播梯度求解,以及參數更新,最後可以將所有模型參數都計算出來。

直接採用LSTM就能預測輸出序列了,為什麼後面還要接個CRF模型? 計算複雜度反而提高了,那麼CRF到底帶來一個什麼樣的好處?

首先,採用單個LSTM預測出來標籤是有問題的。因為每個字在標籤當中是獨立的分類,沒有去利用上下文已經預測出來的標籤結果,進而導致預測出來的標籤有可能是非法的。

看一下中間這個例子:這裡面是做了個分詞,把分詞轉換為一個序列標註的問題。B代表一個詞的開始,E代表一個詞的結束,S代表一個字可以單獨的作為一個詞。

real output,是實際輸出的是什麼。它的後面,E又接了一個E,正確的輸出應該是B,再接一個E。

這裡可以看出來一個明顯的錯誤:一個結束符後面再跟著一個結束符顯然是不合理的,說明LSTM存在對應的問題。解決這個問題要把CRF接在後面,因為CRF的特點是比較好的學習到輸出狀態的轉移關係,比如說:前面的一個詞的結束,後面應該是接一個新的詞開始,或者後面接單獨的一個詞,所以是不可能出現E的。

通過這樣的限定特徵就保證這個上面這種例子錯誤不會再出現,LSTM後面接入一個CRF以後,它能夠取得比單個LSTM更好的效果。

實際在開發、做項目的過程當中,需要同時使用一些模型調優的技巧。這些技巧非常重要,是大家在實際去做深度學習的時候需要掌握的。

Batch_size指的是什麼?就是訓練的時候,比如要去計算梯度的時候,或者要去更新參數的時候,拿多少的訓練數據去這樣一次更新,Batch_size等於1,就是傳統的SGD更新方法,另外,還有採用全量數據進行一次更新方法。

這兩種極端都會有它對應的問題,如果Batch_size取的太小,就導致整個的收斂速度很慢,甚至收斂會出現問題,而且沒有比較好的去利用機器的內存;如果Batch_size取得非常的大,可能內存就爆了,因此需要選取一個合理的Batch_size數字,既能夠將內存利用起來,同時又能讓它比較穩定的去收斂到目標值。

實際情況當中,經常採用的是Batch_size要盡量取2的冪指數,比如32,64,128都可以,可以提高內存中的計算效率。同時要根據實際的分配內存和顯存來估計Batch_size,保證內存不要爆掉。

第二個技巧是初始化權重參數,就是整個神經網路裡面的結構參數。如果這些參數全都取0的話,整個傳遞下來,所有的取值都是一樣的,顯然這樣是不行的。所以經常採用的是隨機初始化的策略,包括高斯分布,均勻分布。Tensorflow這個框架裡面是自帶了一系列初始化的函數,以上是第二點。

第三個技巧是dropout超參數,這也是很重要的。在神經網路里經常會面臨這樣一個問題:過擬合,那麼dropout這樣一個參數能夠提升整個網路的泛化能力,在上面提到的項目當中,採用字向量輸入到雙向LSTM之前去加入dropout,進一步提升了效果。這裡取值就是0.5,那麼在實際表現當中,準確率會有幾個百分點的顯著提升。

其他的技巧還有包括比如說輸入embedding Size到底應該怎麼去選,中間的隱藏層的維度應該怎麼去選,還包括learning rate要怎麼去選,到底採用什麼樣訓練的方式,是傳統SGD,還是說加動量法等等,都是要選擇的,這些也是大家在學習深度學習時候需要的基本功。

那麼剛剛講述的很多的技巧以及原理在實際當中取得了什麼樣的效果?

v1.3、v1.4是我們文本分析產品的兩個階段的版本。

1.3版本採用的是傳統的方法,1.4版本採用了深度學習的方法。可以看得出來: 1.4會有效果上的一個顯著提升,無論是準確度,還是F1值都有一個提升。同時與業界的NLP方面做得很好的企業,包括Boson、文智等等都進行了對比。這裡選了Boson作為代表。因為做了對比之後,發現它是比較具有代表性的。

接下來看一下,基於Pytorch的分詞性能。在維特比解碼這塊,它們都採用了GPU,因此它的速率都有幾百K的水平,隨著batch_size在增長,它的性能也是在不斷的增加的。同時,batch_size超過兩千的時候內存直接爆了,這時候整個值立馬就降下來,這是基於分詞的性能。

接下來跟大家分析情感分析當中如何使用深度學習。

具體來說首先第一步,肯定要將文本中的詞向量化。這裡經常用one hot representation來表示,比如這個詞表裡面有一萬個詞,那麼這個向量長度就是一萬,對於每個詞都會有個固定的位置,這個位置上取1,其他的位置上取0。將其中的詞向量化之後,那麼接下來再結合這種傳統的邏輯回歸,或者是SVM,就能去結合標註數據進行模型的訓練,進行情感分析的預測,這是用傳統方法來做。

那麼用這種方法存在什麼樣的問題?

第一個問題就是詞序的信息,在每個詞做特徵的時候都是比較獨立的,因此詞序的信息被忽略了,整個效果明顯有個上限;第二個問題是,只考慮了字面上的特徵,沒有考慮詞和詞之間語義上的一個特徵;第三個是訓練應該覆蓋全部序列,就是說在做特徵的時候,可能有些值就直接被篩掉了,這樣很明顯會影響最終的效果。

那麼深度學習是怎樣解決這些問題的?

首先,在離線的時候,直接用訓練好的語義向量模型輸入,這樣能夠解決好訓練集詞的覆蓋不全面的問題。其次,用CNN卷積神經網路能夠保留大部分的詞序信息,比如說從2-gram甚至能保留到5-gram,這樣的詞序信息能夠使它的學習能力更強,而且效果的上限就進一步的提升。

onehot representation有幾個比較關鍵的問題:第一個就是它有個鴻溝的問題,詞和詞之間,找不到它的相關性,比如蘋果和香蕉這兩個詞語,它們有一定語義上的相似性的,但是one hot representation完全體現不出來。

第二個就是維度災難的問題,比如庫的大小為幾萬的量級,那麼特徵維度就會特別長,對於語言模型就有這個問題,就會存在一個維度災難的問題。

第三個問題,使用one hot representation的表示,應用到深度學習當中,訓練的複雜度非常高,整體效果會非常差。

基於這三點方面的原因,通常將one hot representation改為distributed representation,分散式的向量來進行表示,每個詞都用一個向量來表示,這樣就可用cosin和歐式距離表示任意兩個詞之間的語義長度和語義距離。一般來說用深度學習都是用embedding向量,而不是用one hot representation。

那麼這些值向量是如何計算出來的?

大家都應該知道Google推出gensim,在這方面做了非常出色的工作。它採用了兩種比較經典的模型:連續詞袋模型和Gram的跳躍模型。

這兩種網路結構能夠將結合大規模的語料,訓練出所有詞的語義向量,對應的每個詞都能將它最相似的向量計算出來。比如上圖中的「好看」、「很漂亮」、「難看」、「喜歡」,這些都是跟「漂亮」在語義上特別近似的。

語義向量計算出來之後,在情感分析當中具體採用的是CNN的模型。大家可能會問,為什麼會採用CNN模型?當採用全連接的方式時整個網路中的參數是非常多的,幾十萬、幾百萬,網路參數一旦數量過多,導致網路模型的求解會非常的慢,甚至會訓練一個月,這麼長的訓練時間是不能忍受的。

另一個問題就是參數越多,模型越複雜,就更容易發生問題。以至於整個模型預測的性能非常差。CNN的結構包含以下幾層:輸入層、卷積層、池化層、全連接層、輸出層,這裡有幾個關鍵的概念:

一、卷積層,大家應該在信號處理裡面之間學過,它能夠去計算相應元素之間的加權求和,能夠起到一個作用就是全體參數共享。什麼叫參數共享?就是很多相同位置上的網路中的參數取同樣的值,這樣就能大大降低神經網路中參數的數量。實現參數的共享,用卷積層。

二、池化層,能夠實現空間的亞採樣,之前一個小格子,可能包括四個元素,直接對這四個元素求個平均值,一方面能夠避免雜訊帶來的影響,另外一方面也能降低模型需要用到的參數數量。

通過這樣兩種方式就能夠將網路當中的參數數量大幅度的降低,而且CNN也被證明在工業界能夠取得非常不錯的效果。最早CNN被應用在圖像當中,現在將它應用在文本中的情感分析。

CNN模型當中,輸入採用了一個雙通道向量,這也是一個比較重要的技術。以前經常用的傳統方法是單通道的方式,CNN的輸入詞向量有這麼幾種:

CNN-rand, 所謂的word vector隨機初始化,同時在訓練過程中進行優化。

CNN-static,直接使用無監督學習的結果,通過gensim訓練,通過大規模的語料訓練,同時用了大量語句當中的信息,比CNN-rand效果好很多。

CNN-non-static,它直接使用無監督學習pre-training的結果,但是在訓練的過程當中,會進行一個細緻的微調,這樣效果會更好一些。這樣一個微調會保證離原始的word vector不會太遠,同時它能夠針對實際的對業務問題做一個更好的優化。

CNN-2Channel,就是這個項目當中採用的方式,它是將CNN-static和CNN-non-static作了一個混合版,這樣保證它結合兩者之間的優點。

那麼這兩種詞向量在語義和情感上有什麼樣的差別?

首先是static channel,W2V向量在語義上是很相似的,但是他們在情感上沒有相似度,相似度體驗的很差。比如bad這個詞,通過static channel訓練出來,它的相似詞有:good,terrible等等,bad首先找的相似詞是good,顯然這兩個詞性是相反的。

對於這種non-static channel這種動態的向量,它能夠在訓練過程,結合情感分析的標註數據進行微調,它能夠區別正面或者負面的情感。還是對這個詞,bad,經過non-static channel動態向量訓練,最後首先匹配的相似詞是terrible,horrible等等,這些都是負面相關的詞。通過這種動態的調整,模型能夠準確學習到詞語所表達的情感。

為了幫助大家去更好的運用CNN,下面列出了一些在實際模型開發的過程中會存在一些問題:

過擬合比較嚴重。解決方案:去掉所有停用詞性,為偶爾有些動名詞很重要設置白名單,將F1值提升了兩個點。

無法對詞的重要程度進行模擬。比如說一句話:你很好,但是你沒有耐性。這個「但是」後面表達意思比前面的表達意思要更加重要。解決方案:將轉折詞後面的詞語乘以1.5的加權,這是一個經驗的取值,然後在程度副詞上,要加一個形容詞乘以係數,比如:你非常的美,或者:你非常的勤奮,「非常」這樣一個程度副詞它要進行一定的加權,它的情感會更加強烈。對於否定詞,譬如:不好或者不努力等等,在訓練過程當中你要乘負的係數。通過這種方式,去模擬這些詞表達一種語義和情感的程度,F1值提升了1%。

卷積能識別連續若干個詞的特徵,但是maxpooling抹殺了部分語義信息。嘗試LSTM等RNN模型改善效果,但改善不明顯,情感分析問題中,這種短小的n-gram基本上可以滿足,不需要那麼長的依賴關係,這就是為什麼使用LSTM相比CNN也沒有特別顯著的效果。

最後一塊是模型本身,通常會使用dropout的一些技巧,F1值可以提升兩個百分點。

在COAE和NLPCC這兩個情感分析測試集上進行了測試,傳統模型就採用SVM,同時也採用了CNN和LSTM。看得出來,在COAE數據集上提升了四到五個百分點,在NLPCC上大約是提升了六個百分點,效果比傳統的模型是有顯著的提升的。

剛剛提到CNN模型,那麼採用一些其他的模型,是個什麼樣的效果?

我們當時在內部採用了不少其他的模型,比如character-CNN、LSTM,還有遞歸神經網路,我們在測試集上發現跟目前採用的2channel-CNN相比沒有明顯的差別,另外還有其他的一些網路結構,比如GRU等等,本質上都是為不同的網路結構提取帶有情感提升的句子向量,利用這些向量進行情感分類,並沒有本質的差別。因此,我們後續更多優化的精力是獲取更多的標註數據,以及在我們的情感應用產品上,結合用戶的反饋數據進一步的發力。

前面我們講述了深度學習在情感分析當中的一些應用,現在我們已經在NLP陸續更多地使用深度學習的技術,包括文本分類、句法分析、文本生成、知識圖譜、自動問答等等,我們都去採用深度學習的技術。

前面介紹都是偏基本的任務方面的如何去採用深度學習的內容,我們再來介紹一下具體使用的幾個案例。

第一個案例是AI李白。

我不知道大家有多少同學接觸了這個應用,這是百分點公司和人民日報推出的一個AI春節送祝福的應用,相信不少同學都已經用過。它結合了唐詩宋詞的韻律和寫詞的技巧,自動寫出帶有春節味道的詩詞,它就是個寫詞的機器人。

大家知道對於文本生成來說肯定用到語言模型的,提到語言模型很多人就會說,用n-gram這種語言模型,但是它的問題在於無法捕獲距離比較長的詞語之間的字詞依賴關係,因此這裡採用LSTM的語言模型,大概使用了70多萬詩詞的訓練語料,最終也取得非常不錯的效果,整個AI李白上線六天的時間,獲得了超過一千萬的訪問量,如果大家有興趣的話,可以去體驗一下。

第二個案例是團中央自動問答機器人。

現在團中央有七千萬的團員,他們有個青年之聲的論壇,每天上面有好幾百萬的問題,其中有很多的問題其實是得不到及時回答的。做這樣一個機器人問答是希望能夠對青年之聲關注的就業的問題、情感的問題等等進行自動問答,幫助青少年能夠更好的成長。

自動問答裡面有幾個關鍵的技術問題,比如如何實現問題的匹配,如何自動去計算出問題和答案之間的相似程度,目前都可以採用深度學習去解決這方面的問題,現在內測版已經上線了,接下來會對外推出這款自動問答機器人。

第三個案例是某媒體客戶的智能采編系統。

傳統的采編系統都是靠人工。比如要產出一篇稿子,需要花大量的力氣在關鍵詞提取、摘要等等方面,各種任務都是要靠人。直接將中文語義引擎內嵌到智能采編系統中,使用深度學習來做,可以極大提升采編稿件的效率。

實際上,深度學習、自然語言處理現在在業界有越來越多的實現場景,這也是非常有前途的方向,希望大家一起參與到這個方向,將 NLP 這塊的人工智慧技術在越來越多的行業落地,謝謝大家!

作者答疑

Q1:深度學習和機器學習有什麼區別?

A:深度學習也是機器學習中的一種技術而已,這個問題應該更具體,應該說這種深度學習模型和傳統的模型有什麼樣的差別。對於這個問題而言,我剛剛第一頁裡面就講到,傳統模型很重要的一塊工作是設計這些模型的特徵,而且是靠人去設計的,對業務有準確的理解,才能具有泛化能力特徵,這也是一門手藝活,這塊的工作量是特別大的。為了解決人工去設計特徵的工作,我們採用深度學習的技術,就是從數據當中自動發現對應的特徵,直接得到一個結果,它是從端到端的一套技術,而且它的效果相比傳統機器學習能夠有顯著的提升。

Q2:訓練的時候都是單機嗎?有用到集群嗎?

基於tensorflow的時候,用集群訓練,可以用好幾個GPU來訓練;基於pytroch的時候是單機的。

Q3:batch_size的選取,除了內存因素,對於訓練的結果,比如準確度,有影響嗎?

batch_size越小,優化路線在走的時候,隨機性特彆強,可能最後優化到最終目標中間可能會有些問題,會影響準確度;batch_size過大的時候,內存可能撐不住,內存會直接爆了, batch_size到了一定的程度,再往上面走的時候,它可能對準確度影響沒有那麼大,比如batch_size取256,或者取512,最後都能達到一個近似的最優結果,影響不會特別大。

Q4:機器人自動問答是怎麼做的?

自動問答首先需要建立一個非常優質的問題答案資源庫,有這個庫之後,要在庫里找到答案,還涉及幾個問題:

第一個是問題與問題之間的等價計算,你問一個問題的時候,你能不能從這個庫裡面找到等價的問題,這是很關鍵的,涉及到深度學習;另外一點,比如說我問了一個問題,但是這個庫裡面有一堆的答案,如何從這個答案裡面當中給出最好的,這裡涉及到問題和答案匹配問題。用傳統的模型也能做,如果採用深度學習也能做,但是對於數據的數量和質量會要求更高。

第二,閱讀理解的問題,什麼叫閱讀理解?答案是存在一個文檔中,而不是存在一個QA庫當中的,在文檔中要去挑選出最合適的片段,能夠去回答這樣一個問題,這時候要找到這個答案的位置,就需要有一個標準的訓練數據。有這樣的標註數據之後,再去訓練這樣一個深度學習模型,來了一個新的問題以後,才能去預測出它在文章中的片段位置。

Q5:老師,謝謝您的分享,對於學生來說,沒有AI工作經驗,怎麼找該方面的工作呢?

我看有一些同學在問,沒有AI方面一些工作經驗,對於學生來說,怎麼找這方面的工作?

相信很多人有這方面的困境,這個時候我給大家分享的是說,第一個,現在有很多的機會,互聯網上的資源比我當時讀書的時候要豐富的多。我可以分享一些自己的經驗,當時我在學校,可能接觸沒那麼多,但是可以加入學校的協會,比如學校的開源軟體協會,當時把基礎技術都學會了。

至於AI,第一個,大家可以去上這種培訓質量比較高的培訓課程,國內AI方面的培訓課程很多,因為這些培訓課程不僅僅是這方面知識的講解,還會幫助大家進行實踐;

第二個方面,我是建議大家有機會可以加入開源的項目,現在AI方面,基於機器學習,或者相關的開源項目有很多,針對這些項目,加入一個進去,貢獻自己部分的代碼。

第三,我建議大家可以把基礎打好之後,從找一份實習開始,你如果還是在校生,因為公司對實習生的要求沒有那麼高,它更多要求你的編程功底紮實,對AI一定的了解,可能要求沒有那麼高,你再通過實習當中的歷練去積攢這方面的經驗,這也是一個比較好的方式。這是給大家的一些建議。

Q6:要不要學傳統機器學習模型演算法?

我覺得是要學的。因為這就像基本功,傳統機器學習演算法裡面的很多的模型基本理論、一些泛化理論、一些特徵設計的理論、一些模型它為什麼效果好,為什麼效果不好?它整個模型的一些內在的思想是什麼,這些基本功都是要學會的。不然的話,你真的直接上深度學習,你就也只會用一些工具。一旦碰到一些問題的時候,就像如何調參,碰到效果不好的時候,我該怎麼辦?你如果沒有這些理論基礎,你就只能去瞎試,試出來是運氣好,試不出來也不明白為什麼,我建議大家還是要學習機器傳統模型理論,這個東西都是要掌握的。這些理論的好處是在你實際項目當中遇到瓶頸、遇到問題的時候,這些理論會指導你,你該去朝什麼樣的方向去努力,你該怎麼去定位問題,這些基礎理論還是非常重要的,我建議大家要學一學,直接上來學深度學習,基本功是不紮實的。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 百分點 的精彩文章:

TAG:百分點 |