智能文创解决方案

阿里云PAI提供智能文创解决方案,帮助您快速搭建囊括模型离线训练、离线预测和在线部署的端到端全链路构建流程。旨在从冗长、重复的文本序列中抽取、精炼或总结出要点信息,实现各类文本生成任务,包括文本摘要生成、新闻标题生成、文案生成、问题生成、作文生成和古诗生成等。

前提条件

在开始执行操作前,请确认您已完成以下准备工作。

  • 已开通PAI(Designer、DSW、EAS)后付费,并创建默认工作空间,具体操作,请参见开通PAI并创建默认工作空间

  • 已创建OSS存储空间(Bucket),用于存储数据集、训练获得的模型文件和配置文件。关于如何创建存储空间,详情请参见控制台创建存储空间

背景信息

阿里云PAI在智能文本创作领域已实现各类文本生成任务,包括:文本摘要生成、新闻标题生成、文案生成、问题生成、作文生成和古诗生成等。各任务详情介绍及具体解决方案如下。

  • 任务介绍

    任务类型

    功能描述

    输入示例

    输出示例

    文本摘要

    根据输入文本生成概要性总结。

    新冠肺炎疫情发生以来,滥食野生动物的突出问题,以及由此给公共卫生安全带来的巨大隐患,引发社会广泛关注。全国多地公安、林业以及市场监管部门开展相关专项行动,对非法猎捕、贩卖、食用野生动物进行全链条打击,效果显著。执法部门在打击涉野生动物违法犯罪活动的过程中发现,野味消费群体庞大、盗猎利润惊人、鉴定难度大成本高等问题,成为盗猎野生动物黑色利益链条得以在地下运转的重要原因。

    全国许多地方的公安、林业和市场监管部门已采取相关专项行动,打击非法狩猎、贩运和食用野生动物的行为,产生了重大影响。

    新闻标题生成

    根据新闻文本生成新闻标题。

    在广州某某医院,一个上午6名患者做支气管镜检查。5人查出肺癌,且4人是老烟民!专家称,吸烟和被动吸烟是肺癌的主要元凶,而二手烟、三手烟(即吸烟后滞留在室内或衣服、头发等的微粒和气体)与吸烟危害性一样大!

    远离烟草!不止二手烟,还有三手烟!

    文案生成

    根据产品介绍生成产品文案。

    家用陶瓷杯。

    这款陶瓷杯采用优质陶土高温烧制而成,瓷质细腻通透,杯口圆润光滑,唇感舒适。杯身上的花纹设计,时尚美观,尽显其现代简约风格时尚、典雅的气息。圆润的杯身,手感舒适,握感极佳,是您居家生活的好帮手。

    问题生成

    根据段落叙述生成可回答的问题。

    小猫的很多本领,比如上厕所、对环境的探索等,都是跟猫妈妈学来的。最好是让小猫在猫妈妈身边待2个月到3个月,相应的本领才比较成熟。如果是小母猫,过早离开妈妈,那么她长大后在育儿方面也会有所欠缺。

    小猫多久可以离开母猫?

    作文生成

    根据标题生成作文内容。

    家乡的四季。

    家乡的四季是多姿多彩的。春天,万物复苏,小草从土里探出头来,好奇地打量着这个世界。小河里的冰融化了,河水清澈见底,鱼儿在水里自由自在地游来游去。柳树抽出了新的枝条,长出嫩绿的叶子,像一个个小姑娘在梳理自己美丽的长发。

    古诗生成

    根据关键词生成古诗。

    诸葛亮。

    卧龙起南阳,飞鸟起北向。初若不自慎,又何保社稷。伊吾一寸心,耿耿抱高亮。

  • 解决方案

    1. 基于PAI提供的文本摘要模型和算法,根据您自己的文本摘要场景,在Designer可视化建模平台进行模型微调,从而构建具体场景的NLP(Natural Language Processing)文本摘要模型。

    2. Designer可视化建模平台,基于PAI提供的默认模型或您自行微调的文本摘要模型进行批量离线预测。

    3. 将模型部署为EAS在线服务,对本文进行自动摘要。

使用流程

基于阿里云PAI,智能文创解决方案的使用流程如下。

image
  1. 步骤一:准备数据

    将训练数据集和验证数据集上传到OSS Bucket中,用于后续的文本摘要模型训练和预测。

  2. 步骤二:构建文本摘要模型

    Designer可视化建模平台,使用文本摘要训练组件,基于海量大数据语料预训练获得的NLP预训练模型,构建文本摘要模型。

  3. 步骤三:离线批量预测

    Designer可视化建模平台,使用文本摘要预测组件,基于海量文本数据、文本摘要模型或PAI默认的模型,进行批量离线预测生成文本摘要。

  4. 步骤四:部署及调用模型服务

    通过模型在线服务EAS,您可以将训练好的文本摘要模型部署为在线服务,并在实际的生产环境调用,从而实现在线生成文本摘要。

