【DSW Gallery】基于EasyNLP的MacBERT中文机器阅读理解

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
简介: EasyNLP提供多种模型的训练及预测功能,旨在帮助自然语言开发者方便快捷地构建模型并应用于生产。本文以机器阅读理解任务为例,为您介绍如何在PAI-DSW中基于EasyNLP快速使用MacBERT进行中文机器阅读理解模型的训练、推理。

直接使用

请打开基于EasyNLP的MacBERT中文机器阅读理解,并点击右上角 “ 在DSW中打开” 。

image.png


基于EasyNLP的MacBERT中文机器阅读理解

EasyNLP是阿里云PAI算法团队基于PyTorch开发的易用且丰富的NLP算法框架( https://github.com/alibaba/EasyNLP ),支持常用的中文预训练模型和大模型落地技术,并且提供了从训练到部署的一站式NLP开发体验。EasyNLP提供多种模型的训练及预测功能,旨在帮助自然语言开发者方便快捷地构建模型并应用于生产。

本文以机器阅读理解任务为例,为您介绍如何在PAI-DSW中基于EasyNLP快速使用MacBERT进行中文机器阅读理解模型的构建、训练、评估、预测。

关于MacBERT

MacBERT是2019年6月由哈工大-讯飞联合实验室(HFL)提出的一种基于BERT改进的预训练语言表征模型,其中Mac全称为MLM as correction。该模型修改了传统的MLM任务,引入了一种纠错型掩码语言模型(Mac)预训练任务,包括wwm (whole word masking)、NM(n-gram masking)、相似词替换等mask方案,更好地适配了中文的语言场景,减少了“预训练-下游任务”不一致的问题,提升了预训练模型在多种NLP任务上的效果。此外,BERT原版的NSP任务长期为研究者们所诟病,MacBERT模型中将NSP修改为SOP (Sentence Order Prediction),其正例为连续文本,负例为交换原始文本顺序,这样很好地提升了模型在多句篇章型任务上的效果。由于MacBERT的主要框架与BERT完全一致,可在不修改现有代码的基础上进行无缝过渡,这为开发者的代码迁移带来了很大的便利。

关于机器阅读理解

机器阅读理解(machine reading comprehension),指的是同时给模型输入一个问题(question)和一段描述(context),需要模型根据给定的描述给出答案(answer)。根据任务范式的不同,机器阅读理解任务通常可以分为4大类:完型填空式(Cloze tests)、多项选择式(Multi-choice)、片段抽取式(Span extraction)及自由生成式(Free answering)。其中片段抽取式根据问句(question),直接从篇章文本(context)中预测答案文本(answer)的起止位置(start/end positions),从而抽取出答案。由于其与真实场景接近,难度适中,易于评测,且有SQuAD等高质量数据集支撑,因此成为当前的主流阅读理解任务。

运行环境要求

建议用户使用:Python 3.6,Pytorch 1.8镜像,GPU机型 P100 or V100,内存至少为 32G

EasyNLP安装

建议从GitHub下载EasyNLP源代码进行安装,命令如下:

! git clone https://github.com/alibaba/EasyNLP.git
! pip install -r EasyNLP/requirements.txt
! cd EasyNLP && python setup.py install

您可以使用如下命令验证是否安装成功:

! which easynlp
/home/pai/bin/easynlp

如果您系统内已经安装完easynlp的CLI工具,则说明EasyNLP代码库已经安装。

数据准备

首先,您需要进入指定模型目录,下载用于本示例的训练和测试集,并创建保存模型的文件夹,命令如下:

! cd examples/appzoo_tutorials/machine_reading_comprehension
! wget http://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/machine_reading_comprehension/train_cmrc2018.tsv
! wget http://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/machine_reading_comprehension/dev_cmrc2018.tsv
! wget http://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/machine_reading_comprehension/trial_cmrc2018.tsv
/bin/bash: line 0: cd: examples/appzoo_tutorials/machine_reading_comprehension: No such file or directory
--2022-09-16 16:50:50--  http://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/machine_reading_comprehension/train_cmrc2018.tsv
Resolving atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com (atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com)... 47.101.88.27
Connecting to atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com (atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com)|47.101.88.27|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 15455780 (15M) [text/tab-separated-values]
Saving to: ‘train_cmrc2018.tsv’
train_cmrc2018.tsv  100%[===================>]  14.74M  5.10MB/s    in 2.9s    
2022-09-16 16:50:53 (5.10 MB/s) - ‘train_cmrc2018.tsv’ saved [15455780/15455780]
--2022-09-16 16:50:54--  http://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/machine_reading_comprehension/dev_cmrc2018.tsv
Resolving atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com (atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com)... 47.101.88.27
Connecting to atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com (atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com)|47.101.88.27|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4898973 (4.7M) [text/tab-separated-values]
Saving to: ‘dev_cmrc2018.tsv’
dev_cmrc2018.tsv    100%[===================>]   4.67M  17.6MB/s    in 0.3s    
2022-09-16 16:50:54 (17.6 MB/s) - ‘dev_cmrc2018.tsv’ saved [4898973/4898973]
--2022-09-16 16:50:54--  http://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/machine_reading_comprehension/trial_cmrc2018.tsv
Resolving atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com (atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com)... 47.101.88.27
Connecting to atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com (atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com)|47.101.88.27|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1602934 (1.5M) [text/tab-separated-values]
Saving to: ‘trial_cmrc2018.tsv’
trial_cmrc2018.tsv  100%[===================>]   1.53M  6.87MB/s    in 0.2s    
2022-09-16 16:50:55 (6.87 MB/s) - ‘trial_cmrc2018.tsv’ saved [1602934/1602934]

训练和测试数据都是以\t隔开的.tsv文件,数据下载完成后,可以通过以下代码查看前5条数据。每行为一个数据,每列为一个字段值,包括需要进行文本匹配的两个句子,以及对应的匹配结果标签。

print('Training data sample:')
! head -n 5 train_cmrc2018.tsv
print('Development set data sample:')
! head -n 5 dev_cmrc2018.tsv
Training data sample:
TRAIN_186_QUERY_0 范廷颂枢机(,),圣名保禄·若瑟(),是越南罗马天主教枢机。1963年被任为主教;1990年被擢升为天主教河内总教区宗座署理;1994年被擢升为总主教,同年年底被擢升为枢机;2009年2月离世。范廷颂于1919年6月15日在越南宁平省天主教发艳教区出生;童年时接受良好教育后,被一位越南神父带到河内继续其学业。范廷颂于1940年在河内大修道院完成神学学业。范廷颂于1949年6月6日在河内的主教座堂晋铎;及后被派到圣女小德兰孤儿院服务。1950年代,范廷颂在河内堂区创建移民接待中心以收容到河内避战的难民。1954年,法越战争结束,越南民主共和国建都河内,当时很多天主教神职人员逃至越南的南方,但范廷颂仍然留在河内。翌年管理圣若望小修院;惟在1960年因捍卫修院的自由、自治及拒绝政府在修院设政治课的要求而被捕。1963年4月5日,教宗任命范廷颂为天主教北宁教区主教,同年8月15日就任;其牧铭为「我信天主的爱」。由于范廷颂被越南政府软禁差不多30年,因此他无法到所属堂区进行牧灵工作而专注研读等工作。范廷颂除了面对战争、贫困、被当局迫害天主教会等问题外,也秘密恢复修院、创建女修会团体等。1990年,教宗若望保禄二世在同年6月18日擢升范廷颂为天主教河内总教区宗座署理以填补该教区总主教的空缺。1994年3月23日,范廷颂被教宗若望保禄二世擢升为天主教河内总教区总主教并兼天主教谅山教区宗座署理;同年11月26日,若望保禄二世擢升范廷颂为枢机。范廷颂在1995年至2001年期间出任天主教越南主教团主席。2003年4月26日,教宗若望保禄二世任命天主教谅山教区兼天主教高平教区吴光杰主教为天主教河内总教区署理主教;及至2005年2月19日,范廷颂因获批辞去总主教职务而荣休;吴光杰同日真除天主教河内总教区总主教职务。范廷颂于2009年2月22日清晨在河内离世,享年89岁;其葬礼于同月26日上午在天主教河内总教区总主教座堂举行。 范廷颂是什么时候被任为主教的? 1963年 30  范廷颂
TRAIN_186_QUERY_1 范廷颂枢机(,),圣名保禄·若瑟(),是越南罗马天主教枢机。1963年被任为主教;1990年被擢升为天主教河内总教区宗座署理;1994年被擢升为总主教,同年年底被擢升为枢机;2009年2月离世。范廷颂于1919年6月15日在越南宁平省天主教发艳教区出生;童年时接受良好教育后,被一位越南神父带到河内继续其学业。范廷颂于1940年在河内大修道院完成神学学业。范廷颂于1949年6月6日在河内的主教座堂晋铎;及后被派到圣女小德兰孤儿院服务。1950年代,范廷颂在河内堂区创建移民接待中心以收容到河内避战的难民。1954年,法越战争结束,越南民主共和国建都河内,当时很多天主教神职人员逃至越南的南方,但范廷颂仍然留在河内。翌年管理圣若望小修院;惟在1960年因捍卫修院的自由、自治及拒绝政府在修院设政治课的要求而被捕。1963年4月5日,教宗任命范廷颂为天主教北宁教区主教,同年8月15日就任;其牧铭为「我信天主的爱」。由于范廷颂被越南政府软禁差不多30年,因此他无法到所属堂区进行牧灵工作而专注研读等工作。范廷颂除了面对战争、贫困、被当局迫害天主教会等问题外,也秘密恢复修院、创建女修会团体等。1990年,教宗若望保禄二世在同年6月18日擢升范廷颂为天主教河内总教区宗座署理以填补该教区总主教的空缺。1994年3月23日,范廷颂被教宗若望保禄二世擢升为天主教河内总教区总主教并兼天主教谅山教区宗座署理;同年11月26日,若望保禄二世擢升范廷颂为枢机。范廷颂在1995年至2001年期间出任天主教越南主教团主席。2003年4月26日,教宗若望保禄二世任命天主教谅山教区兼天主教高平教区吴光杰主教为天主教河内总教区署理主教;及至2005年2月19日,范廷颂因获批辞去总主教职务而荣休;吴光杰同日真除天主教河内总教区总主教职务。范廷颂于2009年2月22日清晨在河内离世,享年89岁;其葬礼于同月26日上午在天主教河内总教区总主教座堂举行。 1990年,范廷颂担任什么职务?  1990年被擢升为天主教河内总教区宗座署理 41  范廷颂
TRAIN_186_QUERY_2 范廷颂枢机(,),圣名保禄·若瑟(),是越南罗马天主教枢机。1963年被任为主教;1990年被擢升为天主教河内总教区宗座署理;1994年被擢升为总主教,同年年底被擢升为枢机;2009年2月离世。范廷颂于1919年6月15日在越南宁平省天主教发艳教区出生;童年时接受良好教育后,被一位越南神父带到河内继续其学业。范廷颂于1940年在河内大修道院完成神学学业。范廷颂于1949年6月6日在河内的主教座堂晋铎;及后被派到圣女小德兰孤儿院服务。1950年代,范廷颂在河内堂区创建移民接待中心以收容到河内避战的难民。1954年,法越战争结束,越南民主共和国建都河内,当时很多天主教神职人员逃至越南的南方,但范廷颂仍然留在河内。翌年管理圣若望小修院;惟在1960年因捍卫修院的自由、自治及拒绝政府在修院设政治课的要求而被捕。1963年4月5日,教宗任命范廷颂为天主教北宁教区主教,同年8月15日就任;其牧铭为「我信天主的爱」。由于范廷颂被越南政府软禁差不多30年,因此他无法到所属堂区进行牧灵工作而专注研读等工作。范廷颂除了面对战争、贫困、被当局迫害天主教会等问题外,也秘密恢复修院、创建女修会团体等。1990年,教宗若望保禄二世在同年6月18日擢升范廷颂为天主教河内总教区宗座署理以填补该教区总主教的空缺。1994年3月23日,范廷颂被教宗若望保禄二世擢升为天主教河内总教区总主教并兼天主教谅山教区宗座署理;同年11月26日,若望保禄二世擢升范廷颂为枢机。范廷颂在1995年至2001年期间出任天主教越南主教团主席。2003年4月26日,教宗若望保禄二世任命天主教谅山教区兼天主教高平教区吴光杰主教为天主教河内总教区署理主教;及至2005年2月19日,范廷颂因获批辞去总主教职务而荣休;吴光杰同日真除天主教河内总教区总主教职务。范廷颂于2009年2月22日清晨在河内离世,享年89岁;其葬礼于同月26日上午在天主教河内总教区总主教座堂举行。 范廷颂是于何时何地出生的? 范廷颂于1919年6月15日在越南宁平省天主教发艳教区出生 97  范廷颂
TRAIN_186_QUERY_3 范廷颂枢机(,),圣名保禄·若瑟(),是越南罗马天主教枢机。1963年被任为主教;1990年被擢升为天主教河内总教区宗座署理;1994年被擢升为总主教,同年年底被擢升为枢机;2009年2月离世。范廷颂于1919年6月15日在越南宁平省天主教发艳教区出生;童年时接受良好教育后,被一位越南神父带到河内继续其学业。范廷颂于1940年在河内大修道院完成神学学业。范廷颂于1949年6月6日在河内的主教座堂晋铎;及后被派到圣女小德兰孤儿院服务。1950年代,范廷颂在河内堂区创建移民接待中心以收容到河内避战的难民。1954年,法越战争结束,越南民主共和国建都河内,当时很多天主教神职人员逃至越南的南方,但范廷颂仍然留在河内。翌年管理圣若望小修院;惟在1960年因捍卫修院的自由、自治及拒绝政府在修院设政治课的要求而被捕。1963年4月5日,教宗任命范廷颂为天主教北宁教区主教,同年8月15日就任;其牧铭为「我信天主的爱」。由于范廷颂被越南政府软禁差不多30年,因此他无法到所属堂区进行牧灵工作而专注研读等工作。范廷颂除了面对战争、贫困、被当局迫害天主教会等问题外,也秘密恢复修院、创建女修会团体等。1990年,教宗若望保禄二世在同年6月18日擢升范廷颂为天主教河内总教区宗座署理以填补该教区总主教的空缺。1994年3月23日,范廷颂被教宗若望保禄二世擢升为天主教河内总教区总主教并兼天主教谅山教区宗座署理;同年11月26日,若望保禄二世擢升范廷颂为枢机。范廷颂在1995年至2001年期间出任天主教越南主教团主席。2003年4月26日,教宗若望保禄二世任命天主教谅山教区兼天主教高平教区吴光杰主教为天主教河内总教区署理主教;及至2005年2月19日,范廷颂因获批辞去总主教职务而荣休;吴光杰同日真除天主教河内总教区总主教职务。范廷颂于2009年2月22日清晨在河内离世,享年89岁;其葬礼于同月26日上午在天主教河内总教区总主教座堂举行。 1994年3月,范廷颂担任什么职务?  1994年3月23日,范廷颂被教宗若望保禄二世擢升为天主教河内总教区总主教并兼天主教谅山教区宗座署理  548 范廷颂
TRAIN_186_QUERY_4 范廷颂枢机(,),圣名保禄·若瑟(),是越南罗马天主教枢机。1963年被任为主教;1990年被擢升为天主教河内总教区宗座署理;1994年被擢升为总主教,同年年底被擢升为枢机;2009年2月离世。范廷颂于1919年6月15日在越南宁平省天主教发艳教区出生;童年时接受良好教育后,被一位越南神父带到河内继续其学业。范廷颂于1940年在河内大修道院完成神学学业。范廷颂于1949年6月6日在河内的主教座堂晋铎;及后被派到圣女小德兰孤儿院服务。1950年代,范廷颂在河内堂区创建移民接待中心以收容到河内避战的难民。1954年,法越战争结束,越南民主共和国建都河内,当时很多天主教神职人员逃至越南的南方,但范廷颂仍然留在河内。翌年管理圣若望小修院;惟在1960年因捍卫修院的自由、自治及拒绝政府在修院设政治课的要求而被捕。1963年4月5日,教宗任命范廷颂为天主教北宁教区主教,同年8月15日就任;其牧铭为「我信天主的爱」。由于范廷颂被越南政府软禁差不多30年,因此他无法到所属堂区进行牧灵工作而专注研读等工作。范廷颂除了面对战争、贫困、被当局迫害天主教会等问题外,也秘密恢复修院、创建女修会团体等。1990年,教宗若望保禄二世在同年6月18日擢升范廷颂为天主教河内总教区宗座署理以填补该教区总主教的空缺。1994年3月23日,范廷颂被教宗若望保禄二世擢升为天主教河内总教区总主教并兼天主教谅山教区宗座署理;同年11月26日,若望保禄二世擢升范廷颂为枢机。范廷颂在1995年至2001年期间出任天主教越南主教团主席。2003年4月26日,教宗若望保禄二世任命天主教谅山教区兼天主教高平教区吴光杰主教为天主教河内总教区署理主教;及至2005年2月19日,范廷颂因获批辞去总主教职务而荣休;吴光杰同日真除天主教河内总教区总主教职务。范廷颂于2009年2月22日清晨在河内离世,享年89岁;其葬礼于同月26日上午在天主教河内总教区总主教座堂举行。 范廷颂是何时去世的?  范廷颂于2009年2月22日清晨在河内离世 759 范廷颂
Development set data sample:
DEV_0_QUERY_0 《战国无双3》()是由光荣和ω-force开发的战国无双系列的正统第三续作。本作以三大故事为主轴,分别是以武田信玄等人为主的《关东三国志》,织田信长等人为主的《战国三杰》,石田三成等人为主的《关原的年轻武者》,丰富游戏内的剧情。此部份专门介绍角色,欲知武器情报、奥义字或擅长攻击类型等,请至战国无双系列1.由于乡里大辅先生因故去世,不得不寻找其他声优接手。从猛将传 and Z开始。2.战国无双 编年史的原创男女主角亦有专属声优。此模式是任天堂游戏谜之村雨城改编的新增模式。本作中共有20张战场地图(不含村雨城),后来发行的猛将传再新增3张战场地图。但游戏内战役数量繁多,部分地图会有兼用的状况,战役虚实则是以光荣发行的2本「战国无双3 人物真书」内容为主,以下是相关介绍。(注:前方加☆者为猛将传新增关卡及地图。)合并本篇和猛将传的内容,村雨城模式剔除,战国史模式可直接游玩。主打两大模式「战史演武」&「争霸演武」。系列作品外传作品 《战国无双3》是由哪两个公司合作开发的?  光荣和ω-force  11  战国无双3
DEV_0_QUERY_1 《战国无双3》()是由光荣和ω-force开发的战国无双系列的正统第三续作。本作以三大故事为主轴,分别是以武田信玄等人为主的《关东三国志》,织田信长等人为主的《战国三杰》,石田三成等人为主的《关原的年轻武者》,丰富游戏内的剧情。此部份专门介绍角色,欲知武器情报、奥义字或擅长攻击类型等,请至战国无双系列1.由于乡里大辅先生因故去世,不得不寻找其他声优接手。从猛将传 and Z开始。2.战国无双 编年史的原创男女主角亦有专属声优。此模式是任天堂游戏谜之村雨城改编的新增模式。本作中共有20张战场地图(不含村雨城),后来发行的猛将传再新增3张战场地图。但游戏内战役数量繁多,部分地图会有兼用的状况,战役虚实则是以光荣发行的2本「战国无双3 人物真书」内容为主,以下是相关介绍。(注:前方加☆者为猛将传新增关卡及地图。)合并本篇和猛将传的内容,村雨城模式剔除,战国史模式可直接游玩。主打两大模式「战史演武」&「争霸演武」。系列作品外传作品 男女主角亦有专属声优这一模式是由谁改编的? 村雨城 226 战国无双3
DEV_0_QUERY_2 《战国无双3》()是由光荣和ω-force开发的战国无双系列的正统第三续作。本作以三大故事为主轴,分别是以武田信玄等人为主的《关东三国志》,织田信长等人为主的《战国三杰》,石田三成等人为主的《关原的年轻武者》,丰富游戏内的剧情。此部份专门介绍角色,欲知武器情报、奥义字或擅长攻击类型等,请至战国无双系列1.由于乡里大辅先生因故去世,不得不寻找其他声优接手。从猛将传 and Z开始。2.战国无双 编年史的原创男女主角亦有专属声优。此模式是任天堂游戏谜之村雨城改编的新增模式。本作中共有20张战场地图(不含村雨城),后来发行的猛将传再新增3张战场地图。但游戏内战役数量繁多,部分地图会有兼用的状况,战役虚实则是以光荣发行的2本「战国无双3 人物真书」内容为主,以下是相关介绍。(注:前方加☆者为猛将传新增关卡及地图。)合并本篇和猛将传的内容,村雨城模式剔除,战国史模式可直接游玩。主打两大模式「战史演武」&「争霸演武」。系列作品外传作品 战国史模式主打哪两个模式? 「战史演武」&「争霸演武」 395 战国无双3
DEV_1_QUERY_0 锣鼓经是大陆传统器乐及戏曲里面常用的打击乐记谱方法,以中文字的声音模拟敲击乐的声音,纪录打击乐的各种不同的演奏方法。常用的节奏型称为「锣鼓点」。而锣鼓是戏曲节奏的支柱,除了加强演员身段动作的节奏感,也作为音乐的引子和尾声,提示音乐的板式和速度,以及作为唱腔和念白的伴奏,令诗句的韵律更加抑扬顿锉,段落分明。锣鼓的运用有约定俗成的程式,依照角色行当的身份、性格、情绪以及环境,配合相应的锣鼓点。锣鼓亦可以模仿大自然的音响效果,如雷电、波浪等等。戏曲锣鼓所运用的敲击乐器主要分为鼓、锣、钹和板四类型:鼓类包括有单皮鼓(板鼓)、大鼓、大堂鼓(唐鼓)、小堂鼓、怀鼓、花盆鼓等;锣类有大锣、小锣(手锣)、钲锣、筛锣、马锣、镗锣、云锣;钹类有铙钹、大钹、小钹、水钹、齐钹、镲钹、铰子、碰钟等;打拍子用的檀板、木鱼、梆子等。因为京剧的锣鼓通常由四位乐师负责,又称为四大件,领奏的师傅称为:「鼓佬」,其职责有如西方乐队的指挥,负责控制速度以及利用各种手势提示乐师演奏不同的锣鼓点。粤剧吸收了部份京剧的锣鼓,但以木鱼和沙的代替了京剧的板和鼓,作为打拍子的主要乐器。以下是京剧、昆剧和粤剧锣鼓中乐器对应的口诀用字: 锣鼓经是什么? 大陆传统器乐及戏曲里面常用的打击乐记谱方法 4 锣鼓经
DEV_1_QUERY_1 锣鼓经是大陆传统器乐及戏曲里面常用的打击乐记谱方法,以中文字的声音模拟敲击乐的声音,纪录打击乐的各种不同的演奏方法。常用的节奏型称为「锣鼓点」。而锣鼓是戏曲节奏的支柱,除了加强演员身段动作的节奏感,也作为音乐的引子和尾声,提示音乐的板式和速度,以及作为唱腔和念白的伴奏,令诗句的韵律更加抑扬顿锉,段落分明。锣鼓的运用有约定俗成的程式,依照角色行当的身份、性格、情绪以及环境,配合相应的锣鼓点。锣鼓亦可以模仿大自然的音响效果,如雷电、波浪等等。戏曲锣鼓所运用的敲击乐器主要分为鼓、锣、钹和板四类型:鼓类包括有单皮鼓(板鼓)、大鼓、大堂鼓(唐鼓)、小堂鼓、怀鼓、花盆鼓等;锣类有大锣、小锣(手锣)、钲锣、筛锣、马锣、镗锣、云锣;钹类有铙钹、大钹、小钹、水钹、齐钹、镲钹、铰子、碰钟等;打拍子用的檀板、木鱼、梆子等。因为京剧的锣鼓通常由四位乐师负责,又称为四大件,领奏的师傅称为:「鼓佬」,其职责有如西方乐队的指挥,负责控制速度以及利用各种手势提示乐师演奏不同的锣鼓点。粤剧吸收了部份京剧的锣鼓,但以木鱼和沙的代替了京剧的板和鼓,作为打拍子的主要乐器。以下是京剧、昆剧和粤剧锣鼓中乐器对应的口诀用字: 锣鼓经常用的节奏型称为什么?  锣鼓点 67  锣鼓经

初始化

在Python 3.6环境下,我们首先从刚刚安装好的EasyNLP中引入模型运行需要的各种库,并做一些初始化。在本教程中,我们使用hfl/macbert-base-zh。EasyNLP中集成了丰富的预训练模型库,如果想尝试其他预训练模型,如BERT、albert等,也可以在user_defined_parameters中进行相应修改,具体的模型名称可见模型列表。EasyNLP当前同时支持中英文的阅读理解,这里只需要在user_defined_parameters中指定language=zh,即可指定中文文本处理相应配置。此外,机器阅读理解任务中有一些特殊的参数,如doc_stride等,也需要在user_defined_parameters中预先声明,这些参数的具体含义,我们将在下面的“载入数据”小节中详细阐述。

# 为了避免EasyNLP中的args与Jupyter系统的冲突,需要手动设置,否则无法进行初始化。
# 在命令行或py文件中运行文中代码则可忽略下述代码。
import sys
sys.argv = ['main.py']
import torch.cuda
from easynlp.appzoo import MachineReadingComprehensionDataset
from easynlp.appzoo import get_application_predictor, get_application_model, get_application_evaluator, get_application_model_for_evaluation
from easynlp.core import Trainer, PredictorManager
from easynlp.utils import initialize_easynlp, get_args, get_pretrain_model_path
from easynlp.utils.global_vars import parse_user_defined_parameters
initialize_easynlp()
args = get_args()
user_defined_parameters = parse_user_defined_parameters('pretrain_model_name_or_path=hfl/macbert-base-zh language=zh qas_id=qas_id answer_name=answer_text start_position_name=start_position_character max_query_length=64 max_answer_length=30 doc_stride=128 n_best_size=10 output_answer_file=dev_cmrc.ans.csv')
args.checkpoint_dir = "./cmrc_model_dir/"
[2022-09-23 17:25:29,898.898 dsw40519-8f8689f47-8jh9s:72601 INFO utils.py:30] NOTICE: PAIDEBUGGER is turned off.
Please ignore the following import error if you are using tunnel table io.
No module named '_common_io'
No module named 'easy_predict'
------------------------ arguments ------------------------
  app_name ........................................ text_classify
  append_cols ..................................... None
  buckets ......................................... None
  checkpoint_dir .................................. None
  chief_hosts ..................................... 
  data_threads .................................... 10
  distributed_backend ............................. nccl
  do_lower_case ................................... False
  epoch_num ....................................... 3.0
  export_tf_checkpoint_type ....................... easytransfer
  first_sequence .................................. None
  gradient_accumulation_steps ..................... 1
  input_schema .................................... None
  is_chief ........................................ 
  is_master_node .................................. True
  job_name ........................................ None
  label_enumerate_values .......................... None
  label_name ...................................... None
  learning_rate ................................... 5e-05
  local_rank ...................................... None
  logging_steps ................................... 100
  master_port ..................................... 23456
  max_grad_norm ................................... 1.0
  micro_batch_size ................................ 2
  mode ............................................ train
  modelzoo_base_dir ............................... 
  n_cpu ........................................... 1
  n_gpu ........................................... 1
  odps_config ..................................... None
  optimizer_type .................................. AdamW
  output_schema ................................... 
  outputs ......................................... None
  predict_queue_size .............................. 1024
  predict_slice_size .............................. 4096
  predict_table_read_thread_num ................... 16
  predict_thread_num .............................. 2
  ps_hosts ........................................ 
  random_seed ..................................... 1234
  rank ............................................ 0
  read_odps ....................................... False
  restore_works_dir ............................... ./.easynlp_predict_restore_works_dir
  resume_from_checkpoint .......................... None
  save_all_checkpoints ............................ False
  save_checkpoint_steps ........................... None
  second_sequence ................................. None
  sequence_length ................................. 16
  skip_first_line ................................. False
  tables .......................................... None
  task_count ...................................... 1
  task_index ...................................... 0
  use_amp ......................................... False
  use_torchacc .................................... False
  user_defined_parameters ......................... None
  user_entry_file ................................. None
  user_script ..................................... None
  warmup_proportion ............................... 0.1
  weight_decay .................................... 0.0001
  worker_count .................................... 1
  worker_cpu ...................................... -1
  worker_gpu ...................................... -1
  worker_hosts .................................... None
  world_size ...................................... 1
-------------------- end of arguments ---------------------
> initializing torch distributed ...
/home/pai/lib/python3.6/site-packages/OpenSSL/crypto.py:12: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. Therefore, support for it is deprecated in cryptography and will be removed in a future release.
  from cryptography import x509
[2022-09-23 17:25:32,253.253 dsw40519-8f8689f47-8jh9s:72601 INFO distributed_c10d.py:195] Added key: store_based_barrier_key:1 to store for rank: 0
Init dist done. World size: 1, rank 0, l_rank 0
> setting random seeds to 1234 ...

netstat -tunlp|grep 6000

kill -9 PID (需要替换成上一行代码执行结果中对应的程序ID)

载入数据

我们使用EasyNLP中自带的MachineReadingComprehensionDataset,对训练和测试数据进行载入。主要参数如下:

  • pretrained_model_name_or_path:预训练模型名称路径,这里我们使用封装好的get_pretrain_model_path函数,来处理模型名称"hfl/macbert-base-zh"以得到其路径,并自动下载模型
  • max_seq_length:总输入文本的最大长度,超过将截断,不足将padding
  • input_schema:输入tsv数据的格式,逗号分隔的每一项对应数据文件中每行以\t分隔的一项,每项开头为其字段标识,如question_text、answer_text、context_text等
  • first_sequence、second_sequence:用于说明input_schema中哪些字段用于作为问句、描述,input_schema中其他字段名(qas_id、answer_name、start_position_name)将在user_defined_parameters中进行声明
  • user_defined_parameters:任务特定的预声明参数。在机器阅读理解任务中,需要声明如下几种:
  • pretrain_model_name_or_path:同上
  • language:指定语言,中文(zh),英文(en)。不同语种数据预处理及后处理方式存在差异,不声明的话默认采用中文处理方式。
  • qas_id、answer_name、start_position_name:用于说明input_schema中,哪些字段用于作为输入id、答案、答案在描述文本中的起始位置
  • max_query_length:输入文本中问句的最大长度,超过将截断,不足将padding
  • max_answer_length:输入文本中答案的最大长度,超过将截断,不足将padding
  • doc_stride:由于描述文本可能过长,可能导致答案片段在超出max_seq_length后被截断的部分中。因此机器阅读理解中通常采用“滑窗法”,当描述文本过长时,使用滑动窗口将完整的描述文本拆成几段,将一个输入case拆成多个case分别处理。doc_stride即为滑动窗口大小。
  • output_answer_file:模型预测时,除了输出的最佳答案之外,模型会将beam_search后排在top_n的答案结果,都输出到output_answer_file中,供模型优化时分析比对。
  • n_best_size:上述top_n,用来指定将beam_search后排在前多少名的答案输出至output_answer_file中。
  • is_training:是否为训练过程,train_dataset为True,valid_dataset为False
train_dataset = MachineReadingComprehensionDataset(pretrained_model_name_or_path=get_pretrain_model_path("hfl/macbert-base-zh"),
                                                   data_file="train_cmrc2018.tsv",
                                                   max_seq_length=384,
                                                   input_schema="qas_id:str:1,context_text:str:1,question_text:str:1,answer_text:str:1,start_position_character:str:1,title:str:1",
                                                   first_sequence="question_text",
                                                   second_sequence="context_text",
                                                   user_defined_parameters=user_defined_parameters,
                                                   is_training=True
                                                   )
valid_dataset = MachineReadingComprehensionDataset(pretrained_model_name_or_path=get_pretrain_model_path("hfl/macbert-base-zh"),
                                                   data_file="dev_cmrc2018.tsv",
                                                   max_seq_length=384,
                                                   input_schema="qas_id:str:1,context_text:str:1,question_text:str:1,answer_text:str:1,start_position_character:str:1,title:str:1",
                                                   first_sequence="question_text",
                                                   second_sequence="context_text",
                                                   user_defined_parameters=user_defined_parameters,
                                                   is_training=False
                                                   )
`/root/.easynlp/modelzoo/public/hfl/macbert-base-zh.tgz` already exists
****train_cmrc2018.tsv
`/root/.easynlp/modelzoo/public/hfl/macbert-base-zh.tgz` already exists
****dev_cmrc2018.tsv

模型训练

处理好数据与模型载入后,我们开始训练模型。 我们使用EasyNLP中封装好的get_application_model函数进行训练时的模型构建,其参数如下:

  • app_name:任务名称,这里选择机器阅读理解"machine_reading_comprehension"
  • pretrained_model_name_or_path:预训练模型名称路径,这里我们使用封装好的get_pretrain_model_path函数,来处理模型名称"hfl/macbert-base-zh"以得到其路径,并自动下载模型
  • user_defined_parameters:用户自定义参数,直接填入刚刚处理好的自定义参数user_defined_parameters
model = get_application_model(app_name="machine_reading_comprehension",
                              pretrained_model_name_or_path=get_pretrain_model_path("hfl/macbert-base-zh"),
                              user_defined_parameters=user_defined_parameters
                              )
`/root/.easynlp/modelzoo/public/hfl/macbert-base-zh.tgz` already exists
============ from pretrained model ===============
 Loaded weights of the model:
 [bert.embeddings.position_ids,bert.embeddings.word_embeddings.weight,bert.embeddings.position_embeddings.weight,bert.embeddings.token_type_embeddings.weight,bert.embeddings.LayerNorm.weight,bert.embeddings.LayerNorm.bias,bert.encoder.layer.0.attention.self.query.weight,bert.encoder.layer.0.attention.self.query.bias,bert.encoder.layer.0.attention.self.key.weight,bert.encoder.layer.0.attention.self.key.bias,bert.encoder.layer.0.attention.self.value.weight,bert.encoder.layer.0.attention.self.value.bias,bert.encoder.layer.0.attention.output.dense.weight,bert.encoder.layer.0.attention.output.dense.bias,bert.encoder.layer.0.attention.output.LayerNorm.weight,bert.encoder.layer.0.attention.output.LayerNorm.bias,bert.encoder.layer.0.intermediate.dense.weight,bert.encoder.layer.0.intermediate.dense.bias,bert.encoder.layer.0.output.dense.weight,bert.encoder.layer.0.output.dense.bias,bert.encoder.layer.0.output.LayerNorm.weight,bert.encoder.layer.0.output.LayerNorm.bias,bert.encoder.layer.1.attention.self.query.weight,bert.encoder.layer.1.attention.self.query.bias,bert.encoder.layer.1.attention.self.key.weight,bert.encoder.layer.1.attention.self.key.bias,bert.encoder.layer.1.attention.self.value.weight,bert.encoder.layer.1.attention.self.value.bias,bert.encoder.layer.1.attention.output.dense.weight,bert.encoder.layer.1.attention.output.dense.bias,bert.encoder.layer.1.attention.output.LayerNorm.weight,bert.encoder.layer.1.attention.output.LayerNorm.bias,bert.encoder.layer.1.intermediate.dense.weight,bert.encoder.layer.1.intermediate.dense.bias,bert.encoder.layer.1.output.dense.weight,bert.encoder.layer.1.output.dense.bias,bert.encoder.layer.1.output.LayerNorm.weight,bert.encoder.layer.1.output.LayerNorm.bias,bert.encoder.layer.2.attention.self.query.weight,bert.encoder.layer.2.attention.self.query.bias,bert.encoder.layer.2.attention.self.key.weight,bert.encoder.layer.2.attention.self.key.bias,bert.encoder.layer.2.attention.self.value.weight,bert.encoder.layer.2.attention.self.value.bias,bert.encoder.layer.2.attention.output.dense.weight,bert.encoder.layer.2.attention.output.dense.bias,bert.encoder.layer.2.attention.output.LayerNorm.weight,bert.encoder.layer.2.attention.output.LayerNorm.bias,bert.encoder.layer.2.intermediate.dense.weight,bert.encoder.layer.2.intermediate.dense.bias,bert.encoder.layer.2.output.dense.weight,bert.encoder.layer.2.output.dense.bias,bert.encoder.layer.2.output.LayerNorm.weight,bert.encoder.layer.2.output.LayerNorm.bias,bert.encoder.layer.3.attention.self.query.weight,bert.encoder.layer.3.attention.self.query.bias,bert.encoder.layer.3.attention.self.key.weight,bert.encoder.layer.3.attention.self.key.bias,bert.encoder.layer.3.attention.self.value.weight,bert.encoder.layer.3.attention.self.value.bias,bert.encoder.layer.3.attention.output.dense.weight,bert.encoder.layer.3.attention.output.dense.bias,bert.encoder.layer.3.attention.output.LayerNorm.weight,bert.encoder.layer.3.attention.output.LayerNorm.bias,bert.encoder.layer.3.intermediate.dense.weight,bert.encoder.layer.3.intermediate.dense.bias,bert.encoder.layer.3.output.dense.weight,bert.encoder.layer.3.output.dense.bias,bert.encoder.layer.3.output.LayerNorm.weight,bert.encoder.layer.3.output.LayerNorm.bias,bert.encoder.layer.4.attention.self.query.weight,bert.encoder.layer.4.attention.self.query.bias,bert.encoder.layer.4.attention.self.key.weight,bert.encoder.layer.4.attention.self.key.bias,bert.encoder.layer.4.attention.self.value.weight,bert.encoder.layer.4.attention.self.value.bias,bert.encoder.layer.4.attention.output.dense.weight,bert.encoder.layer.4.attention.output.dense.bias,bert.encoder.layer.4.attention.output.LayerNorm.weight,bert.encoder.layer.4.attention.output.LayerNorm.bias,bert.encoder.layer.4.intermediate.dense.weight,bert.encoder.layer.4.intermediate.dense.bias,bert.encoder.layer.4.output.dense.weight,bert.encoder.layer.4.output.dense.bias,bert.encoder.layer.4.output.LayerNorm.weight,bert.encoder.layer.4.output.LayerNorm.bias,bert.encoder.layer.5.attention.self.query.weight,bert.encoder.layer.5.attention.self.query.bias,bert.encoder.layer.5.attention.self.key.weight,bert.encoder.layer.5.attention.self.key.bias,bert.encoder.layer.5.attention.self.value.weight,bert.encoder.layer.5.attention.self.value.bias,bert.encoder.layer.5.attention.output.dense.weight,bert.encoder.layer.5.attention.output.dense.bias,bert.encoder.layer.5.attention.output.LayerNorm.weight,bert.encoder.layer.5.attention.output.LayerNorm.bias,bert.encoder.layer.5.intermediate.dense.weight,bert.encoder.layer.5.intermediate.dense.bias,bert.encoder.layer.5.output.dense.weight,bert.encoder.layer.5.output.dense.bias,bert.encoder.layer.5.output.LayerNorm.weight,bert.encoder.layer.5.output.LayerNorm.bias,bert.encoder.layer.6.attention.self.query.weight,bert.encoder.layer.6.attention.self.query.bias,bert.encoder.layer.6.attention.self.key.weight,bert.encoder.layer.6.attention.self.key.bias,bert.encoder.layer.6.attention.self.value.weight,bert.encoder.layer.6.attention.self.value.bias,bert.encoder.layer.6.attention.output.dense.weight,bert.encoder.layer.6.attention.output.dense.bias,bert.encoder.layer.6.attention.output.LayerNorm.weight,bert.encoder.layer.6.attention.output.LayerNorm.bias,bert.encoder.layer.6.intermediate.dense.weight,bert.encoder.layer.6.intermediate.dense.bias,bert.encoder.layer.6.output.dense.weight,bert.encoder.layer.6.output.dense.bias,bert.encoder.layer.6.output.LayerNorm.weight,bert.encoder.layer.6.output.LayerNorm.bias,bert.encoder.layer.7.attention.self.query.weight,bert.encoder.layer.7.attention.self.query.bias,bert.encoder.layer.7.attention.self.key.weight,bert.encoder.layer.7.attention.self.key.bias,bert.encoder.layer.7.attention.self.value.weight,bert.encoder.layer.7.attention.self.value.bias,bert.encoder.layer.7.attention.output.dense.weight,bert.encoder.layer.7.attention.output.dense.bias,bert.encoder.layer.7.attention.output.LayerNorm.weight,bert.encoder.layer.7.attention.output.LayerNorm.bias,bert.encoder.layer.7.intermediate.dense.weight,bert.encoder.layer.7.intermediate.dense.bias,bert.encoder.layer.7.output.dense.weight,bert.encoder.layer.7.output.dense.bias,bert.encoder.layer.7.output.LayerNorm.weight,bert.encoder.layer.7.output.LayerNorm.bias,bert.encoder.layer.8.attention.self.query.weight,bert.encoder.layer.8.attention.self.query.bias,bert.encoder.layer.8.attention.self.key.weight,bert.encoder.layer.8.attention.self.key.bias,bert.encoder.layer.8.attention.self.value.weight,bert.encoder.layer.8.attention.self.value.bias,bert.encoder.layer.8.attention.output.dense.weight,bert.encoder.layer.8.attention.output.dense.bias,bert.encoder.layer.8.attention.output.LayerNorm.weight,bert.encoder.layer.8.attention.output.LayerNorm.bias,bert.encoder.layer.8.intermediate.dense.weight,bert.encoder.layer.8.intermediate.dense.bias,bert.encoder.layer.8.output.dense.weight,bert.encoder.layer.8.output.dense.bias,bert.encoder.layer.8.output.LayerNorm.weight,bert.encoder.layer.8.output.LayerNorm.bias,bert.encoder.layer.9.attention.self.query.weight,bert.encoder.layer.9.attention.self.query.bias,bert.encoder.layer.9.attention.self.key.weight,bert.encoder.layer.9.attention.self.key.bias,bert.encoder.layer.9.attention.self.value.weight,bert.encoder.layer.9.attention.self.value.bias,bert.encoder.layer.9.attention.output.dense.weight,bert.encoder.layer.9.attention.output.dense.bias,bert.encoder.layer.9.attention.output.LayerNorm.weight,bert.encoder.layer.9.attention.output.LayerNorm.bias,bert.encoder.layer.9.intermediate.dense.weight,bert.encoder.layer.9.intermediate.dense.bias,bert.encoder.layer.9.output.dense.weight,bert.encoder.layer.9.output.dense.bias,bert.encoder.layer.9.output.LayerNorm.weight,bert.encoder.layer.9.output.LayerNorm.bias,bert.encoder.layer.10.attention.self.query.weight,bert.encoder.layer.10.attention.self.query.bias,bert.encoder.layer.10.attention.self.key.weight,bert.encoder.layer.10.attention.self.key.bias,bert.encoder.layer.10.attention.self.value.weight,bert.encoder.layer.10.attention.self.value.bias,bert.encoder.layer.10.attention.output.dense.weight,bert.encoder.layer.10.attention.output.dense.bias,bert.encoder.layer.10.attention.output.LayerNorm.weight,bert.encoder.layer.10.attention.output.LayerNorm.bias,bert.encoder.layer.10.intermediate.dense.weight,bert.encoder.layer.10.intermediate.dense.bias,bert.encoder.layer.10.output.dense.weight,bert.encoder.layer.10.output.dense.bias,bert.encoder.layer.10.output.LayerNorm.weight,bert.encoder.layer.10.output.LayerNorm.bias,bert.encoder.layer.11.attention.self.query.weight,bert.encoder.layer.11.attention.self.query.bias,bert.encoder.layer.11.attention.self.key.weight,bert.encoder.layer.11.attention.self.key.bias,bert.encoder.layer.11.attention.self.value.weight,bert.encoder.layer.11.attention.self.value.bias,bert.encoder.layer.11.attention.output.dense.weight,bert.encoder.layer.11.attention.output.dense.bias,bert.encoder.layer.11.attention.output.LayerNorm.weight,bert.encoder.layer.11.attention.output.LayerNorm.bias,bert.encoder.layer.11.intermediate.dense.weight,bert.encoder.layer.11.intermediate.dense.bias,bert.encoder.layer.11.output.dense.weight,bert.encoder.layer.11.output.dense.bias,bert.encoder.layer.11.output.LayerNorm.weight,bert.encoder.layer.11.output.LayerNorm.bias,bert.pooler.dense.weight,bert.pooler.dense.bias,cls.predictions.bias,cls.predictions.transform.dense.weight,cls.predictions.transform.dense.bias,cls.predictions.transform.LayerNorm.weight,cls.predictions.transform.LayerNorm.bias,cls.predictions.decoder.weight,cls.predictions.decoder.bias,cls.seq_relationship.weight,cls.seq_relationship.bias].
 Unloaded weights of the model:
 [cls.predictions.transform.LayerNorm.bias,cls.predictions.transform.dense.weight,cls.predictions.transform.dense.bias,cls.predictions.decoder.bias,cls.predictions.transform.LayerNorm.weight,cls.seq_relationship.bias,cls.seq_relationship.weight,cls.predictions.decoder.weight,cls.predictions.bias]. 
 This IS expected if you initialize A model from B.
 This IS NOT expected if you initialize A model from A.
trainer = Trainer(model=model, 
                  train_dataset=train_dataset,
                  evaluator=get_application_evaluator(app_name="machine_reading_comprehension", 
                                                      valid_dataset=valid_dataset,
                                                      eval_batch_size=16,
                                                      pretrained_model_name_or_path=get_pretrain_model_path("hfl/macbert-base-zh"),
                                                      user_defined_parameters=user_defined_parameters
                                                      ))
trainer.train()

需要注意的是,由于滑动窗口机制的存在,在训练时的batch_size不可设置过大,否则容易挤爆内存。

从日志中可以看出,我们对预训练模型的参数进行了载入。下一步我们使用EasyNLP中的Train类创建训练实例,并进行训练。

模型评估

训练过程结束后,train好的模型被我们保存在一开始指定好的checkpoint_dir中,本地路径为"./cmrc_model_dir/"。我们可以对train好的模型进行效果评估。我们同样先使用EasyNLP中的get_application_model_for_evaluation方法构建评估模型。

model = get_application_model_for_evaluation(app_name="machine_reading_comprehension",
                                             pretrained_model_name_or_path="./cmrc_model_dir/", 
                                             user_defined_parameters=user_defined_parameters
                                             )
[2022-09-16 17:06:48,662 INFO] Loading model...
[2022-09-16 17:06:48,691 INFO] Load finished!
 Inited keys of the model:
 [_model.encoder.layer.1.attention.self.query.bias,_model.encoder.layer.1.attention.output.dense.bias,_model.encoder.layer.4.output.dense.bias,_model.encoder.layer.5.output.dense.bias,_model.encoder.layer.6.attention.self.query.weight,_model.encoder.layer.1.attention.output.LayerNorm.weight,_model.encoder.layer.7.output.dense.bias,_model.encoder.layer.10.output.LayerNorm.bias,_model.encoder.layer.11.attention.self.key.weight,_model.encoder.layer.2.output.LayerNorm.weight,_model.encoder.layer.10.output.dense.bias,_model.encoder.layer.1.output.LayerNorm.weight,_model.encoder.layer.9.intermediate.dense.weight,_model.encoder.layer.2.attention.output.LayerNorm.bias,_model.encoder.layer.9.output.dense.weight,_model.embeddings.token_type_embeddings.weight,_model.encoder.layer.1.intermediate.dense.bias,_model.encoder.layer.10.output.dense.weight,_model.encoder.layer.8.attention.self.query.weight,_model.encoder.layer.4.output.LayerNorm.bias,_model.encoder.layer.5.attention.self.query.bias,_model.encoder.layer.7.attention.self.query.weight,_model.encoder.layer.5.intermediate.dense.bias,_model.embeddings.position_ids,_model.encoder.layer.11.attention.self.query.weight,_model.encoder.layer.2.intermediate.dense.weight,_model.encoder.layer.4.output.dense.weight,_model.encoder.layer.1.attention.self.key.bias,_model.encoder.layer.7.attention.self.value.weight,_model.encoder.layer.8.output.dense.bias,_model.encoder.layer.9.attention.output.dense.weight,_model.encoder.layer.10.attention.self.value.bias,_model.encoder.layer.6.output.LayerNorm.bias,_model.encoder.layer.2.attention.self.key.bias,_model.encoder.layer.8.attention.output.dense.bias,_model.encoder.layer.10.attention.self.key.bias,_model.encoder.layer.2.attention.self.key.weight,_model.embeddings.position_embeddings.weight,_model.encoder.layer.10.attention.output.LayerNorm.bias,_model.encoder.layer.11.output.LayerNorm.bias,_model.encoder.layer.4.attention.output.dense.bias,_model.encoder.layer.4.output.LayerNorm.weight,_model.encoder.layer.6.output.dense.weight,_model.encoder.layer.9.attention.self.key.bias,_model.encoder.layer.8.attention.self.key.weight,_model.encoder.layer.0.attention.self.key.bias,_model.encoder.layer.10.attention.self.value.weight,_model.encoder.layer.4.attention.output.LayerNorm.weight,classifier.bias,_model.encoder.layer.4.attention.self.value.bias,_model.encoder.layer.0.attention.output.LayerNorm.bias,_model.encoder.layer.3.output.LayerNorm.weight,_model.encoder.layer.8.output.LayerNorm.bias,_model.encoder.layer.3.attention.self.value.bias,_model.encoder.layer.3.attention.self.query.weight,_model.encoder.layer.6.attention.self.key.weight,_model.encoder.layer.3.attention.self.key.weight,_model.embeddings.word_embeddings.weight,_model.encoder.layer.4.attention.self.query.bias,_model.encoder.layer.2.attention.self.value.weight,_model.encoder.layer.5.output.LayerNorm.weight,_model.encoder.layer.7.attention.output.LayerNorm.bias,_model.encoder.layer.7.output.LayerNorm.weight,_model.encoder.layer.2.output.dense.bias,classifier.weight,_model.encoder.layer.2.output.LayerNorm.bias,_model.encoder.layer.2.output.dense.weight,_model.encoder.layer.0.attention.output.dense.bias,_model.encoder.layer.11.output.dense.weight,_model.encoder.layer.0.output.LayerNorm.bias,_model.encoder.layer.3.attention.output.LayerNorm.bias,_model.encoder.layer.7.attention.output.LayerNorm.weight,_model.encoder.layer.0.intermediate.dense.weight,_model.encoder.layer.0.intermediate.dense.bias,_model.encoder.layer.1.attention.self.value.bias,_model.encoder.layer.7.attention.self.value.bias,_model.encoder.layer.4.attention.output.LayerNorm.bias,_model.encoder.layer.8.attention.output.dense.weight,_model.encoder.layer.11.attention.self.query.bias,_model.encoder.layer.3.output.dense.weight,_model.encoder.layer.10.attention.self.query.weight,_model.encoder.layer.9.intermediate.dense.bias,_model.encoder.layer.6.attention.self.query.bias,_model.encoder.layer.6.attention.self.value.bias,_model.encoder.layer.0.output.dense.weight,_model.encoder.layer.9.attention.output.LayerNorm.bias,_model.encoder.layer.5.attention.output.LayerNorm.bias,_model.encoder.layer.10.attention.self.key.weight,_model.encoder.layer.8.attention.self.value.bias,_model.encoder.layer.0.output.dense.bias,_model.encoder.layer.11.attention.self.value.weight,_model.encoder.layer.1.output.LayerNorm.bias,_model.encoder.layer.3.attention.output.dense.weight,_model.encoder.layer.4.attention.self.value.weight,_model.encoder.layer.0.output.LayerNorm.weight,_model.encoder.layer.5.attention.self.key.weight,_model.encoder.layer.4.intermediate.dense.weight,_model.encoder.layer.5.output.LayerNorm.bias,_model.encoder.layer.4.attention.self.key.bias,_model.encoder.layer.5.attention.output.dense.weight,_model.encoder.layer.2.attention.output.LayerNorm.weight,_model.encoder.layer.7.output.dense.weight,_model.encoder.layer.7.intermediate.dense.weight,_model.encoder.layer.1.attention.self.query.weight,_model.encoder.layer.7.attention.self.key.bias,_model.encoder.layer.5.output.dense.weight,_model.encoder.layer.10.attention.output.dense.bias,_model.encoder.layer.6.intermediate.dense.weight,_model.encoder.layer.1.intermediate.dense.weight,_model.encoder.layer.8.attention.output.LayerNorm.weight,_model.encoder.layer.10.intermediate.dense.weight,_model.encoder.layer.2.attention.output.dense.bias,_model.embeddings.LayerNorm.bias,_model.encoder.layer.5.attention.self.key.bias,_model.encoder.layer.2.attention.self.query.bias,_model.encoder.layer.8.output.dense.weight,_model.encoder.layer.7.attention.output.dense.bias,_model.encoder.layer.11.attention.output.LayerNorm.weight,_model.pooler.dense.bias,_model.encoder.layer.5.attention.self.query.weight,_model.encoder.layer.10.intermediate.dense.bias,_model.encoder.layer.4.intermediate.dense.bias,_model.encoder.layer.6.output.LayerNorm.weight,_model.encoder.layer.3.attention.self.query.bias,_model.encoder.layer.5.intermediate.dense.weight,_model.encoder.layer.4.attention.self.key.weight,_model.encoder.layer.8.attention.output.LayerNorm.bias,_model.encoder.layer.0.attention.output.dense.weight,_model.encoder.layer.7.intermediate.dense.bias,_model.encoder.layer.0.attention.self.key.weight,_model.encoder.layer.7.attention.self.query.bias,_model.encoder.layer.6.attention.output.dense.bias,_model.encoder.layer.5.attention.output.LayerNorm.weight,_model.encoder.layer.11.attention.output.dense.bias,_model.encoder.layer.1.attention.self.value.weight,_model.encoder.layer.9.output.dense.bias,_model.encoder.layer.1.output.dense.bias,_model.encoder.layer.6.attention.output.LayerNorm.weight,_model.encoder.layer.10.attention.output.dense.weight,_model.encoder.layer.2.attention.output.dense.weight,_model.encoder.layer.11.attention.self.key.bias,_model.encoder.layer.0.attention.self.value.weight,_model.encoder.layer.1.attention.output.dense.weight,_model.encoder.layer.11.attention.self.value.bias,_model.encoder.layer.11.attention.output.LayerNorm.bias,_model.encoder.layer.7.output.LayerNorm.bias,_model.encoder.layer.9.attention.self.value.bias,_model.encoder.layer.0.attention.output.LayerNorm.weight,_model.encoder.layer.8.intermediate.dense.bias,_model.encoder.layer.4.attention.output.dense.weight,_model.encoder.layer.8.attention.self.query.bias,_model.encoder.layer.1.output.dense.weight,_model.encoder.layer.3.attention.self.key.bias,_model.encoder.layer.3.attention.output.LayerNorm.weight,_model.encoder.layer.6.attention.self.key.bias,_model.encoder.layer.9.attention.self.query.bias,_model.encoder.layer.10.attention.self.query.bias,_model.encoder.layer.11.attention.output.dense.weight,_model.encoder.layer.3.intermediate.dense.weight,_model.encoder.layer.11.intermediate.dense.bias,_model.encoder.layer.6.attention.output.dense.weight,_model.encoder.layer.1.attention.output.LayerNorm.bias,_model.encoder.layer.5.attention.output.dense.bias,_model.encoder.layer.10.attention.output.LayerNorm.weight,_model.encoder.layer.11.output.dense.bias,_model.encoder.layer.7.attention.self.key.weight,_model.encoder.layer.2.intermediate.dense.bias,_model.encoder.layer.7.attention.output.dense.weight,_model.encoder.layer.9.attention.output.dense.bias,_model.encoder.layer.6.attention.self.value.weight,_model.encoder.layer.11.output.LayerNorm.weight,_model.encoder.layer.8.output.LayerNorm.weight,_model.encoder.layer.0.attention.self.query.weight,_model.encoder.layer.1.attention.self.key.weight,_model.encoder.layer.2.attention.self.query.weight,_model.encoder.layer.3.attention.self.value.weight,_model.encoder.layer.9.attention.self.value.weight,_model.encoder.layer.9.attention.self.key.weight,_model.encoder.layer.6.output.dense.bias,_model.encoder.layer.4.attention.self.query.weight,_model.encoder.layer.6.attention.output.LayerNorm.bias,_model.encoder.layer.5.attention.self.value.weight,_model.encoder.layer.3.intermediate.dense.bias,_model.encoder.layer.3.output.dense.bias,_model.encoder.layer.3.output.LayerNorm.bias,_model.encoder.layer.9.output.LayerNorm.weight,_model.encoder.layer.11.intermediate.dense.weight,_model.encoder.layer.9.attention.output.LayerNorm.weight,_model.encoder.layer.8.attention.self.key.bias,_model.encoder.layer.0.attention.self.query.bias,_model.encoder.layer.3.attention.output.dense.bias,_model.encoder.layer.8.attention.self.value.weight,_model.encoder.layer.5.attention.self.value.bias,_model.encoder.layer.8.intermediate.dense.weight,_model.encoder.layer.10.output.LayerNorm.weight,_model.encoder.layer.0.attention.self.value.bias,_model.encoder.layer.9.output.LayerNorm.bias,_model.encoder.layer.2.attention.self.value.bias,_model.encoder.layer.6.intermediate.dense.bias,_model.pooler.dense.weight,_model.encoder.layer.9.attention.self.query.weight,_model.embeddings.LayerNorm.weight].
All keys are initialized.

之后我们使用EasyNLP中的get_application_evaluator来初始化evaluator,并指定当前device下的当前模型,进行模型评估。

evaluator = get_application_evaluator(app_name="machine_reading_comprehension", 
                                      valid_dataset=valid_dataset,
                                      eval_batch_size=16, 
                                      user_defined_parameters=user_defined_parameters
                                      )
model.to(torch.cuda.current_device())
evaluator.evaluate(model=model)

模型预测

我们同样可以使用训练好的模型进行文本分类的预测。我们首先创建一个predictor,并据此实例化一个PredictorManager实例。我们指定预测好的结果输出在"dev.pred.csv",并指定输出格式为"unique_id,best_answer,query,context"。此外,我们将抽取出的,beam_search排在top_n的答案结果都输出在"dev.ans.csv"中,供模型优化时分析比对。

predictor = get_application_predictor(app_name="machine_reading_comprehension",
                                      model_dir="./cmrc_model_dir/", 
                                      first_sequence="question_text",
                                      second_sequence="context_text",
                                      max_seq_length=384,
                                      output_file="dev_cmrc.pred.csv",
                                      user_defined_parameters=user_defined_parameters
                                      )
predictor_manager = PredictorManager(predictor=predictor,
                                     input_file="dev_cmrc2018.tsv",
                                     input_schema="qas_id:str:1,context_text:str:1,question_text:str:1,answer_text:str:1,start_position_character:str:1,title:str:1",
                                     output_file="dev_cmrc.pred.csv",
                                     output_schema="unique_id,best_answer,query,context",
                                     append_cols=args.append_cols,
                                     batch_size=256
                                     )
predictor_manager.run()
exit()

输入以下命令,可以展示测试集中的5条数据,其id、context、query,以及经过训练后的模型预测出的answer。

print('Predicted results:  id  best_answer  query  context')
! head -n 5 dev.pred.csv
Predicted results:  id  best_answer  query  context
DEV_0_QUERY_0 光荣和ω-force  《战国无双3》是由哪两个公司合作开发的?  《战国无双3》()是由光荣和ω-force开发的战国无双系列的正统第三续作。本作以三大故事为主轴,分别是以武田信玄等人为主的《关东三国志》,织田信长等人为主的《战国三杰》,石田三成等人为主的《关原的年轻武者》,丰富游戏内的剧情。此部份专门介绍角色,欲知武器情报、奥义字或擅长攻击类型等,请至战国无双系列1.由于乡里大辅先生因故去世,不得不寻找其他声优接手。从猛将传andZ开始。2.战国无双编年史的原创男女主角亦有专属声优。此模式是任天堂游戏谜之村雨城改编的新增模式。本作中共有20张战场地图(不含村雨城),后来发行的猛将传再新增3张战场地图。但游戏内战役数量繁多,部分地图会有兼用的状况,战役虚实则是以光荣发行的2本「战国无双3人物真书」内容为主,以下是相关介绍。(注:前方加☆者为猛将传新增关卡及地图。)合并本篇和猛将传的内容,村雨城模式剔除,战国史模式可直接游玩。主打两大模式「战史演武」&「争霸演武」。系列作品外传作品
DEV_0_QUERY_1 村雨城 男女主角亦有专属声优这一模式是由谁改编的? 《战国无双3》()是由光荣和ω-force开发的战国无双系列的正统第三续作。本作以三大故事为主轴,分别是以武田信玄等人为主的《关东三国志》,织田信长等人为主的《战国三杰》,石田三成等人为主的《关原的年轻武者》,丰富游戏内的剧情。此部份专门介绍角色,欲知武器情报、奥义字或擅长攻击类型等,请至战国无双系列1.由于乡里大辅先生因故去世,不得不寻找其他声优接手。从猛将传andZ开始。2.战国无双编年史的原创男女主角亦有专属声优。此模式是任天堂游戏谜之村雨城改编的新增模式。本作中共有20张战场地图(不含村雨城),后来发行的猛将传再新增3张战场地图。但游戏内战役数量繁多,部分地图会有兼用的状况,战役虚实则是以光荣发行的2本「战国无双3人物真书」内容为主,以下是相关介绍。(注:前方加☆者为猛将传新增关卡及地图。)合并本篇和猛将传的内容,村雨城模式剔除,战国史模式可直接游玩。主打两大模式「战史演武」&「争霸演武」。系列作品外传作品
DEV_0_QUERY_2 「战史演武」&「争霸演武」 战国史模式主打哪两个模式? 《战国无双3》()是由光荣和ω-force开发的战国无双系列的正统第三续作。本作以三大故事为主轴,分别是以武田信玄等人为主的《关东三国志》,织田信长等人为主的《战国三杰》,石田三成等人为主的《关原的年轻武者》,丰富游戏内的剧情。此部份专门介绍角色,欲知武器情报、奥义字或擅长攻击类型等,请至战国无双系列1.由于乡里大辅先生因故去世,不得不寻找其他声优接手。从猛将传andZ开始。2.战国无双编年史的原创男女主角亦有专属声优。此模式是任天堂游戏谜之村雨城改编的新增模式。本作中共有20张战场地图(不含村雨城),后来发行的猛将传再新增3张战场地图。但游戏内战役数量繁多,部分地图会有兼用的状况,战役虚实则是以光荣发行的2本「战国无双3人物真书」内容为主,以下是相关介绍。(注:前方加☆者为猛将传新增关卡及地图。)合并本篇和猛将传的内容,村雨城模式剔除,战国史模式可直接游玩。主打两大模式「战史演武」&「争霸演武」。系列作品外传作品
DEV_1_QUERY_0 锣鼓经是大陆传统器乐及戏曲里面常用的打击乐记谱方法 锣鼓经是什么? 锣鼓经是大陆传统器乐及戏曲里面常用的打击乐记谱方法,以中文字的声音模拟敲击乐的声音,纪录打击乐的各种不同的演奏方法。常用的节奏型称为「锣鼓点」。而锣鼓是戏曲节奏的支柱,除了加强演员身段动作的节奏感,也作为音乐的引子和尾声,提示音乐的板式和速度,以及作为唱腔和念白的伴奏,令诗句的韵律更加抑扬顿锉,段落分明。锣鼓的运用有约定俗成的程式,依照角色行当的身份、性格、情绪以及环境,配合相应的锣鼓点。锣鼓亦可以模仿大自然的音响效果,如雷电、波浪等等。戏曲锣鼓所运用的敲击乐器主要分为鼓、锣、钹和板四类型:鼓类包括有单皮鼓(板鼓)、大鼓、大堂鼓(唐鼓)、小堂鼓、怀鼓、花盆鼓等;锣类有大锣、小锣(手锣)、钲锣、筛锣、马锣、镗锣、云锣;钹类有铙钹、大钹、小钹、水钹、齐钹、镲钹、铰子、碰钟等;打拍子用的檀板、木鱼、梆子等。因为京剧的锣鼓通常由四位乐师负责,又称为四大件,领奏的师傅称为:「鼓佬」,其职责有如西方乐队的指挥,负责控制速度以及利用各种手势提示乐师演奏不同的锣鼓点。粤剧吸收了部份京剧的锣鼓,但以木鱼和沙的代替了京剧的板和鼓,作为打拍子的主要乐器。以下是京剧、昆剧和粤剧锣鼓中乐器对应的口诀用字:
DEV_1_QUERY_1 锣鼓点」  锣鼓经常用的节奏型称为什么?  锣鼓经是大陆传统器乐及戏曲里面常用的打击乐记谱方法,以中文字的声音模拟敲击乐的声音,纪录打击乐的各种不同的演奏方法。常用的节奏型称为「锣鼓点」。而锣鼓是戏曲节奏的支柱,除了加强演员身段动作的节奏感,也作为音乐的引子和尾声,提示音乐的板式和速度,以及作为唱腔和念白的伴奏,令诗句的韵律更加抑扬顿锉,段落分明。锣鼓的运用有约定俗成的程式,依照角色行当的身份、性格、情绪以及环境,配合相应的锣鼓点。锣鼓亦可以模仿大自然的音响效果,如雷电、波浪等等。戏曲锣鼓所运用的敲击乐器主要分为鼓、锣、钹和板四类型:鼓类包括有单皮鼓(板鼓)、大鼓、大堂鼓(唐鼓)、小堂鼓、怀鼓、花盆鼓等;锣类有大锣、小锣(手锣)、钲锣、筛锣、马锣、镗锣、云锣;钹类有铙钹、大钹、小钹、水钹、齐钹、镲钹、铰子、碰钟等;打拍子用的檀板、木鱼、梆子等。因为京剧的锣鼓通常由四位乐师负责,又称为四大件,领奏的师傅称为:「鼓佬」,其职责有如西方乐队的指挥,负责控制速度以及利用各种手势提示乐师演奏不同的锣鼓点。粤剧吸收了部份京剧的锣鼓,但以木鱼和沙的代替了京剧的板和鼓,作为打拍子的主要乐器。以下是京剧、昆剧和粤剧锣鼓中乐器对应的口诀用字:
以上输出的每行结果,从左到右依次为:id, best_answer, context, query。可以看出,模型很好地预测出了每个问题的答案,答案准确而简洁。

一步执行#

值得一提的是,上述所有训练/评估/预测代码,都已经被集成在EasyNLP/examples/appzoo_tutorials/machine_reading_comprehension/main.py中,此外,我们也预先编写好了多种可供直接执行的脚本。用户可以通过带参数运行main.py中指令,或者直接使用bash文件命令行执行的方式,一步执行上述所有训练/评估/预测操作。

main文件一步执行

用户通过以下代码带参数执行main.py中的指令,可直接对模型进行训练/评估/预测操作。

训练代码指令如下。参数说明如“载入数据”小节中所示。在本示例中,预训练模型指定为hfl/macbert-base-zh。

! python main.py \
    --mode train \
    --app_name=machine_reading_comprehension \
    --worker_gpu=1 \
    --tables=train_cmrc2018.tsv,dev_cmrc2018.tsv \
    --input_schema=qas_id:str:1,context_text:str:1,question_text:str:1,answer_text:str:1,start_position_character:str:1,title:str:1 \
    --first_sequence=question_text \
    --second_sequence=context_text \
    --sequence_length=384 \
    --checkpoint_dir=./cmrc_model_dir \
    --learning_rate=3.5e-5 \
    --epoch_num=5 \
    --random_seed=42 \
    --save_checkpoint_steps=600 \
    --train_batch_size=16 \
    --user_defined_parameters='
        pretrain_model_name_or_path=hfl/macbert-base-zh
        language=zh
        answer_name=answer_text
        qas_id=qas_id
        start_position_name=start_position_character
        doc_stride=128
        max_query_length=64
    '

评估代码如下,参数含义与训练是一致的。

! python main.py \
    --mode evaluate \
    --app_name=machine_reading_comprehension \
    --worker_gpu=1 \
    --tables=dev_cmrc2018.tsv \
    --input_schema=qas_id:str:1,context_text:str:1,question_text:str:1,answer_text:str:1,start_position_character:str:1,title:str:1 \
    --first_sequence=question_text \
    --second_sequence=context_text \
    --sequence_length=384 \
    --checkpoint_dir=./cmrc_model_dir \
    --micro_batch_size=16 \
    --user_defined_parameters='
        pretrain_model_name_or_path=hfl/macbert-base-zh
        language=zh
        qas_id=qas_id
        answer_name=answer_text
        start_position_name=start_position_character
        doc_stride=128
        max_query_length=64
    '

预测代码如下。参数同样与上面保持一致,输出结果可在dev.pred.tsv中查看。

! python main.py \
    --mode predict \
    --app_name=machine_reading_comprehension \
    --worker_gpu=1 \
    --tables=dev_cmrc2018.tsv \
    --outputs=dev_cmrc.pred.csv \
    --input_schema=qas_id:str:1,context_text:str:1,question_text:str:1,answer_text:str:1,start_position_character:str:1,title:str:1 \
    --output_schema=unique_id,best_answer,query,context \
    --first_sequence=question_text \
    --second_sequence=context_text \
    --sequence_length=384 \
    --checkpoint_dir=./cmrc_model_dir \
    --micro_batch_size=256 \
    --user_defined_parameters='
        pretrain_model_name_or_path=hfl/macbert-base-zh
        language=zh
        qas_id=qas_id
        answer_name=answer_text
        start_position_name=start_position_character
        max_query_length=64
        max_answer_length=30
        doc_stride=128
        n_best_size=10
        output_answer_file=dev_cmrc.ans.csv
    '

利用bash文件命令行执行

我们在EasyNLP/examples/appzoo_tutorials/machine_reading_comprehension/文件夹下封装好了多种可直接执行的bash脚本,用户同样可以通过使用bash文件命令行执行的方式来一步完成模型的训练/评估/预测。以下以run_train_eval_predict_user_defined_local_zh.sh脚本为例。该bash文件需要传入两个参数,第一个参数为运行程序的GPU编号,一般为0;第二个参数代表模型的训练/评估/预测。

模型训练:

! bash run_train_eval_predict_user_defined_local_zh.sh 0 train

模型评估:

! bash run_train_eval_predict_user_defined_local_zh.sh 0 evaluate

模型预测:

! bash run_train_eval_predict_user_defined_local_zh.sh 0 predict
相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
PyTorch API C#
【Python+C#】手把手搭建基于Hugging Face模型的离线翻译系统,并通过C#代码进行访问
目前翻译都是在线的,要在C#开发的程序上做一个可以实时翻译的功能,好像不是那么好做。而且大多数处于局域网内,所以访问在线的api也显得比较尴尬。于是,就有了以下这篇文章,自己搭建一套简单的离线翻译系统。以下内容采用python提供基础翻译服务+ C#访问服务的功能,欢迎围观。
915 0
【Python+C#】手把手搭建基于Hugging Face模型的离线翻译系统,并通过C#代码进行访问
|
8月前
|
Linux Shell 网络安全
大模型之Huggingface初体验
huggingface相关环境的安装和问题处理本篇暂不涉及,后续补充。这里以一个模型为例,完成从模型介绍到加载、运行的完整过程,作为我们熟悉huggingface的一个示例。
1160 0
|
12月前
|
机器学习/深度学习 API Python
Gradio机器学习模型快速部署工具【quickstart】翻译2
Gradio机器学习模型快速部署工具【quickstart】翻译2
225 0
|
缓存 自然语言处理 Shell
【DSW Gallery】基于预训练模型的多场景文本生成(以新闻标题生成为例)
EasyNLP提供多种模型的训练及预测功能,旨在帮助自然语言开发者方便快捷地构建模型并应用于生产。本文以中文文本生成为例,为您介绍如何在PAI-DSW中使用EasyNLP。
【DSW Gallery】基于预训练模型的多场景文本生成(以新闻标题生成为例)
|
缓存 自然语言处理 算法
【DSW Gallery】基于EasyNLP Transformer模型的中文文图生成
EasyNLP提供多种模型的训练及预测功能,旨在帮助自然语言开发者方便快捷地构建模型并应用于生产。本文简要介绍文图生成的技术,以及如何在PAI-DSW中基于EasyNLP轻松实现文图生成,带你秒变艺术家。
【DSW Gallery】基于EasyNLP Transformer模型的中文文图生成
|
人工智能 并行计算 算法
【DSW Gallery】基于MOCOV2的自监督学习示例
EasyCV是基于Pytorch,以自监督学习和Transformer技术为核心的 all-in-one 视觉算法建模工具,并包含图像分类,度量学习,目标检测,姿态识别等视觉任务的SOTA算法。本文以自监督学习-MOCO为例,为您介绍如何在PAI-DSW中使用EasyCV。
【DSW Gallery】基于MOCOV2的自监督学习示例
|
机器学习/深度学习 人工智能 编解码
【DSW Gallery】基于EasyNLP-Diffusion模型的中文文图生成
EasyNLP提供多种模型的训练及预测功能,旨在帮助自然语言开发者方便快捷地构建模型并应用于生产。本文简要介绍文图生成的技术,以及如何在PAI-DSW中基于EasyNLP使用diffusion model进行finetune和预测评估。
【DSW Gallery】基于EasyNLP-Diffusion模型的中文文图生成
|
机器学习/深度学习 人工智能 Kubernetes
【DSW Gallery】介绍如何使用命令行工具提交DLC任务
本文介绍如何使用DLC命令行工具提交任务到指定的工作空间内. 同时,会介绍如何提交预付费和后付费的DLC训练任务
【DSW Gallery】介绍如何使用命令行工具提交DLC任务
|
数据挖掘 Python
【DSW Gallery】Jupyter魔术命令使用技巧
Jupyter Notebook除了能够执行Python代码之外,还提供一些魔术命令(Magic Command)方便用户简洁地解决标准数据分析中的各种常见问题,本文介绍几个常见的魔术命令使用技巧。
【DSW Gallery】Jupyter魔术命令使用技巧
|
人工智能 自然语言处理 算法
【DSW Gallery】基于EasyNLP的BERT英文机器阅读理解
EasyNLP提供多种模型的训练及预测功能,旨在帮助自然语言开发者方便快捷地构建模型并应用于生产。本文以机器阅读理解为例,为您介绍如何在PAI-DSW中基于EasyNLP快速使用BERT进行英文机器阅读理解模型的训练、推理。
【DSW Gallery】基于EasyNLP的BERT英文机器阅读理解

热门文章

最新文章