從自然語言處理技術的角度來看,情感分析的任務是從評論的文本中提取出評論的實體,以及評論者對該實體所表達的情感傾向,自然語言所有的核心技術問題。因此,情感分析被認為是一個自然語言處理的子任務。
情感分析概述
與其他的人工智能技術相比,情感分析(Sentiment Analysis)顯得有些特殊,因為其他的領域都是根據客觀的數據來進行分析和預測,但情感分析則帶有強烈的個人主觀因素。情感分析的目标是從文本中分析出人們對于實體及其屬性所表達的情感傾向以及觀點,這項技術最早的研究始于2003年Nasukawa和Yi兩位學者的關于商品評論的論文。
随着推特等社交媒體以及電商平台的發展而産生大量帶有觀點的内容,給情感分析提供了所需的數據基礎。時至今日,情感識别已經在多個領域被廣泛的應用。
例如:
- 在商品零售領域,用戶的評價對于零售商和生産商都是非常重要的反饋信息,通過對海量用戶的評價進行情感分析,可以量化用戶對産品及其競品的褒貶程度,從而了解用戶對于産品的訴求以及自己産品與競品的對比優劣。
- 在社會輿情領域,通過分析大衆對于社會熱點事件的點評可以有效的掌握輿論的走向。
- 在企業輿情方面,利用情感分析可以快速了解社會對企業的評價,為企業的戰略規劃提供決策依據,提升企業在市場中的競争力。
- 在金融交易領域,分析交易者對于股票及其他金融衍生品的态度,為行情交易提供輔助依據。
目前,絕大多數的人工智能開放平台都具備情感分析的能力,如圖所示:是玻森中文語義開放平台的情感分析功能演示,可以看出除了通用領域的情感分析外,還有汽車、廚具、餐飲、新聞和微博幾個特定領域的分析。
玻森中文語義開放平台的情感分析示例
那麼到底什麼是情感分析呢?
從自然語言處理技術的角度來看,情感分析的任務是從評論的文本中提取出評論的實體,以及評論者對該實體所表達的情感傾向,自然語言所有的核心技術問題,例如:詞彙語義,指代消解,此役小氣,信息抽取,語義分析等都會在情感分析中用到。
因此,情感分析被認為是一個自然語言處理的子任務,我們可以将人們對于某個實體目标的情感統一用一個五元組的格式來表示:(e,a,s,h,t)
- e表示情感分析的目标實體,可以是一個具體的實例,也可以是一個類,但必須是唯一的對象。
- a表示實體e中一個觀點具體評價的屬性。
- s表示對實體e的a屬性的觀點中所包含的情感,通常來講會分為正向褒義、負向貶義和中性三種分類。也可以通過回歸算法轉化為1星到5星的評價等級。
- h是情感觀點的持有者,有可能是評價者本人,也有可能是其他人。
- t是觀點發布的時間。
以圖為例,e是指某餐廳,a為該餐廳的性價比屬性,s是對該餐廳的性價比表示了褒義的評價,h為發表評論者本人,t是19年7月27日。所以這條評論的情感分析可以表示為五元組(某餐廳,性價比,正向褒義,評論者,19年7月27日)。
用戶對某餐廳的評價
情感分析根據處理文本顆粒度的不同,大緻可以分為三個級别的任務,分别是篇章級、句子級和屬性級。
我們分别來看一下:
1. 篇章級情感分析
篇章級情感分析的目标是判斷整篇文檔表達的是褒義還是貶義的情感,例如一篇書評,或者對某一個熱點時事新聞發表的評論,隻要待分析的文本超過了一句話的範疇,即可視為是篇章級的情感分析。
對于篇章級的情感分析而言有一個前提假設,那就是全篇章所表達的觀點僅針對一個單獨的實體e,且隻包含一個觀點持有者h的觀點。
這種做法将整個文檔視為一個整體,不對篇章中包含的具體實體和實體屬性進行研究,使得篇章級的情感分析在實際應用中比較局限,無法對一段文本中的多個實體進行單獨分析,對于文本中多個觀點持有者的觀點也無法辨别。
例如評價的文本是:“我覺得這款手機很棒。”
評價者表達的是對手機整體的褒義評價,但如果是:“我覺得這款手機拍照功能很不錯,但信号不是很好”這樣的句子,在同一個評論中出現了褒義詞又出現了貶義詞,篇章級的分析是無法分辨出來的,隻能将其作為一個整體進行分析。
不過好在有很多的場景是不需要區分觀點評價的實體和觀點持有者,例如:在商品評論的情感分析中,可以默認評論的對象是被評論的商品,評論的觀點持有者也是評論者本人。
當然,這個也需要看被評論的商品具體是什麼東西,如果是親子旅遊這樣的旅遊服務,那麼評論中就很有可能包含一個以上的觀點持有者。 在實際工作中,篇章級的情感分析無法滿足我們對于評價更細緻,如果需要對評論進行更精确,更細緻的分析,我們需要拆分篇章中的每一句話,這就是句子級的情感分析研究的問題。
2. 句子級情感分析
與篇章級的情感分析類似,句子級的情感分析任務是判斷一個句子表達的是褒義還是貶義的情感,雖然顆粒度到了句子層級,但是句子級分析與篇章級存在同樣的前提假設是,那就是一個句子隻表達了一個觀點和一種情感,并且隻有一個觀點持有人。
如果一個句子中包含了兩種以上的評價或多個觀點持有人的觀點,句子級的分析是無法分辨的。好在現實生活中,絕大多數的句子都隻表達了一種情感。
既然句子級的情感分析在局限性上與篇章級是一樣的,那麼進行句子級的情感分析意義何在呢?
關于這個問題,需要先解釋一下語言學上主觀句與客觀句的分别。在我們日常用語當中,根據語句中是否帶有說話人的主觀情感可以将句子分為主觀句和客觀句,例如:“我喜歡這款新手機。”就是一個主觀句,表達了說話人内心的情感或觀點,而:“這個APP昨天更新了新功能。”則是一個客觀句,陳述的是一個客觀事實性信息,并不包含說話人内心的主觀情感。
通過分辨一個句子是否是主觀句,可以幫助我們過濾掉一部分不含情感的句子,讓數據處理更有效率。
但是在實操過程中,我們會發現這樣的分類方法似乎并不是特别準确,因為一個主觀句也可能沒有表達任何的情感信息,知識表達了期望或者猜測。例如:“我覺得他現在已經在回家的路上了。”這句話是一個主觀句,表達了說話人的猜測,但是并沒有表達出任何的情感。
而客觀句也有可能包含情感信息,表明說話者并不希望這個事實發生,例如:“昨天剛買的新車就被人刮花了。”這句話是一個客觀句,但結合常識我們會發現,這句話中其實是包含了說話人的負面情感。
所以,僅僅對句子進行主客觀的分類還不足以達到對數據進行過濾的要求,我們需要的是對句子是否含有情感信息進行分類。如果一個句子直接表達或隐含了情感信息,則認為這個句子是含有情感觀點的,對于不含情感觀點的句子則可以進行過濾。
目前對于句子是否含有情感信息的分類技術大多都是采用有監督的學習算法,這種方法需要大量的人工标注數據,基于句子特征來對句子進行分類。
總之,我們可以将句子級的情感分析分成兩步:
- 第一步是判斷待分析的句子是否含有觀點信息;
- 第二步則是針對這些含有觀點信息的句子進行情感分析,發現其中情感的傾向性,判斷是褒義還是貶義。
關于分析情感傾向性的方法與篇章級類似,依然是可以采用監督學習或根據情感詞詞典的方法來處理,我們會在後續的小節詳細講解。句子級的情感分析相較于篇章級而言,顆粒度更加細分,但同樣隻能判斷整體的情感,忽略了對于被評價實體的屬性,同時它也無法判斷比較型的情感觀點。
例如:“A産品的用戶體驗比B産品好多了。”對于這樣一句話中表達了多個情感的句子,我們不能将其簡單的歸類為褒義或貶義的情感,而是需要更進一步的細化顆粒度,對評價實體的屬性進行抽取,并将屬性與相關實體之間進行關聯,這就是屬性級情感分析。
3. 屬性級情感分析
上文介紹的篇章級和句子級的情感分析,都無法确切的知道評價者喜歡和不喜歡的具體是什麼東西,同時也無法區分對某一個被評價實體的A屬性持褒義傾向,對B屬性卻持貶義傾向的情況。但在實際的語言表達中,一個句子中可能包含了多個不同情感傾向的觀點。
例如:“我喜歡這家餐廳的裝修風格,但菜的味道卻很一般。”類似于這樣的句子,很難通過篇章級和句子級的情感分析了解到對象的屬性層面。
為了在句子級分析的基礎上更加細化,我們需要從文本中發現或抽取評價的對象主體信息,并根據文本的上下文判斷評價者針對每一個屬性所表達的是褒義還是貶義的情感,這種就稱之為屬性級的情感分析。
屬性級的情感分析關注的是被評價實體及其屬性,包括評價者以及評價時間,目标是挖掘與發現評論在實體及其屬性上的觀點信息,使之能夠生成有關目标實體及其屬性完整的五元組觀點摘要。
具體到技術層面來看,屬性級的情感分析可以分為以下6個步驟:
- 實體抽取和消解:抽取文檔中所有涉及到實體的表達語句,并使用聚類方法将同一個實體的表達聚為一類,每一類都對應唯一的一個實體。
- 屬性抽取和消解:抽取文檔中所有實體的屬性,并把這些屬性進行聚類,每個屬性類别對應對象實體唯一的一個屬性。
- 觀點持有者抽取和消解:抽取文檔中觀點的持有者,并将持有者進行聚類,每個觀點持有者類别對應唯一的一個觀點持有者。
- 時間抽取和标準化:抽取每個觀點的發布時間,并把不同時間的格式進行标準化。
- 屬性的情感分類和回歸:對具體的屬性進行情感分析,判斷它是褒義、貶義還是中性情感,或者通過回歸算法給屬性賦予一個數值化的情感得分,例如1至5分。
- 生成觀點五元組:使用任務1-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協議
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!