2018 年 5 月

第 33 卷,第 5 期

本文章是由機器翻譯。

人工智慧 - 文字情感分析

Frank La La

Frank La Vigne其中的資料導向的現代化世界 truisms 是持續增加的速度和磁碟區的資料。我們看到更多的資料產生每日比以往人力的歷程記錄中。而且無處可去社交媒體等使用者產生內容的縮放比例先前年世界中更明顯比這個快速成長。Twitter 使用者,例如,統稱為送出大約 6000 推文每秒,根據追蹤站台網際網路即時統計資料 (internetlivestats.com/twitter 統計)。速率,沒有關於 350,000 每分鐘傳送的推文、 500 萬個推文,每天和每年約 200 10 億個推文。與評估內容的這個資料流保持可能會更大的小組,您就無法雇用夠多的人掃描來評估其使用者在任何給定時刻基底的人氣 Twitter。

幸運的是,來分析每個推文中的使用案例是極端的邊緣案例。有,不過,追蹤情緒的有效的商業動機是針對特定的主題、 搜尋字詞或雜湊標記。雖然這會縮小推文,以大幅分析的數目,大量的資料,仍然會使該分析的推文 sentiments 任何有意義的方式。

幸好分析整體的人氣是文字的可以輕鬆地透過情緒分析自動化的程序。情緒分析是運算資源分類和分類意見文字以決定是否中表示的態度示範正數、 負數或中性音調以表示程序。簡單地說,可自動化並 distilled 數學分數指出聲及主觀性程序。

設定 Azure 的筆記本

在二月 (msdn.com/magazine/mt829269),本文詳細 Jupyter 筆記本與可以在其中執行的環境。雖然任何 Python 3 環境可執行程式碼,在本文中,為了簡單起見,我將使用 Azure 筆記型電腦。透過瀏覽至 Azure 筆記本服務 Web 站台notebooks.azure.com並以您的 Microsoft ID 認證登入。以人工方式智慧型名稱建立新的程式庫。在 [程式庫識別碼] 欄位輸入"ArtificiallyIntelligent 」,然後按一下建立。在下列頁面上,按一下 [新增] 建立新的記事本。在項目名稱] 文字方塊中輸入名稱,從項目類型] 下拉式清單中選擇 [Python 3.6 筆記本,按一下 [新增 (圖 1)。

建立新的記事本與 Python 3.6 核心
圖 1 建立新的記事本與 Python 3.6 核心

按一下新建立的筆記本,並等候連接到核心服務。

以 Python 情緒分析

筆記本準備就緒之後,輸入下列程式碼中的空資料格,並執行程式碼中的資料格。

from textblob import TextBlob
simple_text = TextBlob("Today is a good day for a picnic.")
print(simple_text.sentiment)

出現的結果會如下所示:

Sentiment(polarity=0.7, subjectivity=0.6000000000000001)

極性指的是如何負數或正數色調的輸入的文字速率介於-1 到 + 1,以有最大負數,且正在最正數的 + 1-1。主觀性是從 0 到 1 的高主觀 1 指方式主觀陳述式率。只需要三行程式碼,我可以分析的文字,但其主觀性片段的不只是人氣。如何未情緒分析,一次視為類似很複雜,變成看似簡單?

Python 喜歡的休閒活動蓬勃發展的生態系統,特別是對機器學習和自然語言處理 (NLP)。上述程式碼片段會依賴 TextBlob 程式庫 (textblob.readthedocs.io/en/dev)。TextBlob 是開放原始碼程式庫處理文字資料,提供一個簡單 API 一頭栽進常見的自然語言處理 (nlp) 方面的工作。這些工作包括情緒分析以及執行更多。

在結果下方的空白資料格,輸入下列程式碼並加以執行:

simple_text = TextBlob("the sky is blue.")
print(simple_text.sentiment)

結果狀態,片語 「 sky 是藍色 」 具有 0.0 的極性和主觀性,以 0.1 遞增。這表示文字是中性音調和分數低主觀性中。立即下方結果的空白資料格中,輸入下列程式碼及執行資料格:

simple_text1 = TextBlob("I hate snowstorms.")
print(simple_text1.sentiment)
simple_text2 = TextBlob("Bacon is my favorite!")
print(simple_text2.sentiment)

