語義分析的一些方法(一)

語義分析,本文指運用各種機器學習方法,挖掘與學習文本、圖片等的深層次概念。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)。

工作這幾年,陸陸續續實踐過一些項目,有搜索廣告,社交廣告,微博廣告,品牌廣告,內容廣告等。要使我們廣告平臺效益最大化,首先需要理解用戶,Context(將展示廣告的上下文)和廣告,才能將最合適的廣告展示給用戶。而這其中,就離不開對用戶,對上下文,對廣告的語義分析,由此催生了一些子項目,例如文本語義分析,圖片語義理解,語義索引,短串語義關聯,用戶廣告語義匹配等。

接下來我將寫一寫我所認識的語義分析的一些方法,雖說我們在做的時候,效果導向居多,方法理論理解也許並不深入,不過權當個人知識點總結,有任何不當之處請指正,謝謝。

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

1 文本基本處理

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

1.1 中文分詞

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

  • 基於字符串匹配的分詞方法。此方法按照不同的掃描方式,逐個查找詞庫進行分詞。根據掃描方式可細分爲:正向最大匹配,反向最大匹配,雙向最大匹配,最小切分(即最短路徑);總之就是各種不同的啓發規則。
  • 全切分方法。它首先切分出與詞庫匹配的所有可能的詞,再運用統計語言模型決定最優的切分結果。它的優點在於可以解決分詞中的歧義問題。下圖是一個示例,對於文本串“南京市長江大橋”,首先進行詞條檢索(一般用Trie存儲),找到匹配的所有詞條(南京,市,長江,大橋,南京市,長江大橋,市長,江大橋,江大,橋),以詞網格(word lattices)形式表示,接着做路徑搜索,基於統計語言模型(例如n-gram)[18]找到最優路徑,最後可能還需要命名實體識別。下圖中“南京市 長江 大橋”的語言模型得分,即P(南京市,長江,大橋)最高,則爲最優切分。
    rnnlm1

    圖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的結果。
    word_segmentation

    圖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,指數語言模型(最大熵模型,條件隨機域模型)等。若想了解更多請參考文章[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]不僅提出神經網絡語言模型,還順帶引出了詞向量,關於詞向量,後文將再細述。

ffnnlm

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

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

simple_rnn

圖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問題。

lstm_unit

圖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 Weighting

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

    圖6. Local weight formulas

    global_weight

    圖7. Global weight formulas

    normlization_weight

    圖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結果。

    okapi

    圖9. Okapi計算公式

  • 利用有監督機器學習方法來預測weight。這裏類似於機器學習的分類任務,對於文本串的每個term,預測一個[0,1]的得分,得分越大則term重要性越高。既然是有監督學習,那麼就需要訓練數據。如果採用人工標註的話,極大耗費人力,所以可以採用訓練數據自提取的方法,利用程序從搜索日誌裏自動挖掘。從海量日誌數據裏提取隱含的用戶對於term重要性的標註,得到的訓練數據將綜合億級用戶的“標註結果”,覆蓋面更廣,且來自於真實搜索數據,訓練結果與標註的目標集分佈接近,訓練數據更精確。下面列舉三種方法(除此外,還有更多可以利用的方法):
    • 從搜索session數據裏提取訓練數據,用戶在一個檢索會話中的檢索核心意圖是不變的,提取出核心意圖所對應的term,其重要性就高。
    • 從歷史短串關係資源庫裏提取訓練數據,短串擴展關係中,一個term出現的次數越多,則越重要。
    • 從搜索廣告點擊日誌裏提取訓練數據,query與bidword共有term的點擊率越高,它在query中的重要程度就越高。

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

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

    • term的自解釋特徵,例如term專名類型,term詞性,term idf,位置特徵,term的長度等;
    • term與文本串的交叉特徵,例如term與文本串中其他term的字面交叉特徵,term轉移到文本串中其他term的轉移概率特徵,term的文本分類、topic與文本串的文本分類、topic的交叉特徵等。
核心詞、關鍵詞提取
  • 短文本串的核心詞提取。對短文本串分詞後,利用上面介紹的term weighting方法,獲取term weight後,取一定的閾值,就可以提取出短文本串的核心詞。
  • 長文本串(譬如web page)的關鍵詞提取。這裏簡單介紹幾種方法。想了解更多,請參考文獻[69]。
    • 採用基於規則的方法。考慮到位置特徵,網頁特徵等。
    • 基於廣告主購買的bidword和高頻query建立多模式匹配樹,在長文本串中進行全字匹配找出候選關鍵詞,再結合關鍵詞weight,以及某些規則找出優質的關鍵詞。
    • 類似於有監督的term weighting方法,也可以訓練關鍵詞weighting的模型。
    • 基於文檔主題結構的關鍵詞抽取,具體可以參考文獻[71]。