步骤一:准备数据

  1. 准备训练数据集和验证数据集。

    本文使用某个新闻数据集的一个子集进行模型训练和预测。训练数据集和预测数据集具体格式要求如下。

    需要准备的数据

    格式

    包含列

    数据集示例文件

    训练数据集

    TSVTXT

    • 新闻摘要列

    • 新闻原文列

    cn_train.tsv

    验证数据集

    TSVTXT

    • 新闻标题摘要列

    • 新闻原文列

    • 新闻标题摘要分词结果列(非必须)

    • 新闻原文分词结果列(非必须)

    • 新闻类别标签列(非必须)

    cn_dev.tsv

  2. 将数据集上传至OSS Bucket,具体操作,请参见控制台上传文件

    说明

    如果您需要利用自己的数据集对模型进行微调,则需要提前将数据集上传至OSS Bucket中。

步骤二:构建文本摘要模型

  1. 进入PAI-Designer页面,并创建空白工作流,具体操作请参见操作步骤

  2. 在工作流列表,选择已创建的空白工作流,单击进入工作流

  3. 在工作流页面,分别拖入以下组件,并根据下文的组件参数配置组件。

    拖入组件

    区域

    描述

    配置实验的训练数据集,即配置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,表示8CPU、80G内存、P100单卡。

    gn5-c8g1.2xlarge

步骤三:离线批量预测

  1. 配置离线预测工作流。

    文本摘要预测组件有以下两种工作方式。

    • 方式一:利用文本摘要训练组件生成的模型进行预测并生成摘要。

      您需要在步骤二的工作流页面,参照下图补充拖入组件,并根据下文的组件参数配置组件。方式一

    • 方式二:将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,表示8CPU、80G内存、P100单卡。

    gn5-c8g1.2xlarge

  2. 单击画布上方的运行

  3. 实验运行成功后,您可以在文本摘要训练组件模型存储路径配置的OSS Bucket目录中,下载生成的模型文件和配置文件。

步骤四:部署及调用模型服务

通过模型在线服务EAS,您可以将训练好的文本摘要模型部署为在线服务,并在实际的生产环境中调用,从而进行推理实践。

  1. 首先将训练好的模型及其他相关配置文件打包。

    如果您希望使用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/*
  2. 进入模型在线服务(EAS)页面。

    1. 登录PAI控制台

    2. 在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应的工作空间。

    3. 在工作空间页面的左侧导航栏选择模型部署 > 模型在线服务(EAS),进入模型在线服务(EAS)页面。

  3. 部署模型服务。

    1. 模型在线服务(EAS)页面,单击部署服务

    2. 部署服务页面,配置参数。

      a51980231f7b1914d134bf03efbf241c.png如果您希望部署自行训练的模型,模型文件参数需要配置第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"
      }
                                      
    3. 单击部署,等待一段时间即可完成模型部署。

  4. 调试模型服务。

    1. 模型在线服务(EAS)页面,单击目标服务操作列下的在线调试

    2. 在调试页面的在线调试请求参数区域的Body处填写如下内容。

      [
          {"content": "在广州第一人民医院,一个上午6名患者做支气管镜检查,5人查出肺癌,且4人是老烟民!专家称,吸烟和被动吸烟是肺癌的主要元凶,而二手烟、三手烟(即吸烟后滞留在室内或衣服、头发等的微粒和气体)与吸烟危害性一样大!"},
          {"content": "国佛罗里达大学博士后于鹭岛缔结菩提姻缘,以问讯代替接吻,香赞代替誓词,在白鹿洞寺法王宝殿举行的佛化婚礼,两位新人将永生难忘。佛化婚礼不同于一般结婚仪式,是将婚礼融入佛教礼节,场面庄严隆重。"}
      ]
    3. 单击发送请求,即可在调试信息区域查看预测结果,如下图所示。

      image.png

  5. 查看模型服务的公网地址和访问Token。

    1. 模型在线服务(EAS)页面,单击目标服务服务方式列下的调用信息

    2. 调用信息对话框的公网地址调用页签,查看公网调用的访问地址和Token

  6. 使用脚本进行批量调用。

    1. 创建调用模型服务的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。

    2. eas_text_sum.pyPython脚本上传至您的任意环境,并在脚本上传后的当前目录执行如下调用命令。

      python <eas_text_sum.py>

      其中<eas_text_sum.py>需要替换为实际的Python脚本名称。

  7. 监控服务指标。调用模型服务后,您可以查看模型调用的相关指标水位,包括QPS、RT、CPU、GPUMemory。

    1. 模型在线服务(EAS)页面,单击已调用服务服务监控列下的image.png图标。

    2. 服务监控页签,即可查看模型调用的指标水位。从下面的服务监控水位图中可以看到,本案例部署的模型预测一条数据的时延在200 ms左右。您自己的模型时延以实际为准。

      image.png

相关文档

更多关于文本生成相关组件的使用详情,请参见: