語義分析,本文指運(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)厦章。
本文主要由以下四部分組成:文本基本處理镇匀,文本語義分析,圖片語義分析闷袒,語義分析小結(jié)坑律。先講述文本處理的基本方法,這構(gòu)成了語義分析的基礎(chǔ)囊骤。接著分文本和圖片兩節(jié)講述各自語義分析的一些方法晃择,值得注意的是,雖說分為兩節(jié)也物,但文本和圖片在語義分析方法上有很多共通與關(guān)聯(lián)宫屠。最后我們簡(jiǎn)單介紹下語義分析在廣點(diǎn)通“用戶廣告匹配”上的應(yīng)用,并展望一下未來的語義分析方法滑蚯。
1. 文本基本處理
在講文本語義分析之前浪蹂,我們先說下文本基本處理,因?yàn)樗鼧?gòu)成了語義分析的基礎(chǔ)告材。而文本處理有很多方面坤次,考慮到本文主ti,這里只介紹中文分詞以及Term Weighting斥赋。
1.1 中文分詞
拿到一段文本后缰猴,通常情況下,首先要做分詞疤剑。分詞的方法一般有如下幾種:
*基于字符串匹配的分詞方法滑绒。此方法按照不同的掃描方式,逐個(gè)查找詞庫進(jìn)行分詞隘膘。根據(jù)掃描方式可細(xì)分為:正向最 大匹配疑故,反向最大匹配,雙向最大匹配弯菊,最小切分(即最短路徑)纵势;總之就是各種不同的啟發(fā)規(guī)則。
*全切分方法管钳。它首先切分出與詞庫匹配的所有可能的詞吨悍,再運(yùn)用統(tǒng)計(jì)語言模型決定最優(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ì)語言模型(例如n-gram)[18]找到最優(yōu)路徑工猜,最后可能還需要命名實(shí)體識(shí)別。下圖中“南京市 長(zhǎng)江 大橋”的語言模型得分菱蔬,即P(南京市篷帅,長(zhǎng)江,大橋)最高拴泌,則為最優(yōu)切分魏身。
圖1. “南京市長(zhǎng)江大橋”語言模型得分
*由字構(gòu)詞的分詞方法◎礁可以理解為字的分類問ti箭昵,也就是自然語言處理中的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 語言模型
前面在講“全切分分詞”方法時(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ù)稀疏的問ti儡毕,所以后來,又逐漸提出更多的語言模型扑媚,例如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問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)系資源庫里提取訓(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)頁特征等。
? *基于廣告主購買的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)[劉知遠(yuǎn). 基于文檔主ti結(jié)構(gòu)的關(guān)鍵詞抽取方法研究]捞烟。