日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

干貨|百分點(diǎn)首席算法科學(xué)家蘇海波:深度學(xué)習(xí)在文本分析中的應(yīng)用

 KyunraWang 2018-04-24

干貨速覽

春節(jié)期間,想必你已經(jīng)體驗(yàn)過了百分點(diǎn)集團(tuán)和人民日報(bào)聯(lián)合推出的AI春節(jié)送祝福的應(yīng)用——AI李白,那么,你知道它是如何實(shí)現(xiàn)智能作詩的嗎?


百分點(diǎn)集團(tuán)服務(wù)于團(tuán)中央七千萬團(tuán)員的自動(dòng)問答機(jī)器人——小青機(jī)器人,你知道它是如何自動(dòng)回答青年們關(guān)注的就業(yè)問題和情感問題的?


在這里,百分點(diǎn)首席算法科學(xué)家蘇海波博士為你詳細(xì)解剖,深度學(xué)習(xí)在文本分析中的技術(shù)和應(yīng)用。以下為干貨分享:


記得2011年前后,流量廣告、計(jì)算廣告、推薦算法,以及用戶畫像這些都是特別熱門的話題。在這些領(lǐng)域的有很多場景都可以用到機(jī)器學(xué)習(xí),比如廣告的推薦、推薦的商品排序,以及用戶畫像的各種人口統(tǒng)計(jì)學(xué)特征的預(yù)測等等。

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

有些公司專門做特征的團(tuán)隊(duì)就有上百人,因?yàn)檫@部分的工作量是非常大的,那么在面臨這種工作量如此巨大的特征工程時(shí),有沒有辦法去改善甚至解決這方面的問題呢?

深度學(xué)習(xí)在這方面就做得特別好,它通過pre-training可以將數(shù)據(jù)里面的特征自動(dòng)提取出來,再直接基于原始的數(shù)據(jù),就能訓(xùn)練出一個(gè)模型,而且它的效果相比傳統(tǒng)的機(jī)器學(xué)習(xí)有顯著的改善,這就是為什么說深度學(xué)習(xí)在這些年得到了這么火熱的歡迎,以及在工業(yè)界得到了大量的使用。


大家都知道,其實(shí)深度學(xué)習(xí)采用的神經(jīng)網(wǎng)絡(luò),尤其是神經(jīng)網(wǎng)絡(luò)很復(fù)雜的時(shí)候,訓(xùn)練的時(shí)間特別長,有時(shí)候甚至幾天、一個(gè)月都是常見的。這么長的時(shí)間顯然會(huì)影響神經(jīng)網(wǎng)絡(luò)在實(shí)際問題當(dāng)中的應(yīng)用,那么有什么辦法呢?

 

隨著最近幾年,大數(shù)據(jù)技術(shù)的各種發(fā)展,以及GPU計(jì)算能力的大幅度提升,使得神經(jīng)網(wǎng)絡(luò)的計(jì)算效率得到了顯著的提升,因此深度學(xué)習(xí)也取得了很大的成功。

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

百分點(diǎn)的整個(gè)NLP算法體系分為三層:

  • 底層是機(jī)器學(xué)習(xí)平臺(tái),里面包括各種傳統(tǒng)的統(tǒng)計(jì)模型類的方法:邏輯回歸、最大熵、HMM和CRF,這些都是在NLP里面用的很多的。同時(shí)還包括Deep  Learning,其中有CNN,LSTM等等,還有GRU;

  • 中間層是NLP常見的基礎(chǔ)的任務(wù),包括分詞詞性標(biāo)注、命名實(shí)體、情感分析、文本分類等等,這一層會(huì)用到底層的機(jī)器學(xué)習(xí)平臺(tái)的各種模型,來解決這些基本的問題;

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

接下來我們重點(diǎn)分析一下深度學(xué)習(xí)如何在一些基本的NLP任務(wù)當(dāng)中使用,包括分詞、命名實(shí)體以及情感分析這三塊。

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

  • 字典規(guī)則的匹配,比如分詞的最大增強(qiáng)匹配、反向匹配、方向匹配等等,這些都是用了字典規(guī)則的方法;

  • 傳統(tǒng)的機(jī)器學(xué)習(xí)方法,比如說常見的隱馬爾可夫(HMM)、條件隨機(jī)場(CRF)、最大熵馬爾可夫模型(MEMM)等等。


這些方法有什么問題?


首先它們有大量的特征工作要做,就是剛說的傳統(tǒng)的機(jī)器學(xué)習(xí)方法存在一個(gè)非常大的問題,就是它需要大量的人工來做;

 第二個(gè)問題是領(lǐng)域的移植性問題,比如說在金融領(lǐng)域做了一個(gè)分詞模型,可能依靠了大量的詞典和規(guī)則,但是可能轉(zhuǎn)移到一個(gè)新的領(lǐng)域,比如說媒體這個(gè)領(lǐng)域時(shí)候,又要做很多詞庫和規(guī)則,移植性很差;

 

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

 

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

 

