文本挖掘:語義分析的一些方法

2021-12-26 SAS中文論壇

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

1 文本基本處理

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

1.1 中文分詞

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

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

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

圖1. 「南京市長江大橋」語言模型得分

由字構詞的分詞方法。可以理解為字的分類問題,也就是自然語言處理中的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等模型,分詞也可以基於深度學習方法來做,如文獻[9][10]所介紹,也取得了state-of-the-art的結果。

圖2. 基於深度學習的中文分詞

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

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

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

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,指數語言模型(最大熵模型,條件隨機域模型)等。

最近,隨著深度學習的興起,神經網絡語言模型也變得火熱[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]不僅提出神經網絡語言模型,還順帶引出了詞向量,關於詞向量,後文將再細述。

圖3. 基於神經網絡的語言模型

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

圖4. 基於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的詳細介紹請參考文獻[54,49,52]。LSTM通過網絡結構的修改,從而避免vanishing gradient問題。

圖5. LSTM memory cell

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

1.3 Term WeightingTerm重要性

對文本分詞後,接下來需要對分詞後的每個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]有:

圖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是詞頻,表示這個詞出現的次數。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結果。

圖9. 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中的重要程度就越高。

核心詞、關鍵詞提取2 文本語義分析

前面講到一些文本基本處理方法。一個文本串,對其進行分詞和重要性打分後(當然還有更多的文本處理任務),就可以開始更高層的語義分析任務。

2.1 Topic Model

首先介紹主題模型。說到主題模型,第一時間會想到pLSA,NMF,LDA。關於這幾個目前業界最常用的主題模型,已經有相當多的介紹了,譬如文獻[60,64]。在這裡,主要想聊一下主題模型的應用以及最新進展(考慮到LDA是pLSA的generalization,所以下面只介紹LDA)。

LDA訓練算法簡單介紹

LDA的推導這裡略過不講,具體請參考文獻[64]。下面我們主要看一下怎麼訓練LDA。

在Blei的原始論文中,使用variational inference和EM算法進行LDA推斷(與pLSA的推斷過程類似,E-step採用variational inference),但EM算法可能推導出局部最優解,且相對複雜。目前常用的方法是基於gibbs sampling來做[57]。

Step1: 隨機初始化每個詞的topic,並統計兩個頻率計數矩陣:Doc-Topic 計數矩陣N(t,d),描述每個文檔中的主題頻率分布;Word-Topic 計數矩陣N(w,t),表示每個主題下詞的頻率分布。

Step2: 遍歷訓練語料,按照概率公式(下圖所示)重新採樣每個詞所對應的topic, 更新N(t,d)和N(w,t)的計數。

Step3: 重複 step2,直到模型收斂。

對文檔d中詞w的主題z進行重新採樣的公式有非常明確的物理意義,表示為P(w|z)P(z|d),直觀的表示為一個「路徑選擇」的過程。

圖10. gibbs sampling過程圖

主題模型的應用點

在廣點通內部,主題模型已經在很多方面都得到成功應用[65],譬如文本分類特徵,相關性計算,ctr預估,精確廣告定向,矩陣分解等。具體來說,基於主題模型,可以計算出文本,用戶的topic分布,將其當作pctr,relevance的特徵,還可以將其當作一種矩陣分解的方法,用於降維,推薦等。不過在我們以往的成功運用中,topic模型比較適合用做某些機器學習任務的特徵,而不適合作為一種獨立的方法去解決某種特定的問題,例如觸發,分類。Blei是這樣評價lda的:it can easily be used as a module in more complicated models for more complicated goals。

為什麼topic model不適合作為一種獨立的方法去解決某種特定的問題(例如分類,觸發等)。

個人總結,主要原因是lda模型可控性可解釋性相對比較差:對於每個topic,不能用很明確的語義歸納出這個topic在講什麼;重新訓練一遍lda模型,每個topic id所對應的語義可能發生了變化;有些topic的準確性比較好,有些比較差,而對於比較差的topic,沒有特別好的針對性的方法去優化它;

另外一個就是topic之間的重複,特別是在topic數目比較多的情況,重複幾乎是不可避免的,當時益總(yiwang)在開發peacock的時候,deduplicate topic就是一個很重要的任務。如果多個topic描述的意思一致時,用topic id來做檢索觸發,效果大半是不好的,後來我們也嘗試用topic word來做,但依舊不夠理想。

