關於語義分析的方法(上)

     語義分析,本文指運用各種機器學習方法,挖掘與學習文本、圖片等的深層次概念。

本文主要由以下四部分組成:文本基本處理,文本語義分析,圖片語義分析,語義分析小結。先講述文本處理的基本方法,這構成了語義分析的基礎。接着分文本和圖片兩節講述各自語義分析的一些方法,值得注意的是,雖說分爲兩節,但文本和圖片在語義分析方法上有很多共通與關聯。最後我們簡單介紹下語義分析在廣點通“用戶廣告匹配”上的應用,並展望一下未來的語義分析方法



1

文本基本處理

       在講文本語義分析之前,我們先說下文本基本處理,因爲它構成了語義分析的基礎。而文本處理有很多方面,考慮到本文主題,這裏只介紹中文分詞以及Term Weighting。

1.1

中文分詞

      拿到一段文本後,通常情況下,首先要做分詞。分詞的方法一般有如下幾種:

基於字符串匹配的分詞方法。此方法按照不同的掃描方式,逐個查找詞庫進行分詞。根據掃描方式可細分爲:正向最大匹配,反向最大匹配,雙向最大匹配,最小切分(即最短路徑);總之就是各種不同的啓發規則。

全切分方法。它首先切分出與詞庫匹配的所有可能的詞,再運用統計語言模型決定最優的切分結果。它的優點在於可以解決分詞中的歧義問題。下圖是一個示例,對於文本串“南京市長江大橋”,首先進行詞條檢索(一般用Trie存儲),找到匹配的所有詞條(南京,市,長江,大橋,南京市,長江大橋,市長,江大橋,江大,橋),以詞網格(word lattices)形式表示,接着做路徑搜索,基於統計語言模型(例如n-gram)[18]找到最優路徑,最後可能還需要命名實體識別。下圖中“南京市 長江 大橋”的語言模型得分,即P(南京市,長江,大橋)最高,則爲最優切分。

“南京市長江大橋”語言模型得分

      由字構詞的分詞方法。可以理解爲字的分類問題,也就是自然語言處理中的sequence labeling問題,通常做法裏利用HMM,MAXENT,MEMM,CRF等預測文本串每個字的tag[62],譬如B,E,I,S,這四個tag分別表示:beginning, inside, ending, single,也就是一個詞的開始,中間,結束,以及單個字的詞。 例如“南京市長江大橋”的標註結果可能爲:“南(B)京(I)市(E)長(B)江(E)大(B)橋(E)”。由於CRF既可以像最大熵模型一樣加各種領域feature,又避免了HMM的齊次馬爾科夫假設,所以基於CRF的分詞目前是效果最好的,具體請參考文獻[61,62,63]。除了HMM,CRF等模型,分詞也可以基於深度學習方法來做。

基於深度學習的中文分詞

     上圖是一個基於深度學習的分詞示例圖。我們從上往下看,首先對每一個字進行Lookup Table,映射到一個固定長度的特徵向量(這裏可以利用詞向量,boundary entropy,accessor variety等);接着經過一個標準的神經網絡,分別是linear,sigmoid,linear層,對於每個字,預測該字屬於B,E,I,S的概率;最後輸出是一個矩陣,矩陣的行是B,E,I,S 4個tag,利用viterbi算法就可以完成標註推斷,從而得到分詞結果。

      一個文本串除了分詞,還需要做詞性標註,命名實體識別,新詞發現等。通常有兩種方案,一種是pipeline approaches,就是先分詞,再做詞性標註;另一種是joint approaches,就是把這些任務用一個模型來完成。

      一般而言,方法一和方法二在工業界用得比較多,方法三因爲採用複雜的模型,雖準確率相對高,但耗時較大。

1.2

語言模型

       前面在講“全切分分詞”方法時,提到了語言模型,並且通過語言模型,還可以引出詞向量,所以這裏把語言模型簡單闡述一下。

        語言模型是用來計算一個句子產生概率的概率模型,即P(w_1,w_2,w_3…w_m),m表示詞的總個數。根據貝葉斯公式: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})。

