NLP新嘗試:如何讓機器讀懂推文中的喜怒哀樂?

美國總統特朗普先生雖年逾古稀,但仍活躍在社交媒體上,“推特治國” 形象深入人心。特朗普早在競選階段就和媒體結下了樑子,他時常譴責媒體曲解自己的觀點,傳播假新聞。2017 年 2 月 16 日,特朗普上任後舉行的首場發佈會上,他花了 75 分鐘炮轟媒體,指責許多媒體發佈假消息,並在推特上點名紐約時報、NBC 新聞、ABC、CBS、CNN 是美國人民的敵人。曾有媒體做過統計,特朗普上任頭六個月在推特發文總共 991 條,其中 82 條都是針對媒體的。我們有沒有想過讓計算機來閱讀特朗普的推文,理解他本人和粉絲對某些話題的看法呢?那麼問題來了,要如何讓計算機能夠讀懂推文所表達出來的情緒呢?

人們很少爲推文所透露的情緒究竟是積極的還是消極的而發憷。但對計算機來說,幾乎就是一個難於上青天的蜀道了:複雜的句子結構、諷刺、比喻等等,使得計算機難以判斷句子所表達的含義和情感。然而,如果我們能夠讓計算機自動評估推文所透露出來的情緒的話,那麼就可以大規模挖掘人們對各種問題的意見了,還有助於我們理解某些羣體爲什麼會持有某些觀點。

從更基本的層面上來說,理解文本的情感是自然語言理解的一個關鍵部分,因此,如果我們希望計算機能夠有效地與我們進行交流的話,就必須解決這個問題。

在這篇博文中,我將介紹謝菲爾德大學的一個小型研究項目的成果,該項目是 SoBigData 項目的一部分。我們測試了不同的文本處理方法,並分析了它們能夠捕獲到多少情緒。

前言

這個項目的目的是測試計算機如何通過機器學習來理解文本所表達的情緒。爲此,我們給計算機饋送了大量推文,每條推文都被人們貼上了積極、中立或消極的情緒標籤。每條推文都有一個相關的主題,這一點很重要,因爲根據討論主題的不同,句子可能會有非常不同的情緒。舉個例子,如果我們討論的是 “質量” 的主題,那麼,這個單詞 “high” 傳遞出來的是情緒積極的,而在討論 “價格” 的主題時,這一單詞所透露的就是消極的情緒了。又比如 “Green” 這個單詞,在討論 “環境問題” 的主題時,這個單詞是積極的,但在討論 “藝術” 主題時可能就是中立的了。現在計算機的任務就是預測給定推文和相關主題所表達出來的情緒。

計算機是如何閱讀文本的?

如果你沒有機器學習的經驗,你可能會覺得這似乎是一個奇怪的問題。但是,機器學習是基於統計學的基礎之上的,因此,機器學習系統要處理的任何東西,都必須用數字來表示。將文本轉換爲數字這一過程是在所謂的嵌入模型中完成的,開發這些模型本身就是主要研究領域之一。嵌入模型將單詞或句子轉換爲向量,在訓練過程中,向量會不斷調整,使得意義相近的單詞和句子都得到相似的向量結尾。在理想情況下,向量應該能夠捕捉含義、上下文、情緒等。但這根本不是一項簡單的任務,這就是爲什麼開發了許多不同的嵌入模型的原因。通常來說,較新的模型表現得更好,但它們也可以針對特定的任務進行調整。

成熟的機器學習系統能夠在情緒分析等方面達到最先進的水平,這簡直太猛了。它們由多個組件組成,其中文本嵌入只是其中的一個組件,通常很難評估系統的哪些部分是性能瓶頸。由於任何文本都需要表示爲機器學習系統能夠使用的向量,因此,任何分析(包括預測推文的情緒)在很大程度上都依賴於所選擇的嵌入模型。但這並不是說系統的其他部分也同樣重要。

爲使文本嵌入的作用更加透明,我們開始測試它們在預測情緒方面的性能,爲此,我們將系統設計成模糊程度最低。

我們如何預測情緒?

我們預測情緒的方法相當簡單,並受到協作過濾的啓發。每條推文都有一個相關的主題,重要的是,必須根據這個主題來評估情緒(因爲同樣一個說法,對一個方面來說是積極的,而對另一方面則是消極的)。由於推文和相應的主題,都有相同維度的向量表示,因此我們可以採取兩者的內積,給出一個代表情緒的數字。沒有理由認爲應該讓它與 “原始” 嵌入一起使用,所以,在使用內積之前,我們應學習並將轉換(稍後將進一步說明)應用到主題向量空間。通過這種方式,我們就可以得到情緒,即使這個話題此前從未見過。