主題模型並行化

在文獻[67]中,Newman團隊提出了LDA算法的並行化版本Approximate distributed-LDA,如下圖所示:

圖11. AD-LDA算法

在原始gibbs sampling算法裡,N(w,t)這個矩陣的更新是串行的,但是研究發現,考慮到N(w,t)矩陣在迭代過程中,相對變化較小,多個worker獨立更新N(w,t),在一輪迭代結束後再根據多個worker的本地更新合併到全局更新N(w,t),算法依舊可以收斂[67]。

那麼,主題模型的並行化(不僅僅是主題模型,其實是絕大部分機器學習算法),主要可以從兩個角度來說明:數據並行和模型並行。

數據並行。這個角度相對比較直觀,譬如對於LDA模型,可以將訓練數據按照worker數目切分為M片(M為worker數),每個worker保存一份全局的N(w,t)矩陣,在一輪迭代裡,各個worker獨立計算,迭代結束後,合併各個worker的本地更新。這個思路可以借用目前通用的並行計算框架,譬如Spark,Hadoop,Graphlab等來實現。

模型並行。考慮到矩陣N(w,t)在大規模主題模型中相當巨大,單機內存不可能存下。所以直觀的想法,可以將N(w,t)也切分成多個分片。N(w,t)可以考慮使用全局的parameter server來存儲,也可以考慮存儲在不同worker上,利用MPI AllReduce來通信。

數據與模型並行,可以形象的描述為一個棋盤。棋盤的行按照數據劃分,棋盤的列按照模型劃分。LDA的並行化,就是通過這樣的切分,將原本巨大的,不可能在單機存儲的矩陣切分到不同的機器,使每臺機器都能夠將參數存儲在內存。再接著,各個worker相對獨立計算,計算的過程中不時按照某些策略同步模型數據。

最近幾年裡,關於LDA並行化已有相當多的開源實現,譬如:

PLDA,PLDA+

Yahoo LDA

Parameter server

最近的並行LDA實現Peacock[70,65]和LigthLda[13]沒有開源,但我們可以從其論文一窺究竟,總體來說,並行化的大體思路是一致的。譬如LightLDA[13],下圖是實現架構框圖,它將訓練數據切分成多個Block,模型通過parameter server來同步,每個data block,類似於sliding windows,在計算完V1的採樣後,才會去計算V2的採樣(下圖中V1,V2,V3表示word空間的劃分,即模型的劃分)。

圖12. LightLda並行結構圖

2.2 詞向量,句向量詞向量是什麼

在文本分析的vector space model中,是用向量來描述一個詞的,譬如最常見的One-hot representation。One-hot representation方法的一個明顯的缺點是,詞與詞之間沒有建立關聯。在深度學習中,一般用Distributed Representation來描述一個詞,常被稱為「Word Representation」或「Word Embedding」,也就是我們俗稱的「詞向量」。

詞向量起源於hinton在1986年的論文[11],後來在Bengio的ffnnlm論文[3]中,被發揚光大,但它真正被我們所熟知,應該是word2vec[14]的開源。在ffnnlm中,詞向量是訓練語言模型的一個副產品,不過在word2vec裡,是專門來訓練詞向量,所以word2vec相比於ffnnlm的區別主要體現在:

圖13. word2vec的訓練算法

上圖是word2vec的兩種訓練算法:CBOW(continuous bag-of-words)和Skip-gram。在cbow方法裡,訓練目標是給定一個word的context,預測word的概率;在skip-gram方法裡,訓練目標則是給定一個word,預測word的context的概率。

關於word2vec,在算法上還有較多可以學習的地方,例如利用huffman編碼做層次softmax,negative sampling,工程上也有很多trick,具體請參考文章[16][17]。

詞向量的應用

詞向量的應用點:

可以挖掘詞之間的關係,譬如同義詞。

可以將詞向量作為特徵應用到其他機器學習任務中,例如作為文本分類的feature,Ronan collobert在Senna[37]中將詞向量用於POS, CHK, NER等任務。

用於機器翻譯[28]。分別訓練兩種語言的詞向量,再通過詞向量空間中的矩陣變換,將一種語言轉變成另一種語言。

