语义分析的一些方法(上篇)
語義分析,本文指運(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)。
工作這幾年,陸陸續(xù)續(xù)實(shí)踐過一些項(xiàng)目,有搜索廣告,社交廣告,微博廣告,品牌廣告,內(nèi)容廣告等。要使我們廣告平臺(tái)效益最大化,首先需要理解用戶,Context(將展示廣告的上下文)和廣告,才能將最合適的廣告展示給用戶。而這其中,就離不開對(duì)用戶,對(duì)上下文,對(duì)廣告的語義分析,由此催生了一些子項(xiàng)目,例如文本語義分析,圖片語義理解,語義索引,短串語義關(guān)聯(lián),用戶廣告語義匹配等。
接下來我將寫一寫我所認(rèn)識(shí)的語義分析的一些方法,雖說我們?cè)谧龅臅r(shí)候,效果導(dǎo)向居多,方法理論理解也許并不深入,不過權(quán)當(dāng)個(gè)人知識(shí)點(diǎn)總結(jié),有任何不當(dāng)之處請(qǐng)指正,謝謝。
本文主要由以下四部分組成:文本基本處理,文本語義分析,圖片語義分析,語義分析小結(jié)。先講述文本處理的基本方法,這構(gòu)成了語義分析的基礎(chǔ)。接著分文本和圖片兩節(jié)講述各自語義分析的一些方法,值得注意的是,雖說分為兩節(jié),但文本和圖片在語義分析方法上有很多共通與關(guān)聯(lián)。最后我們簡(jiǎn)單介紹下語義分析在廣點(diǎn)通“用戶廣告匹配”上的應(yīng)用,并展望一下未來的語義分析方法。
1 文本基本處理
在講文本語義分析之前,我們先說下文本基本處理,因?yàn)樗鼧?gòu)成了語義分析的基礎(chǔ)。而文本處理有很多方面,考慮到本文主題,這里只介紹中文分詞以及Term Weighting。
1.1 中文分詞
拿到一段文本后,通常情況下,首先要做分詞。分詞的方法一般有如下幾種:
- 基于字符串匹配的分詞方法。此方法按照不同的掃描方式,逐個(gè)查找詞庫(kù)進(jìn)行分詞。根據(jù)掃描方式可細(xì)分為:正向最大匹配,反向最大匹配,雙向最大匹配,最小切分(即最短路徑);總之就是各種不同的啟發(fā)規(guī)則。
- 全切分方法。它首先切分出與詞庫(kù)匹配的所有可能的詞,再運(yùn)用統(tǒng)計(jì)語言模型決定最優(yōu)的切分結(jié)果。它的優(yōu)點(diǎn)在于可以解決分詞中的歧義問題。下圖是一個(gè)示例,對(duì)于文本串“南京市長(zhǎng)江大橋”,首先進(jìn)行詞條檢索(一般用Trie存儲(chǔ)),找到匹配的所有詞條(南京,市,長(zhǎng)江,大橋,南京市,長(zhǎng)江大橋,市長(zhǎng),江大橋,江大,橋),以詞網(wǎng)格(word lattices)形式表示,接著做路徑搜索,基于統(tǒng)計(jì)語言模型(例如n-gram)[18]找到最優(yōu)路徑,最后可能還需要命名實(shí)體識(shí)別。下圖中“南京市 長(zhǎng)江 大橋”的語言模型得分,即P(南京市,長(zhǎng)江,大橋)最高,則為最優(yōu)切分。
 圖1. “南京市長(zhǎng)江大橋”語言模型得分 
- 由字構(gòu)詞的分詞方法。可以理解為字的分類問題,也就是自然語言處理中的sequence labeling問題,通常做法里利用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 語言模型
前面在講“全切分分詞”方法時(shí),提到了語言模型,并且通過語言模型,還可以引出詞向量,所以這里把語言模型簡(jiǎn)單闡述一下。
語言模型是用來計(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)單的語言模型是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語言模型簡(jiǎn)單有效,但是它只考慮了詞的位置關(guān)系,沒有考慮詞之間的相似度,詞語法和詞語義,并且還存在數(shù)據(jù)稀疏的問題,所以后來,又逐漸提出更多的語言模型,例如Class-based ngram model,topic-based ngram model,cache-based ngram model,skipping ngram model,指數(shù)語言模型(最大熵模型,條件隨機(jī)域模型)等。若想了解更多請(qǐng)參考文章[18]。
最近,隨著深度學(xué)習(xí)的興起,神經(jīng)網(wǎng)絡(luò)語言模型也變得火熱[4]。用神經(jīng)網(wǎng)絡(luò)訓(xùn)練語言模型的經(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)詞語之間的相似性可以通過詞向量來體現(xiàn);(2)自帶平滑功能。文獻(xiàn)[3]不僅提出神經(jīng)網(wǎng)絡(luò)語言模型,還順帶引出了詞向量,關(guān)于詞向量,后文將再細(xì)述。
圖3. 基于神經(jīng)網(wǎng)絡(luò)的語言模型
從最新文獻(xiàn)看,目前state-of-the-art語言模型應(yīng)該是基于循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network)的語言模型,簡(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)的語言模型
如上圖所示,這是一個(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)練中文語言模型將很簡(jiǎn)單,上面“南京市 長(zhǎng)江 大橋”就是rnnlm的預(yù)測(cè)結(jié)果。
基于RNN的language model利用BPTT(BackPropagation through time)算法比較難于訓(xùn)練,原因就是深度神經(jīng)網(wǎng)絡(luò)里比較普遍的vanishing gradient問題[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問題。
圖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)頁特征等。
- 基于廣告主購(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的模型。
- 基于文檔主題結(jié)構(gòu)的關(guān)鍵詞抽取,具體可以參考文獻(xiàn)[71]。
 
總結(jié)
以上是生活随笔為你收集整理的语义分析的一些方法(上篇)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: adaboost和GBDT的区别以及xg
- 下一篇: 语义分析的一些方法(中篇)
