1. 程式人生 > >經典的觀點挖掘演算法(文字挖掘系列)

經典的觀點挖掘演算法(文字挖掘系列)

    最近閱讀了一篇關於觀點挖掘KDD論文(Mining and Summarizing Customer Reviews,KDD04),其挖掘演算法很經典,特此做記錄。     該論文要解決的問題是,識別使用者評論的情感(positive or negative),並作歸納,為使用者購買產品提供真實有效的參考。歸納的形式如下(以數碼相機為例): 數碼相機:         特徵: 照片質量             Positive:    253                                 <使用者評論的句子>             Negative:    8
                                <使用者評論的句子>         特徵: 大小             Positive:    135                                 <使用者評論的句子>             Negative:    12        …… 演算法過程 1. 主要步驟:     <1> 通過使用者的評論挖掘物品的特徵     <2> 識別包含觀點的句子的情感     <3> 歸納結果 這個演算法與之前的演算法相比,亮點在於,以物品的特徵(feature-based
)來判斷句子的情感。
演算法採用的情感分析基於句子級別(sentence-level),而不是文件級別(document-level)。 2. 挖掘過程 先上圖,便於直觀理解: (1) Crawl Reviews:      第一步當然就是爬蟲,從網站上抓取使用者評論並存儲。 (2) POS Tagging:      使用NLProcessor或StanFord Parser(推薦使用)對使用者的每一句評論打POS標籤,POS標籤會給每個詞標註詞性,就像這樣: I/FW recently/RB purchased/VBD the/DT canon/JJ powershot/NN g3/NN and/CC am/VBP extremely/RB satisfied/VBN with/IN the/DT purchase/NN ./.
    (原句是:I recently purchased the canon powershot g3 and am extremely satisfied with the purchase . ) (3) Frequent Feature Identification:     要挖掘物品的特徵,那麼就要從句子中找到特徵詞。特徵詞都是名詞,在第二個步驟的例子中,NN代表的就是名詞。先將NN標註的名詞或名詞短語都抽取出來,然後根據關聯規則挖掘(association-rule mining)找出頻繁特徵集(頻繁特徵是指,在名詞總數量中所佔的比例大於最小支援度的特徵)。 (4) Feature Pruning:     剪枝是最重要的步驟之一,可以非常大地提高演算法的效果。此演算法進行了兩次剪枝:     a. Compactness pruning     頻繁特徵集包含特徵短語。由於抽取特徵短語不是人工進行的,而是直接把相鄰的兩個或多個名片語成短語,這樣組成的短語不一定有意義。因此需要判斷並決定是否剪枝。判斷規則是:短語包含的兩個或多個名詞如果出現在同一個句子中,則按順序計算兩兩之間的距離。如果每兩個名詞之間都不超過3個單詞的距離,則認為這個特徵短語是compact的(有影響力的)。如果特徵短語有影響力的句子不超過2個,則認為這個特徵短語應該被去除掉,即剪枝。     個人認為,這個剪枝作用不大。因為被篩選為頻繁特徵集的短語,在所有名詞中佔的比例是比較大的;在使用者評論的句子特別多的情況下,包含某個特徵短語的句子一般都會超過2個。所以,這個剪枝對頻繁特徵集基本沒什麼影響。     b. Redundancy pruning     考慮一種情況:camera的特徵短語 picture quality 是一個很有意義的特徵,但是如果將兩個詞分開,變成單獨的 picture 和 quality 時還很有意義嗎?顯然不是,picture 是要說明相機的拍照畫素高,還是說明相機拍照色彩好?沒有指明,那麼 picture 就說明不了相機哪方面好壞。同樣,quality 是說明拍照圖片好看,還是相機電池質量好?還是不能說明相機到底什麼好或者壞。所以要去掉包含在某個特徵短語中且沒有意義的特徵。     剪枝的規則是,對於特徵A,如果某個特徵短語也包含A,那麼計算A在句子中單獨出現的次數(包含A的特徵短語不能出現在這個句子中)。如果次數小於一個閾值(論文中設為3),那麼該特徵短語被去除。這個剪枝的效果還是挺明顯的。 (5) Opinion Word Extraction:     在包含頻繁特徵的句子中,抽取距離特徵最近的形容詞,作為觀點詞。在POS標籤中,JJ表示形容詞 (6) Opinion Orientation Identification:     這個步驟是演算法最大的亮點之一,識別了觀點詞的語義方向(Positive or Negative),即極大程度地識別了使用者對物品某一特徵的情感。識別的方法是:預設30個極性明顯的形容詞,儲存在seedList,作為已知極性的觀點詞集。例如,Positive:great、fantastic、nice、cool,Negative:bad、disappointing、dull等等。     首先,對於觀點詞O,在WordNet中查詢O的同義詞。如果同義詞存在於seedList中,則已知該同義詞的詞性,將O設為同一詞性;然後把O加入到seedList中(擴充seedList)。如果同義詞不存在於seedList中,則查詢O的反義詞。如果反義詞存在seedList中,則將O設為相反詞性,並加入到seedList。如果查詢不到,則繼續查詢下一個觀點詞。     不斷迭代上述的查詢過程,直至seedList的大小不再擴充。對於查詢不到詞性的觀點詞,則認為該詞是無效的詞。 (7) Infrequent Feature Identification:     考慮到一種情況,有一些物品的特徵是一部分使用者特殊關注的,例如某些使用者很關注相機軟體(軟體是相機的特徵之一)的使用者體驗性。所以,應該識別這些特徵,滿足使用者實際的需求。     因為同一個觀點詞可以修飾多個特徵,例如amazing(極好的)可以修飾相機的照片質量,也可以修飾相機的軟體。所以,識別非頻繁特徵集的一個簡單而有效的方法是,在包含觀點詞的句子中,找到距離觀點詞最近的名詞,作為非頻繁特徵集 (8) Opinion Sentence Orientation Identification:     最後一個重要的步驟是判斷句子的情感方向(注意只判斷包含觀點詞的句子)。判斷的規則是:     a. 抽取句子中的所有形容詞,判斷其詞性,包含一個Positive詞性的形容詞就加1,包含一個Negative詞性的形容詞就減1。如果句子最後的值大於0,則句子的情感為Positive;如果值小於0,則為Negative。如果剛好等於0,請看下一步。     b. 對於值剛好等於0的句子,則判斷句子的屬於觀點詞集的形容詞,而不是所有的形容詞。因為觀點詞更能體現使用者的情感方向。與上一步驟類似,進行加1或減1操作,如果值大於0,則Positive;如果小於0,則Negative。那麼,如果剛好又等於0,怎麼辦?     c. 如果剛好又等於0,那麼就認為當前句子的情感方向與前一個句子的情感方向是一樣的。因為使用者更傾向於在同一段話(包含多個句子)中只表揚或只批評物品。 (9) Summary Generation:     最後的步驟便是,計算物品每個特徵所屬的句子是Positive或Negative的個數。然後,按照本文開頭的形式進行歸納,得到Summary。