那么具體采用的是一個(gè)什么模型呢?


在實(shí)際工作中采用的是LSTM+CRF的組合。該組合在這方面已經(jīng)得到了非常成功的使用,它把一個(gè)分詞和命名實(shí)體識別問題轉(zhuǎn)化為了一個(gè)序列標(biāo)注問題。

可以看一下左邊這張圖,拿命名實(shí)體來說,序列標(biāo)注前首先建立一個(gè)標(biāo)準(zhǔn),B開頭代表實(shí)體的首字、I代表實(shí)體的非首字:B-PER和I-PER代表的就是人名的首字,和人名的非首字,同樣地點(diǎn)和組織機(jī)構(gòu)也是這么來表示的。

 

 “中國很大”這樣四個(gè)字用模型來給它做標(biāo)注:“中”是什么?中國首先是一個(gè)地點(diǎn)名,那么把“中”就標(biāo)識為地名的一個(gè)首字,B-LOC;“國”就是代表地名的一個(gè)非首字,代表中間的這個(gè)字,I-LOC;“很”和“大”這兩個(gè)字都代表它們不屬于任何一個(gè)實(shí)體的一部分,因此都標(biāo)示為O。

 

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


在整個(gè)深度學(xué)習(xí)領(lǐng)域當(dāng)中,一類問題是分類問題,比如說人臉的識別、目標(biāo)的識別等等,用傳統(tǒng)的前饋神經(jīng)網(wǎng)絡(luò)就能做得很好;還有另外一類問題特別依賴于序列之間的關(guān)系,這種依賴關(guān)系對于整個(gè)任務(wù)的結(jié)果有很大的影響,這時(shí)候就需要用到循環(huán)神經(jīng)網(wǎng)絡(luò)——RNN。

 

RNN在求解的過程中會(huì)有遇到一個(gè)梯度消失的問題。經(jīng)過了多年的研究,最后出來了LSTM模型,它很好的解決了這個(gè)問題。它在應(yīng)用這種基于序列的問題上有很好的表現(xiàn),同時(shí)應(yīng)用場景非常廣泛。

 

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

首先是一對一,對中文的分詞,比如輸入了一個(gè)詞,要給它一個(gè)唯一的標(biāo)注,同時(shí)還包括其他命名實(shí)體、文本生成,這些都是一對一的問題。

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

 

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

 

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

 

LSTM解決的是序列的問題。

看圖中的這樣一個(gè)網(wǎng)絡(luò),對于傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)模型,輸出的Ht,只依賴于輸入的Xt,它跟前一個(gè)單元是沒有什么依賴關(guān)系的。但是在LSTM中每一個(gè)單元t時(shí)刻的輸出,與前一個(gè)時(shí)刻t-1之間的狀態(tài),是有一個(gè)比較強(qiáng)的依賴關(guān)系。

可能大家在學(xué)習(xí)經(jīng)常會(huì)比較費(fèi)解什么叫t時(shí)刻,什么叫t-1時(shí)刻,就拿剛才的這個(gè)例子來說,“中國很大”這四個(gè)字,“中”它就是t=1這個(gè)時(shí)刻,它的輸出就是B-LOC這樣一個(gè)標(biāo)注;“國”就是t=2時(shí)刻,它的前一個(gè)時(shí)刻就是“中”,“國”的輸出是I-LOC;那么“很”就是t= 3時(shí)刻,“大”就是t=4時(shí)刻。


這樣類比的時(shí)間序列關(guān)系,大家碰到時(shí)刻這個(gè)概念的時(shí)候一定要理解,它是跟一句話能夠?qū)?yīng)起來的。這個(gè)時(shí)刻就代表了這個(gè)字在一句話當(dāng)中的位置,做了這樣一個(gè)類比,大家一定要首先理解這一點(diǎn)。

 

在LSTM當(dāng)中,t時(shí)刻是依賴于t-1的,具體是個(gè)什么樣的依賴?

在這個(gè)結(jié)構(gòu)當(dāng)中有個(gè)非常重要的元素: 單元狀態(tài)C。

 Ct-1是t-1時(shí)刻神經(jīng)網(wǎng)絡(luò)單元的輸出,它是LSTM具備長短期記憶能力的關(guān)鍵,它就像一個(gè)鏈一樣,在不斷的傳輸,不斷會(huì)有信息的衰減,也會(huì)有信息的新增加,不斷的從t-1時(shí)刻不斷的往右邊傳遞到最后一個(gè)時(shí)刻。

 

在整個(gè)長期狀態(tài)的傳播當(dāng)中會(huì)有三個(gè)控制開關(guān)去決定狀態(tài)C是怎么傳遞的。

 

從t時(shí)刻傳遞到最后一個(gè)時(shí)刻經(jīng)過了這樣三個(gè)門: 遺忘門、輸入門和輸出門。

 