最簡單的語言模型是N-Gram,它利用馬爾科夫假設,認爲句子中每個單詞只與其前n–1個單詞有關,即假設產生w_m這個詞的條件概率只依賴於前n–1個詞,則有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越大,模型可區別性越強,n越小,模型可靠性越高。

N-Gram語言模型簡單有效,但是它只考慮了詞的位置關係,沒有考慮詞之間的相似度,詞語法和詞語義,並且還存在數據稀疏的問題,所以後來,又逐漸提出更多的語言模型,例如Class-based ngram model,topic-based ngram model,cache-based ngram model,skipping ngram model,指數語言模型(最大熵模型,條件隨機域模型)等。若想了解更多請參考文章[18]。

最近,隨着深度學習的興起,神經網絡語言模型也變得火熱[4]。用神經網絡訓練語言模型的經典之作,要數Bengio等人發表的《A Neural Probabilistic Language Model》[3],它也是基於N-Gram的,首先將每個單詞w_{m-n+1},w_{m-n+2} … w_{m-1}映射到詞向量空間,再把各個單詞的詞向量組合成一個更大的向量作爲神經網絡輸入,輸出是P(w_m)。本文將此模型簡稱爲ffnnlm(Feed-forward Neural Net Language Model)。ffnnlm解決了傳統n-gram的兩個缺陷:(1)詞語之間的相似性可以通過詞向量來體現;(2)自帶平滑功能。文獻[3]不僅提出神經網絡語言模型,還順帶引出了詞向量,關於詞向量,後文將再細述。

基於神經網絡的語言模型

       從最新文獻看,目前state-of-the-art語言模型應該是基於循環神經網絡(recurrent neural network)的語言模型,簡稱rnnlm[5][6]。循環神經網絡相比於傳統前饋神經網絡,其特點是:可以存在有向環,將上一次的輸出作爲本次的輸入。而rnnlm和ffnnlm的最大區別是:ffnnmm要求輸入的上下文是固定長度的,也就是說n-gram中的 n 要求是個固定值,而rnnlm不限制上下文的長度,可以真正充分地利用所有上文信息來預測下一個詞,本次預測的中間隱層信息(例如下圖中的context信息)可以在下一次預測裏循環使用。

基於simple RNN(time-delay neural network)的語言模型

       如上圖所示,這是一個最簡單的rnnlm,神經網絡分爲三層,第一層是輸入層,第二層是隱藏層(也叫context層),第三層輸出層。 假設當前是t時刻,則分三步來預測P(w_m):

單詞w_{m-1}映射到詞向量,記作input(t)

連接上一次訓練的隱藏層context(t–1),經過sigmoid function,生成當前t時刻的context(t)

利用softmax function,預測P(w_m)

參考文獻[7]中列出了一個rnnlm的library,其代碼緊湊。利用它訓練中文語言模型將很簡單,上面“南京市 長江 大橋”就是rnnlm的預測結果。

      基於RNN的language model利用BPTT(BackPropagation through time)算法比較難於訓練,原因就是深度神經網絡裏比較普遍的vanishing gradient問題[55](在RNN裏,梯度計算隨時間成指數倍增長或衰減,稱之爲Exponential Error Decay)。所以後來又提出基於LSTM(Long short term memory)的language model,LSTM也是一種RNN網絡,LSTM通過網絡結構的修改,從而避免vanishing gradient問題。

LSTM memory cell

        如上圖所示,是一個LSTM unit。如果是傳統的神經網絡unit,output activation bi = activation_function(ai),但LSTM unit的計算相對就複雜些了,它保存了該神經元上一次計算的結果,通過input gate,output gate,forget gate來計算輸出。

1.3

TermWeighting

Term重要性

        對文本分詞後,接下來需要對分詞後的每個term計算一個權重,重要的term應該給與更高的權重。舉例來說,“什麼產品對減肥幫助最大?”的term weighting結果可能是: “什麼 0.1,產品 0.5,對 0.1,減肥 0.8,幫助 0.3,最大 0.2”。Term weighting在文本檢索,文本相關性,核心詞提取等任務中都有重要作用。

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]有:

