智能文创解决方案基于阿里云机器学习PAI产品帮助您快速搭建囊括模型离线训练、离线预测和在线部署的端到端全链路构建流程。旨在从冗长、重复的文本序列中抽取、精炼或总结出要点信息,实现各类文本生成任务。本文以新闻标题生成为例为您介绍该解决方案的使用流程和操作步骤。

前提条件

在开始执行操作前,请确认您已完成以下准备工作。
  • 已开通PAI(Designer、DSW、EAS)后付费,并创建默认工作空间,具体操作,请参见开通并创建默认工作空间
  • 已创建OSS存储空间(Bucket),用于存储数据集、训练获得的模型文件和配置文件。关于如何创建存储空间,详情请参见创建存储空间
  • 已创建PAI-EAS专属资源组,用于部署训练好的模型。关于如何创建专属资源组,详情请参见使用专属资源组

背景信息

阿里云机器学习PAI在智能文本创作领域已实现各类文本生成任务,包括:文本摘要生成、新闻标题生成、文案生成、问题生成、作文生成和古诗生成等。各任务详情介绍及具体解决方案如下。
  • 任务介绍
    任务类型功能描述输入示例输出示例
    文本摘要根据输入文本生成概要性总结新冠肺炎疫情发生以来,滥食野生动物的突出问题,以及由此给公共卫生安全带来的巨大隐患,引发社会广泛关注。全国多地公安、林业以及市场监管部门开展相关专项行动,对非法猎捕、贩卖、食用野生动物进行全链条打击,效果显著。执法部门在打击涉野生动物违法犯罪活动的过程中发现,野味消费群体庞大、盗猎利润惊人、鉴定难度大成本高等问题,成为盗猎野生动物黑色利益链条得以在地下运转的重要原因……全国许多地方的公安,林业和市场监管部门已采取相关专项行动,打击非法狩猎,贩运和食用野生动物的行为,产生了重大影响。
    新闻标题生成根据新闻文本生成新闻标题。在广州某某医院,一个上午6名患者做支气管镜检查。5人查出肺癌,且4人是老烟民!专家称,吸烟和被动吸烟是肺癌的主要元凶,而二手烟、三手烟(即吸烟后滞留在室内或衣服、头发等的微粒和气体)与吸烟危害性一样大!远离烟草!不止二手烟,还有三手烟!
    文案生成根据产品介绍生成产品文案。家用陶瓷杯。这款陶瓷杯采用优质陶土高温烧制而成,瓷质细腻通透,杯口圆润光滑,唇感舒适。杯身上的花纹设计,时尚美观,尽显其现代简约风格时尚、典雅的气息。圆润的杯身,手感舒适,握感极佳,是您居家生活的好帮手。
    问题生成根据段落叙述生成可回答的问题。小猫的很多本领,比如上厕所、对环境的探索等,都是跟猫妈妈学来的。最好是让小猫在猫妈妈身边呆2个月到3个月,相应的本领才比较成熟。如果是小母猫,过早离开妈妈,那么她长大后在育儿方面也会有所欠缺。小猫多久可以离开母猫?
    作文生成根据标题生成作文内容。家乡的四季。家乡的四季是多姿多彩的。春天,万物复苏,小草从土里探出头来,好奇地打量着这个世界。小河里的冰融化了,河水清澈见底,鱼儿在水里自由自在地游来游去。柳树抽出了新的枝条,长出嫩绿的叶子,像一个个小姑娘在梳理自己美丽的长发。
    古诗生成根据关键词生成古诗。诸葛亮。卧龙起南阳,飞鸟起北向。初若不自慎,又何保社稷。伊吾一寸心,耿耿抱高亮。
  • 解决方案
    1. 基于PAI提供的文本摘要模型和算法,根据您自己的文本摘要场景,在PAI-Designer可视化建模平台进行模型微调,从而构建具体场景的NLP(Natural Language Processing)文本摘要模型。
    2. 在PAI-Designer可视化建模平台,基于PAI提供的默认模型或您自行微调的文本摘要模型进行批量离线预测。
    3. 将模型部署为PAI-EAS在线服务,对本文进行自动摘要。

使用流程

基于阿里云机器学习PAI平台,智能文创解决方案的使用流程如下。使用流程
  1. 步骤一:准备数据

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

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

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

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

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

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

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

步骤一:准备数据

  1. 准备训练数据集和验证数据集。
    本文使用某个新闻数据集的一个子集进行模型训练和预测。训练数据集和预测数据集具体格式要求如下。
    需要准备的数据格式包含列数据集示例文件
    训练数据集TSV或TXT
    • 新闻摘要列
    • 新闻原文列
    cn_train.tsv
    验证数据集TSV或TXT
    • 新闻标题摘要列
    • 新闻原文列
    • 新闻标题摘要分词结果列(非必须)
    • 新闻原文分词结果列(非必须)
    • 新闻类别标签列(非必须)
    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,表示8核CPU、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,表示8核CPU、80G内存、P100单卡。gn5-c8g1.2xlarge
  2. 单击画布上方的运行
  3. 实验运行成功后,您可以在文本摘要训练组件模型存储路径配置的OSS Bucket目录中,下载生成的模型文件和配置文件。

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