首先看一下遺忘門ft。

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

第二個(gè)門叫輸入門。

也就是這里的It,It它是由Xt和Ht共同決定的,它也是一個(gè)向量,每個(gè)元素也是在0到1之間。那么它和輸入Xt一起決定了從輸入當(dāng)中要提取什么樣的信息,來傳播給單元狀態(tài)Ct,它決定了從輸入Xt獲取什么樣的信息往下個(gè)時(shí)刻去傳。

 

再看一下輸出門。


輸出門的Ot,取值也是個(gè)向量,取值0到1之間。那么它是決定了t時(shí)刻的輸出和狀態(tài)C之間是個(gè)什么樣的關(guān)系??梢钥吹絫時(shí)刻的狀態(tài)Ct,它是用兩部分組成的,一部分就是Ct-1傳遞過來的,過濾出來的一部分信息,另外一部分信息是從輸入Xt里面直接抽取出來的信息,它是兩部分信息合成的一個(gè)結(jié)果。那么有了Ct之后,再結(jié)合輸出門Ot,就能直接計(jì)算出t時(shí)刻的輸出Ht。

 剛才的解釋就是對輸入門、輸出門、遺忘門的一個(gè)解釋。整個(gè)的網(wǎng)絡(luò)單元看起來比較復(fù)雜,其實(shí)它都是有一個(gè)明確的物理的含義,整個(gè)的核心就是:去解釋每個(gè)神經(jīng)網(wǎng)絡(luò)的單元狀態(tài)Ct是如何傳遞到下一個(gè)時(shí)刻、如何進(jìn)行信息的衰減,以及如何從狀態(tài)t時(shí)刻的輸入去提取新的信息讓Ct得到更新。理解神經(jīng)網(wǎng)絡(luò)當(dāng)中的物理含義是非常重要的。

 

再看一下,LSTM結(jié)合CRF的數(shù)學(xué)原理。好多同學(xué)一看到這個(gè)數(shù)學(xué)公式,可能腦袋就大了,其實(shí)你真正理解它的物理含義以后,它們并沒有那么復(fù)雜。

圖中的下方的輸入X代表了每個(gè)字向量,這個(gè)字向量可以通過大量的語料,通過無監(jiān)督的方式訓(xùn)練出來。Y對應(yīng)是輸入的每個(gè)字,它輸出的標(biāo)注是什么。

 那么有了對應(yīng)的輸入輸出,有了大規(guī)模的訓(xùn)練語料以后,那么如何來求解這個(gè)模型的參數(shù)?

 

可以看的出來,整個(gè)這一層LSTM’s ouput非常的關(guān)鍵:s(x,y),它由兩部分組成:一部分是加Ay,y+1,它代表著Y輸出的標(biāo)注從第I個(gè)狀態(tài)轉(zhuǎn)移到I+1的狀態(tài),所轉(zhuǎn)移得到這樣一個(gè)分?jǐn)?shù)。

 

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

 

當(dāng)LSTM輸出的Pi,yi,再加上了CRF狀態(tài)之間的轉(zhuǎn)移分?jǐn)?shù),進(jìn)行一個(gè)求和,這樣將兩個(gè)模型的特性都比較好的融合在一起,輸出s(x,y)這樣一個(gè)分?jǐn)?shù)之后,進(jìn)行歸一化,就得到P(Y|X)。同時(shí),每個(gè)輸入對應(yīng)著一個(gè)標(biāo)注,通過反向傳播梯度求解,以及參數(shù)更新,最后可以將所有模型參數(shù)都計(jì)算出來。

 

直接采用LSTM就能預(yù)測輸出序列了,為什么后面還要接個(gè)CRF模型? 計(jì)算復(fù)雜度反而提高了,那么CRF到底帶來一個(gè)什么樣的好處?

首先,采用單個(gè)LSTM預(yù)測出來標(biāo)簽是有問題的。因?yàn)槊總€(gè)字在標(biāo)簽當(dāng)中是獨(dú)立的分類,沒有去利用上下文已經(jīng)預(yù)測出來的標(biāo)簽結(jié)果,進(jìn)而導(dǎo)致預(yù)測出來的標(biāo)簽有可能是非法的。

 看一下中間這個(gè)例子:這里面是做了個(gè)分詞,把分詞轉(zhuǎn)換為一個(gè)序列標(biāo)注的問題。B代表一個(gè)詞的開始,E代表一個(gè)詞的結(jié)束,S代表一個(gè)字可以單獨(dú)的作為一個(gè)詞。

 

real output,是實(shí)際輸出的是什么。它的后面,E又接了一個(gè)E,正確的輸出應(yīng)該是B,再接一個(gè)E。

 