我們希望能夠預測三種不同的情緒(積極、中立、消極),因此,實際上我們學習了主題空間的三種不同轉換,分別是預測積極情緒、中立情緒和消極情緒。當時用三個變換的主題向量中的每一個獲取推文的內積時,我們得到三個數字,可以理解爲模型對每種情緒的推測:這一數值越高,表明模型越認爲這就是這條推文所透露出來的情緒。

項目概述

我們想測試不同的單詞嵌入對推文情緒有何影響。爲預測情緒,我們訓練了一個模型,該模型學習了主體向量的三個變換,這樣,推文和三個主題向量的內積就是模型對這三種情緒的投票。

我們有幾個不同的選擇。首先,我們必須要選擇要測試的嵌入模型。其次,我們需要決定如何轉換主題向量。最後,我們還需要一個已經被人工貼上情緒標籤的推文數據集,這樣,我們就可以訓練和測試這個模型了。

決定設置

數據集

我們使用了爲 SemEval-2017 Task 4 提供的英文數據集(http://alt.qcri.org/semeval2017/task4/)。這個數據集包含了大約 26000 條不同主題的推文,所有這些情緒都是人工標註的。我們保留任務組織者定義的分割,即,大約 20000 條推文用於訓練,6000 條推文用於測試。

嵌入模型

我們選擇測試以下四個嵌入模型:

  1. 2003 年的 Neural-Net Language Models(NNLM),是最早嘗試用神經網絡學習單詞嵌入的實驗之一。該模型構建了 128 維的詞向量,並將其作爲一種單詞嵌入基線,更高級的模型應該能夠擊敗這種基線。

  2. NNLM 如上所述,但現在有了標準化的詞向量,有時可以觀察到它們產生更好的結果。

  3. 2018 年初的 Embeddings from Language Models(ELMo),已被證明在許多不同的任務中實現了最先進的結果,構建 1024 維詞向量。

  4. 2018 年初的 Universal Sentence Encoder(USE),一種經過訓練的模型,可在許多任務中找到有用的單詞嵌入。構建 512 維詞向量。

以上提到的所有四種嵌入模型,都可以從 TensorFlow Hub 方便地獲得:https://tfhub.dev/

轉換模型

用於轉換主題向量空間的模型的選擇,是一項很棘手的任務。爲什麼呢?因爲,一方面,我們希望保持原始向量空間儘可能不變;另一方面,我們希望轉換足夠靈活,以便嵌入單詞中的信息實際上能夠用來預測情緒。因此,我們決定測試這兩種不同的轉換模型。

  • 一種簡單的仿射變換。這種轉換隻能表示最基本的轉換,如縮放、旋轉、剪切和平移,因此,在某種意義上,這將測試 “原始” 嵌入捕獲了多少信息。

  • 一種更爲複雜的轉換,是由神經網絡表示。我們使用一個具有兩個隱藏層的神經網絡,每個隱藏層是嵌入維數的 8 倍:ReLU 激活函數和 Dropout。網絡將主題向量作爲輸入,並輸出轉換後的主題向量。這種轉換可以以高度非線性的方式扭曲主題空間,因此應該能夠獲得更高的準確度。然而,這樣一來訓練將更加困難,並更可能對訓練集出現過擬合現象。

最後的模型將學習上述每種類型的三種轉換,對應於我們想要預測的三種情緒。

糾正數據集中的不平衡

使用真實數據總是很有挑戰性的。尤其是如果某個情緒或者主題被過分代表,那麼這個模型很可能會在訓練期間完全專注於此,這將會導致預測其他情緒,或使用其他主題。相反,我們希望確保模型對所有主題和情緒給予同樣的權重,而不管它們出現的頻率有多高。糾正這些錯誤的效果是相當戲劇化的,也是一個值得記住的好教訓,所以,讓我們花上幾分鐘的時間來討論這個問題。

數據集中的不平衡

繪製每種情緒的推文數量,如下圖所示,數據集顯示,類出現了巨大的不平衡的現象。

image

爲訓練集和測試集分配情緒類。

尤其在訓練數據中,積極的情緒被嚴重高估,事實上,近 73% 的訓練推文都有積極的情緒。這意味着,該模型將比其他模型更能從預測積極情緒中獲益。另一方面,中立情緒只與不到 10% 的推文相關,如果有助於預測積極情緒的話,那麼模型可能只是學會了忽略這種情緒。

測試集中的分佈截然不同。消極情緒比積極情緒更加豐富,沒有一條推文透露出來的情緒是中立的。這使得模型平等對待所有的情緒變得更加重要。

實際上,在 NNLM 上使用仿射變換模型進行的測試表明,由於訓練數據的普遍性,因此經過訓練後的模型明顯傾向於積極情緒。在本次測試中,我們將訓練數據中的主題分爲訓練集和評估集,分別佔主題的 90% 和 10%。

image

顯示推文的實際情緒和模型預測的情緒的混淆矩陣(confusion matrix)。百分比顯示了特定的實際情緒被預測爲模型的三種情緒中的任何一種的頻率。完美的模型應該有100%的對角線,這意味着預測總是正確的。然而,從此圖可以看出,無論實際情緒是什麼,這個模型通常會選擇預測積極情緒。(譯者注:混淆矩陣,是可視化工具,特別用於監督學習,在無監督學習一般叫做匹配矩陣。矩陣的每一列代表一個類的實例預測,而每一行表示一個實際的類的實例。基於實際的名稱可以更容易判斷機器是否將兩個不同的類混淆了。在機器學習領域,混淆矩陣通常被稱爲列聯表或誤差矩陣。

上圖顯示了情緒預測的混淆矩陣,其中,每列對應於一種預測的情緒。每一行顯示的是實際的情緒,每個矩陣元素的數量和顏色顯示具有這種實際情緒的推文在列中顯示的百分比。

理想情況下,對角線應接近 100%,這意味着幾乎所有推文的預測情緒都是正確的,但即使是訓練集中,也會存在很大的非對角線元素。這表明了即使模型知道正確的情緒,也會更傾向於在大多數情況下默認預測積極情緒。43% 的消極情緒的推文和 55% 以上的中立情緒的推文被預測爲積極情緒。這對於分別爲 39% 和 78% 的評估集來說更加槽糕。

但是,在訓練集和測試集中,每個主題的推文數量也存在很大的不同。

image

訓練集和測試集中與每個主題相關的推文數量。主題基於推文數量從左到右排序,爲清晰起見,此處略去了主題的名稱。

特別是對訓練集來說,我們看到每個主題的推文數量存在明顯差異:有些主題有超過 100 條推文,而大約一半的主題只擁有約 20 條推文或更少。

讓我們回到仿射模型的測試,觀察給定主題的推文情緒預測的平均準確率,結果表明,推文越多,主題的準確率就越高。

image

給定主題中推文情緒預測的平均準確率。有個明顯的趨勢是,具有更多相關推文的主題通常會獲得更高的平均準確率。

出現這種趨勢是有道理的:該模型從學習一種轉換中受益匪淺,這種轉換適用於包含更多推文的主題。但實際上,這並非我們想要的結果,因爲這意味着模型可能不會很好地進行歸納。我們希望模型即使在看不見的主題上也能表現良好,對某些主題過擬合在這方面可能不會有什麼幫助。

處理類似這樣的類不平衡的一種方法是,通過類的頻率的倒數來衡量模型對錯誤預測的懲罰。這意味着,對於頻率較低的數據,模型會收到很大的誤差,因此會更加關注這些錯誤。讓我們看看,這將會如何影響模型的訓練。

糾正情緒不平衡

重新訓練模型,只使用情緒頻率的倒數來懲罰錯誤,我們已經達到了更好的模型。好的模型。

image

NNML上仿射模型的混淆矩陣,糾正訓練集中的情緒不平衡。

對於訓練集的所有情緒來說,對角線接近 100%。對評估集的預測也有所改進,儘管還存在很大的改進空間。

我們還看到訓練集中的每個主題的準確率有所提高,儘管這並沒有得到明確的鼓勵。

image

NNML仿射模型的平均主題準確率,糾正了訓練集中的情緒不平衡。

有趣的是,評估集的性能似乎有所下降。一種解釋可能是評估集中的大多數推文都有積極的情緒,爲了更好地表現出消極和中立的情緒,模型犧牲了一些準確性。

糾正主題不平衡

接下來,我們來看看如果只使用主題頻率的倒數來懲罰錯誤會發生什麼。這也帶來了訓練集上更好的情緒預測,這可能是因爲,無論與主題相關的推文數量有多少,對主題衡量的權重都是平等的,這將使得模型直面更多種的情緒。

image

NNML上仿射模型的混淆矩陣,糾正訓練集中的主題不平衡。

但是,要看真正的效果究竟如何,需要看每個主題的準確性。對於訓練集來說,現在準確率與主題中的推文數量幾乎無關,大多數主題都接近於 1。

image

糾正情緒和主題的不平衡

最終的模型將根據情緒和主題的頻率來權衡錯誤預測的懲罰。這是通過簡單地將主題頻率和情緒頻率的倒數相乘,並使用得到的數量作爲權重來完成的。這將鼓勵模型在訓練期間能夠平等對待所有情緒和主題。

這種方式生成的模型,似乎確實在考慮情緒和主題不平衡之間進行了很好的權衡。情緒預測相當準確,而且在評估集上的表現沒有受到影響。

image

"NNML上仿射模型的混淆矩陣,糾正訓練集中的兩種不平衡。

每個主題的平均準確率同樣獨立於主題相關的推文數量。

image

NNML仿射模型的平均題目正確率,修正了訓練集的兩種不平衡。

雖然糾正類不平衡明顯對訓練集有所幫助,但評估集的表現仍然沒有什麼明顯起色。但該模型似乎不能很好地推廣到新主題,這可能意味着仿射變換的侷限性太大,或者訓練集不能很好地代表評估集。我們將在回顧最後的實驗時再回過頭來看這一點。

信息彙總

現在,在考慮到數據集中的類不平衡,以及已經決定嵌入和轉換模型之後,我們準備測試這些模型。看看單詞陷入能夠收集到多少情緒信息。

該設置遵循標準的機器學習方法:我們用 10 組(fold)交叉驗證(cross-validation)來訓練模型,並評估測試集上每組的最佳模型。這給我們提供了一個衡量標準,當在(稍微)不同的數據集上訓練時,我們可以預期模型的性能會有多大的變化。

包含一些基線實驗總是一個好主意。這些應該是你可以想到的最簡單的方法,如果你的高級模型無法擊敗這些方法,那麼你就會知道出錯了。我們選擇了兩個簡單的基線:1)使用訓練集中最頻繁的情緒(我們將使用積極的情緒)作爲任何推文的預測;2),使用訓練集中的隨即將情緒作爲預測。