參考文獻

  1. Term-weighting approaches in automatic text retrieval,Gerard Salton et.
  2. New term weighting formulas for the vector space method in information retrieval
  3. A neural probabilistic language model 2003
  4. Deep Learning in NLP-詞向量和語言模型
  5. Recurrent neural network based language models
  6. Statistical Language Models based on Neural Networks,mikolov博士論文
  7. Rnnlm library
  8. A survey of named entity recognition and classification
  9. Deep learning for Chinese word segmentation and POS tagging
  10. Max-margin tensor neural network for chinese word segmentation
  11. Learning distributed representations of concepts
  12. Care and Feeding of Topic Models: Problems, Diagnostics, and Improvements
  13. LightLda
  14. word2vec
  15. Efficient Estimation of Word Representations in Vector Space
  16. Deep Learning實戰之word2vec
  17. word2vec中的數學原理詳解 出處2
  18. 斯坦福課程-語言模型
  19. Translating Videos to Natural Language Using Deep Recurrent Neural Networks
  20. Distributed Representations of Sentences and Documents
  21. Convolutional Neural Networks卷積神經網絡
  22. A New, Deep-Learning Take on Image Recognition
  23. Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
  24. A Deep Learning Tutorial: From Perceptrons to Deep Networks
  25. Deep Learning for Computer Vision
  26. Zero-shot leanring by convex combination of semantic embeddings
  27. Sequence to sequence learning with neural network
  28. Exploting similarities among language for machine translation
  29. Grammar as Foreign Language Oriol Vinyals, Lukasz Kaiser, Terry Koo, Slav Petrov, Ilya Sutskever, Geoffrey Hinton, arXiv 2014
  30. Deep Semantic Embedding
  31. 張家俊. DNN Applications in NLP
  32. Deep learning for natural language processing and machine translation
  33. Distributed Representations for Semantic Matching
  34. distributed_representation_nlp
  35. Deep Visual-Semantic Alignments for Generating Image Descriptions
  36. Convolutional Neural Networks for Sentence Classification
  37. Senna
  38. ImageNet Large Scale Visual Recognition Challenge
  39. Krizhevsky A, Sutskever I, Hinton G E. ImageNet Classification with Deep Convolutional Neural Networks
  40. Gradient-Based Learning Applied to Document Recognition
  41. Effetive use of word order for text categorization with convolutional neural network,Rie Johnson
  42. Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation
  43. Show and Tell: A Neural Image Caption Generator
  44. Deep Image: Scaling up Image Recognition
  45. Large-Scale High-Precision Topic Modeling on Twitter
  46. A. Krizhevsky. One weird trick for parallelizing convolutional neural networks. arXiv:1404.5997, 2014
  47. A Brief Overview of Deep Learning
  48. Going deeper with convolutions. Christian Szegedy. Google Inc. 閱讀筆記
  49. Long Short-Term Memory Recurrent Neural Network Architectures for Large Scale Acoustic Modeling
  50. Semi-Supervised Learning Tutorial
  51. http://www.zhihu.com/question/24904450
  52. LONG SHORT-TERM MEMORY BASED RECURRENT NEURAL NETWORK ARCHITECTURES FOR LARGE VOCABULARY SPEECH RECOGNITION
  53. LSTM Neural Networks for Language Modeling
  54. LONG SHORT-TERM MEMORY
  55. Bengio, Y., Simard, P., Frasconi, P., “Learning long-term dependencies with gradient descent is difficult” IEEE Transactions on Neural Networks 5 (1994), pp. 157–166
  56. AliasLDA
  57. Gibbs sampling for the uninitiated
  58. Learning classifiers from only positive and unlabeled data
  59. TF-ICF: A New Term Weighting Scheme for Clustering Dynamic Data Streams
  60. LDA數學八卦
  61. Chinese Word Segmentation and Named Entity Recognition Based on Conditional Random Fields Models
  62. Conditional Random Fields: Probabilistic Models for Segmenting and Labeling Sequence Data
  63. Chinese Segmentation and New Word Detection using Conditional Random Fields
  64. Gregor Heinrich. Parameter estimation for text analysis
  65. Peacock:大規模主題模型及其在騰訊業務中的應用
  66. L. Yao, D. Mimno, and A. McCallum. Efficient methods for topic model inference on streaming document collections. In KDD, 2009.
  67. David Newman. Distributed Algorithms for Topic Models
  68. Xuemin. LDA工程實踐之算法篇
  69. Brian Lott. Survey of Keyword Extraction Techniques
  70. Yi Wang, Xuemin Zhao, Zhenlong Sun, Hao Yan, Lifeng Wang, Zhihui Jin, Liubin Wang, Yang Gao, Ching Law, and Jia Zeng. Peacock: Learning Long-Tail Topic Features for Industrial Applications. TIST’2015.
  71. 劉知遠. 基於文檔主題結構的關鍵詞抽取方法研究
  72. Hinton. Reducing the Dimensionality of Data with Neural Networks
  73. Samaneh Moghaddam. On the design of LDA models for aspect-based opinion mining
  74. The FLDA model for aspect-based opinion mining: addressing the cold start problem
  75. Ross Girshick et. Rich feature hierarchies for accurate object detection and semantic segmentation
  76. J. Uijlings, K. van de Sande, T. Gevers, and A. Smeulders. Selective search for object recognition. IJCV, 2013.
  77. Baidu/UCLA: Explain Images with Multimodal Recurrent Neural Networks
  78. Toronto: Unifying Visual-Semantic Embeddings with Multimodal Neural Language Models
  79. Berkeley: Long-term Recurrent Convolutional Networks for Visual Recognition and Description
  80. Xinlei Chen et. Learning a Recurrent Visual Representation for Image Caption Generation
  81. Hao Fang et. From Captions to Visual Concepts and Back
  82. Modeling Documents with a Deep Boltzmann Machine
  83. A Deep Dive into Recurrent Neural Nets
  84. Xiang zhang et. Text Understanding from Scratch
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章