從自然語言處理技術的角度來看,情感分析的任務是從評論的文本中提取出評論的實體,以及評論者對該實體所表達的情感傾向,自然語言所有的核心技術問題。因此,情感分析被認為是一個自然語言處理的子任務。
與其他的人工智慧技術相比,情感分析(Sentiment Analysis)顯得有些特殊,因為其他的領域都是根據客觀的數據來進行分析和預測,但情感分析則帶有強烈的個人主觀因素。情感分析的目標是從文本中分析出人們對於實體及其屬性所表達的情感傾向以及觀點,這項技術最早的研究始於2003年Nasukawa和Yi兩位學者的關於商品評論的論文。
隨著推特等社交媒體以及電商平臺的發展而產生大量帶有觀點的內容,給情感分析提供了所需的數據基礎。時至今日,情感識別已經在多個領域被廣泛的應用。
例如:
目前,絕大多數的人工智慧開放平臺都具備情感分析的能力,如圖所示:是玻森中文語義開放平臺的情感分析功能演示,可以看出除了通用領域的情感分析外,還有汽車、廚具、餐飲、新聞和微博幾個特定領域的分析。
玻森中文語義開放平臺的情感分析示例
那麼到底什麼是情感分析呢?
從自然語言處理技術的角度來看,情感分析的任務是從評論的文本中提取出評論的實體,以及評論者對該實體所表達的情感傾向,自然語言所有的核心技術問題,例如:詞彙語義,指代消解,此役小氣,信息抽取,語義分析等都會在情感分析中用到。
因此,情感分析被認為是一個自然語言處理的子任務,我們可以將人們對於某個實體目標的情感統一用一個五元組的格式來表示:(e,a,s,h,t)
以圖為例,e是指某餐廳,a為該餐廳的性價比屬性,s是對該餐廳的性價比表示了褒義的評價,h為發表評論者本人,t是19年7月27日。所以這條評論的情感分析可以表示為五元組(某餐廳,性價比,正向褒義,評論者,19年7月27日)。
用戶對某餐廳的評價
情感分析根據處理文本顆粒度的不同,大致可以分為三個級別的任務,分別是篇章級、句子級和屬性級。
我們分別來看一下:
篇章級情感分析的目標是判斷整篇文檔表達的是褒義還是貶義的情感,例如一篇書評,或者對某一個熱點時事新聞發表的評論,只要待分析的文本超過了一句話的範疇,即可視為是篇章級的情感分析。
對於篇章級的情感分析而言有一個前提假設,那就是全篇章所表達的觀點僅針對一個單獨的實體e,且只包含一個觀點持有者h的觀點。
這種做法將整個文檔視為一個整體,不對篇章中包含的具體實體和實體屬性進行研究,使得篇章級的情感分析在實際應用中比較局限,無法對一段文本中的多個實體進行單獨分析,對於文本中多個觀點持有者的觀點也無法辨別。
例如評價的文本是:「我覺得這款手機很棒。」
評價者表達的是對手機整體的褒義評價,但如果是:「我覺得這款手機拍照功能很不錯,但信號不是很好」這樣的句子,在同一個評論中出現了褒義詞又出現了貶義詞,篇章級的分析是無法分辨出來的,只能將其作為一個整體進行分析。
不過好在有很多的場景是不需要區分觀點評價的實體和觀點持有者,例如:在商品評論的情感分析中,可以默認評論的對象是被評論的商品,評論的觀點持有者也是評論者本人。
當然,這個也需要看被評論的商品具體是什麼東西,如果是親子旅遊這樣的旅遊服務,那麼評論中就很有可能包含一個以上的觀點持有者。 在實際工作中,篇章級的情感分析無法滿足我們對於評價更細緻,如果需要對評論進行更精確,更細緻的分析,我們需要拆分篇章中的每一句話,這就是句子級的情感分析研究的問題。
與篇章級的情感分析類似,句子級的情感分析任務是判斷一個句子表達的是褒義還是貶義的情感,雖然顆粒度到了句子層級,但是句子級分析與篇章級存在同樣的前提假設是,那就是一個句子只表達了一個觀點和一種情感,並且只有一個觀點持有人。
如果一個句子中包含了兩種以上的評價或多個觀點持有人的觀點,句子級的分析是無法分辨的。好在現實生活中,絕大多數的句子都只表達了一種情感。
既然句子級的情感分析在局限性上與篇章級是一樣的,那麼進行句子級的情感分析意義何在呢?
關於這個問題,需要先解釋一下語言學上主觀句與客觀句的分別。在我們日常用語當中,根據語句中是否帶有說話人的主觀情感可以將句子分為主觀句和客觀句,例如:「我喜歡這款新手機。」就是一個主觀句,表達了說話人內心的情感或觀點,而:「這個APP昨天更新了新功能。」則是一個客觀句,陳述的是一個客觀事實性信息,並不包含說話人內心的主觀情感。
通過分辨一個句子是否是主觀句,可以幫助我們過濾掉一部分不含情感的句子,讓數據處理更有效率。
但是在實操過程中,我們會發現這樣的分類方法似乎並不是特別準確,因為一個主觀句也可能沒有表達任何的情感信息,知識表達了期望或者猜測。例如:「我覺得他現在已經在回家的路上了。」這句話是一個主觀句,表達了說話人的猜測,但是並沒有表達出任何的情感。
而客觀句也有可能包含情感信息,表明說話者並不希望這個事實發生,例如:「昨天剛買的新車就被人刮花了。」這句話是一個客觀句,但結合常識我們會發現,這句話中其實是包含了說話人的負面情感。
所以,僅僅對句子進行主客觀的分類還不足以達到對數據進行過濾的要求,我們需要的是對句子是否含有情感信息進行分類。如果一個句子直接表達或隱含了情感信息,則認為這個句子是含有情感觀點的,對於不含情感觀點的句子則可以進行過濾。
目前對於句子是否含有情感信息的分類技術大多都是採用有監督的學習算法,這種方法需要大量的人工標註數據,基於句子特徵來對句子進行分類。
總之,我們可以將句子級的情感分析分成兩步:
關於分析情感傾向性的方法與篇章級類似,依然是可以採用監督學習或根據情感詞詞典的方法來處理,我們會在後續的小節詳細講解。句子級的情感分析相較於篇章級而言,顆粒度更加細分,但同樣只能判斷整體的情感,忽略了對於被評價實體的屬性,同時它也無法判斷比較型的情感觀點。
例如:「A產品的用戶體驗比B產品好多了。」對於這樣一句話中表達了多個情感的句子,我們不能將其簡單的歸類為褒義或貶義的情感,而是需要更進一步的細化顆粒度,對評價實體的屬性進行抽取,並將屬性與相關實體之間進行關聯,這就是屬性級情感分析。
上文介紹的篇章級和句子級的情感分析,都無法確切的知道評價者喜歡和不喜歡的具體是什麼東西,同時也無法區分對某一個被評價實體的A屬性持褒義傾向,對B屬性卻持貶義傾向的情況。但在實際的語言表達中,一個句子中可能包含了多個不同情感傾向的觀點。
例如:「我喜歡這家餐廳的裝修風格,但菜的味道卻很一般。」類似於這樣的句子,很難通過篇章級和句子級的情感分析了解到對象的屬性層面。
為了在句子級分析的基礎上更加細化,我們需要從文本中發現或抽取評價的對象主體信息,並根據文本的上下文判斷評價者針對每一個屬性所表達的是褒義還是貶義的情感,這種就稱之為屬性級的情感分析。
屬性級的情感分析關注的是被評價實體及其屬性,包括評價者以及評價時間,目標是挖掘與發現評論在實體及其屬性上的觀點信息,使之能夠生成有關目標實體及其屬性完整的五元組觀點摘要。
具體到技術層面來看,屬性級的情感分析可以分為以下6個步驟:
關於文本中的實體抽取和指代消解問題,我們已經在知識圖譜的相關章節中做了介紹,這裡就不再贅述。針對篇章級、句子級、屬性級這三種類型的情感分析任務,人們做了大量的研究並提出了很多分類的方法,這些方法大致可以分為基於詞典和基於機器學習兩種,下面我們進行詳細的講解。
做情感分析離不開情感詞,情感詞是承載情感信息最基本的單元,除了基本的詞之外,一些包含了情感含義的短語和成語我們也將其統稱為情感詞。基於情感詞典的情感分析方法,主要是基於一個包含了已標註的情感詞和短語的詞典,在這個詞典中包括了情感詞的情感傾向以及情感強度,一般將褒義的情感標註為正數,貶義的情感標註為負數。
具體的步驟如圖所示,首先將待分析的文本先進行分詞,並對分詞後的結果做去除停用詞和無用詞等文本數據的預處理。然後將分詞的結果與情感詞典中的詞進行匹配,並根據詞典標註的情感分對文本進行加法計算,最終的計算結果如果為正則是褒義情感,如果為負則是貶義情感,如果為0或情感傾向不明顯的得分則為中性情感或無情感。
基於詞典的情感分析流程
情感詞典是整個分析流程的核心,情感詞標註數據的好壞直接決定了情感分類的結果,在這方面可以直接採用已有的開源情感詞典。例如:BosonNLP基於微博、新聞、論壇等數據來源構建的情感詞典,知網(Hownet)情感詞典,臺灣大學簡體中文情感極性詞典(NTSUSD),snownlp框架的詞典等,同時還可以使用哈工大整理的同義詞詞林拓展詞典作為輔助,通過這個詞典可以找到情感詞的同義詞,拓展情感詞典的範圍。
當然,我們也可以根據業務的需要來自己訓練情感詞典,目前主流的情感詞詞典有三種構建方法:人工方法、基於字典的方法和基於語料庫的方法。
對於情感詞的情感賦值,最簡單的方法是將所有的褒義情感詞賦值為+1,貶義的情感詞賦值為-1,最後進行相加得出情感分析的結果。但是這種賦值方式顯然不符合實際的需求,在實際的語言表達中,存在著非常多的表達方式可以改變情感的強度,最典型的就是程度副詞。
程度副詞分為兩種:
一種是可以加強情感詞原本的情感,這種稱之為情感加強詞,例如「很好」相較於「好」的情感程度會更強烈,「非常好」又比「很好」更強。另外一種是情感減弱詞,例如「沒那麼好」雖然也是褒義傾向,但情感強度相較於「好」會弱很多。如果出現了增強詞,則需要在原來的賦值基礎上增加情感得分,如果出現了減弱詞則需要減少相應的情感得分。
另一種需要注意的情況是否定詞,否定詞的出現一般會改變情感詞原本的情感傾向,變為相反的情感,例如「不好」就是在「好」前面加上了否定詞「不」,使之變成了貶義詞。
早期的研究會將否定詞搭配的情感詞直接取相反數,即如果「好」的情感傾向是+1,那麼「不好」的情感傾向就是-1。但是這種簡單粗暴的規則無法對應上真實的表達情感,例如「太好」是一個比「好」褒義傾向更強的詞,如果「好」的值為+1,那麼「太好」可以賦值為+3,加上否定詞的「不太好」變成-3則顯然有點過於貶義了,將其賦值為-1或者-0.5可能更合適。
基於這種情況,我們可以對否定詞也添加上程度的賦值而不是簡單的取相反數,對於表達強烈否定的詞例如「不那麼」賦值為±4。當遇到與褒義詞的組合時褒義詞則取負數,與貶義詞的組合則取正數,例如貶義詞「難聽」的賦值是-3,加上否定詞變成「不那麼難聽」的情感得分就會是(-3+4=1)。
第三種需要注意的情況是條件詞,如果一個條件詞出現在句子中,則這個句子很可能不適合用來做情感分析,例如「如果我明天可以去旅行,那麼我一定會非常開心。」,在這句話中有明顯的褒義情感詞,但是因為存在條件詞「如果」,使得這個句子的並沒有表達觀點持有者的真實情感,而是一種假設。
除了條件句之外,還有一種語言表達也是需要在數據預處理階段進行排除的,那就是疑問句。
例如「這個餐廳真的有你說的那麼好嗎?」,雖然句子中出現了很強烈的褒義情感詞「那麼好」,但依然不能將它分類為褒義句。疑問句通常會有固定的結尾詞,例如「……嗎?」或者「……麼?」,但是也有的疑問句會省略掉結尾詞,直接使用標點符號「?」,例如「你今天是不是不開心?」,這個句子中含有否定詞和褒義詞組成的「不開心」,但不能將其分類為貶義情感。
最後一種需要注意的情況是轉折詞,典型詞是「但是」,出現在轉折詞之前的情感傾向通常與轉折詞之後的情感傾向相反,例如:「我上次在這家酒店的住宿體驗非常好,但是這次卻讓我很失望。」在這個轉折句中,轉折詞之前的「非常好」是一個很強的褒義詞,但真實的情感表達卻是轉折詞之後的「很失望」,最終應該將其分類為貶義情感。
當然,也存在出現了轉折詞,但語句本身的情感並沒有發生改變的情況,例如「你這次考試比上次有了很大的進步,但是我覺得你可以做得更好」,這裡的轉折詞沒有轉折含義,而是一種遞進含義。
在實際操作中,我們所以需要先判斷轉折句真實的情感表達到底是哪個,才能進行正確的分析計算。
構建情感詞典是一件比較耗費人工的事情,除了上述需要注意的問題外,還存在精準度不高,新詞和網絡用語難以快速收錄進詞典等問題,同時基於詞典的分析方法也存在很多的局限性。
例如一個句子可能出現了情感詞,但並沒有表達情感。或者一個句子不含任何情感詞,但卻蘊含了說話人的情感。以及部分情感詞的含義會隨著上下文語境的變化而變化的問題,例如「精明」這個詞可以作為褒義詞誇獎他人,也可以作為貶義詞批評他人。
儘管目前存在諸多問題,但基於字典的情感分析方法也有著不可取代的優勢,那就是這種分析方法通用性較強,大多數情況下無需特別的領域數據標註就可以分析文本所表達的情感,對於通用領域的情感分析可以將其作為首選的方案。
我們在機器學習算法的章節介紹過很多分類算法,例如邏輯回歸、樸素貝葉斯、KNN等,這些算法都可以用於情感識別。
具體的做法與機器學習一樣需要分為兩個步驟:第一步是根據訓練數據構建算法模型;第二步是將測試數據輸入到算法模型中輸出對應的結果,接下來做具體的講解。
首先,我們需要準備一些訓練用的文本數據,並人工給這些數據做好情感分類的標註。通常的做法下:如果是褒義和貶義的兩分類,則褒義標註為1,貶義標註為0,如果是褒義、貶義和中性三分類,則褒義標註為1,中性標註為0,貶義標註為-1。
在這一環節中如果用純人工方法來進行標註,可能會因為個人主觀因素對標註的結果造成一定影響,為了避免人的因素帶來的影響,也為了提高標註的效率,有一些其他取巧的方法來對數據進行自動標註。
比如:在電商領域中,商品的評論除了文本數據之外通常還會帶有一個5星的等級評分,我們可以根據用戶的5星評分作為標註依據,如果是1-2星則標註為貶義,如果是3星標註為中性,4-5星標註為褒義。
又比如:在社區領域中,很多社區會對帖子有贊和踩的功能,這一數據也可以作為情感標註的參考依據。
第二步是將標註好情感傾向的文本進行分詞,並進行數據的預處理,前文已經對分詞有了很多的介紹,這裡就不再過多的贅述。
第三步是從分詞的結果中標註出具備情感特徵的詞,這裡特別說一下,如果是對情感進行分類,可以參考情感詞典進行標註,也可以採用TF-IDF算法自動抽取出文檔的特徵詞進行標註。如果分析的是某個特定領域的,還需要標註出特定領域的詞,例如做商品評價的情感分析,需要標註出商品名稱,品類名稱,屬性名稱等。
第四步根據分詞統計詞頻構建詞袋模型,形成特徵詞矩陣,如表所示。在這一步可以根據業務需要給每個特徵詞賦予權重,並通過詞頻乘以權重得到特徵詞分數。
最後一步就是根據分類算法,將特徵詞矩陣作為輸入數據,得到最終的分類模型。
當訓練好分類模型之後,就可以對測試集進行分類了,具體的流程與建模流程類似,先對測試的文本數據進行分詞並做數據預處理,然後根據特徵詞矩陣抽取測試文本的特徵詞構建詞袋矩陣,並將詞袋矩陣的詞頻數據作為輸入數據代入之前訓練好的模型進行分類,得到分類的結果。
採用基於機器學習的方法進行情感分析有以下幾個不足之處:
除了基於詞典和基於機器學習的方法,也有一些學者將兩者結合起來使用,彌補兩種方法的缺點,比單獨採用一種方法的分類效果要更好。
另外,也有學者嘗試使用基於LSTM等深度學習的方法對情感進行分析,相信在未來,情感分析會應用在更多的產品中,幫助我們更好的理解用戶需求,提升用戶使用智能產品的體驗。
隨著深度神經網絡等算法的應用,情感分析的研究方向已經有了非常大的進展,但依然存在著一些難題是目前尚未解決的,在實操過程中需特別注意以下幾種類型數據:
(1)顏文字、emoji和表情包
網際網路上的交流不僅僅只是通過單純的文字來進行,大量的情感表達是通過顏文字或表情包來實現的,例如經典的表示笑臉的顏文字「:D」,這類文本表達無法與上下文形成聯繫,所以很難判斷他們評價的實體對象是什麼。
不過好在這類數據本身就代表了非常強烈的情感傾向,在篇章級和句子級的顆粒度對情感進行分析,我們可以將特定的顏文字作為一種特殊的詞組構建成情感字典,並人工進行情感分的賦值,對於emoji表情也可以將標準的emoji編碼編入情感字典。而對於表情包的識別則是一個計算機視覺的問題,目前還沒有學者在這個領域方向展開研究。
(2)諷刺句
諷刺語句是一種比較特殊的情感表達語句,諷刺語句的語言組織形式從字面上來看可能是褒義,但實際的含義卻是貶義,或者字面是貶義但實際卻是褒義。
例如:「太棒了!這家外賣治好了我多年的便秘!」
諷刺句在情感分析中是非常難以處理的,因為要分辨這類語句的含義,通常來講需要結合常識或者是相關的背景知識才可以了解,僅僅通過上下文是無法正確解讀諷刺句的含義的。在對商品的評價語中,諷刺句並不常見,但在輿論或社會新聞的評價中,諷刺句則比較常見,識別出諷刺句是情感分析分析方向的一個研究難點。
(3)比較句
比較語句也是一種特殊的情感表達句,例如:「我覺得這件衣服很適合我,但我更喜歡那一件。」
這類比較語句中通常存在著兩個以上的實體或屬性,如果只是在句子級的顆粒度下可以辨別出這句話是含有褒義的情感,但在屬性級的顆粒度下,以情感五元組來定義的情感無法將一個實體作為另一個實體的屬性來進行判斷,很難分辨觀點持有者到底是在對哪一個實體或屬性表達情感。而這類語句在商品的評論中有非常常見,需要特別注意。
(4)情緒分類
目前對於情感的分析依然處於初級階段,僅僅只是對情感做了褒義、貶義、中性三種劃分,但現實生活中的情緒遠遠不止這三種類型,例如:在心理學領域中,著名的心理學家羅伯特·普拉切克(Robert Plutchik)提出的情緒輪包含了8種基本情緒,並且每種情緒又劃分了不同的情緒強度等級,8種情緒還可以相互結合形成更多的情緒,如圖所示。
普拉切克的情緒輪
情緒輪在用戶體驗設計上被廣泛的應用,很多情感化設計都是基於情緒輪進行的。但是在人工智慧領域,將情緒進行多分類比情感分析的三分類任務要難得多,目前大多數分類方法的結果準確性都不到50%。
這是因為情緒本身包含了太多的類別,而且不同的類別之間又可能具有相似性,一個情緒詞在不同的語境下有可能表達的是不同的情緒類別,算法很難對其進行分類。即使是人工對文本進行情緒類別標註也往往效果不佳,因為情緒是非常主觀性的,不同的人對不同的文本可能產生不同的理解,這使得人工標註情緒類比的過程異常困難。
如何讓機器可以理解真實的情緒,目前還是一個未能攻克的難題。
本文由 @黃瀚星 原創發布於人人都是產品經理。未經許可,禁止轉載
題圖來自Unsplash,基於CC0協議