阿里云PAI提供智能文创解决方案,帮助您快速搭建囊括模型离线训练、离线预测和在线部署的端到端全链路构建流程。旨在从冗长、重复的文本序列中抽取、精炼或总结出要点信息,实现各类文本生成任务,包括文本摘要生成、新闻标题生成、文案生成、问题生成、作文生成和古诗生成等。
前提条件
在开始执行操作前,请确认您已完成以下准备工作。
已开通PAI(Designer、DSW、EAS)后付费,并创建默认工作空间,具体操作,请参见开通PAI并创建默认工作空间。
已创建OSS存储空间(Bucket),用于存储数据集、训练获得的模型文件和配置文件。关于如何创建存储空间,详情请参见控制台创建存储空间。
背景信息
阿里云PAI在智能文本创作领域已实现各类文本生成任务,包括:文本摘要生成、新闻标题生成、文案生成、问题生成、作文生成和古诗生成等。各任务详情介绍及具体解决方案如下。
任务介绍
任务类型
功能描述
输入示例
输出示例
文本摘要
根据输入文本生成概要性总结。
新冠肺炎疫情发生以来,滥食野生动物的突出问题,以及由此给公共卫生安全带来的巨大隐患,引发社会广泛关注。全国多地公安、林业以及市场监管部门开展相关专项行动,对非法猎捕、贩卖、食用野生动物进行全链条打击,效果显著。执法部门在打击涉野生动物违法犯罪活动的过程中发现,野味消费群体庞大、盗猎利润惊人、鉴定难度大成本高等问题,成为盗猎野生动物黑色利益链条得以在地下运转的重要原因。
全国许多地方的公安、林业和市场监管部门已采取相关专项行动,打击非法狩猎、贩运和食用野生动物的行为,产生了重大影响。
新闻标题生成
根据新闻文本生成新闻标题。
在广州某某医院,一个上午6名患者做支气管镜检查。5人查出肺癌,且4人是老烟民!专家称,吸烟和被动吸烟是肺癌的主要元凶,而二手烟、三手烟(即吸烟后滞留在室内或衣服、头发等的微粒和气体)与吸烟危害性一样大!
远离烟草!不止二手烟,还有三手烟!
文案生成
根据产品介绍生成产品文案。
家用陶瓷杯。
这款陶瓷杯采用优质陶土高温烧制而成,瓷质细腻通透,杯口圆润光滑,唇感舒适。杯身上的花纹设计,时尚美观,尽显其现代简约风格时尚、典雅的气息。圆润的杯身,手感舒适,握感极佳,是您居家生活的好帮手。
问题生成
根据段落叙述生成可回答的问题。
小猫的很多本领,比如上厕所、对环境的探索等,都是跟猫妈妈学来的。最好是让小猫在猫妈妈身边待2个月到3个月,相应的本领才比较成熟。如果是小母猫,过早离开妈妈,那么她长大后在育儿方面也会有所欠缺。
小猫多久可以离开母猫?
作文生成
根据标题生成作文内容。
家乡的四季。
家乡的四季是多姿多彩的。春天,万物复苏,小草从土里探出头来,好奇地打量着这个世界。小河里的冰融化了,河水清澈见底,鱼儿在水里自由自在地游来游去。柳树抽出了新的枝条,长出嫩绿的叶子,像一个个小姑娘在梳理自己美丽的长发。
古诗生成
根据关键词生成古诗。
诸葛亮。
卧龙起南阳,飞鸟起北向。初若不自慎,又何保社稷。伊吾一寸心,耿耿抱高亮。
解决方案
基于PAI提供的文本摘要模型和算法,根据您自己的文本摘要场景,在Designer可视化建模平台进行模型微调,从而构建具体场景的NLP(Natural Language Processing)文本摘要模型。
在Designer可视化建模平台,基于PAI提供的默认模型或您自行微调的文本摘要模型进行批量离线预测。
将模型部署为EAS在线服务,对本文进行自动摘要。
使用流程
基于阿里云PAI,智能文创解决方案的使用流程如下。
将训练数据集和验证数据集上传到OSS Bucket中,用于后续的文本摘要模型训练和预测。
在Designer可视化建模平台,使用文本摘要训练组件,基于海量大数据语料预训练获得的NLP预训练模型,构建文本摘要模型。
在Designer可视化建模平台,使用文本摘要预测组件,基于海量文本数据、文本摘要模型或PAI默认的模型,进行批量离线预测生成文本摘要。
通过模型在线服务EAS,您可以将训练好的文本摘要模型部署为在线服务,并在实际的生产环境调用,从而实现在线生成文本摘要。
步骤一:准备数据
准备训练数据集和验证数据集。
本文使用某个新闻数据集的一个子集进行模型训练和预测。训练数据集和预测数据集具体格式要求如下。
需要准备的数据
格式
包含列
数据集示例文件
训练数据集
TSV或TXT
新闻摘要列
新闻原文列
验证数据集
TSV或TXT
新闻标题摘要列
新闻原文列
新闻标题摘要分词结果列(非必须)
新闻原文分词结果列(非必须)
新闻类别标签列(非必须)
将数据集上传至OSS Bucket,具体操作,请参见控制台上传文件。
说明如果您需要利用自己的数据集对模型进行微调,则需要提前将数据集上传至OSS Bucket中。
步骤二:构建文本摘要模型
进入PAI-Designer页面,并创建空白工作流,具体操作请参见操作步骤。
在工作流列表,选择已创建的空白工作流,单击进入工作流。
在工作流页面,分别拖入以下组件,并根据下文的组件参数配置组件。
区域
描述
①
配置实验的训练数据集,即配置读OSS数据组件的OSS数据路径参数为训练数据集在OSS Bucket中的存储路径。
②
配置实验的验证数据集,即配置读OSS数据组件的OSS数据路径参数为验证数据集在OSS Bucket中的存储路径。
③
配置文本摘要模型训练的参数。文本摘要训练组件的配置详情,请参见下文的文本摘要训练组件的配置。
表 1. 文本摘要训练组件的配置 页签
参数
描述
本案例使用的示例值
字段设置
输入数据格式
输入文件中每列的数据格式,多列之间使用半角逗号(,)分隔。
title_tokens:str:1,content_tokens:str:1
原文列选择
新闻原文在输入文件中对应的列名。
content_tokens
摘要列选择
新闻摘要在数据文件中对应的列名。
title_tokens
模型存储路径
配置OSS Bucket中的目录,用来存储文本摘要训练生成的模型文件。
oss://exampleBucket.oss-cn-shanghai-internal.aliyuncs.com/exampledir
参数设置
预训练模型
预训练模型名称。
alibaba-pai/mt5-title-generation-zh
批次大小
训练过程中的批处理大小。如果使用多机多卡,则表示每个GPU上的批处理大小。
8
文本最大长度
表示系统可处理的序列整体最大长度。
512
迭代轮数
训练总Epoch的数量。
3
学习率
模型构建过程中的学习率。
3e-5
保存模型文件步数
表示每训练多少步,对模型进行评价,并保存当前最优模型。
150
语言
表示当前文本处理的语言:
zh:中文
en:英文
zh
是否从原文中拷贝文本
表示是否采用复制机制,取值如下:
false:(默认值),表示不拷贝。
true:表示拷贝。
false
解码器最小长度
表示解码器最小长度,模型输出长度大于该值。
12
解码器最大长度
表示解码器最大长度,模型输出长度小于该值。
32
最小不重复字段
表示不重复的片段大小。例如:当取值为1时,不会生成类似“天天”等结果。
2
集束搜索数量
模型生成候选答案时的搜索空间,该值越大,预测越慢。
5
返回候选答案数量
模型返回的排名靠前的候选结果数量。
5
执行调优
GPU机器类型
计算资源的GPU机型。默认值为gn5-c8g1.2xlarge,表示8核CPU、80G内存、P100单卡。
gn5-c8g1.2xlarge
步骤三:离线批量预测
配置离线预测工作流。
文本摘要预测组件有以下两种工作方式。
方式一:利用文本摘要训练组件生成的模型进行预测并生成摘要。
您需要在步骤二的工作流页面,参照下图补充拖入组件,并根据下文的组件参数配置组件。
方式二:将PAI默认模型上传至OSS Bucket,并接入文本摘要预测组件进行预测并生成摘要。
您需要参照步骤二创建新的空白工作流,参照下图拖入组件,并根据下文的组件参数配置组件。
区域
描述
①
配置实验的预测数据集(使用步骤一中的验证数据集作为预测数据集),即配置读OSS数据组件的OSS数据路径参数为验证数据集在OSS Bucket中的存储路径。
②
配置文本摘要模型预测的参数。文本摘要预测组件的配置详情,请参见文本摘要预测组件的配置。
表 2. 文本摘要预测组件的配置 页签
参数
描述
本案例使用的示例值
字段设置
输入数据格式
输入文件的每列的数据格式,多列之间使用半角逗号(,)分隔。
title:str:1,content:str:1,title_tokens:str:1,content_tokens:str:1,tag:str:1
原文列选择
新闻原文在输入文件中对应的列名。
content
输出追加列选择
将输入文件的若干文本列追加到输出文本列之后,多列之间使用半角逗号(,)分隔。
title_tokens,content,tag
输出列选择
选择输出列,多列之间使用半角逗号(,)分隔。
predictions,beams
预测数据输出
配置预测结果文件在OSS Bucket中的路径。
oss://exampleBucket.oss-cn-shanghai-internal.aliyuncs.com/exampledir/pred_data.tsv
使用自有模型
是否使用PAI默认模型,进行直接预测。取值如下:
是:当文本摘要预测组件使用方式二时,配置为是。
您需要在模型存储路径参数中配置PAI默认模型在OSS Bucket中的存储路径。
否:当文本摘要预测组件使用方式一时,配置为否。
否
是否为Megatron模型
仅支持文本摘要训练组件中列出的带mg前缀的预训练模型。取值如下:
否(默认值)
是
否
参数设置
批次大小
预测过程中的批处理大小。如果使用多机多卡,则表示每个GPU上的批处理大小。
8
文本最大长度
表示系统可处理的序列整体最大长度。
512
语言
表示当前文本处理的语言:
zh:中文。
en:英文。
zh
是否从原文中拷贝文本
输出结果是否从文本中拷贝文本片段:
false:(默认值),表示不拷贝。
true:表示拷贝。
false
解码器最小长度
表示解码器最小长度,模型输出长度大于该值。
12
解码器最大长度
表示解码器最大长度,模型输出长度小于该值。
32
最小不重复字段
表示不重复的片段大小。
2
集束搜索数量
表示集束搜索大小。该值越大,预测越慢。
5
返回候选答案数量
表示返回结果的数量。
5
执行调优
GPU机器类型
计算资源的GPU机型。默认值为gn5-c8g1.2xlarge,表示8核CPU、80G内存、P100单卡。
gn5-c8g1.2xlarge
单击画布上方的运行。
实验运行成功后,您可以在文本摘要训练组件模型存储路径配置的OSS Bucket目录中,下载生成的模型文件和配置文件。
步骤四:部署及调用模型服务
通过模型在线服务EAS,您可以将训练好的文本摘要模型部署为在线服务,并在实际的生产环境中调用,从而进行推理实践。
首先将训练好的模型及其他相关配置文件打包。
如果您希望使用PAI默认的模型进行部署,请跳过此步。以下介绍文本摘要模型的打包方式。
首先将训练得到的模型,及其他配置文件打包为tgz格式,并上传至OSS Bucket。模型和配置文件的目录结构如下所示。
finetuned_zh_model |--config.json |--label_mapping.json |--pytorch_model.bin |--train_config.json |--vocab.txt
您可以使用以下命令,将目录打包为tgz格式。
tar -zcvf finetuned_zh_model.tgz finetuned_zh_model/*
进入模型在线服务(EAS)页面。
登录PAI控制台。
在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应的工作空间。
在工作空间页面的左侧导航栏选择 ,进入模型在线服务(EAS)页面。
部署模型服务。
在模型在线服务(EAS)页面,单击部署服务。
在部署服务页面,配置参数。
如果您希望部署自行训练的模型,模型文件参数需要配置第1步打包的文件在OSS Bucket的路径。
参考以下内容,确认服务配置信息是否正确。
{ "metadata": { "instance": 1 }, "cloud": { "computing": { "instance_type": "ecs.gn6v-c8g1.2xlarge" } }, "name": "test_sum_new", "model_path": "oss://examplebucket/linshi/linshi_text/finetuned_zh_model.tgz", "processor_type": "python", "processor_path": "https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/eas/EasyNLP_text_sum_202209201840.tar.gz", "processor_entry": "./app.py" }
单击部署,等待一段时间即可完成模型部署。
调试模型服务。
在模型在线服务(EAS)页面,单击目标服务操作列下的在线调试。
在调试页面的在线调试请求参数区域的Body处填写如下内容。
[ {"content": "在广州第一人民医院,一个上午6名患者做支气管镜检查,5人查出肺癌,且4人是老烟民!专家称,吸烟和被动吸烟是肺癌的主要元凶,而二手烟、三手烟(即吸烟后滞留在室内或衣服、头发等的微粒和气体)与吸烟危害性一样大!"}, {"content": "国佛罗里达大学博士后于鹭岛缔结菩提姻缘,以问讯代替接吻,香赞代替誓词,在白鹿洞寺法王宝殿举行的佛化婚礼,两位新人将永生难忘。佛化婚礼不同于一般结婚仪式,是将婚礼融入佛教礼节,场面庄严隆重。"} ]
单击发送请求,即可在调试信息区域查看预测结果,如下图所示。
查看模型服务的公网地址和访问Token。
在模型在线服务(EAS)页面,单击目标服务服务方式列下的调用信息。
在调用信息对话框的公网地址调用页签,查看公网调用的访问地址和Token。
使用脚本进行批量调用。
创建调用模型服务的Python脚本eas_text_sum.py。
#!/usr/bin/env python #encoding=utf-8 from eas_prediction import PredictClient from eas_prediction import StringRequest if __name__ == '__main__': #下面的client = PredictClient()入参需要替换为实际的访问地址。 client = PredictClient('http://1664xxxxxxxxxxx.cn-hangzhou.pai-eas.aliyuncs.com', 'text_sum_new') #下面的Token需要替换为实际值。 client.set_token('<token>') client.init() #输入请求需要根据模型进行构造,此处仅以字符串作为输入输出的程序为例。 request = StringRequest('[\ {"content": "在广州第一人民医院,一个上午6名患者做支气管镜检查,5人查出肺癌,且4人是老烟民!专家称,吸烟和被动吸烟是肺癌的主要元凶,而二手烟、三手烟(即吸烟后滞留在室内或衣服、头发等的微粒和气体)与吸烟危害性一样大!"},\ {"content": "国佛罗里达大学博士后于鹭岛缔结菩提姻缘,以问讯代替接吻,香赞代替誓词,在白鹿洞寺法王宝殿举行的佛化婚礼,两位新人将永生难忘。佛化婚礼不同于一般结婚仪式,是将婚礼融入佛教礼节,场面庄严隆重。"}\ ]') for x in range(0, 1): resp = client.predict(request) print(str(resp.response_data, 'utf8')) print("test ending")
其中:
client:需要配置为服务访问地址和服务名称。请参照示例代码进行配置。
<token>:替换为服务Token。
将eas_text_sum.py的Python脚本上传至您的任意环境,并在脚本上传后的当前目录执行如下调用命令。
python <eas_text_sum.py>
其中<eas_text_sum.py>需要替换为实际的Python脚本名称。
监控服务指标。调用模型服务后,您可以查看模型调用的相关指标水位,包括QPS、RT、CPU、GPU及Memory。
在模型在线服务(EAS)页面,单击已调用服务服务监控列下的图标。
在服务监控页签,即可查看模型调用的指标水位。从下面的服务监控水位图中可以看到,本案例部署的模型预测一条数据的时延在200 ms左右。您自己的模型时延以实际为准。
相关文档
更多关于文本生成相关组件的使用详情,请参见: