亚马逊AWS官方博客

使用 Amazon Comprehend 检测客户评论的情绪

如今,公共内容之间的关联越来越密切。客户评论数据是深入了解消费相关决策的工具,企业若能准确把握其中的情绪,便获得了重要的市场情报,从而可以主动将问题扼杀在萌芽阶段。

情绪分析是通过计算来确定一段文字蕴含的情绪是正面、负面、中立还是各种情绪交织在一起的一种流程。Amazon Comprehend 是由多个 API 组成的自然语言处理 (NLP) 文本分析服务,这些 API 可用于检测情绪 (以及关键短语、命名实体和语言),并根据一组文档执行主题建模。该服务利用先进的深度学习算法检测情绪,这些算法采用评分机制和属性来评估文本。Amazon Comprehend 训练数据集主要包括产品描述中的数据以及来自世界上最大的自然语言集合之一 – Amazon.com 上的客户评论。我们为您提供经过全方位训练的模型,该模型会根据新数据反复进行训练,确保与语言发展保持同步。目前大部分数据工程师和开发人员都不具备使用 ML 所需的一般技能。Amazon Comprehend 填补了这一技能空缺,可让开发人员利用现有的技能轻松使用 NLP。

本博文将向您介绍在事件驱动型无服务器架构 (使用 AWS 服务构建) 中,如何使用 Amazon Comprehend 来检测客户情绪。

解决方案架构概览

我们来看看 Amazon.com 上的产品评论,并使用 Amazon Comprehend 来对给定评论进行情绪分类。我们以 Amazon Echo、Amazon Echo Dot 和 Amazon Echo Show 的评论为例。我们将上传其他伪造的示例数据 (尽量不损害品牌声誉),然后使用具有细微差别的信息来模拟检索与产品有关的负面情绪,例如,正在召回的有缺陷、受损或危险商品。最后,我们使用 Amazon Athena 对负面评论进行交互查询并导出报告,以便让企业立即采取措施。

评论上传:用户将文本格式的客户评论上传到“Customer Review”(客户评论) 存储桶。

客户评论情绪分析函数:将安全上传评论作为触发评论情绪分析函数的 Amazon S3 事件,以便将评论下载到临时文件,然后调用 Amazon Comprehend 针对该评论执行文本分析,接着将总体情绪连同正面、负面、中立和混合信心评分一起输出到 CSV 文件。包含情绪的 CSV 文件将存储在同一“Customer Review”(客户评论) 存储桶内的“sentiment”(情绪) 文件夹中。

交互式 SQL 查询:使用 Amazon Athena 查询评论结果并重点关注负面情绪。

分步配置

我们先部署 AWS CloudFormation 模板,以便预置与 Amazon S3、AWS Lambda 和 Amazon Comprehend API 进行交互所需的 AWS Identity and Access Management (IAM) 角色和 Lambda 函数。

区域 区域代码 启动
1 美国东部
(弗吉尼亚北部)
us-east-1  
  1. 在 CloudFormation 控制台中,选择 Launch Stack (启动堆栈) 按钮 (如上方所示)。如果感兴趣,可以在此处查看 YAML 模板。
  2. 在“选择模板”页面上,选择下一步
  3. 在“指定详细信息”页面上,选择下一步
  4. 在“选项”页面上,保留所有默认设置,然后选择下一步
  5. 在“Review”(评论) 页面上,选中相应复选框,以便确认 CloudFormation 将创建 IAM 资源以及包含客户名称的 IAM 资源。
  6. 选择创建更改集

注意:我们提供的 CloudFormation 模板使用 AWS Serverless Application Model (AWS SAM) 编写而成。AWS SAM 可以简化无服务器应用程序的函数、API 等的定义方式,还可以简化这些服务的某些功能 (例如,环境变量) 的定义方式。在 CloudFormation 模板中部署 SAM 模板时,需要执行转换步骤来将 SAM 模板转换为标准 CloudFormation,因此,您必须选择“创建更改集”按钮才能执行该转换。

  1. 等待几秒钟,让更改集完成计算更改。您的屏幕应该会如下所示:
  2. 最后,选择执行,让 CloudFormation 启动后台的资源。您不必等待其完成即可继续执行下一步。

Amazon Simple Storage Service (S3) 存储桶事件触发器:

部署完 IAM 角色、Lambda 函数和 S3 存储桶之后,请务必为您的 Comprehend 情绪分析函数创建 S3 事件触发器。

  1. 打开 Amazon S3 控制台,选择以“review-sentiment”开头的新 S3 存储桶。
  2. 在“高级设置”部分下方选择属性,然后选中事件框。
  3. 选择 + Add notification (+ 添加通知),然后配置以下各项:
    1. 名称:SentimentAnalysis
    2. 事件:ObjectCreate (All)
    3. 后缀:.txt
    4. 发送到:Lambda 函数
    5. Lambda:review-sentiment-ComprehendSentimentAnalysis-XYZ
  4. 选择保存

 S3 客户评论上传:

为了对使用案例进行说明,我们提取的是 Amazon Echo、Amazon Echo Dot 和 Amazon Echo Show 最上面的客户评论。我们将每条评论保存到文本文件中。

  1. 下载以下三条评论:
    1. review-B01DFKC2SO.txt
    2. review-B01J24C0TI.txt
    3. review-B0749WVS7J.txt