word analogy,即已知a之於b猶如c之於d,現在給出 a、b、c,C(a)-C(b)+C(c)約等於C(d),C(*)表示詞向量。可以利用這個特性,提取詞語之間的層次關係。

Connecting Images and Sentences,image understanding。例如文獻,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,點擊link1,link2

除了產生詞向量,word2vec還有很多其他應用領域,對此我們需要把握兩個概念:doc和word。在詞向量訓練中,doc指的是一篇篇文章,word就是文章中的詞。

句向量

分析完word distributed representation,我們也許會問,phrase,sentence是否也有其distributed representation。最直觀的思路,對於phrase和sentence,我們將組成它們的所有word對應的詞向量加起來,作為短語向量,句向量。在參考文獻[34]中,驗證了將詞向量加起來的確是一個有效的方法,但事實上還有更好的做法。

Le和Mikolov在文章《Distributed Representations of Sentences and Documents》[20]裡介紹了sentence vector,這裡我們也做下簡要分析。

先看c-bow方法,相比於word2vec的c-bow模型,區別點有:

訓練過程中新增了paragraph id,即訓練語料中每個句子都有一個唯一的id。paragraph id和普通的word一樣,也是先映射成一個向量,即paragraph vector。paragraph vector與word vector的維數雖一樣,但是來自於兩個不同的向量空間。在之後的計算裡,paragraph vector和word vector累加或者連接起來,作為輸出層softmax的輸入。在一個句子或者文檔的訓練過程中,paragraph id保持不變,共享著同一個paragraph vector,相當於每次在預測單詞的概率時,都利用了整個句子的語義。

在預測階段,給待預測的句子新分配一個paragraph id,詞向量和輸出層softmax的參數保持訓練階段得到的參數不變,重新利用梯度下降訓練待預測的句子。待收斂後,即得到待預測句子的paragraph vector。

圖14. sentence2vec cBow算法

sentence2vec相比於word2vec的skip-gram模型,區別點為:在sentence2vec裡,輸入都是paragraph vector,輸出是該paragraph中隨機抽樣的詞。

圖15. sentence2vec Skip-gram算法

下面是sentence2vec的結果示例。先利用中文sentence語料訓練句向量,然後通過計算句向量之間的cosine值,得到最相似的句子。可以看到句向量在對句子的語義表徵上還是相當驚嘆的。

圖16. sentence2vec 結果示例

詞向量的改進

學習詞向量的方法主要分為:Global matrix factorization和Shallow Window-Based。Global matrix factorization方法主要利用了全局詞共現,例如LSA;Shallow Window-Based方法則主要基於local context window,即局部詞共現,word2vec是其中的代表;Jeffrey Pennington在word2vec之後提出了GloVe,它聲稱結合了上述兩種方法,提升了詞向量的學習效果。它與word2vec的更多對比請點擊GloVe vs word2vec,GloVe & word2vec評測。

目前通過詞向量可以充分發掘出「一義多詞」的情況,譬如「快遞」與「速遞」;但對於「一詞多義」,束手無策,譬如「蘋果」(既可以表示蘋果手機、電腦,又可以表示水果),此時我們需要用多個詞向量來表示多義詞。

2.3 卷積神經網絡卷積

介紹卷積神經網絡(convolutional neural network,簡記cnn)之前,我們先看下卷積。

在一維信號中,卷積的運算,請參考wiki,其中的圖示很清楚。在圖像處理中,對圖像用一個卷積核進行卷積運算,實際上是一個濾波的過程。下面是卷積的數學表示:

f(x,y)∗w(x,y)=∑s=−aa∑t=−bbw(s,t)f(x−s,y−t)

f(x,y)是圖像上點(x,y)的灰度值,w(x,y)則是卷積核,也叫濾波器。卷積實際上是提供了一個權重模板,這個模板在圖像上滑動,並將中心依次與圖像中每一個像素對齊,然後對這個模板覆蓋的所有像素進行加權,並將結果作為這個卷積核在圖像上該點的響應。如下圖所示,卷積操作可以用來對圖像做邊緣檢測,銳化,模糊等。

圖17. 卷積操作示例

什麼是卷積神經網絡

