天天看點

自然語言處理之文本情感分類

一、概述

  文本情感分析(Sentiment Analysis)是指利用自然語言處理和文本挖掘技術,對帶有情感色彩的主觀性文本進行分析、處理和抽取的過程。情感分析任務按其分析的粒度可以分為篇章級,句子級,詞或短語級;按其處理文本的類别可分為基于産品評論的情感分析和基于新聞評論的情感分析;按其研究的任務類型,可分為情感分類,情感檢索和情感抽取等子問題。文本情感分析的基本流程如下圖所示,包括從原始文本爬取,文本預處理,語料庫和情感詞庫建構以及情感分析結果等全流程。

自然語言處理之文本情感分類

  情感分類又稱情感傾向性分析,是對帶有感情色彩的主觀性文本進行分析、推理的過程,即分析對說話人的态度,傾向正面,還是反面。它與傳統的文本主題分類又不相同,傳統主題分類是分析文本讨論的客觀内容,而情感分類是要從文本中得到它是否支援某種觀點的資訊。比如,“日媒:認為殲-31能夠抗衡F-35,這種說法頗具恭維的意味。”傳統主題分類是要将其歸為類别為“軍事”主題,而情感分類則要挖掘出日媒對于“殲-31能夠抗衡F-35”這個觀點,持反面态度。這是一項具有較大實用價值的分類技術,可以在一定程度上解決網絡評論資訊雜亂的現象,友善使用者準确定位所需資訊。按照處理文本的粒度不同,情感分析可分為詞語級、短語級、句子級、篇章級以及多篇章級等幾個研究層次。按照處理文本的類别不同,可分為基于新聞評論的情感分析和基于産品評論的情感分析。縱觀目前主觀性文本情感傾向性分析的研究工作,主要研究思路分為基于語義的情感詞典方法和基于機器學習的方法。

二、基于情感詞典的情感分類方法

  2.1 基于詞典的情感分類步驟

​  基于情感詞典的方法,先對文本進行分詞和停用詞處理等預處理,再利用先建構好的情感詞典,對文本進行字元串比對,進而挖掘正面和負面資訊。如圖:

自然語言處理之文本情感分類

  2.2 文本預處理及自動分詞

  文本的預處理

  由網絡爬蟲等工具爬取到的原始語料,通常都會帶有我們不需要的資訊,比如額外的Html标簽,是以需要對語料進行預處理。在《文本情感分類(一):傳統模型》一文中,筆者使用Python作為我們的預處理工具,其中的用到的庫有Numpy和Pandas,而主要的文本工具為正規表達式。經過預處理,原始語料規範為如下表,其中我們用-1标注消極情感評論,1标記積極情感評論。 

  句子自動分詞

  為了判斷句子中是否存在情感詞典中相應的詞語,我們需要把句子準确切割為一個個詞語,即句子的自動分詞。

  2.3 情感詞典

​  情感詞典包含正面詞語詞典、負面詞語詞典、否定詞語詞典、程度副詞詞典等四部分。一般詞典包含兩部分,詞語和權重。

自然語言處理之文本情感分類

​  情感詞典在整個情感分析中至關重要,所幸現在有很多開源的情感詞典,如BosonNLP情感詞典,它是基于微網誌、新聞、論壇等資料來源建構的情感詞典,以及知網情感詞典等。當然也可以通過語料來自己訓練情感詞典。

  2.4 情感詞典文本比對算法

​  基于詞典的文本比對算法相對簡單。逐個周遊分詞後的語句中的詞語,如果詞語命中詞典,則進行相應權重的處理。正面詞權重為加法,負面詞權重為減法,否定詞權重取相反數,程度副詞權重則和它修飾的詞語權重相乘。如圖:

自然語言處理之文本情感分類

  利用最終輸出的權重值,就可以區分是正面、負面還是中性情感了。

  2.5 缺點

  基于詞典的情感分類,簡單易行,而且通用性也能夠得到保障。但仍然有很多不足:

  1)精度不高:語言是一個高度複雜的東西,采用簡單的線性疊加顯然會造成很大的精度損失。詞語權重同樣不是一成不變的,而且也難以做到準确。

  2)新詞發現:​ 對于新的情感詞,比如給力,牛逼等等,詞典不一定能夠覆寫。

  3)詞典建構難:​ 基于詞典的情感分類,核心在于情感詞典。而情感詞典的建構需要有較強的背景知識,需要對語言有較深刻的了解,在分析外語方面會有很大限制。