注意:Amazon 客户评论未经许可不得用于商业用途。在实施您的应用程序时,应当将此数据替换为您有权使用的数据源。

  1. 从控制台中选择您的 S3 存储桶,然后选择“添加”以添加各个评论文本文件,最后选择上传
  1. 刷新存储桶,然后验证存储桶中的以下输出:

    注意:这是我们创建的事件驱动型无服务器架构。上传到我们 S3 存储桶的评论被视为一个事件,用于触发 Comprehend-SentimentAnalysis 函数,进而将情绪和情绪信心评分输出到 CSV 文件中,该文件位于 S3 存储桶的“sentiment”(情绪) 文件夹中。
  2. 选择一条评论,然后选择下载

    “我的兄弟 Robert 由于颈部以下多发性硬化症而瘫痪在床,卧病不起已经长达 30 多年,如今有了一个新朋友,这就是 Alexa!每当 Alexa 播放 70 年代的音乐,玩“Jeopardy”(危险边缘) 游戏,回答他的所有问题并且在每天早晨将他唤醒时,Robert 总是满含幸福的泪水。感谢 Amazon 为我卧病在床的兄弟带来安慰。”
  3. 选择 sentiment (情绪) 文件夹,并打开 CSV 文件查看其内容。

    “情绪”信息介绍文本的总体情绪以及以下每个标签的情绪评分:“Positive”(正面)、“Negative”(负面)、“Neutral”(中立) 及“Mixed”(混合)。所有这些情绪评分均通过 MXNet 深度学习模型返回,并显示为 0 到 1 之间的浮点值,其中 1 表示情绪标签为充满信心。例如,此 CSV 表示 Amazon Echo Dot 评论的总体情绪为“POSITIVE”(正面),正面情绪评分 (信心) 为 82%。
  1. 为了丰富我们的评论数据,请返回 S3 存储桶,并在此处从以下示例评论数据上传各个文本文件。

将每条评论上传到 S3 存储桶时,都会调用 Amazon Comprehend。由于 S3 上存储的评论数量不受限制,下一步就是要能够对这些评论进行查询,并找出对企业而言最重要的内容。在接下来的步骤中,我们将查询 S3 中现有的评论,然后过滤出负面评论。

使用 Amazon Athena 进行交互查询

我们将进一步深化此操作:按负面情绪从强到弱的顺序,使用 SQL 语句对所有评论进行排序。通过此查询,企业可以准确了解从何处着手并明智地安排周期。

在 Athena 控制台中,运行以下命令以在默认数据库中创建 Athena 表。 重要提示:请将 <bucket_name> 替换为之前创建的 S3 存储桶。

CREATE EXTERNAL TABLE IF NOT EXISTS default.ReviewSentimentAnalysis (
  `ImageLocation` string,
  `Timestamp` string,   
  `Sentiment` string,
  `Positive` string,
  `Negative` string,
  `Neutral` string,
  `Mixed` string
  )
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = ',',
  'field.delim' = ','
) LOCATION 's3://<bucket_name>/sentiment/'

表成功创建后,请将以下 SQL 语句复制粘贴到编辑器中。  选择 Run Query (运行查询)。

SELECT * FROM default.ReviewSentimentAnalysis WHERE sentiment='NEGATIVE'
ORDER BY negative DESC

结论

总而言之,Amazon Comprehend 可以快速识别发生变化的观点以及总体情绪,让您能够深入了解客户反馈,从而减少了解客户所需的时间和精力。此外,这也提供了一个立即采取相应措施的机会,以便满足客户不断变化的需求。

训练 NLP 不仅很困难,而且成本也非常昂贵。获取真实情绪的过程存在诸多障碍,例如,在对话不连贯、挖苦和讽刺时语言含义模糊不清,在使用表情符号的象征性表达中,仅捕获文本无法进行分析。所有这些障碍使得情绪更难以理解,因此,可能会影响所得到的结果的质量。 即使采用大型非结构化情绪富文本数据集和适当的分析方法,要想成功预测客户需求或对其作出反应,也需要做出大量的努力。这要求企业拥有相应的技能和专业知识来构建有效的机器学习 (ML) 模型,并在模型中包含可用来训练准确的情绪分类器的优化算法,然后运用 ML 技术来进一步降低系统不准确性,同时通过连续的反馈循环不断改进该模型。

Amazon Comprehend 将数据科学家需要执行的无差异繁重工作进行了抽象化,让您能够轻松将该服务集成到您的应用程序或分析解决方案中。此外,您还可以在 AWS 上一次查询几百万条评论,然后仅显示相关信息。可通过多种我们使用案例以外的方式来收集文字信息,例如,通过 Amazon Kinesis 或者 Amazon CloudWatch 中的计划事件实时提取数据。此外,提取并分析情绪之后,还可以洞察文本数据的其他很多方面。例如,您可以将数据的新字符串加载到数据仓库 (例如,Amazon Redshift) 中,在 Amazon QuickSight 等商业智能 (BI) 工具中查看该数据,或者将负面情绪评论复制到某个 S3 存储桶,以便触发我们的 Simple Notification Service (SNS) 以通知您的客户服务团队。

所有这些操作均在无服务器架构中执行,因此无需服务器即可编写和运行代码。归根结底,业务逻辑应该是您需要编写的唯一代码。我们将一如既往地继续以真正敏捷的方式对我们的模型进行迭代。请继续为我们提供反馈。现在充分发挥您的想象力,在 AWS 上尽情构建吧!


补充阅读

了解如何使用包括 Amazom Comprehend 和 Amazon Quicksight 在内的 Amazon ML 服务构建社交媒体控制面板


作者简介

Todd Escalona 是一名解决方案架构师,他致力于向企业客户以及在初创社区中推广 AWS 云,同时通过聆听客户心声来了解客户目标,并以此为出发点来进行反向营销。他会确定需求,围绕具体使用案例提供架构指导,并且协助他人设计可扩展、可靠且性能高的应用程序和服务。他对各种各样的技术感兴趣,例如,人工智能、机器学习以及事件驱动型无服务器架构。