這里可以看出來一個(gè)明顯的錯(cuò)誤:一個(gè)結(jié)束符后面再跟著一個(gè)結(jié)束符顯然是不合理的,說明LSTM存在對應(yīng)的問題。解決這個(gè)問題要把CRF接在后面,因?yàn)镃RF的特點(diǎn)是比較好的學(xué)習(xí)到輸出狀態(tài)的轉(zhuǎn)移關(guān)系,比如說:前面的一個(gè)詞的結(jié)束,后面應(yīng)該是接一個(gè)新的詞開始,或者后面接單獨(dú)的一個(gè)詞,所以是不可能出現(xiàn)E的。

 

通過這樣的限定特征就保證這個(gè)上面這種例子錯(cuò)誤不會(huì)再出現(xiàn),LSTM后面接入一個(gè)CRF以后,它能夠取得比單個(gè)LSTM更好的效果。

 

實(shí)際在開發(fā)、做項(xiàng)目的過程當(dāng)中,需要同時(shí)使用一些模型調(diào)優(yōu)的技巧。這些技巧非常重要,是大家在實(shí)際去做深度學(xué)習(xí)的時(shí)候需要掌握的。

Batch_size指的是什么?就是訓(xùn)練的時(shí)候,比如要去計(jì)算梯度的時(shí)候,或者要去更新參數(shù)的時(shí)候,拿多少的訓(xùn)練數(shù)據(jù)去這樣一次更新,Batch_size等于1,就是傳統(tǒng)的SGD更新方法,另外,還有采用全量數(shù)據(jù)進(jìn)行一次更新方法。


這兩種極端都會(huì)有它對應(yīng)的問題,如果Batch_size取的太小,就導(dǎo)致整個(gè)的收斂速度很慢,甚至收斂會(huì)出現(xiàn)問題,而且沒有比較好的去利用機(jī)器的內(nèi)存;如果Batch_size取得非常的大,可能內(nèi)存就爆了,因此需要選取一個(gè)合理的Batch_size數(shù)字,既能夠?qū)?nèi)存利用起來,同時(shí)又能讓它比較穩(wěn)定的去收斂到目標(biāo)值。


實(shí)際情況當(dāng)中,經(jīng)常采用的是Batch_size要盡量取2的冪指數(shù),比如32,64,128都可以,可以提高內(nèi)存中的計(jì)算效率。同時(shí)要根據(jù)實(shí)際的分配內(nèi)存和顯存來估計(jì)Batch_size,保證內(nèi)存不要爆掉。


第二個(gè)技巧是初始化權(quán)重參數(shù),就是整個(gè)神經(jīng)網(wǎng)絡(luò)里面的結(jié)構(gòu)參數(shù)。如果這些參數(shù)全都取0的話,整個(gè)傳遞下來,所有的取值都是一樣的,顯然這樣是不行的。所以經(jīng)常采用的是隨機(jī)初始化的策略,包括高斯分布,均勻分布。Tensorflow這個(gè)框架里面是自帶了一系列初始化的函數(shù),以上是第二點(diǎn)。


第三個(gè)技巧是dropout超參數(shù),這也是很重要的。在神經(jīng)網(wǎng)絡(luò)里經(jīng)常會(huì)面臨這樣一個(gè)問題:過擬合,那么dropout這樣一個(gè)參數(shù)能夠提升整個(gè)網(wǎng)絡(luò)的泛化能力,在上面提到的項(xiàng)目當(dāng)中,采用字向量輸入到雙向LSTM之前去加入dropout,進(jìn)一步提升了效果。這里取值就是0.5,那么在實(shí)際表現(xiàn)當(dāng)中,準(zhǔn)確率會(huì)有幾個(gè)百分點(diǎn)的顯著提升。


其他的技巧還有包括比如說輸入embedding Size到底應(yīng)該怎么去選,中間的隱藏層的維度應(yīng)該怎么去選,還包括learning rate要怎么去選,到底采用什么樣訓(xùn)練的方式,是傳統(tǒng)SGD,還是說加動(dòng)量法等等,都是要選擇的,這些也是大家在學(xué)習(xí)深度學(xué)習(xí)時(shí)候需要的基本功。


那么剛剛講述的很多的技巧以及原理在實(shí)際當(dāng)中取得了什么樣的效果?

v1.3、v1.4是我們文本分析產(chǎn)品的兩個(gè)階段的版本。

1.3版本采用的是傳統(tǒng)的方法,1.4版本采用了深度學(xué)習(xí)的方法??梢钥吹贸鰜恚?1.4會(huì)有效果上的一個(gè)顯著提升,無論是準(zhǔn)確度,還是F1值都有一個(gè)提升。同時(shí)與業(yè)界的NLP方面做得很好的企業(yè),包括Boson、文智等等都進(jìn)行了對比。這里選了Boson作為代表。因?yàn)樽隽藢Ρ戎?,發(fā)現(xiàn)它是比較具有代表性的。


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

 

 接下來跟大家分析情感分析當(dāng)中如何使用深度學(xué)習(xí)。