如下圖所示,展示了對所有八個模型和兩條基線進行訓練以及對不可見測試集進行評估的結果。穿過數據點的垂直線表示 10 個交叉驗證組的一個標準差。

image

在這裏,有很多有趣的觀察等待我們去做。首先,在基線之上的任何嵌入的模型都有很大的改進。因此,正如所預期的那樣,嵌入這個詞捕獲了可以用來推導推文情緒的信息。其次,轉向 NNLM 嵌入,使用非線性模型似乎並沒有什麼改進。這很有趣,因爲它表明了嵌入空間足夠簡單,仿射模型能夠使用嵌入中所有可用的情緒信息。這與最新的嵌入方法 ELMo 和 USE 形成了對比。在 ELMo 和 USE 中,我們確實觀察到在非線性模型的使用情況有所改善,這表明這些模型學習的嵌入空間更加複雜。對於 NNLM,歸一化向量確實比非歸一化向量有更好的表現趨勢,但是在我們的實驗中,效果並不顯著。最後,雖然 ELMo 和 USE 都包含比 NNLM 嵌入更多的信息,但它們在這些實驗中的表現卻非常相似。USE 似乎通常包含比 ELMo 略多的信息,但也並沒有多多少。然而,這仍然很有趣,因爲 USE 嵌入空間的維數比 ELMo 空間要低得多,因此,模型訓練速度要快得多。