通过模型在线服务PAI-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. 进入PAI EAS模型在线服务页面。
    1. 登录PAI控制台
    2. 在左侧导航栏,选择模型部署 > 模型在线服务(EAS)
  3. 部署模型服务。
    1. PAI EAS模型在线服务页面的服务列表页签,单击部署服务
    2. 部署服务页面,配置参数。
      配置参数如果您希望部署自行训练的模型,模型文件参数需要配置第1步打包的文件在OSS Bucket的路径。
      参考以下内容,确认服务配置信息正确。
      {
          "metadata": {
              "resource": "eas-r-vm1355pj7k2fcd****",
              "instance": 1,
              "gpu": 1,
              "cpu": 8,
              "memory": 26000
          },
          "name": "test_sum_new",
          "model_path": "oss://examplebucket/linshi/linshi_text/finetuned_zh_model.tgz",
          "processor_type": "python",
          "processor_path": "https://examplebucket.oss-cn-shanghai.aliyuncs.com/release/eas/EasyNLP_text_sum_202209201840.tar.gz",
          "processor_entry": "./app.py"
      }
                                      
    3. 单击部署,等待一段时间即可完成模型部署。
  4. 调式模型服务。
    1. PAI EAS模型在线服务页面,单击目标服务操作列下的在线调试。
    2. 在调试页面的在线调式请求参数区域的Request Body处填写如下内容。
      [
          {"content": "在广州第一人民医院,一个上午6名患者做支气管镜检查,5人查出肺癌,且4人是老烟民!专家称,吸烟和被动吸烟是肺癌的主要元凶,而二手烟、三手烟(即吸烟后滞留在室内或衣服、头发等的微粒和气体)与吸烟危害性一样大!"},
          {"content": "国佛罗里达大学博士后于鹭岛缔结菩提姻缘,以问讯代替接吻,香赞代替誓词,在白鹿洞寺法王宝殿举行的佛化婚礼,两位新人将永生难忘。佛化婚礼不同于一般结婚仪式,是将婚礼融入佛教礼节,场面庄严隆重。"},
          {"content": "朝鲜民众日前为庆祝建国65周年,满怀崇敬之情与无限思念,纷纷赶到锦绣山太阳宫广场。报道称,所有人都很坚定,将会拥护领导人金正恩,坚信朝鲜民主主义人民共和国将永远作为白头山强国、天下第一强国,向全世界放射出灿烂光辉。"}
      ]
    3. 单击发送请求,即可在调式信息区域查看预测结果,如下图所示。
      在线调试
  5. 查看模型服务的公网地址和访问Token。
    1. PAI 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')
          #下面的Token需要替换为实际值。
          client.set_token('MTgxNjE1NGVmMDdjNDRkY2Q5NWE4xxxxxxxxxxxxxxxxxxxxxxx')
          client.init()
          #输入请求需要根据模型进行构造,此处仅以字符串作为输入输出的程序为例。
          request = StringRequest('[\
          {"content": "在广州第一人民医院,一个上午6名患者做支气管镜检查,5人查出肺癌,且4人是老烟民!专家称,吸烟和被动吸烟是肺癌的主要元凶,而二手烟、三手烟(即吸烟后滞留在室内或衣服、头发等的微粒和气体)与吸烟危害性一样大!"},\
          {"content": "国佛罗里达大学博士后于鹭岛缔结菩提姻缘,以问讯代替接吻,香赞代替誓词,在白鹿洞寺法王宝殿举行的佛化婚礼,两位新人将永生难忘。佛化婚礼不同于一般结婚仪式,是将婚礼融入佛教礼节,场面庄严隆重。"},\
          {"content": "朝鲜民众日前为庆祝建国65周年,满怀崇敬之情与无限思念,纷纷赶到锦绣山太阳宫广场。报道称,所有人都很坚定,将会拥护领导人金正恩,坚信朝鲜民主主义人民共和国将永远作为白头山强国、天下第一强国,向全世界放射出灿烂光辉。"}\
      ]')
          for x in range(0, 1):
              resp = client.predict(request)
              print(str(resp.response_data, 'utf8'))
      print("test ending")
    2. eas_text_sum.py的Python脚本上传至您的任意环境,并在脚本上传后的当前目录执行如下调用命令。
      python3 <eas_text_sum.py>
      其中<eas_text_sum.py>需要替换为实际的Python脚本名称。
  7. 监控服务指标。调用模型服务后,您可以查看模型调用的相关指标水位,包括QPS、RT、CPU、GPU及Memory。
    1. PAI EAS模型在线服务页面,单击已调用服务服务监控列下的图标图标。
    2. 服务监控页签,即可查看模型调用的指标水位。从下面的服务监控水位图中可以看到,本案例部署的模型预测一条数据的时延在200ms左右。您自己的模型时延以实际为准。
      服务监控