具體來說首先第一步,肯定要將文本中的詞向量化。這里經(jīng)常用one hot representation來表示,比如這個(gè)詞表里面有一萬個(gè)詞,那么這個(gè)向量長度就是一萬,對于每個(gè)詞都會(huì)有個(gè)固定的位置,這個(gè)位置上取1,其他的位置上取0。將其中的詞向量化之后,那么接下來再結(jié)合這種傳統(tǒng)的邏輯回歸,或者是SVM,就能去結(jié)合標(biāo)注數(shù)據(jù)進(jìn)行模型的訓(xùn)練,進(jìn)行情感分析的預(yù)測,這是用傳統(tǒng)方法來做。

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


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


那么深度學(xué)習(xí)是怎樣解決這些問題的?

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

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

第二個(gè)就是維度災(zāi)難的問題,比如庫的大小為幾萬的量級,那么特征維度就會(huì)特別長,對于語言模型就有這個(gè)問題,就會(huì)存在一個(gè)維度災(zāi)難的問題。


第三個(gè)問題,使用one hot representation的表示,應(yīng)用到深度學(xué)習(xí)當(dāng)中,訓(xùn)練的復(fù)雜度非常高,整體效果會(huì)非常差。


基于這三點(diǎn)方面的原因,通常將one hot representation改為distributed representation,分布式的向量來進(jìn)行表示,每個(gè)詞都用一個(gè)向量來表示,這樣就可用cosin和歐式距離表示任意兩個(gè)詞之間的語義長度和語義距離。一般來說用深度學(xué)習(xí)都是用embedding向量,而不是用one hot representation。

 

那么這些值向量是如何計(jì)算出來的?

家都應(yīng)該知道Google推出gensim,在這方面做了非常出色的工作。它采用了兩種比較經(jīng)典的模型:連續(xù)詞袋模型和Gram的跳躍模型。

 這兩種網(wǎng)絡(luò)結(jié)構(gòu)能夠?qū)⒔Y(jié)合大規(guī)模的語料,訓(xùn)練出所有詞的語義向量,對應(yīng)的每個(gè)詞都能將它最相似的向量計(jì)算出來。比如上圖中的“好看”、“很漂亮”、“難看”、“喜歡”,這些都是跟“漂亮”在語義上特別近似的。

 

語義向量計(jì)算出來之后,在情感分析當(dāng)中具體采用的是CNN的模型。大家可能會(huì)問,為什么會(huì)采用CNN模型?當(dāng)采用全連接的方式時(shí)整個(gè)網(wǎng)絡(luò)中的參數(shù)是非常多的,幾十萬、幾百萬,網(wǎng)絡(luò)參數(shù)一旦數(shù)量過多,導(dǎo)致網(wǎng)絡(luò)模型的求解會(huì)非常的慢,甚至?xí)?xùn)練一個(gè)月,這么長的訓(xùn)練時(shí)間是不能忍受的。

另一個(gè)問題就是參數(shù)越多,模型越復(fù)雜,就更容易發(fā)生問題。以至于整個(gè)模型預(yù)測的性能非常差。CNN的結(jié)構(gòu)包含以下幾層:輸入層、卷積層、池化層、全連接層、輸出層,這里有幾個(gè)關(guān)鍵的概念:

 一、卷積層,大家應(yīng)該在信號處理里面之間學(xué)過,它能夠去計(jì)算相應(yīng)元素之間的加權(quán)求和,能夠起到一個(gè)作用就是全體參數(shù)共享。什么叫參數(shù)共享?就是很多相同位置上的網(wǎng)絡(luò)中的參數(shù)取同樣的值,這樣就能大大降低神經(jīng)網(wǎng)絡(luò)中參數(shù)的數(shù)量。實(shí)現(xiàn)參數(shù)的共享,用卷積層。

 

二、池化層,能夠?qū)崿F(xiàn)空間的亞采樣,之前一個(gè)小格子,可能包括四個(gè)元素,直接對這四個(gè)元素求個(gè)平均值,一方面能夠避免噪聲帶來的影響,另外一方面也能降低模型需要用到的參數(shù)數(shù)量。


通過這樣兩種方式就能夠?qū)⒕W(wǎng)絡(luò)當(dāng)中的參數(shù)數(shù)量大幅度的降低,而且CNN也被證明在工業(yè)界能夠取得非常不錯(cuò)的效果。最早CNN被應(yīng)用在圖像當(dāng)中,現(xiàn)在將它應(yīng)用在文本中的情感分析。

 

CNN模型當(dāng)中,輸入采用了一個(gè)雙通道向量,這也是一個(gè)比較重要的技術(shù)。以前經(jīng)常用的傳統(tǒng)方法是單通道的方式,CNN的輸入詞向量有這么幾種:


  • CNN-rand, 所謂的word vector隨機(jī)初始化,同時(shí)在訓(xùn)練過程中進(jìn)行優(yōu)化。

  • CNN-static,直接使用無監(jiān)督學(xué)習(xí)的結(jié)果,通過gensim訓(xùn)練,通過大規(guī)模的語料訓(xùn)練,同時(shí)用了大量語句當(dāng)中的信息,比CNN-rand效果好很多。

  • CNN-non-static,它直接使用無監(jiān)督學(xué)習(xí)pre-training的結(jié)果,但是在訓(xùn)練的過程當(dāng)中,會(huì)進(jìn)行一個(gè)細(xì)致的微調(diào),這樣效果會(huì)更好一些。這樣一個(gè)微調(diào)會(huì)保證離原始的word vector不會(huì)太遠(yuǎn),同時(shí)它能夠針對實(shí)際的對業(yè)務(wù)問題做一個(gè)更好的優(yōu)化。

  • CNN-2Channel,就是這個(gè)項(xiàng)目當(dāng)中采用的方式,它是將CNN-static和CNN-non-static作了一個(gè)混合版,這樣保證它結(jié)合兩者之間的優(yōu)點(diǎn)。

 

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

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

對于這種non-static channel這種動(dòng)態(tài)的向量,它能夠在訓(xùn)練過程,結(jié)合情感分析的標(biāo)注數(shù)據(jù)進(jìn)行微調(diào),它能夠區(qū)別正面或者負(fù)面的情感。還是對這個(gè)詞,bad,經(jīng)過non-static channel動(dòng)態(tài)向量訓(xùn)練,最后首先匹配的相似詞是terrible,horrible等等,這些都是負(fù)面相關(guān)的詞。通過這種動(dòng)態(tài)的調(diào)整,模型能夠準(zhǔn)確學(xué)習(xí)到詞語所表達(dá)的情感。


為了幫助大家去更好的運(yùn)用CNN,下面列出了一些在實(shí)際模型開發(fā)的過程中會(huì)存在一些問題:


  • 過擬合比較嚴(yán)重。解決方案:去掉所有停用詞性,為偶爾有些動(dòng)名詞很重要設(shè)置白名單,將F1值提升了兩個(gè)點(diǎn)。

  • 無法對詞的重要程度進(jìn)行模擬。比如說一句話:你很好,但是你沒有耐性。這個(gè)“但是”后面表達(dá)意思比前面的表達(dá)意思要更加重要。解決方案:將轉(zhuǎn)折詞后面的詞語乘以1.5的加權(quán),這是一個(gè)經(jīng)驗(yàn)的取值,然后在程度副詞上,要加一個(gè)形容詞乘以系數(shù),比如:你非常的美,或者:你非常的勤奮,“非?!边@樣一個(gè)程度副詞它要進(jìn)行一定的加權(quán),它的情感會(huì)更加強(qiáng)烈。對于否定詞,譬如:不好或者不努力等等,在訓(xùn)練過程當(dāng)中你要乘負(fù)的系數(shù)。通過這種方式,去模擬這些詞表達(dá)一種語義和情感的程度,F(xiàn)1值提升了1%。

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

 

最后一塊是模型本身,通常會(huì)使用dropout的一些技巧,F(xiàn)1值可以提升兩個(gè)百分點(diǎn)。

在COAE和NLPCC這兩個(gè)情感分析測試集上進(jìn)行了測試,傳統(tǒng)模型就采用SVM,同時(shí)也采用了CNN和LSTM。看得出來,在COAE數(shù)據(jù)集上提升了四到五個(gè)百分點(diǎn),在NLPCC上大約是提升了六個(gè)百分點(diǎn),效果比傳統(tǒng)的模型是有顯著的提升的。

 剛剛提到CNN模型,那么采用一些其他的模型,是個(gè)什么樣的效果?

我們當(dāng)時(shí)在內(nèi)部采用了不少其他的模型,比如character-CNN、LSTM,還有遞歸神經(jīng)網(wǎng)絡(luò),我們在測試集上發(fā)現(xiàn)跟目前采用的2channel-CNN相比沒有明顯的差別,另外還有其他的一些網(wǎng)絡(luò)結(jié)構(gòu),比如GRU等等,本質(zhì)上都是為不同的網(wǎng)絡(luò)結(jié)構(gòu)提取帶有情感提升的句子向量,利用這些向量進(jìn)行情感分類,并沒有本質(zhì)的差別。因此,我們后續(xù)更多優(yōu)化的精力是獲取更多的標(biāo)注數(shù)據(jù),以及在我們的情感應(yīng)用產(chǎn)品上,結(jié)合用戶的反饋數(shù)據(jù)進(jìn)一步的發(fā)力。

 前面我們講述了深度學(xué)習(xí)在情感分析當(dāng)中的一些應(yīng)用,現(xiàn)在我們已經(jīng)在NLP陸續(xù)更多地使用深度學(xué)習(xí)的技術(shù),包括文本分類、句法分析、文本生成、知識圖譜、自動(dòng)問答等等,我們都去采用深度學(xué)習(xí)的技術(shù)。