請注意,此演算法正確識別 simple_text1 內容具有負值的人氣 (-0.8),並且陳述式是相當主觀 (0.9)。此外,此演算法正確推斷出的 simple_text2 正面的人氣 (0.625) 和高主觀本質上 (1.0)。

不過,此演算法沒有剖析人類語言的細節,更細微的重要問題。Sarcasm,比方說,不只難以偵測,但關閉結果可能會擲回。想像餐廳評論擷取 Yelp 像線上檢閱站台和正面的人氣在他們的網站和社交媒體上的檢閱就會自動發佈的其中一個案例。下列程式碼輸入空的資料格,然後執行它:

sample_customer_review1 =
  TextBlob("The burgers at this place will
  make you ill with joy.")
print(sample_customer_review1.sentiment)
sample_customer_review2 =
  TextBlob("Whenever I want to take a sick
  day, I eat here the night before and it is
  always a sure fire win!")
print(sample_customer_review2.sentiment)

清楚地這些兩個檢視的人氣是負數。尚未演算法認為否則使用這兩個檢閱計分為有正面的人氣分數、 0.15 和 0.26 分別。在此情況下,餐廳可能不想在任何平台上反白顯示這些檢閱其中一項。NLP 系統尚未抓住 sarcasm,好了解雖然有很多目前正在進行此區域中的參考資料 (thesarcasmdetector.com/about)。

連線到 Twitter

目前為止,我已透過 TextBlob 分析器只執行小型的位元的文字。這項技術的實際用法是摘要其使用者產生的資料,在理想情況下接近即時。幸運的是 Twitter 與其大約 327 百萬個作用中使用者 (www.statista.com/statistics/282087/number-of-monthly-active-twitter-users),提供要分析之文字的常數資料流。

若要連接使用 Twitter 的 API,我需要註冊應用程式與 Twitter 來產生所需的認證。在瀏覽器,移至apps.twitter.com ,如有需要登入您的 Twitter 認證。按一下 [建立新的應用程式] 按鈕即可啟動 [建立應用程式表單中所示圖 2。輸入應用程式名稱、 描述和網站。基於本文的目的,網站位址不重要,因此請輸入有效的 URL。按一下 [同意 Twitter 開發人員合約的條款,然後按一下 [建立您的 Twitter 應用程式按鈕的核取方塊。

Twitter 建立應用程式表單
圖 2 Twitter 建立應用程式表單

在下列畫面上,尋找 [應用程式設定] 區段下方的取用者金鑰 (應用程式開發介面)。按一下連結,在 「 管理金鑰和存取權杖 」。在接下來的頁面,按一下 [建立我存取權杖] 按鈕,如下所示圖 3,以建立存取權杖。記下顯示此頁面上的下列四個值:取用者金鑰 (API),取用者密碼 (機密應用程式開發介面),存取權杖和存取語彙基元秘項。

Twitter 應用程式金鑰和存取權杖螢幕
圖 3 Twitter 應用程式金鑰和存取權杖螢幕

使用 Tweepy 讀取推文

Tweepy 是 Python 程式庫,可簡化 Twitter API Python 程式碼之間的互動。可以找到 Tweepy 的詳細資訊,在docs.tweepy.org/en/v3.5.0。在這個階段中,返回 Jupyter 筆記本,輸入下列程式碼來安裝 Tweepy API。驚嘆號指示 Jupyter 殼層中執行命令:

!pip install tweepy

一旦成功執行的程式碼,將會讀取儲存格的回應文字:「 已成功安裝 tweepy 3.6.0,」 雖然可能會變更特定版本號碼。在下列的資料格中,輸入中的程式碼圖 4到新建立的空白儲存格和執行它。

圖 4 使用 Tweepy 存取 Twitter API

import tweepy
consumer_key = "[Insert Consumer Key value]"
consumer_secret = "[Insert Consumer Secret value]"
access_token = "[Insert Access Token value]"
access_token_secret = "[Insert Access Token Secret value]"
authentication_info = tweepy.OAuthHandler(consumer_key, consumer_secret)
authentication_info.set_access_token(access_token, access_token_secret)
twitter_api = tweepy.API(authentication_info)
spacex_tweets = twitter_api.search("#spacex")
for tweet in spacex_tweets:
  print(tweet.text)
  analysis = TextBlob(tweet.text)
  print(analysis.sentiment)

傳回的結果看起來應該如下所示:

#ElonMusk deletes own, #SpaceX and #Tesla Facebook pages after #deletefacebook https://t.co/zKGg4ZM2pi https://t.co/d9YFboUAUj
Sentiment(polarity=0.0, subjectivity=0.0)
RT @loislane28: Wow. did @elonmusk just delete #SpaceX and #Tesla from Facebook? https://t.co/iN4N4zknca
Sentiment(polarity=0.0, subjectivity=0.0)

請記住,因為執行的程式碼上搜尋即時 Twitter 資料,您的結果一定會有所不同。格式是讀取有點混淆。修改的迴圈中下儲存格,然後重新執行程式碼。

for tweet in spacex_tweets:
  analysis = TextBlob(tweet.text)
  print('{0} | {1} | {2}'.format(tweet.text, analysis.sentiment.polarity,
    analysis.sentiment.subjectivity))

將加入輸出管道字元應該讓容易閱讀。也請注意,[人氣] 屬性的兩個欄位、 極性和主觀性,可顯示個別。

Twitter 情緒資料載入至資料框架

先前的程式碼會建立內容和人氣分數推文中的管道分隔清單。進行進一步的分析更有用的結構是資料框架。資料框架是 two 維度標示資料結構。資料行可能包含不同的實值類型。類似試算表或 SQL 資料表、 資料框架提供熟悉且簡單的機制來處理資料集。

資料框架是熊程式庫的一部分。因此,您必須匯入以及 Numpy 熊程式庫。插入空白資料格的目前儲存格下方,輸入下列程式碼,然後執行:

import pandas as pd
import numpy as np
tweet_list = []
for tweet in spacex_tweets:
  analysis = TextBlob(tweet.text)
  tweet_list.append({'Text': tweet.text, 'Polarity': analysis.sentiment.polarity,
    'Subjectivity':analysis.sentiment.subjectivity })
  tweet_df = pd.DataFrame(tweet_list)   
tweet_df

結果現在會以容易閱讀的表格格式顯示。不過,這不所有程式庫可以執行資料框架。插入空白資料格的目前儲存格下方,輸入下列程式碼,然後執行:

print ("Polarity Stats")
print ("Avg", tweet_df["Polarity"].mean())
print ("Max", tweet_df["Polarity"].max())
print ("Min", tweet_df["Polarity"].min())
print ("Subjectivity Stats")
print ("Avg", tweet_df["Subjectivity"].mean())
print ("Max", tweet_df["Subjectivity"].max())
print ("Min", tweet_df["Subjectivity"].min())

藉由推文情緒分析資料載入資料框架,很容易執行及分析大規模的資料。不過,這些描述性統計資料只 scratch 領會資料框架所提供的介面。以 Python 熊資料框架的更完整的瀏覽,請監看的網路廣播: 「 資料分析在 Python 與熊,「 在 Jonathan 木材所bit.ly/2urCxQX

總結

速度和上端的資料量,企業必須找出運用機器學習方法來意義的資料,並將它轉換成洞察力的方式。自然語言處理,或 NLP,是類別的演算法,可以分析非結構化的文字,並將它剖析成電腦可讀取的結構,提供存取權給其中一個文字的任何主體索引鍵屬性 — 人氣。不太很久以前,這已超出範圍的一般開發人員,但現在 TextBlob Python 程式庫會將這項技術帶到 Python 生態系統。雖然演算法有時可以苦微妙與人類語言的細節,但會提供絕佳的 foundation 讓非結構化資料的意義。

本文章中所示範,只是現在一般所花的心力分析給定的人氣 negativity 或主觀性文字區塊。這點受惠起來的活躍 Python 的生態系統的第三方開放原始碼程式庫,所以也可以輕鬆地來源從站台的即時社交媒體,例如 Twitter 資料和即時使用者推文中提取。另一個 Python 程式庫,熊,簡化程序,對此資料執行進階的分析。仔細考量分析,企業可以監視社交媒體摘要和取得得知哪些客戶說或共用其相關的情況下。


Frank La VigneDataDriven 播客會導致資料和分析練習 Wintellect 和共同的主機。他的部落格定期 FranksWorld.com,而且您可以在他的 YouTube 頻道,"Frank 的世界電視 」 上監看他 (FranksWorld.TV)。

非常感謝下列技術專家檢閱這篇文章:Andy Leonard


MSDN Magazine 論壇中的這篇文章的討論