AWS机器学习初探(1):Comprehend - 自然语言处理服务

时间:2022-10-03 20:28:43

AWS机器学习初探(1):Comprehend - 自然语言处理服务

1. Comprehend 服务简介

1.1 功能

Amazon Comprehend 服务利用自然语言处理(NLP)来分析文本。其使用非常简单。

  • 输入:任意 UTF-8 格式的文本
  • 输出:Comprehend 输出一组实体(Entity)、若干关键词(Key phrase)、哪种语言(Language)、什么情绪(Sentiment,包括 positive,negative,neutual,mixed等几种)和针对每个单词的语法分析(Syntax)
  • 形式:支持同步的单文档返回,异步的多文档处理和批处理
  • 支持的语言:语言判断API支持上百种语言,其余API 只支持英语和西班牙语。
  • 是否需要预处理:不需要。AWS 自己会持续训练处理模型,来不断提高处理精度,这对用户来说是透明的。

典型的异步批处理过程:

  1. 将文档保存在 AWS S3 中
  2. 开启一个或者多个 Comprehend job 来处理这些文档
  3. 监控这些 job 的状态
  4. 从另一个 S3 bucket 中获取分析结果

1.2 示例

AWS机器学习初探(1):Comprehend - 自然语言处理服务

该图中,左侧为一段作为输入的文字,右侧为Comprehend API 的输出,分别是实体、关键词、情绪和语言。

在界面上做测试的例子:

在 Comprehend 界面上输入美国总统川普最新的一条推特消息,它认为其是负面的:

AWS机器学习初探(1):Comprehend - 自然语言处理服务

利用CLI 做测试的例子:

aws comprehend detect-dominant-language --region us-east- --text "hello world"
{
"Languages": [
{
"LanguageCode": "en",
"Score": 0.9750663042068481
}
]
}

2. 一个示例应用场景

2.1 应用场景说明

部署架构图:

AWS机器学习初探(1):Comprehend - 自然语言处理服务

架构说明:

  • 在某个 AWS 区域,利用该区域中的 Comprehend API
  • 有一个该区域中的 VPC,它有两个 Public Subnet,其中一个中有一个EC2 实例,安装了 phpmyadmin,用于连接和管理私有子网中的 Aurora 实例
  • 有一个私有子网,其中创建了一个 Aurora 实例,它只能在 VPC 范围内被访问
  • VPC 中有一个 Lambda 函数。因为该函数需要直接访问 Aurora 实例,因此它必须在 VPC 之中。
  • 因为 Lambda 函数需要访问 Comprehen API ,而 AWS 目前未提供内部访问该 API 的端点,因此需要有一个 NAT 网关。 Lambda 函数通过该网关访问 Comprehend API。

操作过程:

  1. 用户通过 phpmyadmin 来使用 Aurora 数据库。数据库中有一个名为 ReviewInfo 的表,每行代表一个文本信息,三列分别保存了文本信息的 ReviewID,message,sentiment,分别是记录的ID,消息内容和情绪。
  2. 每当用户插入一条消息(图中的1和2),Lambda 函数会自动被触发(图中的3),它调用 Comprehend API(图中的4),获取该信息的 sentiment,然后写回 Aurora 中的该条记录的 sentiment 字段(图中的5)。
  3. 用户从 phpmyadmin 中查询该条记录的 sentiment。

2.2 实现

(1)按照部署图,创建所需的各个AWS 服务实例,包括EC2 实例、NAT 实例、VPC、安装phpmyadmin 等。过程省略。在VPC 中创建一个 Aurora 实例,配置 phpmyadmin 指向该实例。在 VPC 中创建一个 python 2.7 Lambda 函数。函数内容如下:

import pymysql
import json
import boto3
import os def lambda_handler(event, context):
comprehend = boto3.client(service_name='comprehend')
jsonresponse= json.dumps(comprehend.detect_sentiment(Text=event['ReviewText'], LanguageCode='en'), sort_keys=True, indent=4)
json_object = json.loads(jsonresponse)
sentiment=json_object["Sentiment"] db = pymysql.connect(host=os.environ['host'],user=os.environ['user'],passwd=os.environ['password'],db=os.environ['db'], autocommit=True)
add_order = ("UPDATE ReviewInfo SET Sentiment=%s WHERE ReviewId=%s;")
db.cursor().execute(add_order, (sentiment,event['ReviewId']))
db.commit()
db.close()

该函数非常简单。简单说明如下:

  1. 通过环境变量传入 host,user,password,db 等数据库连接信息。
  2. 首选通过 boto3 库创建一个 comprehend 客户端
  3. 从传入的 event 中获取消息内容
  4. 调用 comprehend 服务的 detect_sentiment 函数,获取该消息的sentiment
  5. 通过 pymysql 库链接到数据库
  6. 更新该消息对应的记录的 Sentiment 列