前面介紹都是偏基本的任務(wù)方面的如何去采用深度學(xué)習(xí)的內(nèi)容,我們再來介紹一下具體使用的幾個(gè)案例。

 第一個(gè)案例是AI李白。

我不知道大家有多少同學(xué)接觸了這個(gè)應(yīng)用,這是百分點(diǎn)公司和人民日報(bào)推出的一個(gè)AI春節(jié)送祝福的應(yīng)用,相信不少同學(xué)都已經(jīng)用過。它結(jié)合了唐詩宋詞的韻律和寫詞的技巧,自動(dòng)寫出帶有春節(jié)味道的詩詞,它就是個(gè)寫詞的機(jī)器人。

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

 

第二個(gè)案例是團(tuán)中央自動(dòng)問答機(jī)器人。

現(xiàn)在團(tuán)中央有七千萬的團(tuán)員,他們有個(gè)青年之聲的論壇,每天上面有好幾百萬的問題,其中有很多的問題其實(shí)是得不到及時(shí)回答的。做這樣一個(gè)機(jī)器人問答是希望能夠?qū)η嗄曛曣P(guān)注的就業(yè)的問題、情感的問題等等進(jìn)行自動(dòng)問答,幫助青少年能夠更好的成長。

 自動(dòng)問答里面有幾個(gè)關(guān)鍵的技術(shù)問題,比如如何實(shí)現(xiàn)問題的匹配,如何自動(dòng)去計(jì)算出問題和答案之間的相似程度,目前都可以采用深度學(xué)習(xí)去解決這方面的問題,現(xiàn)在內(nèi)測版已經(jīng)上線了,接下來會(huì)對外推出這款自動(dòng)問答機(jī)器人。

 

第三個(gè)案例是某媒體客戶的智能采編系統(tǒng)。

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

實(shí)際上,深度學(xué)習(xí)、自然語言處理現(xiàn)在在業(yè)界有越來越多的實(shí)現(xiàn)場景,這也是非常有前途的方向,希望大家一起參與到這個(gè)方向,將 NLP 這塊的人工智能技術(shù)在越來越多的行業(yè)落地,謝謝大家!

作者答疑


Q1:深度學(xué)習(xí)和機(jī)器學(xué)習(xí)有什么區(qū)別?


A:深度學(xué)習(xí)也是機(jī)器學(xué)習(xí)中的一種技術(shù)而已,這個(gè)問題應(yīng)該更具體,應(yīng)該說這種深度學(xué)習(xí)模型和傳統(tǒng)的模型有什么樣的差別。對于這個(gè)問題而言,我剛剛第一頁里面就講到,傳統(tǒng)模型很重要的一塊工作是設(shè)計(jì)這些模型的特征,而且是靠人去設(shè)計(jì)的,對業(yè)務(wù)有準(zhǔn)確的理解,才能具有泛化能力特征,這也是一門手藝活,這塊的工作量是特別大的。為了解決人工去設(shè)計(jì)特征的工作,我們采用深度學(xué)習(xí)的技術(shù),就是從數(shù)據(jù)當(dāng)中自動(dòng)發(fā)現(xiàn)對應(yīng)的特征,直接得到一個(gè)結(jié)果,它是從端到端的一套技術(shù),而且它的效果相比傳統(tǒng)機(jī)器學(xué)習(xí)能夠有顯著的提升。

 

Q2:訓(xùn)練的時(shí)候都是單機(jī)嗎?有用到集群嗎?


基于tensorflow的時(shí)候,用集群訓(xùn)練,可以用好幾個(gè)GPU來訓(xùn)練;基于pytroch的時(shí)候是單機(jī)的。

 

Q3:batch_size的選取,除了內(nèi)存因素,對于訓(xùn)練的結(jié)果,比如準(zhǔn)確度,有影響嗎?


batch_size越小,優(yōu)化路線在走的時(shí)候,隨機(jī)性特別強(qiáng),可能最后優(yōu)化到最終目標(biāo)中間可能會(huì)有些問題,會(huì)影響準(zhǔn)確度;batch_size過大的時(shí)候,內(nèi)存可能撐不住,內(nèi)存會(huì)直接爆了, batch_size到了一定的程度,再往上面走的時(shí)候,它可能對準(zhǔn)確度影響沒有那么大,比如batch_size取256,或者取512,最后都能達(dá)到一個(gè)近似的最優(yōu)結(jié)果,影響不會(huì)特別大。

 

Q4:機(jī)器人自動(dòng)問答是怎么做的?


自動(dòng)問答首先需要建立一個(gè)非常優(yōu)質(zhì)的問題答案資源庫,有這個(gè)庫之后,要在庫里找到答案,還涉及幾個(gè)問題:

 

