2018 年 5 月

第 33 卷,第 5 期

人工智能 - 文本情绪分析

通过Frank La La

Frank La Vigne现代数据驱动的 truisms 之一是持续增加的速度和数据量。我们在看到更多的数据生成每一天比以往人工历史记录中。和无处是世界上的社交媒体,其中用户生成内容在规模较大以前是不可想像更加明显比此快速增长。Twitter 根据跟踪站点 Internet 实时统计信息的用户,例如,共同向外发送大约 6,000 推文每隔一秒 (internetlivestats.com/twitter 的统计信息)。在该速率,有发送每分钟大约 350000 推文、 500 万个推文每天和每年的大约 200 亿推文。与此数据流来评估内容保持同步将不可能甚至以最大团队-只无法雇用足够扫描 Twitter 来评估其用户群在任何给定时刻的观点的人员。

幸运的是,分析每个推文的用例将极端边缘情况。有,但是,跟踪观点的业务动机是针对特定主题、 搜索词或哈希标记。虽然这减少了推文显著分析数,要分析的数据的数量仍将提高它不切实际分析推文的心声任何有意义的方式。

幸运的是,分析文本的总体观点是一个过程,可以轻松地自动通过观点分析。观点分析是计算分类和分类文本以便确定是否在表示态度演示正数、 负数或非特定音的意见的过程。简单地说,还可以自动并为数学得分,该值指示色调和主观 distilled 的过程。

设置 Azure 笔记本

在年 2 月 (msdn.com/magazine/mt829269),我介绍了在详细信息 Jupyter 笔记本和它们可以运行的环境中。任何 Python 3 环境可以在本文中,为简单起见中, 运行代码时,我将使用 Azure 笔记本。通过浏览到位于的 Azure 笔记本服务网站notebooks.azure.com并使用你的 Microsoft ID 凭据登录。使用人为智能的名称创建新的库。在库 ID 字段下输入"ArtificiallyIntelligent",然后单击创建。在以下页上,单击新建以创建新的笔记本。在项目名称文本框中输入一个名称、 项类型下拉列表中选择 Python 3.6 笔记本和单击新建 (图 1)。

使用 Python 3.6 内核中创建的新笔记本
使用 Python 3.6 内核中创建的新笔记本的图 1

单击新创建的笔记本并等待服务连接到一个内核。

在 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 是用于处理文本数据,一个开放源代码库为深入分析常见自然语言处理 (NLP) 任务提供一个简单的 API。这些任务包括观点分析和更多内容。

在结果下面的空白单元格中,输入下面的代码并执行它:

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

结果状态,短语"天是蓝色"具有 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 创建应用程序窗体

在下面的屏幕中,查找使用者密钥 (API 密钥) 在应用程序设置部分下。单击在"管理密钥和访问令牌"链接。在遵循页上,单击创建我访问令牌按钮中, 所示图 3,若要创建访问令牌。记下此页面上显示的以下四个值:使用者密钥 (API 密钥)、 使用者机密 (API 密钥),访问令牌和访问令牌机密。

Twitter 应用程序密钥和访问令牌屏幕
图 3 Twitter 应用程序密钥和访问令牌屏幕

使用 Tweepy 读取推文

Tweepy 是一个简化了 Python 代码和 Twitter API 之间的交互的 Python 库。Tweepy 有关的详细信息可以在找到docs.tweepy.org/en/v3.5.0。在此期间,返回到 Jupyter 笔记本,并输入以下代码以安装 Tweepy API。感叹号指示 Jupyter shell 中执行命令:

!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 观点数据加载到数据帧

前面的代码创建的推文管道分隔的列表内容和观点分数。一个更有用的结构,用于进一步分析将数据帧。数据帧是一个两维标签的数据结构。这些列可能包含不同的值类型。类似于电子表格或 SQL 表,数据框架提供熟悉且简单的机制来处理数据集。

数据框架是 Pandas 库的一部分。在这种情况下,你将需要导入以及 Numpy Pandas 库。插入当前单元格下方的空白单元格,输入下面的代码并执行:

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())

推文观点分析数据加载到数据帧,它更为轻松地运行和分析在规模较大的数据。但是,这些描述性统计信息只是大致说明了数据框架提供的能力。有关在 Python Pandas 数据框架的更完整浏览,请观看网络广播,"数据分析中 Python 与 Pandas,"通过在 Jonathan 木材bit.ly/2urCxQX

总结

速度和持续增长的数据量,大型和小型企业必须了解利用机器学习来有意义的数据,且将其转换为可操作意见的方法。自然语言处理,或 NLP,是一种算法,可以分析非结构化的文本和分析到计算机可读的结构,从而提供对任何正文的文本的键属性之一访问-观点。不太很久以前,这超出了普通的开发人员,使其但现在 TextBlob Python 库为提供了此技术的 Python 生态系统。虽然算法可以有时要想方设法获得的细微部分和人类语言的细微差异,但它们的涵义非结构化数据提供绝佳的基础。

如本文中所示,若要分析的文本在 negativity 和主观方面的观点给定的块的工作量现在很简单了。感谢第三方开放源代码库的充满活力 Python 生态系统,也很容易源从实时社交媒体网站,例如 Twitter 的数据,并引入实时的用户的推文。另一个 Python 库,Pandas,它简化了对此数据执行高级的分析过程。通过仔细的分析,企业可以监视社交媒体源,并获得了解客户是说和共享有关它们的信息。


Frank La Vigne 负责领导 Wintellect 的数据与分析实践,共同主持 DataDriven 播客。他博客定期在 FranksWorld.com 并且你可以在他的 YouTube 频道,"Frank 的 World 电视"上观看他 (FranksWorld.TV)。

衷心感谢以下技术专家对本文的审阅:Andy Leonard


在 MSDN 杂志论坛讨论这篇文章