2. 文本語義分析
前面講到一些文本基本處理方法鳖昌。一個(gè)文本串胖眷,對(duì)其進(jìn)行分詞和重要性打分后(當(dāng)然還有更多的文本處理任務(wù))恕酸,就可以開始更高層的語義分析任務(wù)榕栏。
2.1 Topic Model
首先介紹主ti模型畔勤。說到主ti模型,第一時(shí)間會(huì)想到pLSA臼膏,NMF硼被,LDA。關(guān)于這幾個(gè)目前業(yè)界最常用的主ti模型渗磅,已經(jīng)有相當(dāng)多的介紹了嚷硫,譬如文獻(xiàn)[60检访,64]。在這里仔掸,主要想聊一下主ti模型的應(yīng)用以及最新進(jìn)展(考慮到LDA是pLSA的generalization脆贵,所以下面只介紹LDA)。
LDA訓(xùn)練算法簡單介紹
LDA的推導(dǎo)這里略過不講起暮,具體請(qǐng)參考文獻(xiàn)[64]卖氨。下面我們主要看一下怎么訓(xùn)練LDA。
在Blei的原始論文中负懦,使用variational inference和EM算法進(jìn)行LDA推斷(與pLSA的推斷過程類似筒捺,E-step采用variational inference),但EM算法可能推導(dǎo)出局部最優(yōu)解纸厉,且相對(duì)復(fù)雜系吭。目前常用的方法是基于gibbs sampling來做[57]。
Step1: 隨機(jī)初始化每個(gè)詞的topic颗品,并統(tǒng)計(jì)兩個(gè)頻率計(jì)數(shù)矩陣:Doc-Topic 計(jì)數(shù)矩陣N(t,d)肯尺,描述每個(gè)文檔中的主ti頻率分布;Word-Topic 計(jì)數(shù)矩陣N(w,t)躯枢,表示每個(gè)主ti下詞的頻率分布则吟。
Step2: 遍歷訓(xùn)練語料,按照概率公式(下圖所示)重新采樣每個(gè)詞所對(duì)應(yīng)的topic, 更新N(t,d)和N(w,t)的計(jì)數(shù)锄蹂。
Step3: 重復(fù) step2氓仲,直到模型收斂。
對(duì)文檔d中詞w的主ti z進(jìn)行重新采樣的公式有非常明確的物理意義败匹,表示為P(w|z)P(z|d)寨昙,直觀的表示為一個(gè)“路徑選擇”的過程。
圖10. gibbs sampling過程圖
以上描述過程具體請(qǐng)參考文獻(xiàn)[65]掀亩。
對(duì)于LDA模型的更多理論介紹,譬如如何實(shí)現(xiàn)正確性驗(yàn)證欢顷,請(qǐng)參考文獻(xiàn)[68]槽棍,而關(guān)于LDA模型改進(jìn),請(qǐng)參考Newman團(tuán)隊(duì)的最新文章《Care and Feeding of Topic Models》[12]抬驴。
主ti模型的應(yīng)用點(diǎn)
在廣點(diǎn)通內(nèi)部炼七,主ti模型已經(jīng)在很多方面都得到成功應(yīng)用[65],譬如文本分類特征布持,相關(guān)性計(jì)算豌拙,ctr預(yù)估,精確廣告定向题暖,矩陣分解等按傅。具體來說捉超,基于主ti模型,可以計(jì)算出文本唯绍,用戶的topic分布拼岳,將其當(dāng)作pctr,relevance的特征况芒,還可以將其當(dāng)作一種矩陣分解的方法惜纸,用于降維,推薦等绝骚。不過在我們以往的成功運(yùn)用中耐版,topic模型比較適合用做某些機(jī)器學(xué)習(xí)任務(wù)的特征,而不適合作為一種獨(dú)立的方法去解決某種特定的問ti压汪,例如觸發(fā)粪牲,分類。Blei是這樣評(píng)價(jià)lda的:it can easily be used as a module in more complicated models for more complicated goals蛾魄。
為什么topic model不適合作為一種獨(dú)立的方法去解決某種特定的問ti(例如分類虑瀑,觸發(fā)等)。
個(gè)人總結(jié)滴须,主要原因是lda模型可控性可解釋性相對(duì)比較差:對(duì)于每個(gè)topic舌狗,不能用很明確的語義歸納出這個(gè)topic在講什么;重新訓(xùn)練一遍lda模型扔水,每個(gè)topic id所對(duì)應(yīng)的語義可能發(fā)生了變化痛侍;有些topic的準(zhǔn)確性比較好,有些比較差魔市,而對(duì)于比較差的topic主届,沒有特別好的針對(duì)性的方法去優(yōu)化它;
另外一個(gè)就是topic之間的重復(fù)待德,特別是在topic數(shù)目比較多的情況君丁,重復(fù)幾乎是不可避免的,當(dāng)時(shí)益總(yiwang)在開發(fā)peacock的時(shí)候将宪,deduplicate topic就是一個(gè)很重要的任務(wù)绘闷。如果多個(gè)topic描述的意思一致時(shí),用topic id來做檢索觸發(fā)较坛,效果大半是不好的印蔗,后來我們也嘗試用topic word來做,但依舊不夠理想丑勤。
主ti模型最新進(jìn)展
首先主ti模型自PLSA, LDA后华嘹,又提出了很多變體,譬如HDP法竞。LDA的topic number是預(yù)先設(shè)定的耙厚,而HDP的topic number是不固定强挫,而是從訓(xùn)練數(shù)據(jù)中學(xué)習(xí)得到的,這在很多場(chǎng)景是有用的颜曾,具體參考hdp vs lda纠拔。想了解更多LDA模型的升級(jí),請(qǐng)參考文獻(xiàn)[73,74]泛豪。
深度學(xué)習(xí)方面稠诲,Geoff Hinton及其學(xué)生用Deep Boltzmann Machine研究出了類似LDA的隱變量文本模型[82],文章稱其抽取的特征在文本檢索與文本分類上的結(jié)果比LDA好诡曙。heavenfireray在其微博評(píng)論道:lda結(jié)構(gòu)是word-hidden topic臀叙。類lda結(jié)構(gòu)假設(shè)在topic下產(chǎn)生每個(gè)word是條件獨(dú)立而且參數(shù)相同。這種假設(shè)導(dǎo)致參數(shù)更匹配長文而非短文价卤。該文章提出word-hidden topic-hidden word劝萤,其實(shí)是(word,hidden word)-hidden topic,增加的hidden word平衡了參數(shù)對(duì)短文的適配慎璧,在分類文章數(shù)量的度量上更好很自然床嫌。
其次,隨著目前互聯(lián)網(wǎng)的數(shù)據(jù)規(guī)模的逐漸增加胸私,大規(guī)模并行PLSA厌处,LDA訓(xùn)練將是主旋律。大規(guī)模主ti模型訓(xùn)練岁疼,除了從系統(tǒng)架構(gòu)上進(jìn)行優(yōu)化外阔涉,更關(guān)鍵的,還需要在算法本身上做升級(jí)捷绒。variational方法不太適合并行化瑰排,且速度相對(duì)也比較慢,這里我們著重看sampling-base inference暖侨。
collapsed Gibbs sampler[57]:O(K)復(fù)雜度椭住,K表示topic的總個(gè)數(shù)。
SparseLDA[66]:算法復(fù)雜度為O(Kd + Kw)字逗,Kd表示文檔d所包含的topic個(gè)數(shù)函荣,Kw表示詞w所屬的topic個(gè)數(shù),考慮到一個(gè)文檔所包含的topic和一個(gè)詞所屬的topic個(gè)數(shù)是有限的扳肛,肯定遠(yuǎn)小于K,所以相比于collapsed Gibbs乘碑,復(fù)雜度已有較大的下降挖息。
AliasLDA[56]:利用alias table和Metropolis-Hastings,將詞這個(gè)維度的采樣復(fù)雜度降至O(1)兽肤。所以算法總復(fù)雜度為O(Kd)套腹。
Metropolis-Hastings sampler[13]:復(fù)雜度降至O(1)绪抛。這里不做分析了,具體請(qǐng)參考文獻(xiàn)[13]
主ti模型并行化
在文獻(xiàn)[67]中电禀,Newman團(tuán)隊(duì)提出了LDA算法的并行化版本Approximate distributed-LDA幢码,如下圖所示:
圖11. AD-LDA算法
在原始gibbs sampling算法里,N(w,t)這個(gè)矩陣的更新是串行的尖飞,但是研究發(fā)現(xiàn)症副,考慮到N(w,t)矩陣在迭代過程中,相對(duì)變化較小政基,多個(gè)worker獨(dú)立更新N(w,t)贞铣,在一輪迭代結(jié)束后再根據(jù)多個(gè)worker的本地更新合并到全局更新N(w,t),算法依舊可以收斂[67]沮明。
那么辕坝,主ti模型的并行化(不僅僅是主ti模型,其實(shí)是絕大部分機(jī)器學(xué)習(xí)算法)荐健,主要可以從兩個(gè)角度來說明:數(shù)據(jù)并行和模型并行酱畅。
數(shù)據(jù)并行。這個(gè)角度相對(duì)比較直觀江场,譬如對(duì)于LDA模型纺酸,可以將訓(xùn)練數(shù)據(jù)按照worker數(shù)目切分為M片(M為worker數(shù)),每個(gè)worker保存一份全局的N(w,t)矩陣扛稽,在一輪迭代里吁峻,各個(gè)worker獨(dú)立計(jì)算,迭代結(jié)束后在张,合并各個(gè)worker的本地更新用含。這個(gè)思路可以借用目前通用的并行計(jì)算框架,譬如Spark帮匾,Hadoop啄骇,Graphlab等來實(shí)現(xiàn)。
模型并行瘟斜「准校考慮到矩陣N(w,t)在大規(guī)模主ti模型中相當(dāng)巨大,單機(jī)內(nèi)存不可能存下螺句。所以直觀的想法虽惭,可以將N(w,t)也切分成多個(gè)分片。N(w,t)可以考慮使用全局的parameter server來存儲(chǔ)蛇尚,也可以考慮存儲(chǔ)在不同worker上芽唇,利用MPI AllReduce來通信。
數(shù)據(jù)與模型并行取劫,可以形象的描述為一個(gè)棋盤匆笤。棋盤的行按照數(shù)據(jù)劃分研侣,棋盤的列按照模型劃分。LDA的并行化炮捧,就是通過這樣的切分庶诡,將原本巨大的,不可能在單機(jī)存儲(chǔ)的矩陣切分到不同的機(jī)器咆课,使每臺(tái)機(jī)器都能夠?qū)?shù)存儲(chǔ)在內(nèi)存末誓。再接著,各個(gè)worker相對(duì)獨(dú)立計(jì)算傀蚌,計(jì)算的過程中不時(shí)按照某些策略同步模型數(shù)據(jù)基显。
最近幾nian里,關(guān)于LDA并行化已有相當(dāng)多的開源實(shí)現(xiàn)善炫,譬如:
PLDA撩幽,PLDA+
最近的并行LDA實(shí)現(xiàn)Peacock[70,65]和LigthLda[13]沒有開源,但我們可以從其論文一窺究竟箩艺,總體來說窜醉,并行化的大體思路是一致的。譬如LightLDA[13]艺谆,下圖是實(shí)現(xiàn)架構(gòu)框圖榨惰,它將訓(xùn)練數(shù)據(jù)切分成多個(gè)Block,模型通過parameter server來同步静汤,每個(gè)data block琅催,類似于sliding windows,在計(jì)算完V1的采樣后虫给,才會(huì)去計(jì)算V2的采樣(下圖中V1,V2,V3表示word空間的劃分藤抡,即模型的劃分)。
圖12. LightLda并行結(jié)構(gòu)圖
2.2 詞向量抹估,句向量
詞向量是什么
在文本分析的vector space model中缠黍,是用向量來描述一個(gè)詞的,譬如最常見的One-hot representation药蜻。One-hot representation方法的一個(gè)明顯的缺點(diǎn)是瓷式,詞與詞之間沒有建立關(guān)聯(lián)。在深度學(xué)習(xí)中语泽,一般用Distributed Representation來描述一個(gè)詞贸典,常被稱為“Word Representation”或“Word Embedding”,也就是我們俗稱的“詞向量”踱卵。
詞向量起源于hinton在1986year的論文[11]瓤漏,后來在Bengio的ffnnlm論文[3]中,被發(fā)揚(yáng)光大鸳慈,但它真正被我們所熟知推汽,應(yīng)該是word2vec[14]的開源灭袁。在ffnnlm中,詞向量是訓(xùn)練語言模型的一個(gè)副產(chǎn)品饥漫,不過在word2vec里,是專門來訓(xùn)練詞向量罗标,所以word2vec相比于ffnnlm的區(qū)別主要體現(xiàn)在:
模型更加簡單庸队,去掉了ffnnlm中的隱藏層,并去掉了輸入層跳過隱藏層直接到輸出層的連接闯割。
訓(xùn)練語言模型是利用第m個(gè)詞的前n個(gè)詞預(yù)測(cè)第m個(gè)詞彻消,而訓(xùn)練詞向量是用其前后各n個(gè)詞來預(yù)測(cè)第m個(gè)詞,這樣做真正利用了上下文來預(yù)測(cè)宙拉,如下圖所示宾尚。
圖13. word2vec的訓(xùn)練算法
上圖是word2vec的兩種訓(xùn)練算法:CBOW(continuous bag-of-words)和Skip-gram。在cbow方法里谢澈,訓(xùn)練目標(biāo)是給定一個(gè)word的context煌贴,預(yù)測(cè)word的概率;在skip-gram方法里锥忿,訓(xùn)練目標(biāo)則是給定一個(gè)word牛郑,預(yù)測(cè)word的context的概率。
關(guān)于word2vec敬鬓,在算法上還有較多可以學(xué)習(xí)的地方淹朋,例如利用huffman編碼做層次softmax,negative sampling钉答,工程上也有很多trick础芍,具體請(qǐng)參考文章[16][17]。
詞向量的應(yīng)用
詞向量的應(yīng)用點(diǎn):
可以挖掘詞之間的關(guān)系希痴,譬如同義詞者甲。
可以將詞向量作為特征應(yīng)用到其他機(jī)器學(xué)習(xí)任務(wù)中,例如作為文本分類的feature砌创,Ronan collobert在Senna[37]中將詞向量用于POS, CHK, NER等任務(wù)虏缸。
用于機(jī)器翻譯[28]。分別訓(xùn)練兩種語言的詞向量嫩实,再通過詞向量空間中的矩陣變換刽辙,將一種語言轉(zhuǎn)變成另一種語言。
word analogy甲献,即已知a之于b猶如c之于d宰缤,現(xiàn)在給出 a、b、c慨灭,C(a)-C(b)+C(c)約等于C(d)朦乏,C(*)表示詞向量⊙踔瑁可以利用這個(gè)特性呻疹,提取詞語之間的層次關(guān)系。
Connecting Images and Sentences筹陵,image understanding刽锤。例如文獻(xiàn),DeViSE: A deep visual-semantic em-bedding model朦佩。
Entity completion in Incomplete Knowledge bases or ontologies并思,即relational extraction。Reasoning with neural tensor net- works for knowledge base completion语稠。
more word2vec applications宋彼,點(diǎn)擊link1,link2
除了產(chǎn)生詞向量颅筋,word2vec還有很多其他應(yīng)用領(lǐng)域宙暇,對(duì)此我們需要把握兩個(gè)概念:doc和word。在詞向量訓(xùn)練中议泵,doc指的是一篇篇文章占贫,word就是文章中的詞。
假設(shè)我們將一簇簇相似的用戶作為doc(譬如QQ群)先口,將單個(gè)用戶作為word型奥,我們則可以訓(xùn)練user distributed representation,可以借此挖掘相似用戶碉京。
假設(shè)我們將一個(gè)個(gè)query session作為doc厢汹,將query作為word,我們則可以訓(xùn)練query distributed representation谐宙,挖掘相似query烫葬。
句向量
分析完word distributed representation,我們也許會(huì)問凡蜻,phrase搭综,sentence是否也有其distributed representation。最直觀的思路划栓,對(duì)于phrase和sentence兑巾,我們將組成它們的所有word對(duì)應(yīng)的詞向量加起來,作為短語向量忠荞,句向量蒋歌。在參考文獻(xiàn)[34]中帅掘,驗(yàn)證了將詞向量加起來的確是一個(gè)有效的方法,但事實(shí)上還有更好的做法堂油。
Le和Mikolov在文章《Distributed Representations of Sentences and Documents》[20]里介紹了sentence vector修档,這里我們也做下簡要分析。
先看c-bow方法称诗,相比于word2vec的c-bow模型萍悴,區(qū)別點(diǎn)有:
訓(xùn)練過程中新增了paragraph id,即訓(xùn)練語料中每個(gè)句子都有一個(gè)唯一的id寓免。paragraph id和普通的word一樣,也是先映射成一個(gè)向量计维,即paragraph vector袜香。paragraph vector與word vector的維數(shù)雖一樣,但是來自于兩個(gè)不同的向量空間鲫惶。在之后的計(jì)算里蜈首,paragraph vector和word vector累加或者連接起來,作為輸出層softmax的輸入欠母。在一個(gè)句子或者文檔的訓(xùn)練過程中欢策,paragraph id保持不變,共享著同一個(gè)paragraph vector赏淌,相當(dāng)于每次在預(yù)測(cè)單詞的概率時(shí)踩寇,都利用了整個(gè)句子的語義。
在預(yù)測(cè)階段六水,給待預(yù)測(cè)的句子新分配一個(gè)paragraph id俺孙,詞向量和輸出層softmax的參數(shù)保持訓(xùn)練階段得到的參數(shù)不變,重新利用梯度下降訓(xùn)練待預(yù)測(cè)的句子掷贾。待收斂后睛榄,即得到待預(yù)測(cè)句子的paragraph vector。
圖14. sentence2vec cBow算法
sentence2vec相比于word2vec的skip-gram模型想帅,區(qū)別點(diǎn)為:在sentence2vec里场靴,輸入都是paragraph vector,輸出是該paragraph中隨機(jī)抽樣的詞港准。
圖15. sentence2vec Skip-gram算法
下面是sentence2vec的結(jié)果示例旨剥。先利用中文sentence語料訓(xùn)練句向量,然后通過計(jì)算句向量之間的cosine值叉趣,得到最相似的句子泞边。可以看到句向量在對(duì)句子的語義表征上還是相當(dāng)驚嘆的疗杉。
圖16. sentence2vec 結(jié)果示例
詞向量的改進(jìn)
學(xué)習(xí)詞向量的方法主要分為:Global matrix factorization和Shallow Window-Based阵谚。Global matrix factorization方法主要利用了全局詞共現(xiàn)蚕礼,例如LSA;Shallow Window-Based方法則主要基于local context window梢什,即局部詞共現(xiàn)奠蹬,word2vec是其中的代表;Jeffrey Pennington在word2vec之后提出了GloVe嗡午,它聲稱結(jié)合了上述兩種方法囤躁,提升了詞向量的學(xué)習(xí)效果。它與word2vec的更多對(duì)比請(qǐng)點(diǎn)擊GloVe vs word2vec荔睹,GloVe & word2vec評(píng)測(cè)狸演。
目前通過詞向量可以充分發(fā)掘出“一義多詞”的情況,譬如“快遞”與“速遞”僻他;但對(duì)于“一詞多義”宵距,束手無策,譬如“蘋果”(既可以表示蘋果手機(jī)吨拗、電腦满哪,又可以表示水果),此時(shí)我們需要用多個(gè)詞向量來表示多義詞劝篷。
2.3 卷積神經(jīng)網(wǎng)絡(luò)
卷積
介紹卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network哨鸭,簡記cnn)之前,我們先看下卷積娇妓。
在一維信號(hào)中像鸡,卷積的運(yùn)算,請(qǐng)參考wiki峡蟋,其中的圖示很清楚坟桅。在圖像處理中,對(duì)圖像用一個(gè)卷積核進(jìn)行卷積運(yùn)算蕊蝗,實(shí)際上是一個(gè)濾波的過程仅乓。下面是卷積的數(shù)學(xué)表示:
f(x,y)是圖像上點(diǎn)(x,y)的灰度值,w(x,y)則是卷積核蓬戚,也叫濾波器夸楣。卷積實(shí)際上是提供了一個(gè)權(quán)重模板,這個(gè)模板在圖像上滑動(dòng)子漩,并將中心依次與圖像中每一個(gè)像素對(duì)齊豫喧,然后對(duì)這個(gè)模板覆蓋的所有像素進(jìn)行加權(quán),并將結(jié)果作為這個(gè)卷積核在圖像上該點(diǎn)的響應(yīng)幢泼。如下圖所示紧显,卷積操作可以用來對(duì)圖像做邊緣檢測(cè),銳化缕棵,模糊等孵班。
圖17. 卷積操作示例
什么是卷積神經(jīng)網(wǎng)絡(luò)
卷積神經(jīng)網(wǎng)絡(luò)是一種特殊的涉兽、簡化的深層神經(jīng)網(wǎng)絡(luò)模型,它的每個(gè)卷積層都是由多個(gè)卷積濾波器組成篙程。它最先由lecun在LeNet[40]中提出枷畏,網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示。在cnn中虱饿,圖像的一小部分(局部感受區(qū)域)作為層級(jí)結(jié)構(gòu)的最低層的輸入拥诡,信息再依次傳輸?shù)讲煌膶樱繉油ㄟ^多個(gè)卷積濾波器去獲得觀測(cè)數(shù)據(jù)的最顯著的特征氮发。
圖18. Lenet5網(wǎng)絡(luò)結(jié)構(gòu)圖
卷積神經(jīng)網(wǎng)絡(luò)中的每一個(gè)特征提取層(卷積層)都緊跟著一個(gè)用來求局部平均與二次提取的計(jì)算層(pooling層)渴肉,這種特有的兩次特征提取結(jié)構(gòu)使網(wǎng)絡(luò)在識(shí)別時(shí)對(duì)輸入樣本有較高的畸變?nèi)萑棠芰ΑH缦聢D所示爽冕,就是一個(gè)完整的卷積過程[21]宾娜。
圖19. 一次完整的卷積過程
它的特殊性體現(xiàn)在兩點(diǎn):(1)局部感受野(receptive?field),cnn的神經(jīng)元間的連接是非全連接的扇售;(2)同一層中同一個(gè)卷積濾波器的權(quán)重是共享的(即相同的)。局部感受野和權(quán)重共享這兩個(gè)特點(diǎn)嚣艇,使cnn網(wǎng)絡(luò)結(jié)構(gòu)更類似于生物神經(jīng)網(wǎng)絡(luò)承冰,降低了網(wǎng)絡(luò)模型的復(fù)雜度,減少了神經(jīng)網(wǎng)絡(luò)需要訓(xùn)練的參數(shù)的個(gè)數(shù)食零。
卷積神經(jīng)網(wǎng)絡(luò)的一些細(xì)節(jié)
接下來結(jié)合文獻(xiàn)[25]困乒,再講講卷積神經(jīng)網(wǎng)絡(luò)的一些注意點(diǎn)和問ti。
激勵(lì)函數(shù)贰谣,要選擇非線性函數(shù)娜搂,譬如tang,sigmoid吱抚,rectified liner百宇。在CNN里,relu用得比較多秘豹,原因在于:(1)簡化BP計(jì)算携御;(2)使學(xué)習(xí)更快。(3)避免飽和問ti(saturation issues)
Pooling:其作用在于(1)對(duì)一些小的形態(tài)改變保持不變性既绕,Invariance to small transformations啄刹;(2)擁有更大的感受域,Larger receptive fields凄贩。pooling的方式有sum or max誓军。
Normalization:Equalizes the features maps。它的作用有:(1) Introduces local competition between features疲扎;(2)Also helps to scale activations at each layer better for learning昵时;(3)Empirically, seems to help a bit (1–2%) on ImageNet
訓(xùn)練CNN:back-propagation捷雕;stochastic gradient descent;Momentum债查;Classification loss非区,cross-entropy;Gpu實(shí)現(xiàn)盹廷。
預(yù)處理:Mean removal征绸;Whitening(ZCA)
增強(qiáng)泛化能力:Data augmentation;Weight正則化俄占;在網(wǎng)絡(luò)里加入噪聲管怠,包括DropOut,DropConnect缸榄,Stochastic pooling渤弛。
DropOut:只在全連接層使用,隨機(jī)的將全連接層的某些神經(jīng)元的輸出置為0甚带。
DropConnect:也只在全連接層使用她肯,Random binary mask on weights
Stochastic Pooling:卷積層使用。Sample location from multinomial鹰贵。
模型不work晴氨,怎么辦?結(jié)合我自身的經(jīng)驗(yàn)碉输,learning rate初始值設(shè)置得太大籽前,開始設(shè)置為0.01,以為很小了敷钾,但實(shí)際上0.001更合適枝哄。
卷積神經(jīng)網(wǎng)絡(luò)在文本上的應(yīng)用
卷積神經(jīng)網(wǎng)絡(luò)在image classify和image detect上得到諸多成功的應(yīng)用,后文將再詳細(xì)闡述阻荒。但除了圖片外挠锥,它在文本分析上也取得一些成功的應(yīng)用。
基于CNN财松,可以用來做文本分類瘪贱,情感分析,本體分類等[36,41,84]辆毡。傳統(tǒng)文本分類等任務(wù)菜秦,一般基于bag of words或者基于word的特征提取,此類方法一般需要領(lǐng)域知識(shí)和人工特征舶掖。利用CNN做球昨,方法也類似,但一般都是基于raw text眨攘,CNN模型的輸入可以是word series主慰,可以是word vector嚣州,還可以是單純的字符。比起傳統(tǒng)方法共螺,CNN不需要過多的人工特征该肴。
1.?將word series作為輸入,利用CNN做文本分類藐不。如下圖所示[36]匀哄,該CNN很簡單,共分四層雏蛮,第一層是詞向量層涎嚼,doc中的每個(gè)詞,都將其映射到詞向量空間挑秉,假設(shè)詞向量為k維法梯,則n個(gè)詞映射后,相當(dāng)于生成一張n*k維的圖像犀概;第二層是卷積層立哑,多個(gè)濾波器作用于詞向量層,不同濾波器生成不同的feature map姻灶;第三層是pooling層刁憋,取每個(gè)feature map的最大值,這樣操作可以處理變長文檔木蹬,因?yàn)榈谌龑虞敵鲋灰蕾囉跒V波器的個(gè)數(shù);第四層是一個(gè)全連接的softmax層若皱,輸出是每個(gè)類目的概率镊叁。除此之外,輸入層可以有兩個(gè)channel走触,其中一個(gè)channel采用預(yù)先利用word2vec訓(xùn)練好的詞向量晦譬,另一個(gè)channel的詞向量可以通過backpropagation在訓(xùn)練過程中調(diào)整。這樣做的結(jié)果是:在目前通用的7個(gè)分類評(píng)測(cè)任務(wù)中互广,有4個(gè)取得了state-of-the-art的結(jié)果敛腌,另外3個(gè)表現(xiàn)接近最好水平。
圖20.基于CNN的文本分類
利用cnn做文本分類惫皱,還可以考慮到詞的順序像樊。利用傳統(tǒng)的”bag-of-words + maxent/svm”方法,是沒有考慮詞之間的順序的旅敷。文獻(xiàn)[41]中提出兩種cnn模型:seq-cnn, bow-cnn生棍,利用這兩種cnn模型,均取得state-of-the-art結(jié)果媳谁。
2.?將doc character作為輸入涂滴,利用CNN做文本分類友酱。文獻(xiàn)[86]介紹了一種方法,不利用word柔纵,也不利用word vector缔杉,直接將字符系列作為模型輸入,這樣輸入維度大大下降(相比于word)搁料,有利于訓(xùn)練更復(fù)雜的卷積網(wǎng)絡(luò)或详。對(duì)于中文,可以將漢字的拼音系列作為輸入加缘。
2.4 文本分類
文本分類應(yīng)該是最常見的文本語義分析任務(wù)了鸭叙。首先它是簡單的,幾乎每一個(gè)接觸過nlp的同學(xué)都做過文本分類拣宏,但它又是復(fù)雜的沈贝,對(duì)一個(gè)類目標(biāo)簽達(dá)幾百個(gè)的文本分類任務(wù),90%以上的準(zhǔn)確率召回率依舊是一個(gè)很困難的事情勋乾。這里說的文本分類宋下,指的是泛文本分類,包括query分類辑莫,廣告分類学歧,page分類,用戶分類等各吨,因?yàn)榧词故怯脩舴诸愔Ρ浚瑢?shí)際上也是對(duì)用戶所屬的文本標(biāo)簽,用戶訪問的文本網(wǎng)頁做分類揭蜒。
幾乎所有的機(jī)器學(xué)習(xí)方法都可以用來做文本分類横浑,常用的主要有:lr,maxent屉更,svm等徙融,下面介紹一下文本分類的pipeline以及注意點(diǎn)。
建立分類體系瑰谜。
分類相比于topic model或者聚類欺冀,一個(gè)顯著的特點(diǎn)是:類目體系是確定的。而不像在聚類和LDA里萨脑,一個(gè)類被聚出來后隐轩,但這個(gè)類到底是描述什么的,或者這個(gè)類與另外的類是什么關(guān)系渤早,這些是不確定的龙助,這樣會(huì)帶來使用和優(yōu)化上的困難。
一般而言,類目體系是由人工設(shè)定的提鸟。而類目體系的建立往往需要耗費(fèi)很多人工研究討論军援,一方面由于知識(shí)面的限制,人工建立的類目體系可能不能覆蓋所有情況称勋;另一方面胸哥,還可能存在類目之間instance數(shù)的不平衡。比較好的方法赡鲜,是基于目前已有的類目體系再做一些加工空厌,譬如ODP,F(xiàn)reeBase等银酬。
還可以先用某種無監(jiān)督的聚類方法嘲更,將訓(xùn)練文本劃分到某些clusters,建立這些clusters與ODP類目體系的對(duì)應(yīng)關(guān)系揩瞪,然后人工review這些clusters赋朦,切分或者合并cluster,提煉name李破,再然后根據(jù)知識(shí)體系宠哄,建立層級(jí)的taxonomy。
如果類目標(biāo)簽數(shù)目很多的話嗤攻,我們一般會(huì)將類目標(biāo)簽按照一定的層次關(guān)系毛嫉,建立類目樹,如下圖所示妇菱。那么接下來就可以利用層次分類器來做分類承粤,先對(duì)第一層節(jié)點(diǎn)訓(xùn)練一個(gè)分類器,再對(duì)第二層訓(xùn)練n個(gè)分類器(n為第一層的節(jié)點(diǎn)個(gè)數(shù))闯团,依次類推密任。利用層次類目樹,一方面單個(gè)模型更簡單也更準(zhǔn)確偷俭,另一方面可以避免類目標(biāo)簽之間的交叉影響,但如果上層分類有誤差缰盏,誤差將會(huì)向下傳導(dǎo)涌萤。
圖21. 層次類目體系
獲取訓(xùn)練數(shù)據(jù)
一般需要人工標(biāo)注訓(xùn)練數(shù)據(jù)。人工標(biāo)注口猜,準(zhǔn)確率高负溪,但標(biāo)注工作量大,耗費(fèi)人力济炎。
為了減少標(biāo)注代價(jià)川抡,利用無標(biāo)記的樣本,提出了半監(jiān)督學(xué)習(xí)(Semi-supervised Learning),主要考慮如何利用少量的標(biāo)注樣本和大量的未標(biāo)注樣本進(jìn)行訓(xùn)練和分類的問ti崖堤。這里介紹兩種常見的半監(jiān)督算法侍咱,希望了解更多請(qǐng)參考文獻(xiàn)[49]。
Self-learning:兩個(gè)樣本集合密幔,Labeled楔脯,Unlabeled。執(zhí)行算法如下:
用Labeled樣本集合胯甩,生成分類策略F
用F分類Unlabeled樣本昧廷,計(jì)算誤差
選取Unlabeled中誤差小的子集u,加入到Labeled集合偎箫。
接著重復(fù)上述步驟木柬。
舉一個(gè)例子:以前在做page分類器時(shí),先對(duì)每一個(gè)類人工篩選一些特征詞淹办,然后根據(jù)這些特征詞對(duì)億級(jí)文本網(wǎng)頁分類眉枕,再然后對(duì)每一個(gè)明確屬于該類的網(wǎng)頁提取更多的特征詞,加入原有的特征詞詞表娇唯,再去做分類齐遵;中間再輔以一定的人工校驗(yàn),這種方法做下來塔插,效果還是不錯(cuò)的梗摇,更關(guān)鍵的是,如果發(fā)現(xiàn)那個(gè)類有badcase想许,可以人工根據(jù)badcase調(diào)整某個(gè)特征詞的權(quán)重伶授,簡單粗暴又有效。
Co-training:其主要思想是:每次循環(huán)流纹,從Labeled數(shù)據(jù)中訓(xùn)練出兩個(gè)不同的分類器糜烹,然后用這兩個(gè)分類器對(duì)Unlabeled中數(shù)據(jù)進(jìn)行分類,把可信度最高的數(shù)據(jù)加入到Labeled中漱凝,繼續(xù)循環(huán)直到U中沒有數(shù)據(jù)或者達(dá)到循環(huán)最大次數(shù)疮蹦。
協(xié)同訓(xùn)練,例如Tri-train算法:使用三個(gè)分類器.對(duì)于一個(gè)無標(biāo)簽樣本茸炒,如果其中兩個(gè)分類器的判別一致愕乎,則將該樣本進(jìn)行標(biāo)記,并將其納入另一個(gè)分類器的訓(xùn)練樣本壁公;如此重復(fù)迭代感论,直至所有訓(xùn)練樣本都被標(biāo)記或者三個(gè)分類器不再有變化。
半監(jiān)督學(xué)習(xí)紊册,隨著訓(xùn)練不斷進(jìn)行比肄,自動(dòng)標(biāo)記的示例中的噪音會(huì)不斷積累,其負(fù)作用會(huì)越來越大。所以如term weighting工作里所述芳绩,還可以從其他用戶反饋環(huán)節(jié)提取訓(xùn)練數(shù)據(jù)掀亥,類似于推薦中的隱式反饋。
我們看一個(gè)具體的例子示括,在文獻(xiàn)[45]中铺浇,twitter利用了三種方法,user-level priors(發(fā)布tweet的用戶屬于的領(lǐng)域)垛膝,entity-level priors(話ti鳍侣,類似于微博中的#*#),url-level priors(tweet中的url)吼拥。利用上面三種數(shù)據(jù)基于一定規(guī)則獲取到基本的訓(xùn)練數(shù)據(jù)倚聚,再通過Co-Training獲取更多高質(zhì)量的訓(xùn)練數(shù)據(jù)。上述獲取到的都是正例數(shù)據(jù)凿可,還需要負(fù)例樣本惑折。按照常見的方法,從非正例樣本里隨機(jī)抽取作為負(fù)例的方法枯跑,效果并不是好惨驶,文中用到了Pu-learning去獲取高質(zhì)量的負(fù)例樣本,具體請(qǐng)參考文獻(xiàn)[58]敛助。
圖22.文獻(xiàn)[45]訓(xùn)練數(shù)據(jù)獲取流程圖
特征提取
對(duì)于每條instance粗卜,運(yùn)用多種文本分析方法提取特征。常見特征有:
分詞 or 字的ngram纳击,對(duì)詞的權(quán)重打分续扔,計(jì)算詞的一些領(lǐng)域特征,又或者計(jì)算詞向量焕数,詞的topic分布纱昧。
文本串的特征,譬如sentence vector堡赔,sentence topic等识脆。
提取的特征,從取值類型看善已,有二值特征灼捂,浮點(diǎn)數(shù)特征,離線值特征雕拼。
特征的預(yù)處理包括:
一般來說,我們希望instance各維特征的均值為0粘招,方差為1或者某個(gè)有邊界的值啥寇。如果不是,最好將該維度上的取值做一個(gè)變換。
特征缺失值和異常值的處理也需要額外注意辑甜。
特征選擇衰絮,下面這些指標(biāo)都可以用作篩選區(qū)分度高的特征。
Gini-index: 一個(gè)特征的Gini-index越大磷醋,特征區(qū)分度越高猫牡。
信息增益(Information Gain)
互信息(Mutual Information)
相關(guān)系數(shù)(Correlation)
假設(shè)檢驗(yàn)(Hypothesis Testing)
模型訓(xùn)練
模型選擇:通常來說,常用的有監(jiān)督模型已經(jīng)足夠了邓线,譬如lr, svm, maxent, naive-bayes,決策樹等。這些基本模型之間的效果差異不大器联,選擇合適的即可拨拓。上一小節(jié)講到cnn時(shí),提到深度神經(jīng)網(wǎng)絡(luò)也可以用來做文本分類幸海。深度神經(jīng)網(wǎng)絡(luò)相比較于傳統(tǒng)方法物独,特征表示能力更強(qiáng)挡篓,還可以自學(xué)習(xí)特征官研。
模型的正則化:一般來說闯睹,L1正則化有特征篩選的作用始花,用得相對(duì)較多亥贸,除此外,L2正則化,ElasticNet regularization(L1和L2的組合)也很常用仍劈。
對(duì)于多分類問ti,可以選擇one-vs-all方法这溅,也可以選擇multinomial方法。兩種選擇各有各的優(yōu)點(diǎn)癞尚,主要考慮有:并行訓(xùn)練multiple class model更復(fù)雜浇揩;不能重新訓(xùn)練 a subset of topics憨颠。
model fine-tuning养盗。借鑒文獻(xiàn)[72]的思路(訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)時(shí)往核,先無監(jiān)督逐層訓(xùn)練參數(shù),再有監(jiān)督調(diào)優(yōu))碍论,對(duì)于文本分類也可以采用類似思路税娜,譬如可以先基于自提取的大規(guī)模訓(xùn)練數(shù)據(jù)訓(xùn)練一個(gè)分類模型藏研,再利用少量的有標(biāo)注訓(xùn)練數(shù)據(jù)對(duì)原模型做調(diào)優(yōu)弧岳。下面這個(gè)式子是新的loss function业踏,w是新模型參數(shù),w0是原模型參數(shù)热幔,l(w,b|xi,yi)是新模型的likelihood,優(yōu)化目標(biāo)就是最小化“新模型參數(shù)與原模型參數(shù)的差 + 新模型的最大似然函數(shù)的負(fù)數(shù) + 正則化項(xiàng)”介汹。
model ensemble:也稱“Multi-Model System”,ensemble是提升機(jī)器學(xué)習(xí)精度的有效手段,各種競(jìng)賽的冠軍隊(duì)伍的是必用手段。它的基本思想罩息,充分利用不同模型的優(yōu)勢(shì)瓷炮,取長補(bǔ)短苍狰,最后綜合多個(gè)模型的結(jié)果响牛。Ensemble可以設(shè)定一個(gè)目標(biāo)函數(shù)(組合多個(gè)模型),通過訓(xùn)練得到多個(gè)模型的組合參數(shù)(而不是簡單的累加或者多數(shù))给涕。譬如在做廣告分類時(shí)豺憔,可以利用maxent和決策樹,分別基于廣告title和描述够庙,基于廣告的landing page恭应,基于廣告圖片訓(xùn)練6個(gè)分類模型。預(yù)測(cè)時(shí)可以通過ensemble的方法組合這6個(gè)模型的輸出結(jié)果耘眨。
評(píng)測(cè)
評(píng)測(cè)分類任務(wù)一般參考Accuracy昼榛,recall, precision,F(xiàn)1-measure剔难,micro-recall/precision胆屿,macro-recall/precision等指標(biāo)奥喻。