第一個(gè)是問題與問題之間的等價(jià)計(jì)算,你問一個(gè)問題的時(shí)候,你能不能從這個(gè)庫里面找到等價(jià)的問題,這是很關(guān)鍵的,涉及到深度學(xué)習(xí);另外一點(diǎn),比如說我問了一個(gè)問題,但是這個(gè)庫里面有一堆的答案,如何從這個(gè)答案里面當(dāng)中給出最好的,這里涉及到問題和答案匹配問題。用傳統(tǒng)的模型也能做,如果采用深度學(xué)習(xí)也能做,但是對于數(shù)據(jù)的數(shù)量和質(zhì)量會(huì)要求更高。

 

第二,閱讀理解的問題,什么叫閱讀理解?答案是存在一個(gè)文檔中,而不是存在一個(gè)QA庫當(dāng)中的,在文檔中要去挑選出最合適的片段,能夠去回答這樣一個(gè)問題,這時(shí)候要找到這個(gè)答案的位置,就需要有一個(gè)標(biāo)準(zhǔn)的訓(xùn)練數(shù)據(jù)。有這樣的標(biāo)注數(shù)據(jù)之后,再去訓(xùn)練這樣一個(gè)深度學(xué)習(xí)模型,來了一個(gè)新的問題以后,才能去預(yù)測出它在文章中的片段位置。

 

Q5:老師,謝謝您的分享,對于學(xué)生來說,沒有AI工作經(jīng)驗(yàn),怎么找該方面的工作呢?


我看有一些同學(xué)在問,沒有AI方面一些工作經(jīng)驗(yàn),對于學(xué)生來說,怎么找這方面的工作?

 

相信很多人有這方面的困境,這個(gè)時(shí)候我給大家分享的是說,第一個(gè),現(xiàn)在有很多的機(jī)會(huì),互聯(lián)網(wǎng)上的資源比我當(dāng)時(shí)讀書的時(shí)候要豐富的多。我可以分享一些自己的經(jīng)驗(yàn),當(dāng)時(shí)我在學(xué)校,可能接觸沒那么多,但是可以加入學(xué)校的協(xié)會(huì),比如學(xué)校的開源軟件協(xié)會(huì),當(dāng)時(shí)把基礎(chǔ)技術(shù)都學(xué)會(huì)了。

 

至于AI,第一個(gè),大家可以去上這種培訓(xùn)質(zhì)量比較高的培訓(xùn)課程,國內(nèi)AI方面的培訓(xùn)課程很多,因?yàn)檫@些培訓(xùn)課程不僅僅是這方面知識的講解,還會(huì)幫助大家進(jìn)行實(shí)踐;

 

第二個(gè)方面,我是建議大家有機(jī)會(huì)可以加入開源的項(xiàng)目,現(xiàn)在AI方面,基于機(jī)器學(xué)習(xí),或者相關(guān)的開源項(xiàng)目有很多,針對這些項(xiàng)目,加入一個(gè)進(jìn)去,貢獻(xiàn)自己部分的代碼。

 

第三,我建議大家可以把基礎(chǔ)打好之后,從找一份實(shí)習(xí)開始,你如果還是在校生,因?yàn)楣緦?shí)習(xí)生的要求沒有那么高,它更多要求你的編程功底扎實(shí),對AI一定的了解,可能要求沒有那么高,你再通過實(shí)習(xí)當(dāng)中的歷練去積攢這方面的經(jīng)驗(yàn),這也是一個(gè)比較好的方式。這是給大家的一些建議。

 

Q6:要不要學(xué)傳統(tǒng)機(jī)器學(xué)習(xí)模型算法?


我覺得是要學(xué)的。因?yàn)檫@就像基本功,傳統(tǒng)機(jī)器學(xué)習(xí)算法里面的很多的模型基本理論、一些泛化理論、一些特征設(shè)計(jì)的理論、一些模型它為什么效果好,為什么效果不好?它整個(gè)模型的一些內(nèi)在的思想是什么,這些基本功都是要學(xué)會(huì)的。不然的話,你真的直接上深度學(xué)習(xí),你就也只會(huì)用一些工具。一旦碰到一些問題的時(shí)候,就像如何調(diào)參,碰到效果不好的時(shí)候,我該怎么辦?你如果沒有這些理論基礎(chǔ),你就只能去瞎試,試出來是運(yùn)氣好,試不出來也不明白為什么,我建議大家還是要學(xué)習(xí)機(jī)器傳統(tǒng)模型理論,這個(gè)東西都是要掌握的。這些理論的好處是在你實(shí)際項(xiàng)目當(dāng)中遇到瓶頸、遇到問題的時(shí)候,這些理論會(huì)指導(dǎo)你,你該去朝什么樣的方向去努力,你該怎么去定位問題,這些基礎(chǔ)理論還是非常重要的,我建議大家要學(xué)一學(xué),直接上來學(xué)深度學(xué)習(xí),基本功是不扎實(shí)的。


    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多