三、基于機器學習的情感分類方法  

  基于機器學習的情感分類即為分類問題,文本分類中的各方法均可采用,文本分類問題可檢視我的另外一篇文章《自然語言處理之文本分類》。

  常見的分類算法有,基于統計的Rocchio算法、貝葉斯算法、KNN算法、支援向量機方法,基于規則的決策樹方法,和較為複雜的神經網絡。這裡我們介紹兩種用到的分類算法:樸素貝葉斯和支援向量機。情感分類模型的建構方法也很多,這裡我們對《自然語言處理系列篇--情感分類》中的模組化方法進行總結。

  3.1 分類算法

  3.1.1 樸素貝葉斯

  貝葉斯公式:$P(C|X)=P(X|C)P(C)/P(X)$

  先驗機率P(C)通過計算訓練集中屬于每一個類的訓練樣本所占的比例,類條件機率P(X|C)的估計—樸素貝葉斯,假設事物屬性之間互相條件獨立,$P(X|C)=\prod P(x_{i}|c_{i})$。樸素貝葉斯有兩用常用的模型,機率定義略有不同,如下:設某文檔d=(t1,t2,…,tk),tk是該文檔中出現過的單詞,允許重複。

  • 多項式模型:

  先驗機率P(c)= 類c下單詞總數/整個訓練樣本的單詞總數。

  條件機率P(tk|c)=(類c下單詞tk在各個文檔中出現過的次數之和+1)/( 類c下單詞總數+|V|)

  • 伯努利模型:

  先驗機率P(c)= 類c下檔案總數/整個訓練樣本的檔案總數。

  條件機率P(tk|c)=(類c下包含單詞tk的檔案數+1)/(類c下單詞總數+2)

  通俗點解釋兩種模型不同點在于:計算後驗機率時,對于一個文檔d,多項式模型中,隻有在d中出現過的單詞,才會參與後驗機率計算,伯努利模型中,沒有在d中出現,但是在全局單詞表中出現的單詞,也會參與計算,不過是作為“反例”參與的。

  3.1.2 支援向量機模型SVM

  SVM展開來說較為複雜,這裡借助兩張圖幫助概念性地解釋一下。對于線性可分的資料,可以用一超平面f(x)=w*x+b将這兩類資料分開。如何确定這個超平面呢?從直覺上而言,這個超平面應該是最适合分開兩類資料的直線。而判定“最适合”的标準就是這條直線離直線兩邊的資料的間隔最大。

自然語言處理之文本情感分類

  而對于線性不可分的資料,則将其映射到一個更高維的空間裡,在這個空間裡建立尋找一個最大間隔的超平面。怎麼映射呢?這就是SVM的關鍵:核函數。

自然語言處理之文本情感分類

  現在常用的核函數有:線性核,多項式核,徑向基核,高斯核,Sigmoid核。如果想對SVM有更深入的了解,請參考《支援向量機通俗導論(了解SVM的三層境界)》一文。

   3.2 情感分類系統的實作

  情感分類主要處理一些類似評論的文本,這類文本有以下幾個特點:時新性、短文本、不規則表達、資訊量大。我們在系統設計、算法選擇時都會充分考慮到這些因素。情感分灰系統分為線上、離線兩大流程,線上流程将使用者輸出的語句進行特征挖掘、情感分類、并傳回結果。離線流程則負責語料下載下傳、特征挖掘、模型訓練等工作,系統結構如圖3-1所示: 

自然語言處理之文本情感分類

圖3-1 情感分類系統架構圖 

  3.2.1 語料庫建設

  語料的積累是情感分類的基石,特征挖掘、模型分類都要以語料為材料。而語料又分為已标注的語料和未标注的語料,已标注的語料如對商家的評論、對産品的評論等,這些語料可通過星級确定客戶的情感傾向;而未标注的語料如新聞的評論等,這些語料在使用前則需要分類模型或人工進行标注,而人工對語料的正負傾向,又是仁者見仁、智者見智,是以一定要與标注的同學有充分的溝通,使标注的語料達到基本可用的程度。 

  3.2.2極性詞挖掘