Local weight formulas

Normalization factors

Global weight formulas

        Tf-Idf是一種最常見的term weighting方法。在上面的公式體系裏,Tf-Idf的local weight是FREQ,glocal weight是IDFB,normalization是None。tf是詞頻,表示這個詞出現的次數。df是文檔頻率,表示這個詞在多少個文檔中出現。idf則是逆文檔頻率,idf=log(TD/df),TD表示總文檔數。Tf-Idf在很多場合都很有效,但缺點也比較明顯,以“詞頻”度量重要性,不夠全面,譬如在搜索廣告的關鍵詞匹配時就不夠用。除了TF-IDF外,還有很多其他term weighting方法,例如Okapi,MI,LTU,ATC,TF-ICF[59]等。通過local,global,normalization各種公式的組合,可以生成不同的term weighting計算方法。不過上面這些方法都是無監督計算方法,有一定程度的通用性,但在一些特定場景裏顯得不夠靈活,不夠準確,所以可以基於有監督機器學習方法來擬合term weighting結果。


Okapi計算公式

        利用有監督機器學習方法來預測weight。這裏類似於機器學習的分類任務,對於文本串的每個term,預測一個[0,1]的得分,得分越大則term重要性越高。既然是有監督學習,那麼就需要訓練數據。如果採用人工標註的話,極大耗費人力,所以可以採用訓練數據自提取的方法,利用程序從搜索日誌裏自動挖掘。從海量日誌數據裏提取隱含的用戶對於term重要性的標註,得到的訓練數據將綜合億級用戶的“標註結果”,覆蓋面更廣,且來自於真實搜索數據,訓練結果與標註的目標集分佈接近,訓練數據更精確。下面列舉三種方法(除此外,還有更多可以利用的方法):

        通過上面的方法,可以提取到大量質量不錯的訓練數據(數十億級別的數據,這其中可能有部分樣本不準確,但在如此大規模數據情況下,絕大部分樣本都是準確的)。

有了訓練數據,接下來提取特徵,基於邏輯迴歸模型來預測文本串中每個term的重要性。所提取的特徵包括:

        term的自解釋特徵,例如term專名類型,term詞性,term idf,位置特徵,term的長度等;

term與文本串的交叉特徵,例如term與文本串中其他term的字面交叉特徵,term轉移到文本串中其他term的轉移概率特徵,term的文本分類、topic與文本串的文本分類、topic的交叉特徵等。

        從搜索session數據裏提取訓練數據,用戶在一個檢索會話中的檢索核心意圖是不變的,提取出核心意圖所對應的term,其重要性就高。

        從歷史短串關係資源庫裏提取訓練數據,短串擴展關係中,一個term出現的次數越多,則越重要。

        從搜索廣告點擊日誌裏提取訓練數據,query與bidword共有term的點擊率越高,它在query中的重要程度就越高。

核心詞、關鍵詞提取

        短文本串的核心詞提取。對短文本串分詞後,利用上面介紹的term weighting方法,獲取term weight後,取一定的閾值,就可以提取出短文本串的核心詞。

        長文本串(譬如web page)的關鍵詞提取。這裏簡單介紹幾種方法。想了解更多,請參考文獻[69]。

        採用基於規則的方法。考慮到位置特徵,網頁特徵等。

        基於廣告主購買的bidword和高頻query建立多模式匹配樹,在長文本串中進行全字匹配找出候選關鍵詞,再結合關鍵詞weight,以及某些規則找出優質的關鍵詞。

類似於有監督的term weighting方法,也可以訓練關鍵詞weighting的模型。

        基於文檔主題結構的關鍵詞抽取

這些是我感覺不錯的文章,如果你有不錯的文章請聯繫我,並註明作者和原文鏈接,謝謝!!


結束啦

長按二維碼關注我們

本文分享自微信公衆號 - 小白技術社(xbjss123)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章