卷積神經網絡是一種特殊的、簡化的深層神經網絡模型,它的每個卷積層都是由多個卷積濾波器組成。它最先由lecun在LeNet[40]中提出,網絡結構如下圖所示。在cnn中,圖像的一小部分(局部感受區域)作為層級結構的最低層的輸入,信息再依次傳輸到不同的層,每層通過多個卷積濾波器去獲得觀測數據的最顯著的特徵。

圖18. Lenet5網絡結構圖

卷積神經網絡中的每一個特徵提取層(卷積層)都緊跟著一個用來求局部平均與二次提取的計算層(pooling層),這種特有的兩次特徵提取結構使網絡在識別時對輸入樣本有較高的畸變容忍能力。如下圖所示,就是一個完整的卷積過程[21]。

圖19. 一次完整的卷積過程

它的特殊性體現在兩點:(1)局部感受野(receptive field),cnn的神經元間的連接是非全連接的;(2)同一層中同一個卷積濾波器的權重是共享的(即相同的)。局部感受野和權重共享這兩個特點,使cnn網絡結構更類似於生物神經網絡,降低了網絡模型的複雜度,減少了神經網絡需要訓練的參數的個數。

卷積神經網絡的一些細節

接下來結合文獻[25],再講講卷積神經網絡的一些注意點和問題。

激勵函數,要選擇非線性函數,譬如tang,sigmoid,rectified liner。在CNN裡,relu用得比較多,原因在於:(1)簡化BP計算;(2)使學習更快。(3)避免飽和問題(saturation issues)

Pooling:其作用在於(1)對一些小的形態改變保持不變性,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

訓練CNN:back-propagation;stochastic gradient descent;Momentum;Classification loss,cross-entropy;Gpu實現。

預處理:Mean removal;Whitening(ZCA)

增強泛化能力:Data augmentation;Weight正則化;在網絡裡加入噪聲,包括DropOut,DropConnect,Stochastic pooling。

DropOut:只在全連接層使用,隨機的將全連接層的某些神經元的輸出置為0。

DropConnect:也只在全連接層使用,Random binary mask on weights

Stochastic Pooling:卷積層使用。Sample location from multinomial。

模型不work,怎麼辦?結合我自身的經驗,learning rate初始值設置得太大,開始設置為0.01,以為很小了,但實際上0.001更合適。

卷積神經網絡在文本上的應用

卷積神經網絡在image classify和image detect上得到諸多成功的應用,後文將再詳細闡述。但除了圖片外,它在文本分析上也取得一些成功的應用。

基於CNN,可以用來做文本分類,情感分析,本體分類等[36,41,84]。傳統文本分類等任務,一般基於bag of words或者基於word的特徵提取,此類方法一般需要領域知識和人工特徵。利用CNN做,方法也類似,但一般都是基於raw text,CNN模型的輸入可以是word series,可以是word vector,還可以是單純的字符。比起傳統方法,CNN不需要過多的人工特徵。

將word series作為輸入,利用CNN做文本分類。如下圖所示[36],該CNN很簡單,共分四層,第一層是詞向量層,doc中的每個詞,都將其映射到詞向量空間,假設詞向量為k維,則n個詞映射後,相當於生成一張n*k維的圖像;第二層是卷積層,多個濾波器作用於詞向量層,不同濾波器生成不同的feature map;第三層是pooling層,取每個feature map的最大值,這樣操作可以處理變長文檔,因為第三層輸出只依賴於濾波器的個數;第四層是一個全連接的softmax層,輸出是每個類目的概率。除此之外,輸入層可以有兩個channel,其中一個channel採用預先利用word2vec訓練好的詞向量,另一個channel的詞向量可以通過backpropagation在訓練過程中調整。這樣做的結果是:在目前通用的7個分類評測任務中,有4個取得了state-of-the-art的結果,另外3個表現接近最好水平。

圖20.基於CNN的文本分類

利用cnn做文本分類,還可以考慮到詞的順序。利用傳統的」bag-of-words + maxent/svm」方法,是沒有考慮詞之間的順序的。文獻[41]中提出兩種cnn模型:seq-cnn, bow-cnn,利用這兩種cnn模型,均取得state-of-the-art結果。

將doc character作為輸入,利用CNN做文本分類。文獻[86]介紹了一種方法,不利用word,也不利用word vector,直接將字符系列作為模型輸入,這樣輸入維度大大下降(相比於word),有利於訓練更複雜的卷積網絡。對於中文,可以將漢字的拼音系列作為輸入。