情感分類中的極性詞挖掘,有一種方法是“全詞表法”,即将所有的詞都作為極性詞,這樣的好處是單詞被全面保留,但會導緻特征次元大,計算複雜性高。我們采用的是“極性詞表法”,就是要從文檔中挖掘出一些能夠代表正負極性的詞或短語。如已知正面語料“@jjhuang:微信電話本太贊了!能免費打電話,推薦你使用哦~”,這句話中我們需要挖掘出“贊”、“推薦”這些正極性詞。分為以下兩步:

  1)文本預處理 語料中的有太多的噪音,我們在極性詞挖掘之前要先對文本預處理。文本預處理包含了分詞、去噪、最佳比對等相關技術。分詞功能向大家推薦騰訊TE199的分詞系統,功能強大且全面,擁有短語分詞、詞性标注等強大功能。去噪需要去掉文檔中的無關資訊如“@jjhuang”、html标簽等,和一些不具有分類意義的虛詞、代詞如“的”、“啊”、“我”等,以起到降維的作用。最佳比對則是為了確定提出的特征能夠正确地反映正負傾向,如“逍遙法外”一詞,如果提取出的是“逍遙”一詞,則會被誤認為是正面情感特征,而“逍遙法外”本身是一個負面情感詞,這裡一般可以采用最長比對的方法。

  2)極性詞選擇 文本預處理之後,我們要從衆多詞語中選出一些詞作為極性詞,用以訓練模型。我們對之前介紹的TF-IDF方法略作變化,用以降維。因為我們訓練和處理的文本都太短,DF和TF值大緻相同,我們用一個TF值就可以。另外,我們也計算極性詞在反例中出現的頻率,如正極性詞“贊”必然在正極性語料中的TF值大于在負極性語料中的TF值,如果二者的內插補點大于某個域值,我們就将該特征納入極性詞候選集,經過人工稽核後,就可以正式作為極性詞使用。 

  3.2.3極性判斷

  極性判斷的任務是判斷語料的正、負、中極性,這是一個複雜的三分類問題。為了将該問題簡化,我們首先對語料做一個主客觀判斷,客觀語料即為中性語料,主觀語料再進行正、負極性的判斷。這樣,我們就将一個複雜三分類問題,簡化成了兩個二分類問題。如下:

自然語言處理之文本情感分類

  在分類器選擇中,主客觀判斷我們使用了上節介紹的支援向量機模型。而極性判斷中,我們同時使用了樸素貝葉斯和支援向量機模型。其中樸素貝葉斯使用人工稽核過的極性詞作特征,而支援向量機模型則使用全詞表作為特征。兩個模型會對輸入的語料分别判斷,給出正、負極性的機率,最後由決策子產品給出語料的極性。

自然語言處理之文本情感分類

  在樸素貝葉斯模型中,我們比較了多項式模型和伯努力模型的效果。伯努力模型将全語料中的單詞做為反例計算,因為評測文本大多是短文本,導緻反例太多。進而伯努力模型效果稍差于多項式模型,是以我們選擇了多項式模型。 

  支援向量機模型中,我們使用的是***大學林智仁開發的SVM工具包LIBSVM,這是一個開源的軟體包,可以解決模式識别、函數逼近和機率密度估計等機器學習基本問題,提供了線性、多項式、徑向基和S形函數四種常用的核函數供選擇。LIBSVM 使用的一般步驟是:

  1. 按照LIBSVM軟體包所要求的格式準備資料集;
  2. 對資料進行簡單的縮放操作;
  3. 考慮選用RBF 核函數;
  4. 采用交叉驗證選擇最佳參數C與g;
  5. 采用最佳參數C與g 對整個訓練集進行訓練擷取支援向量機模型;
  6. 利用擷取的模型進行測試與預測。

  上述介紹的是我們通用的情感分類系統,面對的是通用的主觀評論語料。但在一些領域中,某些非極性詞也充分表達了使用者的情感傾向,比如下載下傳使用APP時,“卡死了”、“下載下傳太慢了”就表達了使用者的負面情感傾向;股票領域中,“看漲”、“牛市”表達的就是使用者的正面情感傾向。是以我們要在垂直領域中,挖掘出一些特殊的表達,作為極性詞給情感分類系統使用:

  垂直極性詞 = 通用極性詞 + 領域特有極性詞

  該系統即為垂直領域的情感分類系統。

  3.3 系統優化

  情感分類的工作,在現在和未來還可以做更多的工作來對系統進行優化:

  1. 挖掘更多的極性詞(多領域)
  2. 嘗試不同的分類器,調優現有的模型
  3. 句式識别:否定句,轉折句,排比句等……
  4. 語料清洗:識别水軍評論和使用者評論
  5. 極性詞擴充:采用近義詞、反義詞等方法,将挖掘的極性詞擴充更多 

參考:

https://blog.csdn.net/weixin_42398658/article/details/85222547

https://blog.csdn.net/weixin_41657760/article/details/93163519

https://zhuanlan.zhihu.com/p/25868008