语义分析的总结
轉(zhuǎn) 語(yǔ)義分析的總結(jié)
發(fā)表于4個(gè)月前(2015-12-16 14:53)?? 閱讀(539)?|?評(píng)論(0)?8人收藏此文章,?我要收藏 贊0語(yǔ)義分析,本文指運(yùn)用各種機(jī)器學(xué)習(xí)方法,挖掘與學(xué)習(xí)文本、圖片等的深層次概念。wikipedia上的解釋:In machine learning, semantic analysis of a corpus is the task of building structures that approximate concepts from a large set of documents(or images)。
本文主要由以下四部分組成:文本基本處理,文本語(yǔ)義分析,圖片語(yǔ)義分析,語(yǔ)義分析小結(jié)。先講述文本處理的基本方法,這構(gòu)成了語(yǔ)義分析的基礎(chǔ)。接著分文本和圖片兩節(jié)講述各自語(yǔ)義分析的一些方法,值得注意的是,雖說分為兩節(jié),但文本和圖片在語(yǔ)義分析方法上有很多共通與關(guān)聯(lián)。最后我們簡(jiǎn)單介紹下語(yǔ)義分析在廣點(diǎn)通“用戶廣告匹配”上的應(yīng)用,并展望一下未來的語(yǔ)義分析方法。
1. 文本基本處理
在講文本語(yǔ)義分析之前,我們先說下文本基本處理,因?yàn)樗鼧?gòu)成了語(yǔ)義分析的基礎(chǔ)。而文本處理有很多方面,考慮到本文主ti,這里只介紹中文分詞以及Term Weighting。1.1 中文分詞
拿到一段文本后,通常情況下,首先要做分詞。分詞的方法一般有如下幾種:
- 基于字符串匹配的分詞方法。此方法按照不同的掃描方式,逐個(gè)查找詞庫(kù)進(jìn)行分詞。根據(jù)掃描方式可細(xì)分為:正向最大匹配,反向最大匹配,雙向最大匹配,最小切分(即最短路徑);總之就是各種不同的啟發(fā)規(guī)則。
- 全切分方法。它首先切分出與詞庫(kù)匹配的所有可能的詞,再運(yùn)用統(tǒng)計(jì)語(yǔ)言模型決定最優(yōu)的切分結(jié)果。它的優(yōu)點(diǎn)在于可以解決分詞中的歧義問ti。下圖是一個(gè)示例,對(duì)于文本串“南京市長(zhǎng)江大橋”,首先進(jìn)行詞條檢索(一般用Trie存儲(chǔ)),找到匹配的所有詞條(南京,市,長(zhǎng)江,大橋,南京市,長(zhǎng)江大橋,市長(zhǎng),江大橋,江大,橋),以詞網(wǎng)格(word lattices)形式表示,接著做路徑搜索,基于統(tǒng)計(jì)語(yǔ)言模型(例如n-gram)[18]找到最優(yōu)路徑,最后可能還需要命名實(shí)體識(shí)別。下圖中“南京市 長(zhǎng)江 大橋”的語(yǔ)言模型得分,即P(南京市,長(zhǎng)江,大橋)最高,則為最優(yōu)切分。
圖1. “南京市長(zhǎng)江大橋”語(yǔ)言模型得分
- 由字構(gòu)詞的分詞方法。可以理解為字的分類問ti,也就是自然語(yǔ)言處理中的sequence labeling問ti,通常做法里利用HMM,MAXENT,MEMM,CRF等預(yù)測(cè)文本串每個(gè)字的tag[62],譬如B,E,I,S,這四個(gè)tag分別表示:beginning, inside, ending, single,也就是一個(gè)詞的開始,中間,結(jié)束,以及單個(gè)字的詞。 例如“南京市長(zhǎng)江大橋”的標(biāo)注結(jié)果可能為:“南(B)京(I)市(E)長(zhǎng)(B)江(E)大(B)橋(E)”。由于CRF既可以像最大熵模型一樣加各種領(lǐng)域feature,又避免了HMM的齊次馬爾科夫假設(shè),所以基于CRF的分詞目前是效果最好的,具體請(qǐng)參考文獻(xiàn)[61,62,63]。除了HMM,CRF等模型,分詞也可以基于深度學(xué)習(xí)方法來做,如文獻(xiàn)[9][10]所介紹,也取得了state-of-the-art的結(jié)果。
圖2. 基于深度學(xué)習(xí)的中文分詞
上圖是一個(gè)基于深度學(xué)習(xí)的分詞示例圖。我們從上往下看,首先對(duì)每一個(gè)字進(jìn)行Lookup Table,映射到一個(gè)固定長(zhǎng)度的特征向量(這里可以利用詞向量,boundary entropy,accessor variety等);接著經(jīng)過一個(gè)標(biāo)準(zhǔn)的神經(jīng)網(wǎng)絡(luò),分別是linear,sigmoid,linear層,對(duì)于每個(gè)字,預(yù)測(cè)該字屬于B,E,I,S的概率;最后輸出是一個(gè)矩陣,矩陣的行是B,E,I,S 4個(gè)tag,利用viterbi算法就可以完成標(biāo)注推斷,從而得到分詞結(jié)果。
一個(gè)文本串除了分詞,還需要做詞性標(biāo)注,命名實(shí)體識(shí)別,新詞發(fā)現(xiàn)等。通常有兩種方案,一種是pipeline approaches,就是先分詞,再做詞性標(biāo)注;另一種是joint approaches,就是把這些任務(wù)用一個(gè)模型來完成。有興趣可以參考文獻(xiàn)[9][62]等。
一般而言,方法一和方法二在工業(yè)界用得比較多,方法三因?yàn)椴捎脧?fù)雜的模型,雖準(zhǔn)確率相對(duì)高,但耗時(shí)較大。
1.2 語(yǔ)言模型
前面在講“全切分分詞”方法時(shí),提到了語(yǔ)言模型,并且通過語(yǔ)言模型,還可以引出詞向量,所以這里把語(yǔ)言模型簡(jiǎn)單闡述一下。
語(yǔ)言模型是用來計(jì)算一個(gè)句子產(chǎn)生概率的概率模型,即P(w_1,w_2,w_3…w_m),m表示詞的總個(gè)數(shù)。根據(jù)貝葉斯公式:P(w_1,w_2,w_3 … w_m) = P(w_1)P(w_2|w_1)P(w_3|w_1,w_2) … P(w_m|w_1,w_2 … w_{m-1})。
最簡(jiǎn)單的語(yǔ)言模型是N-Gram,它利用馬爾科夫假設(shè),認(rèn)為句子中每個(gè)單詞只與其前n–1個(gè)單詞有關(guān),即假設(shè)產(chǎn)生w_m這個(gè)詞的條件概率只依賴于前n–1個(gè)詞,則有P(w_m|w_1,w_2…w_{m-1}) = P(w_m|w_{m-n+1},w_{m-n+2} … w_{m-1})。其中n越大,模型可區(qū)別性越強(qiáng),n越小,模型可靠性越高。
N-Gram語(yǔ)言模型簡(jiǎn)單有效,但是它只考慮了詞的位置關(guān)系,沒有考慮詞之間的相似度,詞語(yǔ)法和詞語(yǔ)義,并且還存在數(shù)據(jù)稀疏的問ti,所以后來,又逐漸提出更多的語(yǔ)言模型,例如Class-based ngram model,topic-based ngram model,cache-based ngram model,skipping ngram model,指數(shù)語(yǔ)言模型(最大熵模型,條件隨機(jī)域模型)等。若想了解更多請(qǐng)參考文章[18]。
最近,隨著深度學(xué)習(xí)的興起,神經(jīng)網(wǎng)絡(luò)語(yǔ)言模型也變得火熱[4]。用神經(jīng)網(wǎng)絡(luò)訓(xùn)練語(yǔ)言模型的經(jīng)典之作,要數(shù)Bengio等人發(fā)表的《A Neural Probabilistic Language Model》[3],它也是基于N-Gram的,首先將每個(gè)單詞w_{m-n+1},w_{m-n+2} … w_{m-1}映射到詞向量空間,再把各個(gè)單詞的詞向量組合成一個(gè)更大的向量作為神經(jīng)網(wǎng)絡(luò)輸入,輸出是P(w_m)。本文將此模型簡(jiǎn)稱為ffnnlm(Feed-forward Neural Net Language Model)。ffnnlm解決了傳統(tǒng)n-gram的兩個(gè)缺陷:(1)詞語(yǔ)之間的相似性可以通過詞向量來體現(xiàn);(2)自帶平滑功能。文獻(xiàn)[3]不僅提出神經(jīng)網(wǎng)絡(luò)語(yǔ)言模型,還順帶引出了詞向量,關(guān)于詞向量,后文將再細(xì)述。
圖3. 基于神經(jīng)網(wǎng)絡(luò)的語(yǔ)言模型
從最新文獻(xiàn)看,目前state-of-the-art語(yǔ)言模型應(yīng)該是基于循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network)的語(yǔ)言模型,簡(jiǎn)稱rnnlm[5][6]。循環(huán)神經(jīng)網(wǎng)絡(luò)相比于傳統(tǒng)前饋神經(jīng)網(wǎng)絡(luò),其特點(diǎn)是:可以存在有向環(huán),將上一次的輸出作為本次的輸入。而rnnlm和ffnnlm的最大區(qū)別是:ffnnmm要求輸入的上下文是固定長(zhǎng)度的,也就是說n-gram中的 n 要求是個(gè)固定值,而rnnlm不限制上下文的長(zhǎng)度,可以真正充分地利用所有上文信息來預(yù)測(cè)下一個(gè)詞,本次預(yù)測(cè)的中間隱層信息(例如下圖中的context信息)可以在下一次預(yù)測(cè)里循環(huán)使用。
圖4. 基于simple RNN(time-delay neural network)的語(yǔ)言模型
如上圖所示,這是一個(gè)最簡(jiǎn)單的rnnlm,神經(jīng)網(wǎng)絡(luò)分為三層,第一層是輸入層,第二層是隱藏層(也叫context層),第三層輸出層。 假設(shè)當(dāng)前是t時(shí)刻,則分三步來預(yù)測(cè)P(w_m):
- 單詞w_{m-1}映射到詞向量,記作input(t)
- 連接上一次訓(xùn)練的隱藏層context(t–1),經(jīng)過sigmoid function,生成當(dāng)前t時(shí)刻的context(t)
- 利用softmax function,預(yù)測(cè)P(w_m)
參考文獻(xiàn)[7]中列出了一個(gè)rnnlm的library,其代碼緊湊。利用它訓(xùn)練中文語(yǔ)言模型將很簡(jiǎn)單,上面“南京市 長(zhǎng)江 大橋”就是rnnlm的預(yù)測(cè)結(jié)果。
基于RNN的language model利用BPTT(BackPropagation through time)算法比較難于訓(xùn)練,原因就是深度神經(jīng)網(wǎng)絡(luò)里比較普遍的vanishing gradient問ti[55](在RNN里,梯度計(jì)算隨時(shí)間成指數(shù)倍增長(zhǎng)或衰減,稱之為Exponential Error Decay)。所以后來又提出基于LSTM(Long short term memory)的language model,LSTM也是一種RNN網(wǎng)絡(luò),關(guān)于LSTM的詳細(xì)介紹請(qǐng)參考文獻(xiàn)[54,49,52]。LSTM通過網(wǎng)絡(luò)結(jié)構(gòu)的修改,從而避免vanishing gradient問ti。
圖5. LSTM memory cell
如上圖所示,是一個(gè)LSTM unit。如果是傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)unit,output activation bi = activation_function(ai),但LSTM unit的計(jì)算相對(duì)就復(fù)雜些了,它保存了該神經(jīng)元上一次計(jì)算的結(jié)果,通過input gate,output gate,forget gate來計(jì)算輸出,具體過程請(qǐng)參考文獻(xiàn)[53,54]。
1.3 Term Weighting
Term重要性
對(duì)文本分詞后,接下來需要對(duì)分詞后的每個(gè)term計(jì)算一個(gè)權(quán)重,重要的term應(yīng)該給與更高的權(quán)重。舉例來說,“什么產(chǎn)品對(duì)減肥幫助最大?”的term weighting結(jié)果可能是: “什么 0.1,產(chǎn)品 0.5,對(duì) 0.1,減肥 0.8,幫助 0.3,最大 0.2”。Term weighting在文本檢索,文本相關(guān)性,核心詞提取等任務(wù)中都有重要作用。
Term weighting的打分公式一般由三部分組成:local,global和normalization [1,2]。即TermWeight=L_{i,j} G_i N_j。L_{i,j}是term i在document j中的local weight,G_i是term i的global weight,N_j是document j的歸一化因子。常見的local,global,normalization weight公式[2]有:
圖6. Local weight formulas
圖7. Global weight formulas
圖8. Normalization factors
Tf-Idf是一種最常見的term weighting方法。在上面的公式體系里,Tf-Idf的local weight是FREQ,glocal weight是IDFB,normalization是None。tf是詞頻,表示這個(gè)詞出現(xiàn)的次數(shù)。df是文檔頻率,表示這個(gè)詞在多少個(gè)文檔中出現(xiàn)。idf則是逆文檔頻率,idf=log(TD/df),TD表示總文檔數(shù)。Tf-Idf在很多場(chǎng)合都很有效,但缺點(diǎn)也比較明顯,以“詞頻”度量重要性,不夠全面,譬如在搜索廣告的關(guān)鍵詞匹配時(shí)就不夠用。
除了TF-IDF外,還有很多其他term weighting方法,例如Okapi,MI,LTU,ATC,TF-ICF[59]等。通過local,global,normalization各種公式的組合,可以生成不同的term weighting計(jì)算方法。不過上面這些方法都是無監(jiān)督計(jì)算方法,有一定程度的通用性,但在一些特定場(chǎng)景里顯得不夠靈活,不夠準(zhǔn)確,所以可以基于有監(jiān)督機(jī)器學(xué)習(xí)方法來擬合term weighting結(jié)果。
圖9. Okapi計(jì)算公式
利用有監(jiān)督機(jī)器學(xué)習(xí)方法來預(yù)測(cè)weight。這里類似于機(jī)器學(xué)習(xí)的分類任務(wù),對(duì)于文本串的每個(gè)term,預(yù)測(cè)一個(gè)[0,1]的得分,得分越大則term重要性越高。既然是有監(jiān)督學(xué)習(xí),那么就需要訓(xùn)練數(shù)據(jù)。如果采用人工標(biāo)注的話,極大耗費(fèi)人力,所以可以采用訓(xùn)練數(shù)據(jù)自提取的方法,利用程序從搜索日志里自動(dòng)挖掘。從海量日志數(shù)據(jù)里提取隱含的用戶對(duì)于term重要性的標(biāo)注,得到的訓(xùn)練數(shù)據(jù)將綜合億級(jí)用戶的“標(biāo)注結(jié)果”,覆蓋面更廣,且來自于真實(shí)搜索數(shù)據(jù),訓(xùn)練結(jié)果與標(biāo)注的目標(biāo)集分布接近,訓(xùn)練數(shù)據(jù)更精確。下面列舉三種方法(除此外,還有更多可以利用的方法):
- 從搜索session數(shù)據(jù)里提取訓(xùn)練數(shù)據(jù),用戶在一個(gè)檢索會(huì)話中的檢索核心意圖是不變的,提取出核心意圖所對(duì)應(yīng)的term,其重要性就高。
- 從歷史短串關(guān)系資源庫(kù)里提取訓(xùn)練數(shù)據(jù),短串?dāng)U展關(guān)系中,一個(gè)term出現(xiàn)的次數(shù)越多,則越重要。
- 從搜索廣告點(diǎn)擊日志里提取訓(xùn)練數(shù)據(jù),query與bidword共有term的點(diǎn)擊率越高,它在query中的重要程度就越高。
通過上面的方法,可以提取到大量質(zhì)量不錯(cuò)的訓(xùn)練數(shù)據(jù)(數(shù)十億級(jí)別的數(shù)據(jù),這其中可能有部分樣本不準(zhǔn)確,但在如此大規(guī)模數(shù)據(jù)情況下,絕大部分樣本都是準(zhǔn)確的)。
有了訓(xùn)練數(shù)據(jù),接下來提取特征,基于邏輯回歸模型來預(yù)測(cè)文本串中每個(gè)term的重要性。所提取的特征包括:
- term的自解釋特征,例如term專名類型,term詞性,term idf,位置特征,term的長(zhǎng)度等;
- term與文本串的交叉特征,例如term與文本串中其他term的字面交叉特征,term轉(zhuǎn)移到文本串中其他term的轉(zhuǎn)移概率特征,term的文本分類、topic與文本串的文本分類、topic的交叉特征等。
核心詞、關(guān)鍵詞提取
短文本串的核心詞提取。對(duì)短文本串分詞后,利用上面介紹的term weighting方法,獲取term weight后,取一定的閾值,就可以提取出短文本串的核心詞。長(zhǎng)文本串(譬如web page)的關(guān)鍵詞提取。這里簡(jiǎn)單介紹幾種方法。想了解更多,請(qǐng)參考文獻(xiàn)[69]。
- 采用基于規(guī)則的方法。考慮到位置特征,網(wǎng)頁(yè)特征等。
- 基于廣告主購(gòu)買的bidword和高頻query建立多模式匹配樹,在長(zhǎng)文本串中進(jìn)行全字匹配找出候選關(guān)鍵詞,再結(jié)合關(guān)鍵詞weight,以及某些規(guī)則找出優(yōu)質(zhì)的關(guān)鍵詞。
- 類似于有監(jiān)督的term weighting方法,也可以訓(xùn)練關(guān)鍵詞weighting的模型。
- 基于文檔主ti結(jié)構(gòu)的關(guān)鍵詞抽取,具體可以參考文獻(xiàn)[71]。
2. 文本語(yǔ)義分析
前面講到一些文本基本處理方法。一個(gè)文本串,對(duì)其進(jìn)行分詞和重要性打分后(當(dāng)然還有更多的文本處理任務(wù)),就可以開始更高層的語(yǔ)義分析任務(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)練算法簡(jiǎ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)練語(yǔ)料,按照概率公式(下圖所示)重新采樣每個(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,不能用很明確的語(yǔ)義歸納出這個(gè)topic在講什么;重新訓(xùn)練一遍lda模型,每個(gè)topic id所對(duì)應(yīng)的語(yǔ)義可能發(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ù)更匹配長(zhǎng)文而非短文。該文章提出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+
- Yahoo LDA
- Parameter server
最近的并行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)練語(yǔ)言模型的一個(gè)副產(chǎn)品,不過在word2vec里,是專門來訓(xùn)練詞向量,所以word2vec相比于ffnnlm的區(qū)別主要體現(xiàn)在:
- 模型更加簡(jiǎn)單,去掉了ffnnlm中的隱藏層,并去掉了輸入層跳過隱藏層直接到輸出層的連接。
- 訓(xùn)練語(yǔ)言模型是利用第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)練兩種語(yǔ)言的詞向量,再通過詞向量空間中的矩陣變換,將一種語(yǔ)言轉(zhuǎn)變成另一種語(yǔ)言。
- word analogy,即已知a之于b猶如c之于d,現(xiàn)在給出 a、b、c,C(a)-C(b)+C(c)約等于C(d),C(*)表示詞向量。可以利用這個(gè)特性,提取詞語(yǔ)之間的層次關(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
- 假設(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)的詞向量加起來,作為短語(yǔ)向量,句向量。在參考文獻(xiàn)[34]中,驗(yàn)證了將詞向量加起來的確是一個(gè)有效的方法,但事實(shí)上還有更好的做法。Le和Mikolov在文章《Distributed Representations of Sentences and Documents》[20]里介紹了sentence vector,這里我們也做下簡(jiǎn)要分析。
先看c-bow方法,相比于word2vec的c-bow模型,區(qū)別點(diǎn)有:- 訓(xùn)練過程中新增了paragraph id,即訓(xùn)練語(yǔ)料中每個(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ǔ)義。
- 在預(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語(yǔ)料訓(xùn)練句向量,然后通過計(jì)算句向量之間的cosine值,得到最相似的句子。可以看到句向量在對(duì)句子的語(yǔ)義表征上還是相當(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,簡(jiǎn)記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ò)是一種特殊的、簡(jiǎn)化的深層神經(jīng)網(wǎng)絡(luò)模型,它的每個(gè)卷積層都是由多個(gè)卷積濾波器組成。它最先由lecun在LeNet[40]中提出,網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示。在cnn中,圖像的一小部分(局部感受區(qū)域)作為層級(jí)結(jié)構(gòu)的最低層的輸入,信息再依次傳輸?shù)讲煌膶?#xff0c;每層通過多個(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)簡(jiǎn)化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很簡(jiǎn)單,共分四層,第一層是詞向量層,doc中的每個(gè)詞,都將其映射到詞向量空間,假設(shè)詞向量為k維,則n個(gè)詞映射后,相當(dāng)于生成一張n*k維的圖像;第二層是卷積層,多個(gè)濾波器作用于詞向量層,不同濾波器生成不同的feature map;第三層是pooling層,取每個(gè)feature map的最大值,這樣操作可以處理變長(zhǎng)文檔,因?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)該是最常見的文本語(yǔ)義分析任務(wù)了。首先它是簡(jiǎn)單的,幾乎每一個(gè)接觸過nlp的同學(xué)都做過文本分類,但它又是復(fù)雜的,對(duì)一個(gè)類目標(biāo)簽達(dá)幾百個(gè)的文本分類任務(wù),90%以上的準(zhǔn)確率召回率依舊是一個(gè)很困難的事情。這里說的文本分類,指的是泛文本分類,包括query分類,廣告分類,page分類,用戶分類等,因?yàn)榧词故怯脩舴诸?#xff0c;實(shí)際上也是對(duì)用戶所屬的文本標(biāo)簽,用戶訪問的文本網(wǎng)頁(yè)做分類。
幾乎所有的機(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,FreeBase等。
- 還可以先用某種無監(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è)模型更簡(jiǎn)單也更準(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)頁(yè)分類,再然后對(duì)每一個(gè)明確屬于該類的網(wǎng)頁(yè)提取更多的特征詞,加入原有的特征詞詞表,再去做分類;中間再輔以一定的人工校驗(yàn),這種方法做下來,效果還是不錯(cuò)的,更關(guān)鍵的是,如果發(fā)現(xiàn)那個(gè)類有badcase,可以人工根據(jù)badcase調(diào)整某個(gè)特征詞的權(quán)重,簡(jiǎ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è)分類器不再有變化。
- Self-learning:兩個(gè)樣本集合,Labeled,Unlabeled。執(zhí)行算法如下:
- 半監(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)
- 模型選擇:通常來說,常用的有監(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ì),取長(zhǎng)補(bǔ)短,最后綜合多個(gè)模型的結(jié)果。Ensemble可以設(shè)定一個(gè)目標(biāo)函數(shù)(組合多個(gè)模型),通過訓(xùn)練得到多個(gè)模型的組合參數(shù)(而不是簡(jiǎn)單的累加或者多數(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,F1-measure,micro-recall/precision,macro-recall/precision等指標(biāo)。
3. 圖片語(yǔ)義分析
3.1 圖片分類
圖片分類是一個(gè)最基本的圖片語(yǔ)義分析方法。基于深度學(xué)習(xí)的圖片分類
傳統(tǒng)的圖片分類如下圖所示,首先需要先手工提取圖片特征,譬如SIFT, GIST,再經(jīng)由VQ coding和Spatial pooling,最后送入傳統(tǒng)的分類模型(例如SVM等)。
圖23. 傳統(tǒng)圖片分類流程圖
傳統(tǒng)方法里,人工特征提取是一個(gè)巨大的消耗性工作。而隨著深度學(xué)習(xí)的進(jìn)展,不再需要人工特征,通過深度學(xué)習(xí)自動(dòng)提取特征成為一種可能。接下來主要講述卷積神經(jīng)網(wǎng)絡(luò)在圖片分類上的使用。
下圖是一個(gè)經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò)模型圖,由Hinton和他的學(xué)生Alex Krizhevsky在ILSVRC(Imagenet Large Scale Visual Recognition Competition) 2012中提出。 整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)包括五層卷積層和三層全連接層,網(wǎng)絡(luò)的最前端是輸入圖片的原始像素點(diǎn),最后端是圖片的分類結(jié)果。一個(gè)完整的卷積層可能包括一層convolution,一層Rectified Linear Units,一層max-pooling,一層normalization。
圖24. 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖
對(duì)于每一層網(wǎng)絡(luò),具體的網(wǎng)絡(luò)參數(shù)配置如下圖所示。InputLayer就是輸入圖片層,每個(gè)輸入圖片都將被縮放成227*227大小,分rgb三個(gè)顏色維度輸入。Layer1~ Layer5是卷積層,以Layer1為例,卷積濾波器的大小是11*11,卷積步幅為4,本層共有96個(gè)卷積濾波器,本層的輸出則是96個(gè)55*55大小的圖片。在Layer1,卷積濾波后,還接有ReLUs操作和max-pooling操作。Layer6~ Layer8是全連接層,相當(dāng)于在五層卷積層的基礎(chǔ)上再加上一個(gè)三層的全連接神經(jīng)網(wǎng)絡(luò)分類器。以Layer6為例,本層的神經(jīng)元個(gè)數(shù)為4096個(gè)。Layer8的神經(jīng)元個(gè)數(shù)為1000個(gè),相當(dāng)于訓(xùn)練目標(biāo)的1000個(gè)圖片類別。
圖25. CNN網(wǎng)絡(luò)參數(shù)配置圖
基于Alex Krizhevsky提出的cnn模型,在13nian末的時(shí)候,我們實(shí)現(xiàn)了用于廣點(diǎn)通的圖片分類和圖片檢索(可用于廣告圖片作弊判別),下面是一些示例圖。
圖片分類示例:
圖26. 圖片分類示例圖
圖片檢索示例:
圖27. 圖片檢索示例圖
圖片分類上的最新進(jìn)展
在ILSVRC 2012中,Alex Krizhevsky基于GPU實(shí)現(xiàn)了上述介紹的,這個(gè)有60million參數(shù)的模型(簡(jiǎn)稱為AlexNet),贏得了第一名。這個(gè)工作是開創(chuàng)性的,它引領(lǐng)了接下來ILSVRC的風(fēng)潮。2013nian,Clarifai通過cnn模型可視化技術(shù)調(diào)整網(wǎng)絡(luò)架構(gòu),贏得了ILSVRC。2014nian,google也加入進(jìn)來,它通過增加模型的層數(shù)(總共22層),讓深度更深[48],并且利用multi-scale data training,取得第一名。baidu最近通過更加“粗暴”的模型[44],在GooLeNet的基礎(chǔ)上,又提升了10%,top–5錯(cuò)誤率降低至6%以下。具體結(jié)果如下圖所示。
圖28. ImageNet Classification Result
先簡(jiǎn)單分析一下“GoogLeNet”[48,51]所采用的方法:
- 大大增加的網(wǎng)絡(luò)的深度,并且去掉了最頂層的全連接層:因?yàn)槿B接層(Fully Connected)幾乎占據(jù)了CNN大概90%的參數(shù),但是同時(shí)又可能帶來過擬合(overfitting)的效果。
- 模型比以前AlexNet的模型大大縮小,并且減輕了過擬合帶來的副作用。Alex模型參數(shù)是60M,GoogLeNet只有7M。
- 對(duì)于google的模型,目前已有開源的實(shí)現(xiàn),有興趣請(qǐng)點(diǎn)擊Caffe+GoogLeNet。
- Hardware/Software Co-design。baidu基于GPU,利用36個(gè)服務(wù)節(jié)點(diǎn)開發(fā)了一個(gè)專為深度學(xué)習(xí)運(yùn)算的supercompter(名叫Minwa,敏媧)。這臺(tái)supercomputer具備TB級(jí)的host memory,超強(qiáng)的數(shù)據(jù)交換能力,使能訓(xùn)練一個(gè)巨大的深層神經(jīng)網(wǎng)絡(luò)成為可能。而要訓(xùn)練如此巨大的神經(jīng)網(wǎng)絡(luò),除了硬件強(qiáng)大外,還需要高效的并行計(jì)算框架。通常而言,都要從data-parallelism和model-data parallelism兩方面考慮。
- data-parallelism:訓(xùn)練數(shù)據(jù)被分成N份。每輪迭代里,各個(gè)GPU基于各自的訓(xùn)練數(shù)據(jù)計(jì)算梯度,最后累加所有梯度數(shù)據(jù)并廣播到所有GPU。
- model-data parallelism:考慮到卷積層參數(shù)較少但消耗計(jì)算量,而全連接層參數(shù)相對(duì)比較多。所以卷積層參數(shù)以local copy的形式被每個(gè)GPU所持有,而全連接層的參數(shù)則被劃分到各個(gè)CPU。每輪迭代里,卷積層計(jì)算可以由各個(gè)GPU獨(dú)立完成,全連接層計(jì)算需要由所有GPU配合完成,具體方法請(qǐng)參考[46]。
- Data augmentation。訓(xùn)練一個(gè)如此巨大的神經(jīng)網(wǎng)絡(luò)(100billion個(gè)參數(shù)),如果沒有充分的訓(xùn)練數(shù)據(jù),模型將很大可能陷入過擬合,所以需要采用眾多data augmentation方法增加訓(xùn)練數(shù)據(jù),例如:剪裁,不同大小,調(diào)亮度,飽和度,對(duì)比度,偏色等(color casting, vignetting, lens distortion, rotation, flipping, cropping)。舉個(gè)例子,一個(gè)彩色圖片,增減某個(gè)顏色通道的intensity值,就可以生成多張圖片,但這些圖片和原圖的類目是一致的,相當(dāng)于增加了訓(xùn)練數(shù)據(jù)。
- Multi-scale training:訓(xùn)練不同輸入圖片尺度下(例如512*512,256*256)的多個(gè)模型,最后ensemble多個(gè)模型的輸出結(jié)果。
3.2 Image2text,Image2sentence
上面講述的圖片分類對(duì)圖片語(yǔ)義的理解比較粗粒度,那么我們會(huì)想,是否可以將圖片直接轉(zhuǎn)化為一堆詞語(yǔ)或者一段文本來描述。轉(zhuǎn)化到文本后,我們積累相對(duì)深的文本處理技術(shù)就都可以被利用起來。Image2text
首先介紹一種樸素的基于卷積神經(jīng)網(wǎng)絡(luò)的image to text方法。
- 首先它利用深度卷積神經(jīng)網(wǎng)絡(luò)和深度自動(dòng)編碼器提取圖片的多層特征,并據(jù)此提取圖片的visual word,建立倒排索引,產(chǎn)生一種有效而準(zhǔn)確的圖片搜索方法。
- 再充分利用大量的互聯(lián)網(wǎng)資源,預(yù)先對(duì)大量種子圖片做語(yǔ)義分析,然后利用相似圖片搜索,根據(jù)相似種子圖片的語(yǔ)義推導(dǎo)出新圖片的語(yǔ)義。
其中種子圖片,就是可以覆蓋所有待研究圖片的行業(yè),但較容易分析語(yǔ)義的圖片集。這種方法產(chǎn)生了更加豐富而細(xì)粒度的語(yǔ)義表征結(jié)果。雖說簡(jiǎn)單,但效果仍然不錯(cuò),方法的關(guān)鍵在于種子圖片。利用比較好的種子圖片(例如paipai數(shù)據(jù)),簡(jiǎn)單的方法也可以work得不錯(cuò)。下圖是該方法的效果圖。
圖29. 圖片語(yǔ)義tag標(biāo)注示例圖
上面的baseline方法,在訓(xùn)練數(shù)據(jù)優(yōu)質(zhì)且充分的情況下,可以取得很不錯(cuò)的圖片tag提取效果,而且應(yīng)用也非常廣泛。但上面的方法非常依賴于訓(xùn)練數(shù)據(jù),且不善于發(fā)現(xiàn)訓(xùn)練數(shù)據(jù)之外的世界。
另一個(gè)直觀的想法,是否可以通過word embedding建立image與text的聯(lián)系[26]。例如,可以先利用CNN訓(xùn)練一個(gè)圖片分類器。每個(gè)類目label可以通過word2vec映射到一個(gè)embedding表示。對(duì)于一個(gè)新圖片,先進(jìn)行分類,然后對(duì)top-n類目label所對(duì)應(yīng)的embedding按照權(quán)重(這里指這個(gè)類目所屬的概率)相加,得到這個(gè)圖片的embedding描述,然后再在word embedding空間里尋找與圖片embedding最相關(guān)的words。
Image detection
接下來再介紹下image detection。下圖是一個(gè)image detection的示例,相比于圖片分類,提取到信息將更加豐富。
圖30. 圖片detection示例
目前最先進(jìn)的detection方法應(yīng)該是Region-based CNN(簡(jiǎn)稱R-CNN)[75],是由Jeff Donahue和Ross Girshick提出的。R-CNN的具體想法是,將detection分為尋找object和識(shí)別object兩個(gè)過程。在第一步尋找object,可以利用很多region detection算法,譬如selective search[76],CPMC,objectness等,利用很多底層特征,譬如圖像中的色塊,圖像中的邊界信息。第二步識(shí)別object,就可以利用“CNN+SVM”來做分類識(shí)別。
圖31. Image detection系統(tǒng)框圖
- 給定一張圖片,利用selective search方法[76]來產(chǎn)生2000個(gè)候選窗口。
- 然后利用CNN進(jìn)行對(duì)每一個(gè)候選窗口提取特征(取全連接層的倒數(shù)第一層),特征長(zhǎng)度為4096。
- 最后用SVM分類器對(duì)這些特征進(jìn)行分類(每一個(gè)目標(biāo)類別一個(gè)SVM分類器),SVM的分類器的參數(shù)個(gè)數(shù)為:4096*N,其中N為目標(biāo)的類別個(gè)數(shù),所以比較容易擴(kuò)展目標(biāo)類別數(shù)。
Image2sentence
那能否通過深度學(xué)習(xí)方法,直接根據(jù)image產(chǎn)生sentence呢?我們先看一組實(shí)際效果,如下圖所示(copy from 文獻(xiàn)[43])。
圖32. image2sentence示例圖
關(guān)于這個(gè)方向,最近一nian取得了比較大的突破,工業(yè)界(Baidu[77],Google[43],Microsoft[80,81]等)和學(xué)術(shù)界(Stanford[35],Borkeley[79],UML[19],Toronto[78]等)都發(fā)表了一系列論文。
簡(jiǎn)單歸納一下,對(duì)這個(gè)問ti,主要有兩種解決思路:
- Pipeline方法。這個(gè)思路相對(duì)直觀一點(diǎn),先學(xué)習(xí)到image中visual object對(duì)應(yīng)的word(如上一節(jié)image detection所述),再加上language model,就可以生成sentence。這種方法各個(gè)模塊可以獨(dú)立調(diào)試,相對(duì)來說,更靈活一點(diǎn)。如下圖所示,這是microsoft的一個(gè)工作[81],它分為三步:(1)利用上一節(jié)提到的思路detect words;(2)基于language model(RNN or LSTM)產(chǎn)生句子;(3)利用相關(guān)性模型對(duì)句子打分排序。
? ??????
圖33. “pipeline” image captioning
- End-to-end方法,即通過一個(gè)模型直接將image轉(zhuǎn)換到sentence。google基于CNN+RNN開發(fā)了一個(gè)Image Caption Generator[43]。這個(gè)工作主要受到了基于RNN的機(jī)器翻譯[27][42]的啟發(fā)。在機(jī)器翻譯中,“encoder” RNN讀取源語(yǔ)言的句子,將其變換到一個(gè)固定長(zhǎng)度的向量表示,然后“decoder” RNN將向量表示作為隱層初始值,產(chǎn)生目標(biāo)語(yǔ)言的句子。那么一個(gè)直觀的想法是,能否復(fù)用上面的框架,考慮到CNN在圖片特征提取方面的成功應(yīng)用,將encoder RNN替換成CNN,先利用CNN將圖片轉(zhuǎn)換到一個(gè)向量表示,再利用RNN將其轉(zhuǎn)換到sentence。可以通過圖片分類提前訓(xùn)練好CNN模型,將CNN最后一個(gè)隱藏層作為encoder RNN的輸入,從而產(chǎn)生句子描述。如下圖所示。
圖34. “CNN+LSTM” Image Caption Generator
Li-Feifei團(tuán)隊(duì)在文獻(xiàn)[35]也提到一種image2sentence方法,如下圖所示。與google的做法類似,圖片的CNN特征作為RNN的輸入。
圖35. “CNN+RNN”生成圖片描述
此方法有開源實(shí)現(xiàn),有興趣請(qǐng)參考:neuraltalk
3.3 訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)的tricks
考慮到圖片語(yǔ)義分析的方法大部分都是基于深度學(xué)習(xí)的,Hinton的學(xué)生Ilya Sutskever寫了一篇深度學(xué)習(xí)的綜述文章[47],其中提到了一些訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)的tricks,整理如下:
- 保證訓(xùn)練數(shù)據(jù)的質(zhì)量
- 使訓(xùn)練數(shù)據(jù)各維度數(shù)值的均值為0,方差為一個(gè)比較小的值
- 訓(xùn)練時(shí)使用minbatch,但不要設(shè)得過大,在合理有效的情況下,越小越好。
- 梯度歸一化,將梯度值除于minbatch size。
- 設(shè)置一個(gè)正常的learning rate,validation無提升后,則將原learning rate除于5繼續(xù)
- 模型參數(shù)隨機(jī)初始化。如果是深層神經(jīng)網(wǎng)絡(luò),不要設(shè)置過小的random weights。
- 如果是在訓(xùn)練RNN or LSTM,對(duì)梯度設(shè)置一個(gè)限值,不能超過15 or 5。
- 注意檢查梯度計(jì)算的正確性
- 如果是訓(xùn)練LSTM,initialize the biases of the forget gates of the LSTMs to large values
- Data augmentation很實(shí)用。
- Dropout在訓(xùn)練時(shí)很有效,不過記得測(cè)試時(shí)關(guān)掉Dropout。
- Ensembling。訓(xùn)練多個(gè)神經(jīng)網(wǎng)絡(luò),最后計(jì)算它們的預(yù)測(cè)值的平均值。
4. 總結(jié)
4.1 語(yǔ)義分析方法在實(shí)際業(yè)務(wù)中的使用
前面講述了很多語(yǔ)義分析方法,接下來我們看看如何利用這些方法幫忙我們的實(shí)際業(yè)務(wù),這里舉一個(gè)例子,用戶廣告的語(yǔ)義匹配。
在廣點(diǎn)通系統(tǒng)中,用戶與廣告的關(guān)聯(lián)是通過定向條件來匹配的,譬如某些廣告定向到“北京+男性”,那么當(dāng)“北京+男性”的用戶來到時(shí),所有符合定向的廣告就將被檢索出,再按照“ecpm*quality”排序,將得分最高的展示給用戶。但是憑借一些人口屬性,用戶與廣告之間的匹配并不精確,做不到“廣告就是想用戶所想”,所以用戶和廣告的語(yǔ)義分析就將派上用場(chǎng)了,可以從這樣兩方面來說明:
- 特征提取。基于上面介紹的方法,提取用戶和廣告的語(yǔ)義特征。
- 用戶語(yǔ)義特征。可以從用戶的搜索,購(gòu)物,點(diǎn)擊,閱讀記錄中發(fā)現(xiàn)用戶興趣。考慮到最終的用戶描述都是文本,那么文本topic分析,文本分類,文本keyword提取,文本核心term提取都可以運(yùn)用起來,分析出用戶的語(yǔ)義屬性,還可以利用矩陣分解和文本分類找到相似用戶群。
- 廣告語(yǔ)義特征。在廣點(diǎn)通里,廣告可以從兩個(gè)維度來描述,一方面是文本,包括廣告title和landing page,另一方面是廣告展示圖片。利用文本和圖片的語(yǔ)義分析方法,我們可以提取出廣告的topic,類目,keyword,tag描述。
- 語(yǔ)義匹配。提取到相應(yīng)的語(yǔ)義特征之后,怎么用于改善匹配呢?
- 用戶-廣告的語(yǔ)義檢索。基于keyword、類目以及topic,對(duì)廣告建立相應(yīng)的倒排索引,直接用于廣告檢索。
- 用戶-廣告的語(yǔ)義特征。分別提取用戶和廣告的語(yǔ)義特征,用于計(jì)算用戶-廣告的relevance,pctr,pcvr,達(dá)到精確排序。
4.2 Future
對(duì)于文本和圖片的語(yǔ)義分析,可以看到:最近幾nian,在某些任務(wù)上,基于深度學(xué)習(xí)的方法逐漸超過了傳統(tǒng)方法的效果。但目前為止,對(duì)于深度學(xué)習(xí)的發(fā)掘才剛剛開始,比較驚艷的神經(jīng)網(wǎng)絡(luò)方法,也只有有限幾種,譬如CNN,RNN,RBM等。
上文只是介紹了我們?cè)诠ぷ髦袑?shí)踐過的幾個(gè)小點(diǎn),還有更多方法需要我們?nèi)ネ诰?#xff1a;
- Video。Learn about 3D structure from motion。如文獻(xiàn)[19]所示,研究將視頻也轉(zhuǎn)換到自然語(yǔ)言。
- Deep Learning + Structured Prediction,用于syntactic representation。
4.3 總結(jié)
上文主要從文本、圖片這兩方面講述了語(yǔ)義分析的一些方法,并結(jié)合個(gè)人經(jīng)驗(yàn)做了一點(diǎn)總結(jié)。
原本想寫得更全面一些,但寫的時(shí)候才發(fā)現(xiàn)上面所述的只是滄海一粟,后面還有更多語(yǔ)義分析的內(nèi)容之后再更新。另外為避免看到大篇理論就頭痛,文中盡可能不出現(xiàn)復(fù)雜的公式和理論推導(dǎo)。如果有興趣,可以進(jìn)一步閱讀參考文獻(xiàn),獲得更深的理解。謝謝。
Reference:
總結(jié)
- 上一篇: Caffe实践】如何利用Caffe训练I
- 下一篇: opencv URL