108 Star 868 Fork 1.5K

MindSpore/models

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
.gitee
.github
.ipynb_checkpoints
.jenkins
benchmark/ascend
community
cv
nlp/Roberta_Seq2Seq
scripts
src
README_CN.md
default_config.yaml
eval.py
export.py
hccl_tools.py
read_ckpt_torch.py
train.py
recommend/DeepFM_Reloop
README.md
how_to_contribute
official
research
utils
.clang-format
.gitignore
CONTRIBUTING.md
CONTRIBUTING_CN.md
LICENSE
OWNERS
README.md
README_CN.md
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

目录

模型简介

RoBERTa initialized Seq2Seq 模型是一个基于 Transformer 的 Seq2Seq 模型,该模型在编码器和解码器上同时加载公开可用的预训练语言模型RoBERTa 的 Checkpoint。该模型在机器翻译、文本摘要、句子拆分和句子融合方面产生了新的最先进的结果。

论文:Leveraging Pre-trained Checkpoints for Sequence Generation Tasks

模型架构

Roberta initialized Seq2Seq模型使用seq2seq架构,编码器和解码器均由Transformer组成。对于编码器,继承了BERT Transformer层的实现,与规范的Transformer层略有不同。BERT使用GELU激活函数,而不是标准的RELU函数。解码器的实现与编码器有所不同,将self-attention 机制MASK为仅查看左侧上下文,同时使用encoder-decoder attention 机制。编码器和解码器都使用RoBERTa Checkpoints,同时,两者之间的权重共享。

数据集

使用的数据集: BBC XSum

XSum 数据集包含 226,711 条 Wayback 存档的 BBC 文章,涵盖了近十年(2010 年至 2017 年),涵盖了广泛的领域(例如,新闻、政治、体育、天气、商业、技术、科学、健康、家庭、教育、 娱乐和艺术)。

该数据集可用作文本摘要生成任务。

环境要求

快速入门

通过官方网站安装MindSpore后,您可以按照如下步骤进行训练和评估:

  • Ascend处理器环境运行

    # 运行训练示例
    bash scripts/run_standalone_train.sh [DEVICE_ID] [EPOCH_SIZE] [CONFIG_PATH] [DATA_PATH] [CHECKPOINT_PATH]
    
    # 运行分布式训练示例
    bash scripts/run_distribute_train.sh [DEVICE_NUM] [EPOCH_SIZE] [DATA_PATH] [RANK_TABLE_FILE] [CONFIG_PATH] [CHECKPOINT_PATH]
    
    # 运行评估示例
    bash scripts/run_eval.sh  [DEVICE_ID] [DATA_PATH] [CKPT_PATH] [CONFIG_PATH]
    [VOCAB_FILE_PATH] [OUTPUT_FILE]
    # CONFIG_PATH要和训练时保持一致
    

对于训练需要传入预训练的RoBERTa Checkpoints,下载pytorch的参数后,可以使用代码read_ckpt_torch.py 进行转换。

对于分布式训练,需要提前创建JSON格式的hccl配置文件。该配置文件的绝对路径作为运行分布式脚本的第二个参数。

请遵循以下链接中的说明:

https://gitee.com/mindspore/models/tree/master/utils/hccl_tools

脚本说明

脚本及样例代码

.
└─Roberta_Seq2Seq
  ├─README_CN.md
  ├─README.md
#   ├─ascend310_infer
#     ├─build.sh
#     ├─CMakeLists.txt
#     ├─inc
#     │ └─utils.h
#     └─src
#       ├─main.cc
#       └─utils.cc
  ├─cover_torch_ckpt
    └─read_ckpt_torch.py
  ├─scripts
    ├─run_distribute_train.sh
    ├─run_standalone_train.sh
    └─run_eval.sh
  ├─src
    ├─beam_search.py
    ├─dataset.py
    ├─lr_schedule.py
    ├─model_encoder_decoder.py
    ├─model_infer.py
    ├─model_train.py
    ├─process_output.py
    ├─roberta_model.py
    ├─rouge_score.py
    ├─sample_process.py
    ├─tokenization.py
    ├─transform_data.py
    ├─utils.py
    └─model_utils
      ├─config.py
      ├─device_adapter.py
      ├─local_adapter.py
      └─moxing_adapter.py
  ├─default_config.yaml
  ├─eval.py
  ├─export.py
  ├─hccl_tools.py
  ├─requirements.txt
  └─train.py

准备数据集

  • 您可以参考GitHub下载并预处理XSum数据集。假设您已获得下列文件,并存在DATA_PATH下:
    • train.json
    • test.json
    • validation.json
  • 将原数据转换为MindRecord数据格式进行训练和评估:
python src/transform_data.py --vocab_file_path [VOCAB_PATH] --data_path [DATA_PATH]

训练过程

  • default_config.yaml中设置选项,包括loss_scale、学习率和网络超参数。

  • 运行run_standalone_train.sh,进行模型的单卡训练。

    bash scripts/run_standalone_train.sh [DEVICE_ID] [EPOCH_SIZE] [CONFIG_PATH] [DATA_PATH] [CHECKPOINT_PATH]
    
  • 运行run_distribute_train.sh,进行Transformer模型的分布式训练。

    # Ascend environment
    bash scripts/run_distribute_train.sh [DEVICE_NUM] [EPOCH_SIZE] [DATA_PATH] [RANK_TABLE_FILE] [CONFIG_PATH] [CHECKPOINT_PATH]
    

评估过程

  • 运行run_eval.sh,评估Roberta initialized Seq2Seq模型,并生成真实的摘要。

    # Ascend environment
    bash scripts/run_eval.sh [DEVICE_ID] [DATA_PATH] [CKPT_PATH] [CONFIG_PATH]
    [VOCAB_FILE_PATH] [OUTPUT_FILE]
    

推理过程

导出MindIR

python export.py --model_file [CKPT_PATH] --file_name [FILE_NAME] --config_path [CONFIG_PATH]

参数ckpt_file为必填项,脚本会在当前目录下生成对应的MINDIR文件。

在Ascend310执行推理

在执行推理前,mindir文件必须通过export.py脚本导出。以下展示了使用minir模型执行推理的示例。

# Ascend310 推理
bash run_infer_310.sh [MINDIR_PATH] [NEED_PREPROCESS] [DEVICE_ID] [CONFIG_PATH]
  • NEED_PREPROCESS 表示是否需要对数据集进行预处理, 取值为'y' 或者 'n'。
  • DEVICE_ID 可选,默认值为0。

结果

推理结果保存在脚本执行的目录下,...

模型描述

性能

评估性能

BBC XSum上的Roberta initialized Seq2Seq

参数 Ascend 910
模型版本 Roberta initialized Seq2Seq
资源 Ascend
上传日期 08/14/2022 (month/day/year)
MindSpore版本 1.6.1
数据集 BBC XSum
训练参数 batch_size=32, epoch=30, lr=0.00003
优化器 Adam
速度 2p:578.192 ms; 1p:274.678 ms;
输出 Rouge1, Rouge2, RougeL
结果 Rouge1=31.93, Rouge2=11.17, RougeL=25.30
脚本 Roberta Seq2Seq script

ModelZoo主页

请浏览官网主页

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/mindspore/models.git
git@gitee.com:mindspore/models.git
mindspore
models
models
master

搜索帮助