每个和机器学习打交道的人,都有资格获得一个「数据搬运工」的称号!为什么这样说?你无论训练模型,或是分析理解内容,总得涉及到海量的数据吧。这些数据,尤其是结构化的数据,通常都在哪?大部分情况下可能都保存在各个数据库里。
而为了将机器学习与关系数据库中的数据结合使用,这就需要开发一个自定义应用程序来读取数据库中的数据,然后再应用机器学习模型。开发这样的应用程序需要多种技能才能和数据库进行交互并进行机器学习。当然,开发好这样的程序后,免不了还得考虑它的性能、可用性、安全性等一系列问题。
那么问题来了:我们能否更轻松地对关系数据库中数据应用机器学习?
Amazon Aurora 新功能了解一下
最近更新后的 Amazon Aurora 已经在本地集成了两种亚马逊云科技机器学习服务:
- Amazon SageMaker,一项让我们能够快速构建、训练和部署自定义机器学习模型的服务。
- Amazon Comprehend,一项使用机器学习来查找文字中的见解的自然语言处理(NLP)服务。
通过使用这项新的功能,我们可以在查询中使用 SQL 函数来对关系数据库中的数据应用机器学习模型。例如,我们可以使用 Comprehend 检测用户评论的情绪,或应用通过 SageMaker 构建的自定义机器学习模型来估计客户“流失”风险。客户流失是一个掺杂着“变化”和“转变”的词语,主要用于描述客户停止使用您的服务。
借助该功能,我们还可以将大型查询的输出(包括机器学习模型中的其他信息)存储到一个新的表格中,或通过仅更改客户端运行的 SQL 代码来在应用程序中交互式使用此功能,无需任何机器学习经验。
接下来就一起看两个具体的示例(第一个示例使用 Comprehend,第二个使用 SageMaker)。
配置数据库权限
首先需要授予数据库访问想要使用的服务的权限:Comprehend、SageMaker 或这两者。请在 RDS 控制台中创建一个新的 Aurora MySQL 5.7数据库,该数据库可用后,在区域终端节点的连接和安全选项卡中找到管理 IAM 角色部分。
在这里,我们需要将 Comprehend 和 SageMaker 连接到此数据库集群。对于 SageMaker,需要提供已部署机器学习模型的终端节点的 Amazon 资源名称(ARN)。如果想要使用多个终端节点,则需要重复执行此步骤。控制台负责创建服务角色,让 Aurora 数据库访问这些服务,以便新的机器学习模型集成工作。
通过 Amazon Aurora 使用 Comprehend
为此需要使用 MySQL 客户端连接到数据库。为了运行测试,我们可以创建一个用于存储博客平台评论的表格,并插入一些示例记录:
CREATE TABLE IF NOT EXISTS comments (
comment_id INT AUTO_INCREMENT PRIMARY KEY,
comment_text VARCHAR(255) NOT NULL
);
INSERT INTO comments (comment_text)
VALUES ("This is very useful, thank you for writing it!");
INSERT INTO comments (comment_text)
VALUES ("Awesome, I was waiting for this feature.");
INSERT INTO comments (comment_text)
VALUES ("An interesting write up, please add more details.");
INSERT INTO comments (comment_text)
VALUES ("I don’t like how this was implemented.");
若要检测表格中的评论情绪,可以使用 aws_comprehend_detect_sentiment 和aws_comprehend_detect_sentiment_confidence 这两个 SQL 函数:
SELECT comment_text,
aws_comprehend_detect_sentiment(comment_text, 'en') AS sentiment,
aws_comprehend_detect_sentiment_confidence(comment_text, 'en') AS confidence
FROM comments;
其中 aws_comprehend_detect_sentiment 函数将返回最合适的输入文本情绪:积极、消极或中性 aws_comprehend_detect_sentiment_confidence 函数将返回情绪检测的置信度:0(完全不可信),- 1(完全可信)。
通过 Amazon Aurora 使用 SageMaker 终端节点
与使用 Comprehend 时的情况类似,我们可以访问 SageMaker 终端节点来丰富存储在数据库中的信息。为了查看实际的使用案例,让我们以此文开头处提到的客户流失为例。
手机运营商拥有的历史记录上存在两种最终结果:一种是客户流失;另一种是继续使用服务。我们可以使用此历史记录信息来构建机器学习模型。作为模型的输入,我们瞄准的是当前的订阅套餐、一天中不同时段通过手机通话的客户数量以及呼叫客户服务的频率。
以下是客户表的结构:
SHOW COLUMNS FROM customers;
为了能够确定客户流失风险,可以使用 XGBoost 算法在此示例 SageMaker 笔记本之后训练一个模型。当该模型创建完毕之后,将它部署到一个托管的终端节点。
当 SageMaker 终端节点处于服务状态后,返回到控制台的管理 IAM 角色部分,以授予 Aurora 数据库访问终端节点 ARN 的权限。
随后需要创建一个新的 will_churn SQL 函数,为终端节点输入提供模型所需的参数:
CREATE FUNCTION will_churn (
state varchar(2048), acc_length bigint(20),
area_code bigint(20), int_plan varchar(2048),
vmail_plan varchar(2048), vmail_msg bigint(20),
day_mins double, day_calls bigint(20),
eve_mins double, eve_calls bigint(20),
night_mins double, night_calls bigint(20),
int_mins double, int_calls bigint(20),
cust_service_calls bigint(20))
RETURNS varchar(2048) CHARSET latin1
alias aws_sagemaker_invoke_endpoint
endpoint name 'estimate_customer_churn_endpoint_version_123';
可以看到,该模型通过使用客户的手机订阅详细信息和服务使用模式来识别客户流失风险。使用 will_churn SQL 函数对 customers 表运行了一次查询,根据机器学习模型对客户进行标记。为了存储查询结果,我们还需要创建一个新的 customers_churn 表:
CREATE TABLE customers_churn AS
SELECT *, will_churn(state, acc_length, area_code, int_plan,
vmail_plan, vmail_msg, day_mins, day_calls,
eve_mins, eve_calls, night_mins, night_calls,
int_mins, int_calls, cust_service_calls) will_churn
FROM customers;
让我们看一看 customers_churn 表中的一些记录:
SELECT * FROM customers_churn LIMIT 7;
很幸运,前面7位客户显然不会流失。但总体情况如何呢?存储 will_churn 函数的结果后,可以对 customers_churn 表运行 SELECT GROUP BY 语句。
SELECT will_churn, COUNT(*) FROM customers_churn GROUP BY will_churn;
从这里开始,就可以深入了解哪些因素导致客户流失。
当我们创建新版本机器学习模型及新的终端节点 ARN 时,可以重新创建 will_churn 函数而无需更改 SQL 语句。
立即体验
新的机器学习集成已于近日在 Aurora MySQL 5.7中推出,其中 SageMaker 集成已正式推出,Comprehend 集成提供预览版。大家可以在文档中了解更多信息。我们即将推出其他引擎和版本:Aurora MySQL 5.6,并且 Aurora PostgreSQL 10和11也即将推出。
Aurora 机器学习集成已在基础服务可用的所有区域推出。例如,如果 Aurora MySQL 5.7和 SageMaker 在某一区域均可用,则您可以使用SageMaker集成。如需完整的服务可用性列表,请参阅亚马逊云科技区域表。
使用集成不会额外收费,只需以正常费率支付基础服务费用。使用 Comprehend 时,请注意查询的大小。例如,如果对客户服务网页中的用户反馈进行情绪分析,若要联系做出特别积极或消极评论的客户以及每天做出10,000条评论的客户,需要支付3美元/天。为了降低成本,请记住要存储结果。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。