(2)通过 phpmyadmin 在 Aurora 实例中创建一个数据库  comprehend_demo。

(3)在 phpmyadmin 中执行下面的 SQL 语句在该数据库中创建一个数据表 ReviewInfo。它有三个字段。

CREATE TABLE comprehend_demo.ReviewInfo(
ReviewId NUMERIC PRIMARY KEY ,
ReviewText TEXT NOT NULL ,
sentiment VARCHAR( 30 ) NOT NULL)

(4)在 phpmyadmin 中执行下面的 SQL 语句在数据库comprehend_demo中创建一个名为Aurora_To_Lambda的存储过程。注意需将其中的 COMPREHEND_LAMBDA_ARN 替换为步骤(1)中创建的Lambda 函数的 ARN。该存储过程会调用由 arn 指定的 Lambda 函数,并且传入 ReviewID 和 ReviewText 参数值。

DROP PROCEDURE IF EXISTS comprehend_demo.Aurora_To_Lambda;
DELIMITER ;;
CREATE PROCEDURE comprehend_demo.Aurora_To_Lambda (IN ReviewId NUMERIC, IN ReviewText TEXT) LANGUAGE SQL
BEGIN CALL mysql.lambda_async('<COMPREHEND_LAMBDA_ARN>', CONCAT('{ "ReviewId" : "', ReviewId, '", "ReviewText" : "', ReviewText,'"}') );
END;;
DELIMITER ;

结果:

aaarticlea/png;base64,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" alt="" name="en-media:image/png:808fb75e8481cdb570dee3a07f2615a5:none:none" />

(5)在 phpmyadmin 中执行下面的 SQL 语句在该数据库中创建一个触发器。每当 ReviewInfo 表中有新行被插入时,该触发器会被调用。它会获取该行的 ReviewID 和 ReviewText 字段,然后调用第(4)步中创建的触发器,触发器会调用 Lambda 函数。

CREATE TRIGGER `TR_Lambda` AFTER INSERT ON `ReviewInfo`
FOR EACH ROW BEGIN
SELECT NEW.ReviewId , NEW.ReviewText INTO @ReviewId , @ReviewText;
CALL comprehend_demo.Aurora_To_Lambda(@ReviewId , @ReviewText);
END

(6)因为Aurora 需要调用 Lambda 函数,因此需要配置 Aurora 的 IAM Role,使之具有调用 Lambda 函数的权限。

首先在 IAM 界面上,创建一个 IAM Policy,它包含 InvokeFunction 权限。

AWS机器学习初探(1):Comprehend - 自然语言处理服务

再创建一个 IAM Role,包含该 policy。

AWS机器学习初探(1):Comprehend - 自然语言处理服务

在 Aurora 界面上,创建一个新的 DB Cluster parameter group:

AWS机器学习初探(1):Comprehend - 自然语言处理服务

修改其  aws_default_lambda_role 为前面创建的 IAM role 的 arn,比如:

AWS机器学习初探(1):Comprehend - 自然语言处理服务

将 group2 设置为 Aurora 实例的group。此时需要重启实例,使得修改得以生效。

然后在下面界面中设置 Aurora 的 IAM role 为上述 role:

AWS机器学习初探(1):Comprehend - 自然语言处理服务

(7)做个简单测试,插入一条数据,如果出现下面的错误,则意味着 Aurora 成功地调用了 Lambda 函数,但是 Lambda 函数无法连接到 Comprhend 服务。此时需要检查从 Lambda 函数经过 NAT 网关访问 Comprehend API 的路径,主要是 VPC 的路由表。

AWS机器学习初探(1):Comprehend - 自然语言处理服务

(8)在网络路径确认无误后,如果出现下面的错误,则表示 Lambda 函数还无权调用 Comprehend API。

AWS机器学习初探(1):Comprehend - 自然语言处理服务

(9)配置 Lambda 函数调用 Comprehend API 的权限。

首先需要在 IAM 创建一条 policy,它有 Comprhend API 的完全权限。当然,可以只授予 sentiment API 权限。

AWS机器学习初探(1):Comprehend - 自然语言处理服务

然后创建一个 IAM role,关联该 policy。再将该 role 配置给 Lambda 函数,作为其 Execution Role。

AWS机器学习初探(1):Comprehend - 自然语言处理服务

(11)到现在为止,整个路径才算全部打通了。当你在 phpmyadmin 中通过 SQL 语句向 ReveiwInfo 表中插入一行时,Lambda 函数会自动在改行内更新 sentiment 字段。

AWS机器学习初探(1):Comprehend - 自然语言处理服务

参考文档:

欢迎大家关注我的个人公众号:

AWS机器学习初探(1):Comprehend - 自然语言处理服务