干貨速覽 春節(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算法體系分為三層:
這些方法有什么問題? 首先它們有大量的特征工作要做,就是剛說的傳統(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解決的是序列的問題。
可能大家在學(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ù)雜。
那么有了對應(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è)例子:這里面是做了個(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í)候需要掌握的。
這兩種極端都會(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í)。
那么用這種方法存在什么樣的問題? 第一個(gè)問題就是詞序的信息,在每個(gè)詞做特征的時(shí)候都是比較獨(dú)立的,因此詞序的信息被忽略了,整個(gè)效果明顯有個(gè)上限;第二個(gè)問題是,只考慮了字面上的特征,沒有考慮詞和詞之間語義上的一個(gè)特征;第三個(gè)是訓(xùn)練應(yīng)該覆蓋全部序列,就是說在做特征的時(shí)候,可能有些值就直接被篩掉了,這樣很明顯會(huì)影響最終的效果。 那么深度學(xué)習(xí)是怎樣解決這些問題的?
第二個(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ì)算出來的?
這兩種網(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í)間是不能忍受的。
一、卷積層,大家應(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的輸入詞向量有這么幾種:
那么這兩種詞向量在語義和情感上有什么樣的差別?
對于這種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ì)存在一些問題:
最后一塊是模型本身,通常會(huì)使用dropout的一些技巧,F(xiàn)1值可以提升兩個(gè)百分點(diǎn)。
剛剛提到CNN模型,那么采用一些其他的模型,是個(gè)什么樣的效果?
前面我們講述了深度學(xué)習(xí)在情感分析當(dāng)中的一些應(yīng)用,現(xiàn)在我們已經(jīng)在NLP陸續(xù)更多地使用深度學(xué)習(xí)的技術(shù),包括文本分類、句法分析、文本生成、知識圖譜、自動(dòng)問答等等,我們都去采用深度學(xué)習(xí)的技術(shù)。
第一個(gè)案例是AI李白。
大家知道對于文本生成來說肯定用到語言模型的,提到語言模型很多人就會(huì)說,用n-gram這種語言模型,但是它的問題在于無法捕獲距離比較長的詞語之間的字詞依賴關(guān)系,因此這里采用LSTM的語言模型,大概使用了70多萬詩詞的訓(xùn)練語料,最終也取得非常不錯(cuò)的效果,整個(gè)AI李白上線六天的時(shí)間,獲得了超過一千萬的訪問量,如果大家有興趣的話,可以去體驗(yàn)一下。
第二個(gè)案例是團(tuán)中央自動(dòng)問答機(jī)器人。
自動(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)。
實(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í)的。 |
|