我們實現目標了嗎?

沒有,絕對沒有。關於單詞嵌入的信息內容,還有很多有趣的問題需要回答。

例如,我們用三點量表(消極、中立、積極)來處理情緒。如果處理情緒要擴展到更細粒度的話,比如五點量表,就需要更多的嵌入。這些嵌入包含這麼多信息嗎?

詢問是否需要巨大的嵌入空間也是合理的。ELMo 的嵌入是 1024 維,但信息可能嵌入在更低維度的空間中。嵌入空間的降維如何影響情緒預測?

在測試主題空間的兩種不同變換時,我們發現,只有較新的嵌入才需要非線性變換。擴展轉換的類型,包括創建一些更復雜的神經網絡,以及測試哪些嵌入可以從哪些轉換中獲益,這將是一件非常有趣的事情。這可以讓我們能夠深入瞭解不同嵌入空間的複雜性。

結果

在這個項目中,我們想測試不同的單詞嵌入對推文的情緒預測有什麼樣的影響。爲此,我們構建了兩個模型,在儘可能不干擾的情況下來預測情緒,從而使我們能夠看到元是單詞嵌入包含了多少情緒信息。

結果表明,無論新的還是舊的單詞嵌入,確實都包含了關於情緒的信息,新的單詞嵌入包含的內容要比舊的更多,這並不奇怪。結果還表明,對於較新的嵌入,主體向量的非線性變化的比仿射變換表現得更好,這表明這些空間比較舊的嵌入更加複雜。

總之,單詞嵌入通常包含大量關於推文情緒的信息,而更新的嵌入包含的信息要多得多。它強調了高級嵌入模型在預測推文情緒方面的重要性,但這並不過分令人驚訝。

原文鏈接:

https://towardsdatascience.com/making-computers-understand-the-sentiment-of-tweets-1271ab270bc7

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章