Linux中國

使用 Python 進行社交媒體情感分析入門

自然語言處理(NLP)是機器學習的一種,它解決了口語或書面語言和計算機輔助分析這些語言之間的相關性。日常生活中我們經歷了無數的 NLP 創新,從寫作幫助和建議到實時語音翻譯,還有口譯。

本文研究了 NLP 的一個特定領域:情感分析。重點是確定輸入語言的積極、消極或中性性質。本部分將解釋 NLP 和情感分析的背景,並探討兩個開源的 Python 包。第 2 部分將演示如何開始構建自己的可擴展情感分析服務。

在學習情感分析時,對 NLP 有一個大體了解是有幫助的。本文不會深入研究數學本質。相反,我們的目標是闡明 NLP 中的關鍵概念,這些概念對於將這些方法實際結合到你的解決方案中至關重要。

自然語言和文本數據

合理的起點是從定義開始:「什麼是自然語言?」它是我們人類相互交流的方式,溝通的主要方式是口語和文字。我們可以更進一步,只關注文本交流。畢竟,生活在 Siri、Alexa 等無處不在的時代,我們知道語音是一組與文本無關的計算。

數據前景和挑戰

我們只考慮使用文本數據,我們可以對語言和文本做什麼呢?首先是語言,特別是英語,除了規則還有很多例外,含義的多樣性和語境差異,這些都可能使人類口譯員感到困惑,更不用說計算機翻譯了。在小學,我們學習文章和標點符號,通過講母語,我們獲得了尋找直覺上表示唯一意義的詞的能力。比如,出現諸如 「a」、「the」 和 「or」 之類的文章,它們在 NLP 中被稱為停止詞,因為傳統上 NLP 演算法是在一個序列中找到這些詞時意味著搜索停止。

由於我們的目標是自動將文本分類為情感類,因此我們需要一種以計算方式處理文本數據的方法。因此,我們必須考慮如何向機器表示文本數據。眾所周知,利用和解釋語言的規則很複雜,輸入文本的大小和結構可能會有很大差異。我們需要將文本數據轉換為數字數據,這是機器和數學的首選方式。這種轉變屬於特徵提取的範疇。

在提取輸入文本數據的數字表示形式後,一個改進可能是:給定一個文本輸入體,為上面列出的文章確定一組向量統計數據,並根據這些數據對文檔進行分類。例如,過多的副詞可能會使撰稿人感到憤怒,或者過度使用停止詞可能有助於識別帶有內容填充的學期論文。誠然,這可能與我們情感分析的目標沒有太大關係。

詞袋

當你評估一個文本陳述是積極還是消極的時候,你使用哪些上下文來評估它的極性?(例如,文本中是否具有積極的、消極的或中性的情感)一種方式是隱含形容詞:被稱為 「disgusting」(噁心) 的東西被認為是消極的,但如果同樣的東西被稱為 「beautiful」(漂亮),你會認為它是積極的。從定義上講,俗語給人一種熟悉感,通常是積極的,而髒話可能是敵意的表現。文本數據也可以包括表情符號,它帶有固定的情感。

理解單個單詞的極性影響為文本的 詞袋 bag-of-words (BoW)模型提供了基礎。它分析一組單詞或辭彙表,並提取關於這些單詞在輸入文本中是否存在的度量。辭彙表是通過處理已知極性的文本形成稱為標記的訓練數據。從這組標記數據中提取特徵,然後分析特徵之間的關係,並將標記與數據關聯起來。

「詞袋」這個名稱說明了它的用途:即不考慮空間位置或上下文的的單個詞。辭彙表通常是由訓練集中出現的所有單詞構建的,訓練後往往會被修剪。如果在訓練之前沒有清理停止詞,那麼停止詞會因為其高頻率和低語境而被移除。很少使用的單詞也可以刪除,因為缺乏為一般輸入實例提供的信息。

但是,重要的是要注意,你可以(並且應該)進一步考慮單詞在單個訓練數據實例之外的情形,這稱為 詞頻 term frequency (TF)。你還應該考慮輸入數據在所有訓練實例中的單詞計數,通常,出現在所有文檔中的低頻詞更重要,這被稱為 逆文本頻率指數 inverse document frequency (IDF)。這些指標一定會在本主題系列的其他文章和軟體包中提及,因此了解它們會有所幫助。

詞袋在許多文檔分類應用程序中很有用。然而,在情感分析中,當缺乏情境意識的問題被利用時,事情就可以解決。考慮以下句子:

  • 我們不喜歡這場戰爭。
  • 我討厭下雨天,好事是今天是晴天。
  • 這不是生死攸關的問題。

這些短語的情感對於人類口譯員來說是有難度的,而且通過嚴格關注單個辭彙的實例,對於機器翻譯來說也是困難的。

在 NLP 中也可以使用稱為 「n-grams」 的單詞分組。一個二元組考慮兩個相鄰單片語成的組而不是(或除了)單個詞袋。這應該可以緩解諸如上述「不喜歡」之類的情況,但由於缺乏語境意思,它仍然是個問題。此外,在上面的第二句中,下半句的情感語境可以被理解為否定前半部分。因此,這種方法中也會丟失上下文線索的空間局部性。從實用角度來看,使問題複雜化的是從給定輸入文本中提取的特徵的稀疏性。對於一個完整的大型辭彙表,每個單詞都有一個計數,可以將其視為一個整數向量。大多數文檔的向量中都有大量的零計數向量,這給操作增加了不必要的空間和時間複雜度。雖然已經提出了許多用於降低這種複雜性的簡便方法,但它仍然是一個問題。