2.4 文本分類

文本分類應該是最常見的文本語義分析任務了。首先它是簡單的,幾乎每一個接觸過nlp的同學都做過文本分類,但它又是複雜的,對一個類目標籤達幾百個的文本分類任務,90%以上的準確率召回率依舊是一個很困難的事情。這裡說的文本分類,指的是泛文本分類,包括query分類,廣告分類,page分類,用戶分類等,因為即使是用戶分類,實際上也是對用戶所屬的文本標籤,用戶訪問的文本網頁做分類。

幾乎所有的機器學習方法都可以用來做文本分類,常用的主要有:lr,maxent,svm等,下面介紹一下文本分類的pipeline以及注意點。

建立分類體系。

分類相比於topic model或者聚類,一個顯著的特點是:類目體系是確定的。而不像在聚類和LDA裡,一個類被聚出來後,但這個類到底是描述什麼的,或者這個類與另外的類是什麼關係,這些是不確定的,這樣會帶來使用和優化上的困難。

一般而言,類目體系是由人工設定的。而類目體系的建立往往需要耗費很多人工研究討論,一方面由於知識面的限制,人工建立的類目體系可能不能覆蓋所有情況;另一方面,還可能存在類目之間instance數的不平衡。比較好的方法,是基於目前已有的類目體系再做一些加工,譬如ODP,FreeBase等。

還可以先用某種無監督的聚類方法,將訓練文本劃分到某些clusters,建立這些clusters與ODP類目體系的對應關係,然後人工review這些clusters,切分或者合併cluster,提煉name,再然後根據知識體系,建立層級的taxonomy。

如果類目標籤數目很多的話,我們一般會將類目標籤按照一定的層次關係,建立類目樹,如下圖所示。那麼接下來就可以利用層次分類器來做分類,先對第一層節點訓練一個分類器,再對第二層訓練n個分類器(n為第一層的節點個數),依次類推。利用層次類目樹,一方面單個模型更簡單也更準確,另一方面可以避免類目標籤之間的交叉影響,但如果上層分類有誤差,誤差將會向下傳導。

圖21. 層次類目體系

獲取訓練數據

Self-learning:兩個樣本集合,Labeled,Unlabeled。執行算法如下:

接著重複上述步驟。

舉一個例子:以前在做page分類器時,先對每一個類人工篩選一些特徵詞,然後根據這些特徵詞對億級文本網頁分類,再然後對每一個明確屬於該類的網頁提取更多的特徵詞,加入原有的特徵詞詞表,再去做分類;中間再輔以一定的人工校驗,這種方法做下來,效果還是不錯的,更關鍵的是,如果發現那個類有badcase,可以人工根據badcase調整某個特徵詞的權重,簡單粗暴又有效。

Co-training:其主要思想是:每次循環,從Labeled數據中訓練出兩個不同的分類器,然後用這兩個分類器對Unlabeled中數據進行分類,把可信度最高的數據加入到Labeled中,繼續循環直到U中沒有數據或者達到循環最大次數。

協同訓練,例如Tri-train算法:使用三個分類器.對於一個無標籤樣本,如果其中兩個分類器的判別一致,則將該樣本進行標記,並將其納入另一個分類器的訓練樣本;如此重複迭代,直至所有訓練樣本都被標記或者三個分類器不再有變化。

一般需要人工標註訓練數據。人工標註,準確率高,但標註工作量大,耗費人力。

為了減少標註代價,利用無標記的樣本,提出了半監督學習(Semi-supervised Learning),主要考慮如何利用少量的標註樣本和大量的未標註樣本進行訓練和分類的問題。這裡介紹兩種常見的半監督算法,希望了解更多請參考文獻[49]。

半監督學習,隨著訓練不斷進行,自動標記的示例中的噪音會不斷積累,其負作用會越來越大。所以如term weighting工作裡所述,還可以從其他用戶反饋環節提取訓練數據,類似於推薦中的隱式反饋。

