背景介绍
细粒度情感分析(Aspect-Based Sentiment Analysis,ABSA)由于其广阔的业务价值而吸引越来越多的从业者投身其中,通过分析客户评论数据中的情感偏好往往有利于企业探寻客户关注点,挖掘客户需求,加速产品迭代,提高营销效率,完善售后服务等。毫不夸张地说,发掘出客户的声音(voice of customer)就抢占了企业发展的先机。
Voice of Customer (VOC) 是近年来各行业都在关注的概念,而亚马逊作为全球最注重“以客户为中心”理念的企业早在2018年就推出了“买家之声”(VOC)板块,助力买卖双方互利共赢。Amazon 始终致力于“以客户为中心”的技术创新,针对 VOC 场景, 我们针对不同行业客户的实际业务需求进行了广泛的技术实践,并且最终基于自然语言生成(NLG)技术结合 Amazon SageMaker 搭建了一套高效的、可定制的、细粒度的生成式评论分析方案, 以提取评论中不同方面(Aspect)的情感极性并且以其中的观点词(Opinion)为佐证。
举个例子:“今天的沙拉很好吃但是牛排不新鲜”,这里同时存在两个情感极性,对于正向情感(positive), 其方面词是“沙拉”,对应的观点词为“很好吃”;对于负向情感(negative),其方面词是“牛排”,对应的观点词为“不新鲜”。在这样的场景下,我们通过AI把用户留言进行了更高维度的知识提取(方面词,方面词类别,观点词,情感极性),这些高维知识使得客户可以更精准地对(几千倍几万倍的机器标签)用户进行分类,从而在广告投放、行为诱导、客户服务和产品升级方面有更优化的方法。
Amazon SageMaker 是亚马逊云计算(Amazon Web Service)的一项完全托管的机器学习平台服务,算法工程师和数据科学家可以基于此平台快速构建、训练和部署机器学习 (ML) 模型,而无需关注底层资源的管理和运维工作。它作为一个工具集,提供了用于机器学习的端到端的所有组件,包括数据标记、数据处理、算法设计、模型训练、训练调试、超参调优、模型部署、模型监控等,使得机器学习变得更为简单和轻松;同时,它依托于 Amazon 强大的底层资源,提供了高性能 CPU、GPU、弹性推理加速卡等丰富的计算资源和充足的算力,使得模型研发和部署更为轻松和高效。同时,本文还基于 Huggingface,Huggingface 是 NLP 著名的开源社区,并且与 Amazon SagaMaker 高度适配,可以在 Amazon SagaMaker 上以几行代码轻松实现 NLP 模型训练和部署。
亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这里让它成为你的技术宝库! |
---|
解决方案概览
在此示例中,我们将使用 Amazon SageMaker 执行以下操作:
- 环境准备
- 数据准备
- 使用 Amazon SageMaker BYOS 进行模型训练
- 托管部署及推理测试
环境准备
我们首先要创建一个 Amazon SageMaker Notebook,由于本次实验全程不会用到本地 GPU 训练,所以笔记本实例类型可以任意选择。
笔记本启动后,打开页面上的终端,执行以下命令下载代码。
cd ~/SageMaker
git clone https://github.com/HaoranLv/GAS-SageMaker.git
数据准备
目前的 ABSA 存在多种子任务,分别用于聚焦于不同的情感元素,这里我们给出目前主流的 ABSA 任务:
由于子任务众多,故本文以 TASD 为例进行实验,数据按照固定格式存储到 txt 文件中,具体格式为:
所使用的的所有数据均来自公开的数据集。数据的存储位置为./data/tasd/。
数据集的具体介绍可以参照:
使用 Amazon SageMaker BYOS进行模型训练
对于目前主流的深度学习框架(Tensorflow、Pytorch、 Mxnet),Amazon SageMaker 均提供预置的镜像。具体来说,对于某个开源代码,如果其使用主流的深度学习框架编码,则理论上我们就可以通过 Amazon SageMaker 进行 BYOS 模式的调用。
首先,我们将数据进行预处理并保存到本地或者 S3,而后我们只需要将训练所需的脚本以及其依赖准备好,就可以通过实例化 estimator 进行模型训练和部署,实际过程中会启动 EC2 训练实例并且加载预置的镜像并启动容器,而后数据将会以 pipeline 的形式传输到 EC2 训练实例进行模型训练,训练完成后所有的日志均会储存在 CloudWatch 中,训练得到的模型文件也会储存在 S3 的特定位置以供后续使用。本文主要演示 Pytorch 框架下对 ABSA 生成任务进行 BYOS 的实验过程。
在 Jupyter Notebook 中打开gabsa.ipynb 逐行运行。
引入依赖并进行权限配置
import sagemaker as sage
from time import gmtime, strftime
from sagemaker import get_execution_role
from sagemaker.pytorch import PyTorch
sess = sagemaker.Session()
role = sagemaker.get_execution_role()
print(f"sagemaker role arn: {role}")
print(f"sagemaker bucket: {sess.default_bucket()}")
print(f"sagemaker session region: {sess.boto_region_name}")
将处理好的数据上传到 S3
WORK_DIRECTORY = "./data"
# S3 prefix
prefix = "demo"
data_location = sess.upload_data(WORK_DIRECTORY, key_prefix=prefix)
定义超参数,本次实验使用 Huggingface hub 公开的 T5-base 预训练参数进行初始化
hyperparameters = {
"task" : "tasd",
"dataset" : "rest15",
"model_name_or_path" : "t5-base",
"paradigm": "extraction",
"eval_batch_size" :"16",
"train_batch_size" :"2",
"learning_rate" :"3e-4",
"num_train_epochs":"30",
"n_gpu": "1"
}
实例化 estimator,由于代码使用 Pytorch 框架,故这里直接使用 SageMaker 预置的 Pytorch 容器
entry_point = 'finetune.py'
source_dir = ‘./ ’
git_config = None
framework_version = '1.7.1'
py_version='py36'
instance_type='ml.p3.2xlarge'
instance_count=1
estimator = PyTorch(
entry_point = entry_point,
source_dir = source_dir,
git_config = git_config,
role = role,
debugger_hook_config=False,
hyperparameters = hyperparameters,
framework_version = framework_version,
py_version = py_version,
instance_type = instance_type,
instance_count = instance_count
)
启动模型训练
inputs = {'tasd': data_location+'/tasd/'}
response = estimator.fit(inputs)
训练启动后,我们可以在 Amazon SageMaker 控制台看到这个训练任务,点进详情可以看到训练的日志输出,以及监控机器的 GPU、CPU、内存等的使用率等情况,以确认程序可以正常工作。训练完成后也可以在 CloudWatch 中查看训练日志。
托管部署及推理测试
完成训练后,我们可以轻松的将上面的模型部署成一个实时可在生产环境中调用的端口。
import sagemaker
instance_type = 'ml.m5.4xlarge'
role = sagemaker.get_execution_role()
from sagemaker.pytorch.model import PyTorchModel
pytorch_model = PyTorchModel(model_data='s3://sagemaker-ap-southeast-1-116572824542/pytorch-training-2022-05-28-10-05-39-029/output/model.tar.gz',
role=role,
entry_point='inference.py',
source_dir='./',
framework_version='1.7.1',
py_version='py36'
) # TODO set model_server_workers=1 to avoid torchhub bug
predictor = pytorch_model.deploy(instance_type=instance_type, initial_instance_count=1
部署完成后可以在控制台看到如下状态:
而后我们可以进行 endpoint 调用
predictor.predict({"inputs": "Worth an hour of frustration to put together Although not the easiest product I’ve ever assembled, it was worth the few minutes of cursing. I have not decided where I will put the lamp but I’m glad I purchased it. Had to struggle with one that was lost but Amazon made that right by sending another. Others have complained about the shade but that was very simple to put together. It looks like a quality item especially when compared to floor lamps I’ve seen on the floor at stores like Home Goods or Lowes. I’m happy with it. "}, initial_args={'ContentType': 'application/json'})
输出结果为:
[( lamp, product, POSITIVE ); ( NULL, Services, POSITIVE )]
以上就是使用 Amazon SageMaker 构建细粒度情感分析应用的全部过程,可以看到通过 Amazon SageMaker 可以非常便利地结合 Huggingface 进行 NLP 模型的搭建,训练,部署的全流程。整个过程仅需要准备训练脚本以及数据即可通过若干命令启动训练和部署,同时,我们后续还会推出,使用 Amazon SageMaker 进行更多 NLP 相关任务的实现方式,敬请关注。
参考资料
- Amazon Sagemaker: docs.aws.amazon.com/sagemaker/i…
- Huggingface:huggingface.co/?trk=cndc-d…
- Code Link:github.com/HaoranLv/GA…
- aclanthology.org/S14-2004/?t…
- aclanthology.org/S15-2082/?t…
- aclanthology.org/S16-1002/?t…
本篇作者
吕浩然
亚马逊云科技应用科学家,长期从事计算机视觉,自然语言处理等领域的研究和开发工作。支持数据实验室项目,在时序预测,目标检测,OCR,自然语言生成等方向有丰富的算法开发以及落地实践经验。
文章来源:dev.amazoncloud.cn/column/arti…