亚马逊AWS官方博客
如何在数据库里面使用SQL语句直接调用Amazon机器学习服务进行推理
摘要
本文主要讲解了如何在Amazon Aurora数据库里面使用SQL语句直接调用Amazon Comprehend 和Amazon SageMaker机器学习服务进行推理,让业务后端开发人员即使没有机器学习知识,也可以快速使用最熟悉的SQL语句调用机器学习服务,为业务提升价值。
前言
如何为数据库无缝添加人工智能/机器学习(以下简写为AI/ML)能力?随着最近几年AI/ML的火热,业务后端开发人员也在考虑如何直接方便地为数据库添加AI/ML能力,更好地为业务服务。比如,直接使用SQL语句就可以对用户行为进行欺诈检测,预测流失,评估收入,评论情绪分析,产品推荐,广告推荐等等。
Amazon Aurora 是一种与 MySQL 和 PostgreSQL 兼容的关系数据库,专为云而打造,既具有传统企业数据库的性能和可用性,又具有开源数据库的简单性和成本效益。它的速度最高可以达到标准 MySQL 数据库的五倍、标准PostgreSQL 数据库的三倍。它可以实现商用数据库的安全性、可用性和可靠性,而成本只有商用数据库的 1/10。全球众多的客户都在使用Amazon Aurora存储核心业务数据。
Amazon Aurora于2019年11月就开始支持了AI/ML能力,通过业务后端开发人员熟悉的 SQL 编程语言,直接无缝集成调用Amazon Comprehend和 Amazon SageMaker;不需要拥有机器学习经验,不需要拷贝移动数据,不需要学习新的单独的工具,就可以将AI/ML的能力添加到您的应用程序中。Amazon Aurora 直接从优化后的底层调用 Amazon Comprehend和Amazon SageMaker,不经过应用程序层,因此访问延迟低、性能优、吞吐大、安全高,也不会影响到Amazon Aurora数据库的性能。您可以调用Amazon SageMaker 中可用的任何 AI/ML 模型,也可以使用 Amazon Comprehend 进行情绪分析。
Amazon Comprehend 是一项完全托管的SaaS自然语言处理 (NLP) 服务,使用机器学习来发现文本中的洞察信息。Amazon Comprehend 提供自定义实体识别、自定义分类、关键词提取、情绪分析、实体识别和更多 API,以便您可以轻松将自然语言处理集成到您的应用程序中。目前Amazon Comprehend支持包含英语、中文简体、中文繁体等共12种语言文字。[6]
Amazon SageMaker 是一项完全托管的机器学习平台,它可以帮助开发人员和数据科学家快速准备构建、训练和部署机器学习 (ML) 模型。全球有众多各行客户使用Amazon SageMaker训练、部署自己的业务模型。
业务场景和架构
假设您是一家公司的业务后端开发人员,日常需要设计数据库SQL语句进行业务数据处理。现在您有2张数据表,comments 表存放用户的评论信息,subscribe表存放用户的信息和行为统计数据。您想快速知道用户的评论是好是坏,您也想预测用户是否会订阅您公司的产品等。虽然您没有很深的AI/ML能力,但是您在想能否为您的数据添加机器学习能力,有没有简单快捷的方式降低难度。
通过前言中的介绍,您了解到可以直接在SQL语句中调用Amazon Comprehend服务分析用户评论的情绪;在SQL语句中调用Amazon SageMaker推理服务判断用户是否会订阅产品或服务。于是您投入了半天时间,在亚马逊云科技的控制台快速上手、独立实现了您的业务目标。架构图如下:
使用MySQL Workbench远程访问亚马逊云科技上的数据库Aamzon Aurora,通过SQL语句调用Amazon Comprehend和Amazon SageMaker服务。
演示步骤
下面将详细讲解和演示如何在Amazon Aurora里面直接调用Amazon Comprehend和
Amazon SageMaker服务进行推理:
1.账号环境准备
本文中的演示,使用了亚马逊云科技美东1(us-east-1)区域,为避免语言翻译上的歧义,截图都使用了英文界面。欢迎您实际运行此演示,如果您选择了不同的区域和语言界面,请注意界面上的一些差异。
1.1.开通亚马逊云科技账号,登录控制台
如果您还没有账号,请访问https://aws.amazon.com/cn/ 免费注册账户。如果已有账号请跳过这一步,直接登录。
1.2获取Amazon SageMaker上已部署好模型的Endpoint的名称和ARN
注:如果您或您的团队不熟悉Amazon SageMaker,也可以暂时先跳过这一步。
这一步需要您已在Amazon SageMaker上部署好了模型,如果你还没有部署,请参考“在Amazon SageMaker里面部署模型 ” [2]
然后在Amazon SageMaker控制台上找到对应的endpoint,拷贝它的名称和ARN,如下图
本文演示以Amazon SageMaker案例“Customer Subscribe Prediction with Amazon SageMaker Autopilot”[3]为例,该示例中,我们使用UCI机器学习数据集中的Bank Makerting Data Set,基于数据集里面客户的信息,历史营销记录,营销活动信息,外部环境信息等数据,使用Amazon SageMaker AutoML训练出最优的机器学习模型,来预测用户是否对客户产品(如银行定期存款)是否订阅(“yes”或“no”)。您可以在Amazon SageMaker Studio下载打开链接上的Python Notebook文件, 然后按提示逐步运行就可以训练出一个模型,并部署得到可用于推理的Endpoint。
注意:Amazon SageMaker Endpoint要和Amazon Aurora所在区域使用同一个区域。
1.3.创建Amazon Aurora 实例
Amazon Aurora支持MySQL 和 PostgreSQL引擎,如果要使用AI/ML能力,创建的Amazon Aurora MySQL集群需要Aurora MySQL 2.07.0或更高版本;如果要创建Amazon Aurora PostgreSQL集群,需要Aurora PostgreSQL 10或更高版本。
本演示使用Aurora MySQL 2.10.2.
1.4.配置Aurora 集群参数组
我们需要为1.3步中创建好的Amazon Aurora数据库集群配置参数组。
1.5.下载客户端,并连接到Amazon Aurora 实例,创建样例表,插入样例数据
访问MySQL网站(https://dev.mysql.com/downloads/workbench/),根据您当前操作系统下载对应的MySQL Workbench。然后点击安装包按提示安装。
执行右边语句 创建数据库auroraml; 创建表comments,并插入5条记录。 假设该表主要记录用户对购买过商品的评论,我们想得到这些评论是消极抱怨的,还是积极夸赞的,还是中立的。 |
|
执行右边语句,创建表 subscribe。假设该表主要记录了某银行的用户信息,我们想知道这些用户是否会订阅某产品。 相应字段解释可以参见参考资料[3]上的说明。 |
|
执行右边语句,插入5条记录,[注意:这些记录可以使用来自中前面1.2步骤中的SageMaker案例中的测试集] |
1.6.授权访问Amazon Comprehend和Amazon SageMaker
执行右边语句赋权SQL调用AI/ML机器学习服务 |
|
2.调用Amazon Comprehend服务分析用户评论的情绪
从 Amazon Aurora调用 Amazon Comprehend 就像调用 SQL 函数那样轻松。Aurora 机器学习提供了两个内置的 Amazon Comprehend 函数: aws_comprehend_detect_sentiment() 和 aws_comprehend_detect_sentiment_confidence(),用于调用 Amazon Comprehend 进行情绪分析。
aws_comprehend_detect_sentiment() 返回’POSITIVE’, ‘NEGATIVE’, ‘NEUTRAL’, ‘MIXED’这4个值中的一个。’POSITIVE’表示正向的、积极的,’NEGATIVE’表示负向的、消极的,’NEUTRAL’表示中立,’MIXED’表示混合前面几种。
aws_comprehend_detect_sentiment_confidence()返回双精度值表示aws_comprehend_detect_sentiment结果的置信度。
具体语法如下,其中input_text 表示输入的文本,language_code表示文本的语言代码,可选参数max_batch_size表示批处理的数量,越大表示每次处理的文本数量越大,但是延迟会同步提高,实际使用时要有所平衡。
在MySQL Workbench 执行右边语句对表 comments里面的用户评论进行情绪分析; |
结果如下,您可自行对比文本确认返回的情绪分析是否正确,您也可以插入更多评论,包括不同语言的评论进行验证测试:
3.调用Amazon SageMaker服务判断用户是否会订阅
如果要调用Amazon SageMaker Endpoints,首先需要创建自定义函数,指定参数,调用的endpoint,返回结果类型,批大小等。注意不可以使用除numeric或 VARCHAR类型外的其他类型。
具体语法如下,
在MySQL Workbench 执行右边语句创建自定义函数;注意endpoint name来自1.2中拷贝的Amazon SageMaker endpoint名称。 |
|
授权访问已创建好的自定义函数 | GRANT EXECUTE ON FUNCTION auroraml.will_subscribe TO 'admin'@'%'; |
执行右边语句查看SageMaker推理结果 |
|
结果如下,您可以看到正常的推理出用户是否订阅的结果,yes表示会订阅,no表示不回订阅:
4.监控Amazon Aurora机器学习的性能
在MySQL Workbench里面运行下列命令,查看和机器学习性能相关的全局变量的值:
show status like ‘Aurora_ml%’;
可以使用 FLUSH STATUS 语句重置这些状态变量。
Aurora_ml_logical_response_cnt:Aurora MySQL 从 ML 服务接收的响应次数总和。
Aurora_ml_actual_request_cnt:Aurora MySQL 从 ML 服务接收的请求次数总和。
Aurora_ml_actual_response_cnt:Aurora MySQL 从 ML 服务接收的响应次数总和。
Aurora_ml_cache_hit_cnt:Aurora MySQL 从 ML 服务接收的内部缓存命中次数总和。
Aurora_ml_single_request_cnt:非批处理模式评估的 ML 函数总和。
类似下列截图:
5.清除环境
当你完成上述演示实验后,若不再需要实验环境,请及时清除创建的资源,避免带来成本上的开销。
- 打开Amazon RDS控制台,删除上面创建的集群,如aurora-ml-database
- 打开Amazon Sagemaker,删除上面创建的Endpoint,同时打开Amazon S3,删除相应桶里面的上传的训练文件、生成的模型等文件。
总结
通过上面的演示和讲解,您无需专业的机器学习知识,就可以简单快速地向现有的数据库应用程序添加基于AI/ML的能力;您也无需构建自定义集成服务或另外学习工具。您可以将机器学习处理作为对存储函数的调用直接嵌入到SQL查询中;您也无需将数据移出数据库即可执行机器学习操作;也无需转换或重新导入机器学习操作的结果即可在数据库应用程序中使用它们。
限于篇幅和时间,本演示只演示了在Amazon Aurora MySQL里面使用SQL语句调用Amazon Comprehend 和Amazon SageMaker机器学习服务进行推理,若您使用的是Amazon Aurora PostgreSQL,请参看官方文档[1]和实验教程[4],博客[5]。
参考资料
[1]Amazon Aurora用户指南 https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html
[2]在SageMaker里面部署模型
https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-deployment.html
[3] Customer Subscribe Prediction with Amazon SageMaker Autopilot https://github.com/shenshaoyong/awssample/blob/master/SageMaker/Autopilot/autopilot_customer_subscribe_bankdataset.ipynb
[4] 动手实验Perform sentiment analysis with Amazon Aurora ML integration
https://aws.amazon.com/getting-started/hands-on/sentiment-analysis-amazon-aurora-ml-integration/
[5] New for Amazon Aurora – Use Machine Learning Directly From Your Databases https://aws.amazon.com/blogs/aws/new-for-amazon-aurora-use-machine-learning-directly-from-your-databases/
[6] Amazon Comprehend Supported Languages
https://docs.aws.amazon.com/comprehend/latest/dg/supported-languages.html
[7] Amazon Aurora Labs for MySQL – Use SageMaker with Aurora
https://awsauroralabsmy.com/ml/sagemaker/