我們看一個具體的例子,在文獻[45]中,twitter利用了三種方法,user-level priors(發布tweet的用戶屬於的領域),entity-level priors(話題,類似於微博中的#*#),url-level priors(tweet中的url)。利用上面三種數據基於一定規則獲取到基本的訓練數據,再通過Co-Training獲取更多高質量的訓練數據。上述獲取到的都是正例數據,還需要負例樣本。按照常見的方法,從非正例樣本裡隨機抽取作為負例的方法,效果並不是好,文中用到了Pu-learning去獲取高質量的負例樣本,具體請參考文獻[58]。

圖22.文獻[45]訓練數據獲取流程圖

特徵提取

對於每條instance,運用多種文本分析方法提取特徵。常見特徵有:

提取的特徵,從取值類型看,有二值特徵,浮點數特徵,離線值特徵。

特徵的預處理包括:

特徵選擇,下面這些指標都可以用作篩選區分度高的特徵。

模型訓練

model ensemble:也稱「Multi-Model System」,ensemble是提升機器學習精度的有效手段,各種競賽的冠軍隊伍的是必用手段。它的基本思想,充分利用不同模型的優勢,取長補短,最後綜合多個模型的結果。Ensemble可以設定一個目標函數(組合多個模型),通過訓練得到多個模型的組合參數(而不是簡單的累加或者多數)。譬如在做廣告分類時,可以利用maxent和決策樹,分別基於廣告title和描述,基於廣告的landing page,基於廣告圖片訓練6個分類模型。預測時可以通過ensemble的方法組合這6個模型的輸出結果。

模型選擇:通常來說,常用的有監督模型已經足夠了,譬如lr, svm, maxent, naive-bayes,決策樹等。這些基本模型之間的效果差異不大,選擇合適的即可。上一小節講到cnn時,提到深度神經網絡也可以用來做文本分類。深度神經網絡相比較於傳統方法,特徵表示能力更強,還可以自學習特徵。

模型的正則化:一般來說,L1正則化有特徵篩選的作用,用得相對較多,除此外,L2正則化,ElasticNet regularization(L1和L2的組合)也很常用。

對於多分類問題,可以選擇one-vs-all方法,也可以選擇multinomial方法。兩種選擇各有各的優點,主要考慮有:並行訓練multiple class model更複雜;不能重新訓練 a subset of topics。

model fine-tuning。借鑑文獻[72]的思路(訓練深度神經網絡時,先無監督逐層訓練參數,再有監督調優),對於文本分類也可以採用類似思路,譬如可以先基於自提取的大規模訓練數據訓練一個分類模型,再利用少量的有標註訓練數據對原模型做調優。下面這個式子是新的loss function,w是新模型參數,w0是原模型參數,l(w,b|xi,yi)是新模型的likelihood,優化目標就是最小化「新模型參數與原模型參數的差 + 新模型的最大似然函數的負數 + 正則化項」。

(註:此處有部分內容刪減,回復「語義分析」可獲取word文檔完整版)

4 總結4.1 語義分析方法在實際業務中的使用

前面講述了很多語義分析方法,接下來我們看看如何利用這些方法幫忙我們的實際業務,這裡舉一個例子,用戶廣告的語義匹配。

在廣點通系統中,用戶與廣告的關聯是通過定向條件來匹配的,譬如某些廣告定向到「北京+男性」,那麼當「北京+男性」的用戶來到時,所有符合定向的廣告就將被檢索出,再按照「ecpm*quality」排序,將得分最高的展示給用戶。但是憑藉一些人口屬性,用戶與廣告之間的匹配並不精確,做不到「廣告就是想用戶所想」,所以用戶和廣告的語義分析就將派上用場了,可以從這樣兩方面來說明:

4.2 Future

對於文本和圖片的語義分析,可以看到:最近幾年,在某些任務上,基於深度學習的方法逐漸超過了傳統方法的效果。但目前為止,對於深度學習的發掘才剛剛開始,比較驚豔的神經網絡方法,也只有有限幾種,譬如CNN,RNN,RBM等。

上文只是介紹了我們在工作中實踐過的幾個小點,還有更多方法需要我們去挖掘:



如果您覺得我們的內容對您還有點兒用,可以嘗試長按上圖二維碼打賞我們!^_^

相關焦點

  • 語義分析的一些方法(上篇)
    >語義分析,本文指運用各種機器學習方法,挖掘與學習文本、圖片等的深層次概念。工作這幾年,陸陸續續實踐過一些項目,有搜索廣告,社交廣告,微博廣告,品牌廣告,內容廣告等。要使我們廣告平臺效益最大化,首先需要理解用戶,Context(將展示廣告的上下文)和廣告,才能將最合適的廣告展示給用戶。而這其中,就離不開對用戶,對上下文,對廣告的語義分析,由此催生了一些子項目,例如文本語義分析,圖片語義理解,語義索引,短串語義關聯,用戶廣告語義匹配等。
  • 一種挖掘文本中語義相似詞的方法
    1 前言在自然語言處理工作(NLP)中,會遇到這樣的一個應用問題:如何挖掘文本中某一關鍵詞的語義相似詞或近義詞?
  • 語義分析的方法簡述之文本基本處理
    語義分析,本文指運用各種機器學習方法,挖掘與學習文本、圖片等的深層次概念。
  • 【分析方法】語義分析
    情報分析師工作循環,在我們搜集好數據後需對搜集到數據進行分析,這裡介紹其中一種分析方法語義分析。語義分析是編譯過程的一個邏輯階段, 語義分析的任務是對結構上正確的源程序進行上下文有關性質的審查,進行類型審查。語義分析是審查源程序有無語義錯誤,為代碼生成階段收集類型信息。
  • 基於文本挖掘的學習分析應用研究
    本文首先描述了學習分析、文本挖掘的概念,通過文獻分析法,對國內外採用文本挖掘技術的學習分析研究現狀進行了綜述;其次,介紹了學習分析中文本挖掘的數據來源、方法和工具;最後主要從課程評價支持、學習者知識能力測評、學習共同體分組、學習行為危機預警、學習效果預測和學習狀態可視化6個方面闡述了文本挖掘應用於學習分析中的具體實例,並對未來作進一步的展望和探討。
  • 商業分析中,如何進行文本挖掘
    而傳統的調研方法雖然可以回答「為什麼」,但時間成本高、較難及時進行熱點事件背後的洞察。我的好友吳亦凡在這篇文章中,提供了一種通過文本挖掘得出商業洞察的方法,簡單易上手,又極具價值。本文將從商業分析的視角來介紹文本挖掘的實際應用場景,以及一項完整的文本挖掘流程。本篇的重點以「器」的角度,介紹我珍藏的幾款文本挖掘工具,手把手教你製作一個精美的個性化詞雲。
  • Stata文本分析:lsemantica-潛在語義分析的文本相似性判別
    潛在語義分析2. lsemantica 命令3. Stata 實例3.1 英文實例-計算論文標題相似度3.2 中文實例-計算 MD&A 相似度4.潛在語義分析在基於詞頻的文本相似度分析中,主要存在以下問題:同一個詞彙在不同的語境中可能有不同的含義,即 「一詞多義」;不同詞彙在不同的語境中可能表達相同的含義,即 「多詞一義」。
  • 不用專業詞典,電力領域文本挖掘有多難?
    在電力領域,文本挖掘技術應用也在逐步落地推進,尤其在輔助業務優化、助力精益管理和推動服務轉型等方面展示出有著越來越重要的作用,是新環境下電力企業智能化發展所需。目前,在文本挖掘技術類別中,各行業應用較為普遍的是文本分類、自動文摘以及文本聚類等。當下,電網公司對業務數據也主要是集中在結構化數據的統計和分析,而這些方法無法直接應用在非結構化文本數據中,更無法對其中隱含的價值規律進行深度挖掘。
  • 文本挖掘實操|用文本挖掘剖析54萬首詩歌,我發現了這些
    在本文中,筆者循著這個思路,將運用若干文本挖掘方法對手頭的詩歌語料庫(該詩歌原始語料庫地址為https://github.com/Werneror/Poetry)進行深入挖掘和分析,該詩歌語料庫的基本統計數據如下:從上表可以看到,該詩歌語料庫中共計近85萬餘首詩歌,詩歌作者數量達29377位之多;其中,欄位包括「題目」、「朝代」、「作者」和「內容(詩歌)」。
  • 產品需求挖掘與排序的2大利器:文本挖掘與KANO模型
    因為最終往往通過問卷調研統計上來的用戶文本信息是非結構化數據,所以我們短時間內如果通過文本分析的話處理過程比較耗時耗力,文本分析只適合小群體,此時我們需要通過對文本信息的詞頻統計和網絡語義分析可以將文本進行聚類分析,這樣處理大量定量文本信息不僅客觀而且效率快。
  • 【工具】在線語義分析工具
    今天給大家介紹幾個語義分析工具:一、武漢烽火語義分析應用平臺武漢烽火普天信息技術有限公司是烽火科技集團旗下專業的大數據人工智慧研發企業
  • 篇章語義分析:讓機器讀懂文章
    篇章語義分析的研究建立在詞彙級、句子級語義分析之上,融合篇章上下文的全局信息,分析跨句的詞彙之間,句子與句子之間,段落與段落之間的語義關聯,從而超越詞彙和句子分析,達到對篇章等級更深層次的理解。篇章連貫性理論(Discourse coherence evaluation)是篇章語義分析研究的另一典型代表。該研究最初始於Grosz等人1995年提出的「中心定理」,通過對「中心」的刻畫直接反映了篇章連貫信息[19]。近年來,篇章連貫性分析研究獲得了比較快的發展,出現了一些操作性較強的方法和研究。
  • 文本挖掘入門課:主題模型讓文本數據處理更幸福
    全文共3480字,預計閱讀時長7分鐘在解決自然語言處理的問題上,有一種文本挖掘的方法叫做主題模型
  • 什麼是文本分析?
    文本分析是自然語言處理的一個小分支,是指從文本中抽取特徵詞進行量化以表示文本信息,文本一般指文字。NLPIR大數據語義智能分析平臺能夠完成文本分析的技術實現:精準採集:對境內外網際網路海量信息實時精準採集,有主題採集(按照信息需求的主題採集)與站點採集兩種模式(給定網址列表的站內定點採集功能)。
  • 從海量金融文本中挖掘價值信息,華為雲助力企業風控與輿情分析
    近日,在2019 CCF大數據與計算智能大賽(CCF Big Data & Computing Intelligence Contest,簡稱CCF BDCI)決賽中,華為雲語音語義創新Lab獲得金融實體級情感分析大賽冠軍,體現了在文本情感分析和知識圖譜領域的實力。
  • 文本分析淺講與文本數據簡化(基礎技術科普版21k字)
    未來需要用計算機類技術來解決,以加快計算機的語義分析能力。中國古代文學最早、最常見的話語分析方法—言、象、意的文本分析方法,才是最早的「細讀」批評理論。中西細讀批評的共通之處在於,都力求透過語言的外殼把握文本之一,如注重對語言的字、詞、句構成;聲音的節奏、格律;比喻、象徵等修辭手法的細緻分析。
  • 機器學習實例 | 淺談文本挖掘應用
    文本挖掘作為數據挖掘的分支,就是指從文本數據中抽取有價值的,事先未知的、可理解、最終可用的信息和知識的過程,即數據挖掘的對象全部由文本信息組成。本文是筆者在現實實踐與理論學習中梳理的常用文本挖掘步驟以及簡單應用,不足之處,還望指出。
  • 【數據挖掘實操】用文本挖掘剖析近5萬首《全唐詩》
    圖片顯示毛糙和不清楚,是解析度過高的緣故,點擊圖片,即可看到高清大圖楔子近些年來,弘揚中華傳統文化的現象級綜藝節目不斷湧現,如《中國漢字聽寫大會》、《中國成語大會比如,弟兄、砧杵、紀綱、捐軀、巡狩、犬吠。(2)重疊式(AA等於A): 琅琅、肅肅、忻忻、灼灼。(3)疊音(AA不等於A):琅琅(單獨拆開不能組其他詞)、的的(拆開後的單字的詞義不同)等。
  • 【工具】語義分析系統---- NLPIR
    今天給大家推薦一個語義分析系統: NLPIR NLPIR能夠全方位多角度對文本進行處理,包括:網絡抓取、正文提取、中英文分詞、詞性標註
  • 【技術】語義分析技術與知識工程
    所謂知識抽取,指的是通過對文本資料進行內容分析處理,對蘊含於文本中的知識進行識別、理解和篩選,抽取出每個知識點,並以一定的形式存入知識庫中。這裡,文本資料是原始素材,內容分析、知識識別是手段和目的,那麼如何通過對文本資料進行內容分析從而達到識別並抽取出知識的目的呢?語義分析就是有效的手段和方法。