詞嵌入

詞嵌入 Word embedding 是一種分散式表示,它允許具有相似含義的單詞具有相似的表示。這是基於使用實值向量來與它們周圍相關聯。重點在於使用單詞的方式,而不僅僅是它們的存在與否。此外,詞嵌入的一個巨大實用優勢是它們關注於密集向量。通過擺脫具有相應數量的零值向量元素的單詞計數模型,詞嵌入在時間和存儲方面提供了一個更有效的計算範例。

以下是兩個優秀的詞嵌入方法。

Word2vec

第一個是 Word2vec,它是由 Google 開發的。隨著你對 NLP 和情緒分析研究的深入,你可能會看到這種嵌入方法。它要麼使用一個 連續的詞袋 continuous bag of words (CBOW),要麼使用一個連續 skip-gram 模型。在 CBOW 中,一個單詞的上下文是在訓練中根據圍繞它的單詞來學習的。連續 skip-gram 學習傾向於圍繞給定的單詞學習單詞。雖然這可能超出了你需要解決的問題,但是如果你曾經面對必須生成自己的詞嵌入情況,那麼 Word2vec 的作者就提倡使用 CBOW 方法來提高速度並評估頻繁的單詞,而 skip-gram 方法更適合嵌入稀有單詞更重要的嵌入。

GloVe

第二個是 用於詞表示的全局向量 Global Vectors for Word Representation (GloVe),它是斯坦福大學開發的。它是 Word2vec 方法的擴展,試圖通過將經典的全局文本統計特徵提取獲得的信息與 Word2vec 確定的本地上下文信息相結合。實際上,在一些應用程序中,GloVe 性能優於 Word2vec,而在另一些應用程序中則不如 Word2vec。最終,用於詞嵌入的目標數據集將決定哪種方法最優。因此,最好了解它們的存在性和高級機制,因為你很可能會遇到它們。

創建和使用詞嵌入

最後,知道如何獲得詞嵌入是有用的。在第 2 部分中,你將看到我們通過利用社區中其他人的實質性工作,站到了巨人的肩膀上。這是獲取詞嵌入的一種方法:即使用現有的經過訓練和驗證的模型。實際上,有無數的模型適用於英語和其他語言,一定會有一種模型可以滿足你的應用程序,讓你開箱即用!

如果沒有的話,就開發工作而言,另一個極端是培訓你自己的獨立模型,而不考慮你的應用程序。實質上,你將獲得大量標記的訓練數據,並可能使用上述方法之一來訓練模型。即使這樣,你仍然只是在理解你輸入文本數據。然後,你需要為你應用程序開發一個特定的模型(例如,分析軟體版本控制消息中的情感價值),這反過來又需要自己的時間和精力。

你還可以對針對你的應用程序的數據訓練一個詞嵌入,雖然這可以減少時間和精力,但這個詞嵌入將是特定於應用程序的,這將會降低它的可重用性。

可用的工具選項

考慮到所需的大量時間和計算能力,你可能想知道如何才能找到解決問題的方法。的確,開發可靠模型的複雜性可能令人望而生畏。但是,有一個好消息:已經有許多經過驗證的模型、工具和軟體庫可以為我們提供所需的大部分內容。我們將重點關注 Python,因為它為這些應用程序提供了大量方便的工具。

SpaCy

SpaCy 提供了許多用於解析輸入文本數據和提取特徵的語言模型。它經過了高度優化,並被譽為同類中最快的庫。最棒的是,它是開源的!SpaCy 會執行標識化、詞性分類和依賴項注釋。它包含了用於執行此功能的詞嵌入模型,還有用於為超過 46 種語言的其他特徵提取操作。在本系列的第二篇文章中,你將看到它如何用於文本分析和特徵提取。

vaderSentiment

vaderSentiment 包提供了積極、消極和中性情緒的衡量標準。正如 原論文 的標題(《VADER:一個基於規則的社交媒體文本情感分析模型》)所示,這些模型是專門為社交媒體文本數據開發和調整的。VADER 接受了一組完整的人類標記過的數據的訓練,包括常見的表情符號、UTF-8 編碼的表情符號以及口語術語和縮寫(例如 meh、lol、sux)。

對於給定的輸入文本數據,vaderSentiment 返回一個極性分數百分比的三元組。它還提供了一個單個的評分標準,稱為 vaderSentiment 複合指標。這是一個在 [-1, 1] 範圍內的實值,其中對於分值大於 0.05 的情緒被認為是積極的,對於分值小於 -0.05 的被認為是消極的,否則為中性。

第 2 部分中,你將學習如何使用這些工具為你的設計添加情感分析功能。

via: https://opensource.com/article/19/4/social-media-sentiment-analysis-python

作者:Michael McCune 選題:lujun9972 譯者:MjSeven 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國