【DSW Gallery】基于EasyNLP的RoBERTa中文新闻多分类

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

直接使用

请打开基于EasyNLP的RoBERTa中文新闻多分类,并点击右上角 “ 在DSW中打开” 。

image.png


基于EasyNLP的RoBERTa中文新闻多分类

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

本文以中文新闻多分类为例,为您介绍如何在PAI-DSW中基于EasyNLP快速使用RoBERTa进行中文文本多分类模型的训练、评估、预测。

关于RoBERTa

RoBERTa是2019年7月由FaceBook(现为META)AI研究院提出的一种基于BERT改进的预训练语言表征模型,全称是Robustly Optimized BERT pretraining Approach。与BERT一样,RoBERTa也采用Transformer encoder结构。不过它在BERT的基础上增加了额外的训练数据、改进了预训练策略,从而获得了更强有力的预训练语言模型。这使得其在自然语言理解(NLU)任务中的性能表现显著强于BERT。

运行环境要求

建议用户使用: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/sequence_classification_multilabel
! wget http://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/modelhub/nlu/general_news_classification/data/train.csv
! wget http://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/modelhub/nlu/general_news_classification/data/dev.csv
/bin/bash: line 0: cd: examples/appzoo_tutorials/sequence_classification_multilabel: No such file or directory
--2022-07-19 16:14:31--  http://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/modelhub/nlu/general_news_classification/data/train.csv
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: 306690422 (292M) [text/csv]
Saving to: ‘train.csv’
train.csv           100%[===================>] 292.48M  19.8MB/s    in 16s     
2022-07-19 16:14:48 (18.1 MB/s) - ‘train.csv’ saved [306690422/306690422]
--2022-07-19 16:14:48--  http://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/modelhub/nlu/general_news_classification/data/dev.csv
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: 33795118 (32M) [text/csv]
Saving to: ‘dev.csv’
dev.csv             100%[===================>]  32.23M  17.2MB/s    in 1.9s    
2022-07-19 16:14:50 (17.2 MB/s) - ‘dev.csv’ saved [33795118/33795118]

训练和测试数据都是以\t隔开的.csv文件,每行为一个数据,\t前为需要进行文本分类的新闻句,\t后为对应的类别标签。数据下载完成后,可以通过以下代码查看前5条数据。

print('Training data sample:')
! head -n 5 train.csv
print('Development set data sample:')
! head -n 5 dev.csv
Training data sample:
美国实验发现:妈妈孕期过度肥胖,孩子智商平均低5分以上?。▲研究人员招募了368名非裔美国女性,并对她们在孕期、孩子3岁时、7岁时母亲和孩子的情况进行追踪。▲而这个效果只在男孩身上发现,对女孩并没有太大的影响。尽管以前的研究发现母亲的饮食与孩子的认知能力之间存在联系,例如孕期母亲较高的脂肪酸摄取量与孩子出生后较高的智商和较强的注意力有关。这是我们之前写过的文章,可以供您参考。↓↓↓实验证明,怀孕初期海鲜的摄取量与其子女长大后的专注能力有关但目前,研究人员仍不清楚孕期的过度肥胖为什么会对孩子产生影响。也许是因为母亲的饮食和行为因素,又或者是胎儿的发育受到了因肥胖而导致身体体征变化的影响。例如过度肥胖容易导致炎症、代谢不正常、荷尔蒙紊乱及体内过量的胰岛素和葡萄糖等。但是,在把这些因素考虑进来后,母亲孕期的过度肥胖,仍对后期孩子(尤其是男孩)的智商和运动机能发育有一定的影响。*这次的研究分析中,没有控制和考虑到母亲的饮食和是否母乳喂养这项变量。研究团队还检测了孩子在家中的养育环境——即父母与孩子互动的模式,以及是否给孩子提供书籍玩具,对孩子发育的影响。研究成员发现,较高质量的家庭养育环境,可以缓和母亲孕期过度肥胖对孩子运动和智商发育的负面影响。但即便如此,这个负面影响仍然存在,只是如果有较高质量的家庭教育环境,这个负面影响变弱了。有趣的是,这个研究发现了孕期母亲的体重对男孩有影响,而对女孩却没有...这不是第一个发现男孩在母亲肚子里似乎更容易受到伤害的研究。●之前有一些研究发现,孕期暴露在铅元素含量较大的环境中的母亲,生出来的男孩智商表现会较低。●而2019年的一项研究发现,怀孕期间摄取了氟元素的母亲所生的男孩在后期的智商评估中,分数比没有接受氟元素的孕期母亲的孩子低。在怀孕的时候,我们无法知道孩子究竟是男孩还是女孩,所以还是建议家长,尤其是母亲要关注自己生活的环境,保持正常的体重,不要暴露在有毒化学成分如铅、氟过浓的环境中。因为儿童的智商是其受教育水平、社会经济地位以及职业发展的重要预测指标之一,所以幼年的智商表现较弱的影响,可能会持续到孩子成年期。孕期的家长千万不能掉以轻心。在这需要提醒的是,这项研究的对象是收入较低的非裔美国妈妈,而同样的效果是否会在中国妈妈身上出现,这还有待研究人员继续探讨。当然,我们也可以留个心眼,在孕期保持健康的身材以及平衡的饮食,无论是对母亲自己还是宝宝发育,还是会起到积极的作用。●肥胖或超重的妇女在怀孕时要保持均衡的饮食。●餐饮中应该富含水果和蔬菜,并摄取足够的维生素和脂肪酸(如鱼油)。●当然,为孩子提供良好的家庭教育环境也很重要,这是孩子后期智力发展的重要保护因素,这就需要您学习和了解更多的育儿知识。●同时,记得定期看医生,和医生讨论在孕期间体重情况,并遵循医生的指导。 母婴
河北:春节期间主要生活必需品价格稳定。来源:长城网超市蔬菜种类齐全,价格平稳。记者段维佳摄长城网讯(记者李代姣)1月31日(正月初七),河北省价格监测机构应对新型冠状病毒疫情应急日监测数据显示,各大超市客流量有所增加,市民对蔬菜的需求量日益增大,但并未发生缺货、断货现象;粮油、肉蛋菜等货源充足,价格平稳,未发生异常波动现象。粮油价格基本稳定。面粉全省平均价格(每500克,下同)2.15元、粳米3.04元、玉米粉2.30元,花生油(5升,桶装)144.12元,与上一日相比价格持平。与节前(1月23日,下同)相比,面粉和花生油价格持平、粳米上涨0.33%,玉米粉下降0.43%。肉类价格稳中略降。鲜猪肉全省平均价格28.51元,日环比下降0.14%;鲜牛肉44.00元,与前一日价格持平;鲜羊肉44.49元,日环比下降0.20%。与节前相比,鲜猪肉、鲜牛肉、鲜羊肉价格分别上涨2.92%、2.25%和2.94%。鸡蛋价格小幅下降。鸡蛋全省平均价格4.21元,日环比下降0.24%,比节前价格下降5.61%。蔬菜价格下降。八种大路菜全省平均价格为3.96元,日环比下降10.20%,比节前下降5.96%。  三农
官宣!疫情克星来了,李兰娟团队发布2款处方药,体外试验有奇效。药,药,初步验证有效的药,终于来了!治疗新冠肺炎,再次传来好消息,而且直接来自疫区中心——武汉。2月4日下午,中国工程院院士、国家卫健委高级别专家组成员李兰娟团队,在武汉公布治疗新冠病毒肺炎的最新研究成果:对多种抗病毒药物筛选之后,发现阿比朵尔和达芦那韦两种药物,能有效抑制冠状病毒。李兰娟院士(第一排中间)与武大人民医院医生交流新治疗方案“激动人心,胜利就要到来了!武汉加油!中国加油!”;“比双黄连要好点,但是临床应有还有待观察”;“这次出来的是处方药,应该不会被哄抢”。No.1“旧药”新疗效在众多抗病毒药物中“筛选”出这两款药物,最终能够有良好效果,可以称得上是一个喜讯。阿比朵尔(Arbidol),由前苏联药物化学研究中心研制开发,主要适应症是A类、B类流感病毒引起的流行性感冒,同时对其他一些呼吸道病毒感染可能也有抗病毒活性。达芦那韦(darunavir),商品名为Prezista。经此前已经经美国FDA批准,是用于治疗成人和3岁及3岁以上儿童的HIV感染的处方药,可以被用于未接受过HIV治疗人的用药。它同时也被列入世界卫生组织基本药物清单。但由于单独使用会出现抗药性,通常与其它抗艾滋药物配合使用。李兰娟团队的体外细胞实验发现:达芦那韦在300微摩尔浓度下,能显著抑制病毒复制,与未用药物处理组比较,抑制效率达280倍。李兰娟院士建议,将以上两种药物列入国家卫健委《新型冠状病毒感染的肺炎诊疗方案(试行第六版)》。艾滋病权威专家指出,达芦那韦在一定浓度下和高血压、糖尿病等治疗药物合并使用,可能产生毒副作用,换言之可能增加不良反应。他认为,达芦那韦对新冠病毒的抑制作用在细胞层面得到验证,在紧急状况下,可以在小范围试用,但是写入国家诊疗方案应谨慎。No.2手术刀改厨房刀李兰娟是中国工程院院士、人工肝的开拓者、感染微生态学领域的开辟者、传染病学的领军人物。正是这位古稀老人,最早给党中央和国务院建议武汉“封城”。1947年出生浙江绍兴,小时候家境贫寒,曾当过赤脚医生,后考上浙江医科大学,并分配到浙江大学附属第一医院工作。年轻时候的李兰娟院士李兰娟院士和郑树森院士因为除夕夜那天的李兰娟已经向国家提出,带队支援武汉,所以郑树森亲自下厨,为妻子准备践行饭。李兰娟院士和儿子郑杰No.3“特效药”瑞德西韦瑞德西韦,英文名Remdesivir,最近也被叫作“人民的希望”。瑞德西韦是全球抗病毒第一公司——吉利德针对埃博拉病毒研发的一款药物,在美国治疗首例新冠病毒肺炎患者过程中展现出了非常好的效果。美国当地时间31日,权威医学期刊《新英格兰医学杂志》(NEJM)发布文章,详细叙述了美国首例新型冠状病毒患者在注射瑞德西韦后病情出现转机,随后康复。美国的第一例患者,是个华人,于1月15日从武汉回到美国。两天后开始发烧,在1月20号确诊住院,住院后用了不少药物,但是一直不见效果,还是发烧。但由于病患案例数据有限,还需要进一步进行临床试验。2月3日,270例患者参加的临床实验在中日友好医院开启,预计将于4月27日结束,这是药物批准上市前的最后一次临床实验。而且国家药品审评中心首席科学家钱家华表示,如果临床药效好,实验会提前结束。瑞德西韦为吉利德科学公司在研药物,是一家独立的生化公司。该公司所开发和销售的药物广泛应用在治疗病菌传染方面,包括病毒传染、真菌感染和细菌传染,公司还特别关注癌症的治疗。吉利德科学成立于1987年6月,注册资本为560万美元,注册地在美国特拉华州。2016年-2018年,吉利德科学的营业收入逐年下降,其数据表现为2108.15亿元、1705.88亿元和1518.62亿元,同比下降比例分别为6.89%、14.09%和15.24%。2019年三季报显示,吉利德科学前三季度的营业收入1171.98亿元,同比增长1.46%。除了上面提到的3种药,2月4日下午卫健委召开的关于疫情的发布会上,也传来了其他药物的好消息。科技部生物中心副主任孙燕荣科技部生物中心副主任孙燕荣表示,目前已经发现了磷酸氯喹、法匹拉韦等也具有抗病毒活性的上市药物。现在正在加紧、递次推进动物实验和临床试验。END战胜新冠肺炎,指日可待!没有一个冬天不可逾越,没有一个春天不会来临!科学家们一直在和病毒赛跑,我们更应该尽自己所能,拖住恶魔前进的脚步。最后,提醒大家,现在还只发现了潜在药物,需要再坚持坚持,还没有到放松警惕的时刻!非常时期,一定要勤洗手,戴口罩!其次就是少串门,多宅家,你我才能别来无恙!欢迎关注学点儿投资,爱你们,么么哒~ 科学
紧急!扩散!马上。千古以来人心相同始终都是感情用事风霜雨露生老病死本属自然现象风雨总会过去何必怨天尤人一天遇不到好天气可以忍辱负重暂躲避一生里若遇不到好天气也不能失去回收的姐妹兄弟勤快无私扩散传递尽绵薄之力 美文
果粉等到绝望!AirPods2上市市场或再推迟:2019见无线耳机,蓝牙耳机,AirPods2。作为苹果史上口碑最好之一的配件,消费者们都十分关心AirPods的续作会在何时到来。本来有传闻指AirPods2将会在美国购物节到来之前登场,但现在“黑色星期五”和网络星期一已经过去一周有余了,传说中的AirPods2还是没有现身。难道此前曝光的全新AirPods2充电盒是假的?郭明錤表示并非如此。AirPods2确实是存在的,正如我们所见,但因为某些原因推迟了发布计划,最新的预测结果是AirPods2将会在2019年的春季正式发布。全新的AirPods除了支持“HeySiri”语音唤醒之外,还会加入无线充电功能,并支持蓝牙5.0标准。但网友期待的降噪、防水等功能就别指望了,鉴于设计基本没有大变化,所以AirPods2不会支持上述功能。而设计变化、内部构造升级的AirPods3,很可能会在2020年登场。郭明錤预测,到2021年,AirPods系列产品的销量将会从现在的1600万台提升至1亿台以上,一跃成为世界上最受欢迎的外设产品。至于为何AirPods2一再跳票,郭明錤表示原因是AirPods2内部设计比较复杂,在内部空间和散热等因素上都需要考虑更多,因此苹果只能将发售时间延期。觉得,AirPods的销量有目共睹,苹果绝不可能让这么一款热门产品“断后”。但迟迟未更新新品,一来确实是遇到了产品问题,第二原因可能是眼看AirPods依然十分欢迎,利润空间充足,因此暂时还没有必要推出新品。至于AirPods相对其他产品的优势,主要是得益于苹果iOS强大且完整的生态整合。但在音质、降噪甚至携带安全性方面,AirPods只能说是上游,还算不上顶尖。虽然AirPods2一再推迟,但种种消息表明这是铁定会发布的,我们不妨耐心等候一下。【来源:雷科技】【作者:Wallace】 科技
Development set data sample:
世界有史以来最大的11种动物!网友看后声称:太不可思议了。1.双腔龙这是地球上有史以来最大的动物。它长58米(190英尺),最大重达122吨。这种巨大的恐龙最早是在1800年代后期发现的。当时科学家们无法保存大型化石,而今天我们只把笔记作为证据。因此,一些科学家认为它的大小可能被高估了。双腔龙生活在1.5亿年前。2.蓝鲸蓝鲸的长度可达30米(98英尺),重量可达180吨。我们很幸运能拥有它们。在二十世纪初,它们几乎被狩猎灭绝。1966年,国际社会开始保护鲸鱼,目前全世界有1万至25,000只蓝鲸。不是很酷吗?有史以来最大的哺乳动物仍然生活在我们中间!3.翼龙翼龙是有史以来最大的飞行动物。它的翼展为15.9米(52英尺),重量为250千克(550磅)。科学家们仍然在争论这种动物是否过着吃鱼的生活方式,或者正在吃陆生动物。但无论如何,翼龙是一个捕食者。你能想象这个东西飞过你吗?这一定是可怕的!翼龙生活在6500万年前。4.巨犀巨犀是有史以来生活在地球上的最大陆地哺乳动物。它的重量估计约为20吨,高度为4.8米,长度约为8米。现代非洲大象的重量减少了三倍--6吨。巨犀的生活方式和饮食与现代大型哺乳动物非常相似。吃树叶,植物和灌木。由于它的大小,动物的掠食者很少。巨犀与犀牛有一定关系。5.利玆鱼这是有史以来最大的硬骨鱼。据估计,这条鱼可能比巨齿鲨鱼长大!利玆鱼长度超过20米,一些科学出版物提到35米。与现代鲸鱼相似,利兹鱼正在吃浮游动物和小鱼。6.巨齿鲨巨齿鲨被认为是有史以来最大,最无畏的海上捕食者之一。它看起来像一只现代的大白鲨(图像中的绿色),但更大。这条巨大的鲨鱼长到18米(66英尺),超过100吨。7.棘龙这是有史以来最大的陆地捕食者。它长达18米,重量超过10吨。恐龙居住在现代北非的土地上。这种捕食者的遗体于1912年在埃及被发现。不幸的是,它们在第二次世界大战期间被毁然而,报道了最近的新发现。一些科学家认为棘龙不仅在陆地上捕猎,而且还捕食鱼类。8.泰坦蟒泰坦蟒是蛇中真正的怪物。事实上,这是有史以来最大的蛇。它长约15米(50英尺),直径1米(3英尺)。比今天更温暖的气候让蛇变得如此之大。在现代,最大的蛇也生活在最温暖的热带森林中。地球北部地区的蛇较小。9.莱茵耶克尔鲎莱茵耶克尔鲎是一种巨大的海蝎。最大的发现是2.5米。这是有史以来最大的鲎。即使它被称为海蝎,动物也生活在淡水湖泊和河流中。莱茵耶克尔鲎可能是其环境中的顶级捕食者。它正在吃任何它可以捕获的东西。10.远古蜈蚣虫远古蜈蚣虫长到2.3米。这是有史以来最大的节肢动物。关于为什么关节脓肿能够长得这么大的一个信念是因为当时的大气含有的氧气比今天多。并且有多项研究显示巨人症与氧气供应之间的关系。另一个可能的原因是,当时土地上缺乏大型掠食者。11.巨脉蜻蜓你能想象一只巨大的飞虫吗?巨脉蜻蜓的翼展高达70厘米。这是有史以来最大的飞行昆虫。这些龙蝇是捕食者并以其他昆虫为食。世界真是太神奇,赶快分享出去让你的朋友也大开眼界一下吧!  宠物
确诊病例超1000例墨西哥宣布进入卫生紧急状态。中新网3月31日电综合报道,墨西哥新冠肺炎病例已超过1000例,墨西哥政府30日宣布进入卫生紧急状态,加强相关措施以遏制新冠肺炎疫情蔓延。30日,墨西哥卫生官员报告该国新冠肺炎病例累计达1094例,死亡28人。卫生官员说,墨西哥的非必要活动禁令将延长到4月30日,民众聚会人数限制减到只容许50人。墨西哥官方还表示,60岁以上和高风险人群应严格遵守居家建议。此前,墨西哥政府宣布,超过3000万名学生于3月21日至4月20日期间放假,学校将加强远程教育、校园消毒等措施。责任编辑:孔庆玲 国际
国务院关于在自由贸易试验区暂时调整实施有关行政法规规定的通知。国务院关于在自由贸易试验区暂时调整实施有关行政法规规定的通知国函〔2020〕8号省、自治区、直辖市人民政府,国务院各部委、各直属机构:为保障自由贸易试验区有关改革开放措施依法顺利实施,国务院决定,在自由贸易试验区暂时调整实施《营业性演出管理条例》、《外商投资电信企业管理规定》和《印刷业管理条例》3部行政法规的有关规定(目录附后)。国务院有关部门和上海市、广东省、天津市、福建省、辽宁省、浙江省、河南省、湖北省、重庆市、四川省、陕西省、海南省、山东省、江苏省、广西壮族自治区、河北省、云南省、黑龙江省人民政府要根据上述调整,及时对本部门、本地区制定的规章和规范性文件作相应调整,建立与试点要求相适应的管理制度。根据自由贸易试验区改革开放措施的试验情况,本通知内容适时进行调整。附件:国务院决定在自由贸易试验区暂时调整实施有关行政法规规定目录国务院2020年1月15日(此件公开发布)附件国务院决定在自由贸易试验区暂时调整实施有关行政法规规定目录 财经
笑不停:这技术还可以吧。开怀大笑保持好心情,提高免疫力,再接再厉,战胜新冠病毒。欢迎点关注,补刀神评论。中国加油!世界加油!1.这技术还可以吧神评论:孩童时期中国还是有不少体育天才的2.媳妇新买的套装,说是可以让人心情好神评论:晚上起床不会被墙角的吓到吗3.自行车进化史4.事实再次证明…男人妖娆起来就真的没女人什么事鸟~神评论:冯…冯巩?5.别人都在公转,你怎么在自转,小哥哥你还好吗神评论:花一份钱得两份刺激,划算6.那么大的舞台你见过没神评论:这舞台最怕站着个披头散发的红白衣女孩7.电梯遇到的,我该怎么办?神评论:亮出大宝贝,让她们爱不释8.招蚊子的人,要怎样才能安全度过这个夏天?9.镜子出卖了你!神评论:自欺欺人10.女生对男孩子的拍照技术永远都不满意! 搞笑
2020年长江中游城市群大学排名,其中12所大学跻身“双一流”行列。长江中游城市群是以武汉城市圈、环长株潭城市群、环鄱阳湖城市群为主体形成的国家级城市群,中国具有优越的区位条件、经济发达、交通发达、科技教育资源丰富的城市群之一。那么,在长江中游城市群中有哪些大学?最好大学是谁?大学是如何排名的?有哪些大学跻身“双一流”大学行列?根据网上公布的排行榜显示:华中科技大学为长江中下游城市群中最好大学,全国排名第七,跻身世界知名高水平大学行列。排名前十名的高校分别包括6所武汉市高校:华中科技大学(第1)、武汉大学(第2),华中农业大学(第5),华中师范大学(第6),武汉理工大学(第8),中南财经政法大学(第9);湖南长沙市高校两所:中南大学(第3),湖南大学(第4)以及一所江西南昌市高校:南昌大学(第7).此外,2020中国长江中游城市群独立学院排名中,武汉科技大学城市学院排名第一。具体排名如下:  教育

初始化

在Python 3.6环境下,我们首先从刚刚安装好的EasyNLP中引入模型运行需要的各种库,并做一些初始化。在本教程中,我们使用chinese-roberta-wwm-ext。EasyNLP中集成了丰富的预训练模型库,如果想尝试其他预训练模型,如bert、albert等,也可以在user_defined_parameters中进行相应修改,具体的模型名称可见模型列表

# 为了避免EasyNLP中的args与Jupyter系统的冲突,需要手动设置,否则无法进行初始化。
# 在命令行或py文件中运行文中代码则可忽略下述代码。
import sys
sys.argv = ['main.py']
import torch.cuda
from easynlp.appzoo import ClassificationDataset
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/chinese-roberta-wwm-ext')
args.checkpoint_dir = "./multi_label_classification_model/"
/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
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 ...
Init dist done. World size: 1, rank 0, l_rank 0
> setting random seeds to 1234 ...

注意:上述代码如果出现“Address already in use”错误,则需要运行以下代码清理端口上正在执行的程序。

netstat -tunlp|grep 6000

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

载入数据

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

  • pretrained_model_name_or_path:预训练模型名称路径,这里我们使用封装好的get_pretrain_model_path函数,来处理模型名称"hfl/chinese-roberta-wwm-ext"以得到其路径,并自动下载模型
  • max_seq_length:文本最大长度,超过将截断,不足将padding
  • input_schema:输入csv数据的格式,逗号分隔的每一项对应数据文件中每行以\t分隔的一项,每项开头为其字段标识,如content_seq、label等
  • first_sequence、label_name:用于说明input_schema中哪些字段用于作为输入句子和标签列等
  • label_enumerate_values:label类型列举
  • is_training:是否为训练过程,train_dataset为True,valid_dataset为False
train_dataset = ClassificationDataset(
            pretrained_model_name_or_path=get_pretrain_model_path("hfl/chinese-roberta-wwm-ext"),
            data_file="train.csv",
            max_seq_length=128,
            input_schema="content_seq:str:1,label:str:1",
            first_sequence="content_seq",
            label_name="label",
            label_enumerate_values="母婴,三农,科学,美文,科技,时尚,房产,美食,艺术,职场,健康,财经,国际,家居,娱乐,文化,教育,游戏,读书,动漫,体育,旅游,汽车,搞笑,健身,宠物,育儿",
            # user_defined_parameters=user_defined_parameters,
            is_training=True)
valid_dataset = ClassificationDataset(
            pretrained_model_name_or_path=get_pretrain_model_path("hfl/chinese-roberta-wwm-ext"),
            data_file="dev.csv",
            max_seq_length=128,
            input_schema="content_seq:str:1,label:str:1",
            first_sequence="content_seq",
            label_name="label",
            label_enumerate_values="母婴,三农,科学,美文,科技,时尚,房产,美食,艺术,职场,健康,财经,国际,家居,娱乐,文化,教育,游戏,读书,动漫,体育,旅游,汽车,搞笑,健身,宠物,育儿",
            is_training=False)
Trying downloading name_mapping.json
Success
`/root/.easynlp/modelzoo/public/hfl/chinese-roberta-wwm-ext.tgz` already exists
`/root/.easynlp/modelzoo/public/hfl/chinese-roberta-wwm-ext.tgz` already exists

由于之前我们选用了hfl/chinese-roberta-wwm-ext,因此这里也会对预训练模型进行自动下载并载入。

模型训练

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

  • app_name:任务名称,这里选择文本分类"text_classify"
  • pretrained_model_name_or_path:预训练模型名称路径,这里我们使用封装好的get_pretrain_model_path函数,来处理模型名称"hfl/chinese-roberta-wwm-ext"以得到其路径,并自动下载模型
  • num_labels:类别个数,本例中数据集为多分类数据集,共27类
  • user_defined_parameters:用户自定义参数,直接填入刚刚处理好的自定义参数user_defined_parameters
model = get_application_model(app_name="text_classify",
                              pretrained_model_name_or_path=get_pretrain_model_path("hfl/chinese-roberta-wwm-ext"),
                              num_labels=27,
                              user_defined_parameters=user_defined_parameters)
`/root/.easynlp/modelzoo/public/hfl/chinese-roberta-wwm-ext.tgz` already exists
 Loaded weights of the model:
 [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.seq_relationship.weight,cls.seq_relationship.bias].
 Unloaded weights of the model:
 [cls.predictions.decoder.weight,cls.seq_relationship.bias,cls.seq_relationship.weight,cls.predictions.transform.LayerNorm.bias,cls.predictions.transform.LayerNorm.weight,cls.predictions.transform.dense.bias,cls.predictions.transform.dense.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.

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

trainer = Trainer(model=model, 
                  train_dataset=train_dataset,
                  user_defined_parameters=user_defined_parameters,
                  evaluator=get_application_evaluator(app_name="text_classify", 
                                                      valid_dataset=valid_dataset,
                                                      user_defined_parameters=user_defined_parameters,
                                                      eval_batch_size=32))
trainer.train()

模型评估

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

model = get_application_model_for_evaluation(app_name="text_classify",
                                             pretrained_model_name_or_path="./multi_label_classification_model/", 
                                             user_defined_parameters=user_defined_parameters)
[2022-07-19 16:38:25,350 INFO] Loading model...
[2022-07-19 16:38:25,426 INFO] Load finished!
 Inited keys of the model:
 [backbone.encoder.layer.6.output.dense.weight,backbone.encoder.layer.4.output.dense.weight,backbone.encoder.layer.10.attention.output.LayerNorm.weight,backbone.encoder.layer.1.output.dense.weight,backbone.encoder.layer.10.output.LayerNorm.weight,backbone.encoder.layer.7.attention.self.value.bias,classifier.bias,backbone.encoder.layer.9.attention.self.query.bias,backbone.encoder.layer.3.attention.self.query.bias,backbone.encoder.layer.11.attention.self.key.bias,backbone.encoder.layer.0.attention.output.LayerNorm.weight,backbone.encoder.layer.2.intermediate.dense.bias,backbone.encoder.layer.3.attention.self.value.bias,backbone.encoder.layer.10.intermediate.dense.bias,backbone.encoder.layer.11.attention.self.query.weight,backbone.encoder.layer.2.output.dense.weight,backbone.encoder.layer.9.output.LayerNorm.weight,backbone.encoder.layer.5.output.LayerNorm.bias,backbone.encoder.layer.3.intermediate.dense.bias,backbone.embeddings.token_type_embeddings.weight,backbone.encoder.layer.3.output.dense.weight,backbone.encoder.layer.2.attention.self.key.bias,backbone.encoder.layer.3.attention.output.dense.weight,backbone.encoder.layer.0.output.dense.weight,backbone.encoder.layer.2.attention.output.LayerNorm.bias,backbone.encoder.layer.9.attention.output.LayerNorm.bias,backbone.encoder.layer.6.attention.output.dense.weight,backbone.encoder.layer.8.output.dense.weight,backbone.encoder.layer.11.attention.self.value.bias,backbone.encoder.layer.11.output.LayerNorm.weight,backbone.encoder.layer.9.attention.output.LayerNorm.weight,backbone.encoder.layer.11.output.dense.weight,backbone.encoder.layer.1.output.dense.bias,backbone.encoder.layer.6.intermediate.dense.weight,backbone.encoder.layer.7.attention.self.value.weight,backbone.encoder.layer.5.attention.self.key.bias,backbone.encoder.layer.9.output.dense.bias,backbone.encoder.layer.8.attention.self.value.bias,backbone.encoder.layer.6.attention.self.query.weight,backbone.encoder.layer.5.attention.output.LayerNorm.weight,backbone.encoder.layer.3.attention.output.LayerNorm.weight,backbone.encoder.layer.6.attention.output.LayerNorm.bias,backbone.encoder.layer.7.attention.self.key.weight,backbone.encoder.layer.2.attention.self.query.weight,backbone.encoder.layer.3.attention.self.key.bias,backbone.encoder.layer.3.attention.self.key.weight,backbone.encoder.layer.0.output.dense.bias,backbone.encoder.layer.6.attention.self.key.bias,backbone.encoder.layer.1.attention.output.LayerNorm.weight,backbone.encoder.layer.5.attention.self.value.weight,backbone.encoder.layer.9.attention.output.dense.bias,backbone.encoder.layer.7.output.LayerNorm.bias,backbone.encoder.layer.11.attention.output.dense.weight,backbone.encoder.layer.1.attention.self.key.bias,backbone.encoder.layer.2.output.dense.bias,backbone.encoder.layer.10.attention.self.key.bias,backbone.encoder.layer.10.attention.self.query.bias,backbone.encoder.layer.7.attention.output.LayerNorm.bias,backbone.encoder.layer.10.intermediate.dense.weight,backbone.encoder.layer.11.intermediate.dense.bias,backbone.encoder.layer.3.attention.output.LayerNorm.bias,backbone.encoder.layer.5.output.dense.bias,backbone.encoder.layer.11.output.LayerNorm.bias,backbone.encoder.layer.7.attention.self.query.weight,backbone.encoder.layer.3.attention.output.dense.bias,backbone.encoder.layer.6.intermediate.dense.bias,backbone.encoder.layer.10.attention.self.query.weight,backbone.encoder.layer.6.attention.output.LayerNorm.weight,backbone.encoder.layer.0.attention.self.query.bias,backbone.encoder.layer.9.intermediate.dense.weight,backbone.encoder.layer.8.attention.self.key.bias,backbone.encoder.layer.10.attention.output.dense.bias,backbone.encoder.layer.7.intermediate.dense.bias,backbone.encoder.layer.0.attention.output.dense.weight,backbone.embeddings.position_ids,backbone.encoder.layer.2.intermediate.dense.weight,backbone.encoder.layer.8.output.LayerNorm.weight,backbone.encoder.layer.0.intermediate.dense.bias,backbone.encoder.layer.3.output.dense.bias,backbone.encoder.layer.8.intermediate.dense.weight,backbone.encoder.layer.7.attention.self.query.bias,backbone.pooler.dense.bias,backbone.encoder.layer.2.attention.output.dense.weight,backbone.encoder.layer.5.output.dense.weight,backbone.encoder.layer.1.intermediate.dense.bias,backbone.encoder.layer.3.attention.self.value.weight,backbone.embeddings.LayerNorm.bias,backbone.encoder.layer.6.output.LayerNorm.bias,backbone.encoder.layer.7.output.dense.weight,backbone.encoder.layer.1.attention.self.key.weight,backbone.encoder.layer.1.attention.output.dense.weight,backbone.encoder.layer.7.attention.output.LayerNorm.weight,backbone.encoder.layer.8.output.dense.bias,backbone.encoder.layer.11.attention.output.LayerNorm.bias,backbone.encoder.layer.8.attention.self.query.weight,backbone.encoder.layer.6.attention.output.dense.bias,backbone.encoder.layer.5.attention.self.key.weight,backbone.encoder.layer.10.attention.output.dense.weight,backbone.encoder.layer.1.output.LayerNorm.weight,backbone.encoder.layer.5.attention.self.query.weight,backbone.encoder.layer.9.attention.output.dense.weight,backbone.encoder.layer.9.output.LayerNorm.bias,backbone.encoder.layer.4.attention.output.LayerNorm.bias,backbone.encoder.layer.0.attention.self.key.weight,backbone.encoder.layer.6.output.dense.bias,backbone.encoder.layer.8.attention.self.value.weight,backbone.encoder.layer.9.attention.self.value.bias,backbone.encoder.layer.2.output.LayerNorm.weight,backbone.encoder.layer.5.output.LayerNorm.weight,backbone.encoder.layer.5.intermediate.dense.weight,backbone.encoder.layer.9.output.dense.weight,backbone.encoder.layer.7.attention.output.dense.weight,backbone.encoder.layer.2.attention.self.value.weight,backbone.encoder.layer.0.intermediate.dense.weight,backbone.encoder.layer.5.attention.self.query.bias,backbone.encoder.layer.10.attention.self.value.bias,backbone.encoder.layer.8.attention.output.LayerNorm.weight,backbone.encoder.layer.2.attention.self.value.bias,backbone.encoder.layer.11.attention.output.dense.bias,backbone.encoder.layer.0.attention.self.value.bias,backbone.encoder.layer.1.attention.output.dense.bias,backbone.encoder.layer.7.attention.self.key.bias,backbone.embeddings.LayerNorm.weight,backbone.encoder.layer.1.attention.self.value.bias,backbone.encoder.layer.2.attention.self.key.weight,backbone.encoder.layer.0.output.LayerNorm.bias,backbone.encoder.layer.11.intermediate.dense.weight,backbone.encoder.layer.11.output.dense.bias,backbone.encoder.layer.11.attention.self.key.weight,backbone.encoder.layer.0.attention.output.dense.bias,backbone.encoder.layer.7.output.dense.bias,backbone.encoder.layer.9.attention.self.key.weight,backbone.encoder.layer.9.attention.self.value.weight,backbone.encoder.layer.10.output.dense.bias,backbone.encoder.layer.2.attention.self.query.bias,backbone.encoder.layer.10.attention.self.value.weight,backbone.pooler.dense.weight,backbone.encoder.layer.1.intermediate.dense.weight,backbone.encoder.layer.1.attention.self.query.weight,backbone.encoder.layer.4.attention.self.query.weight,backbone.encoder.layer.4.output.dense.bias,backbone.encoder.layer.7.intermediate.dense.weight,backbone.encoder.layer.5.intermediate.dense.bias,backbone.encoder.layer.8.attention.output.dense.weight,backbone.encoder.layer.4.attention.output.LayerNorm.weight,backbone.encoder.layer.4.attention.self.key.weight,backbone.encoder.layer.5.attention.output.dense.weight,backbone.encoder.layer.3.intermediate.dense.weight,backbone.encoder.layer.8.attention.output.dense.bias,backbone.embeddings.word_embeddings.weight,backbone.encoder.layer.10.output.dense.weight,backbone.encoder.layer.6.attention.self.value.weight,backbone.encoder.layer.7.output.LayerNorm.weight,backbone.encoder.layer.6.output.LayerNorm.weight,backbone.encoder.layer.8.attention.self.query.bias,backbone.encoder.layer.10.attention.self.key.weight,backbone.encoder.layer.3.output.LayerNorm.weight,backbone.encoder.layer.3.output.LayerNorm.bias,backbone.encoder.layer.2.attention.output.dense.bias,classifier.weight,backbone.encoder.layer.1.output.LayerNorm.bias,backbone.encoder.layer.8.attention.self.key.weight,backbone.encoder.layer.1.attention.self.query.bias,backbone.encoder.layer.8.intermediate.dense.bias,backbone.encoder.layer.4.intermediate.dense.weight,backbone.encoder.layer.9.intermediate.dense.bias,backbone.encoder.layer.7.attention.output.dense.bias,backbone.encoder.layer.3.attention.self.query.weight,backbone.encoder.layer.8.output.LayerNorm.bias,backbone.encoder.layer.4.attention.self.value.weight,backbone.encoder.layer.2.output.LayerNorm.bias,backbone.encoder.layer.8.attention.output.LayerNorm.bias,backbone.encoder.layer.6.attention.self.key.weight,backbone.encoder.layer.9.attention.self.query.weight,backbone.encoder.layer.4.attention.self.key.bias,backbone.encoder.layer.4.output.LayerNorm.weight,backbone.embeddings.position_embeddings.weight,backbone.encoder.layer.4.attention.output.dense.bias,backbone.encoder.layer.0.output.LayerNorm.weight,backbone.encoder.layer.4.attention.self.query.bias,backbone.encoder.layer.6.attention.self.query.bias,backbone.encoder.layer.11.attention.output.LayerNorm.weight,backbone.encoder.layer.5.attention.output.LayerNorm.bias,backbone.encoder.layer.10.output.LayerNorm.bias,backbone.encoder.layer.9.attention.self.key.bias,backbone.encoder.layer.4.output.LayerNorm.bias,backbone.encoder.layer.4.attention.self.value.bias,backbone.encoder.layer.5.attention.output.dense.bias,backbone.encoder.layer.1.attention.output.LayerNorm.bias,backbone.encoder.layer.10.attention.output.LayerNorm.bias,backbone.encoder.layer.0.attention.output.LayerNorm.bias,backbone.encoder.layer.0.attention.self.value.weight,backbone.encoder.layer.11.attention.self.query.bias,backbone.encoder.layer.2.attention.output.LayerNorm.weight,backbone.encoder.layer.4.intermediate.dense.bias,backbone.encoder.layer.4.attention.output.dense.weight,backbone.encoder.layer.0.attention.self.query.weight,backbone.encoder.layer.5.attention.self.value.bias,backbone.encoder.layer.1.attention.self.value.weight,backbone.encoder.layer.6.attention.self.value.bias,backbone.encoder.layer.11.attention.self.value.weight,backbone.encoder.layer.0.attention.self.key.bias].
All keys are initialized.

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

evaluator = get_application_evaluator(app_name="text_classify",
                                      valid_dataset=valid_dataset,
                                      user_defined_parameters=user_defined_parameters,
                                      eval_batch_size=32)
model.to(torch.cuda.current_device())
evaluator.evaluate(model=model)
[2022-07-19 16:39:12,096 INFO] Eval: 100/404 steps finished
[2022-07-19 16:39:50,004 INFO] Eval: 200/404 steps finished
[2022-07-19 16:40:28,834 INFO] Eval: 300/404 steps finished
[2022-07-19 16:41:06,488 INFO] Eval: 400/404 steps finished
[2022-07-19 16:41:08,137 INFO] Inference time = 4.05s, [0.3128 ms / sample] 
[2022-07-19 16:41:08,137 INFO] Eval loss: 0.31428532418277527
[2022-07-19 16:41:08,166 INFO] Accuracy: 0.9039752991123119
[2022-07-19 16:41:08,180 INFO] Macro F1: 0.9027165119793127
[2022-07-19 16:41:08,195 INFO] Micro F1: 0.9039752991123119
[('accuracy', 0.9039752991123119),
 ('macro-f1', 0.9027165119793127),
 ('micro-f1', 0.9039752991123119)]

评估结果表明,我们训练好的模型在开发集上的分类准确率(accuracy)和F1值都超过了90%,拟合效果是良好的。

模型预测

我们同样可以使用训练好的模型进行文本分类的预测。我们首先创建一个predictor,并据此实例化一个PredictorManager实例。我们指定预测好的结果输出在"dev.pred.csv",并指定输出格式为"predictions,probabilities,logits,output"。

predictor = get_application_predictor(app_name="text_classify", 
                                      model_dir="./multi_label_classification_model/",
                                      first_sequence="content_seq",
                                      sequence_length=128,
                                      user_defined_parameters=user_defined_parameters)
predictor_manager = PredictorManager(predictor=predictor,
                                     input_file="dev.csv",
                                     input_schema="content_seq:str:1,label:str:1",
                                     output_file="dev.pred.csv",
                                     output_schema="predictions,probabilities,logits,output",
                                     append_cols="label",
                                     batch_size=32)
predictor_manager.run()
exit()
[2022-07-19 16:41:16,368 INFO] Using PyTorch .bin model to predict...
[2022-07-19 16:41:18,388 INFO] Loading model...
[2022-07-19 16:41:18,415 INFO] Load finished!
 Inited keys of the model:
 [backbone.encoder.layer.6.output.dense.weight,backbone.encoder.layer.4.output.dense.weight,backbone.encoder.layer.10.attention.output.LayerNorm.weight,backbone.encoder.layer.1.output.dense.weight,backbone.encoder.layer.10.output.LayerNorm.weight,backbone.encoder.layer.7.attention.self.value.bias,classifier.bias,backbone.encoder.layer.9.attention.self.query.bias,backbone.encoder.layer.3.attention.self.query.bias,backbone.encoder.layer.11.attention.self.key.bias,backbone.encoder.layer.0.attention.output.LayerNorm.weight,backbone.encoder.layer.2.intermediate.dense.bias,backbone.encoder.layer.3.attention.self.value.bias,backbone.encoder.layer.10.intermediate.dense.bias,backbone.encoder.layer.11.attention.self.query.weight,backbone.encoder.layer.2.output.dense.weight,backbone.encoder.layer.9.output.LayerNorm.weight,backbone.encoder.layer.5.output.LayerNorm.bias,backbone.encoder.layer.3.intermediate.dense.bias,backbone.embeddings.token_type_embeddings.weight,backbone.encoder.layer.3.output.dense.weight,backbone.encoder.layer.2.attention.self.key.bias,backbone.encoder.layer.3.attention.output.dense.weight,backbone.encoder.layer.0.output.dense.weight,backbone.encoder.layer.2.attention.output.LayerNorm.bias,backbone.encoder.layer.9.attention.output.LayerNorm.bias,backbone.encoder.layer.6.attention.output.dense.weight,backbone.encoder.layer.8.output.dense.weight,backbone.encoder.layer.11.attention.self.value.bias,backbone.encoder.layer.11.output.LayerNorm.weight,backbone.encoder.layer.9.attention.output.LayerNorm.weight,backbone.encoder.layer.11.output.dense.weight,backbone.encoder.layer.1.output.dense.bias,backbone.encoder.layer.6.intermediate.dense.weight,backbone.encoder.layer.7.attention.self.value.weight,backbone.encoder.layer.5.attention.self.key.bias,backbone.encoder.layer.9.output.dense.bias,backbone.encoder.layer.8.attention.self.value.bias,backbone.encoder.layer.6.attention.self.query.weight,backbone.encoder.layer.5.attention.output.LayerNorm.weight,backbone.encoder.layer.3.attention.output.LayerNorm.weight,backbone.encoder.layer.6.attention.output.LayerNorm.bias,backbone.encoder.layer.7.attention.self.key.weight,backbone.encoder.layer.2.attention.self.query.weight,backbone.encoder.layer.3.attention.self.key.bias,backbone.encoder.layer.3.attention.self.key.weight,backbone.encoder.layer.0.output.dense.bias,backbone.encoder.layer.6.attention.self.key.bias,backbone.encoder.layer.1.attention.output.LayerNorm.weight,backbone.encoder.layer.5.attention.self.value.weight,backbone.encoder.layer.9.attention.output.dense.bias,backbone.encoder.layer.7.output.LayerNorm.bias,backbone.encoder.layer.11.attention.output.dense.weight,backbone.encoder.layer.1.attention.self.key.bias,backbone.encoder.layer.2.output.dense.bias,backbone.encoder.layer.10.attention.self.key.bias,backbone.encoder.layer.10.attention.self.query.bias,backbone.encoder.layer.7.attention.output.LayerNorm.bias,backbone.encoder.layer.10.intermediate.dense.weight,backbone.encoder.layer.11.intermediate.dense.bias,backbone.encoder.layer.3.attention.output.LayerNorm.bias,backbone.encoder.layer.5.output.dense.bias,backbone.encoder.layer.11.output.LayerNorm.bias,backbone.encoder.layer.7.attention.self.query.weight,backbone.encoder.layer.3.attention.output.dense.bias,backbone.encoder.layer.6.intermediate.dense.bias,backbone.encoder.layer.10.attention.self.query.weight,backbone.encoder.layer.6.attention.output.LayerNorm.weight,backbone.encoder.layer.0.attention.self.query.bias,backbone.encoder.layer.9.intermediate.dense.weight,backbone.encoder.layer.8.attention.self.key.bias,backbone.encoder.layer.10.attention.output.dense.bias,backbone.encoder.layer.7.intermediate.dense.bias,backbone.encoder.layer.0.attention.output.dense.weight,backbone.embeddings.position_ids,backbone.encoder.layer.2.intermediate.dense.weight,backbone.encoder.layer.8.output.LayerNorm.weight,backbone.encoder.layer.0.intermediate.dense.bias,backbone.encoder.layer.3.output.dense.bias,backbone.encoder.layer.8.intermediate.dense.weight,backbone.encoder.layer.7.attention.self.query.bias,backbone.pooler.dense.bias,backbone.encoder.layer.2.attention.output.dense.weight,backbone.encoder.layer.5.output.dense.weight,backbone.encoder.layer.1.intermediate.dense.bias,backbone.encoder.layer.3.attention.self.value.weight,backbone.embeddings.LayerNorm.bias,backbone.encoder.layer.6.output.LayerNorm.bias,backbone.encoder.layer.7.output.dense.weight,backbone.encoder.layer.1.attention.self.key.weight,backbone.encoder.layer.1.attention.output.dense.weight,backbone.encoder.layer.7.attention.output.LayerNorm.weight,backbone.encoder.layer.8.output.dense.bias,backbone.encoder.layer.11.attention.output.LayerNorm.bias,backbone.encoder.layer.8.attention.self.query.weight,backbone.encoder.layer.6.attention.output.dense.bias,backbone.encoder.layer.5.attention.self.key.weight,backbone.encoder.layer.10.attention.output.dense.weight,backbone.encoder.layer.1.output.LayerNorm.weight,backbone.encoder.layer.5.attention.self.query.weight,backbone.encoder.layer.9.attention.output.dense.weight,backbone.encoder.layer.9.output.LayerNorm.bias,backbone.encoder.layer.4.attention.output.LayerNorm.bias,backbone.encoder.layer.0.attention.self.key.weight,backbone.encoder.layer.6.output.dense.bias,backbone.encoder.layer.8.attention.self.value.weight,backbone.encoder.layer.9.attention.self.value.bias,backbone.encoder.layer.2.output.LayerNorm.weight,backbone.encoder.layer.5.output.LayerNorm.weight,backbone.encoder.layer.5.intermediate.dense.weight,backbone.encoder.layer.9.output.dense.weight,backbone.encoder.layer.7.attention.output.dense.weight,backbone.encoder.layer.2.attention.self.value.weight,backbone.encoder.layer.0.intermediate.dense.weight,backbone.encoder.layer.5.attention.self.query.bias,backbone.encoder.layer.10.attention.self.value.bias,backbone.encoder.layer.8.attention.output.LayerNorm.weight,backbone.encoder.layer.2.attention.self.value.bias,backbone.encoder.layer.11.attention.output.dense.bias,backbone.encoder.layer.0.attention.self.value.bias,backbone.encoder.layer.1.attention.output.dense.bias,backbone.encoder.layer.7.attention.self.key.bias,backbone.embeddings.LayerNorm.weight,backbone.encoder.layer.1.attention.self.value.bias,backbone.encoder.layer.2.attention.self.key.weight,backbone.encoder.layer.0.output.LayerNorm.bias,backbone.encoder.layer.11.intermediate.dense.weight,backbone.encoder.layer.11.output.dense.bias,backbone.encoder.layer.11.attention.self.key.weight,backbone.encoder.layer.0.attention.output.dense.bias,backbone.encoder.layer.7.output.dense.bias,backbone.encoder.layer.9.attention.self.key.weight,backbone.encoder.layer.9.attention.self.value.weight,backbone.encoder.layer.10.output.dense.bias,backbone.encoder.layer.2.attention.self.query.bias,backbone.encoder.layer.10.attention.self.value.weight,backbone.pooler.dense.weight,backbone.encoder.layer.1.intermediate.dense.weight,backbone.encoder.layer.1.attention.self.query.weight,backbone.encoder.layer.4.attention.self.query.weight,backbone.encoder.layer.4.output.dense.bias,backbone.encoder.layer.7.intermediate.dense.weight,backbone.encoder.layer.5.intermediate.dense.bias,backbone.encoder.layer.8.attention.output.dense.weight,backbone.encoder.layer.4.attention.output.LayerNorm.weight,backbone.encoder.layer.4.attention.self.key.weight,backbone.encoder.layer.5.attention.output.dense.weight,backbone.encoder.layer.3.intermediate.dense.weight,backbone.encoder.layer.8.attention.output.dense.bias,backbone.embeddings.word_embeddings.weight,backbone.encoder.layer.10.output.dense.weight,backbone.encoder.layer.6.attention.self.value.weight,backbone.encoder.layer.7.output.LayerNorm.weight,backbone.encoder.layer.6.output.LayerNorm.weight,backbone.encoder.layer.8.attention.self.query.bias,backbone.encoder.layer.10.attention.self.key.weight,backbone.encoder.layer.3.output.LayerNorm.weight,backbone.encoder.layer.3.output.LayerNorm.bias,backbone.encoder.layer.2.attention.output.dense.bias,classifier.weight,backbone.encoder.layer.1.output.LayerNorm.bias,backbone.encoder.layer.8.attention.self.key.weight,backbone.encoder.layer.1.attention.self.query.bias,backbone.encoder.layer.8.intermediate.dense.bias,backbone.encoder.layer.4.intermediate.dense.weight,backbone.encoder.layer.9.intermediate.dense.bias,backbone.encoder.layer.7.attention.output.dense.bias,backbone.encoder.layer.3.attention.self.query.weight,backbone.encoder.layer.8.output.LayerNorm.bias,backbone.encoder.layer.4.attention.self.value.weight,backbone.encoder.layer.2.output.LayerNorm.bias,backbone.encoder.layer.8.attention.output.LayerNorm.bias,backbone.encoder.layer.6.attention.self.key.weight,backbone.encoder.layer.9.attention.self.query.weight,backbone.encoder.layer.4.attention.self.key.bias,backbone.encoder.layer.4.output.LayerNorm.weight,backbone.embeddings.position_embeddings.weight,backbone.encoder.layer.4.attention.output.dense.bias,backbone.encoder.layer.0.output.LayerNorm.weight,backbone.encoder.layer.4.attention.self.query.bias,backbone.encoder.layer.6.attention.self.query.bias,backbone.encoder.layer.11.attention.output.LayerNorm.weight,backbone.encoder.layer.5.attention.output.LayerNorm.bias,backbone.encoder.layer.10.output.LayerNorm.bias,backbone.encoder.layer.9.attention.self.key.bias,backbone.encoder.layer.4.output.LayerNorm.bias,backbone.encoder.layer.4.attention.self.value.bias,backbone.encoder.layer.5.attention.output.dense.bias,backbone.encoder.layer.1.attention.output.LayerNorm.bias,backbone.encoder.layer.10.attention.output.LayerNorm.bias,backbone.encoder.layer.0.attention.output.LayerNorm.bias,backbone.encoder.layer.0.attention.self.value.weight,backbone.encoder.layer.11.attention.self.query.bias,backbone.encoder.layer.2.attention.output.LayerNorm.weight,backbone.encoder.layer.4.intermediate.dense.bias,backbone.encoder.layer.4.attention.output.dense.weight,backbone.encoder.layer.0.attention.self.query.weight,backbone.encoder.layer.5.attention.self.value.bias,backbone.encoder.layer.1.attention.self.value.weight,backbone.encoder.layer.6.attention.self.value.bias,backbone.encoder.layer.11.attention.self.value.weight,backbone.encoder.layer.0.attention.self.key.bias].
All keys are initialized.
[2022-07-19 16:41:18,514 INFO] Using SimplePredict to predict...
405it [02:36,  2.59it/s]

一步执行

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

main文件一步执行

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

训练代码指令如下。参数中,tables指定了训练集和验证集csv文件的路径,input_schema表示csv的数据格式,first_sequence和label_name用于说明input_schema中哪些字段用于作为输出和标签列,label_enumerate_values列举了所有的标签。 模型存储的路径位于checkpoint_dir,learning_rate、epoch_num、random_seed、save_checkpoint_steps、sequence_length和micro_batch_size为训练的超参数。在本示例中,预训练模型指定为chinese-roberta-wwm-ext。

! python main.py \
    --mode train \
    --tables=train.csv,dev.csv \
    --input_schema=content_seq:str:1,label:str:1 \
    --first_sequence=content_seq \
    --label_name=label \
    --label_enumerate_values=母婴,三农,科学,美文,科技,时尚,房产,美食,艺术,职场,健康,财经,国际,家居,娱乐,文化,教育,游戏,读书,动漫,体育,旅游,汽车,搞笑,健身,宠物,育儿 \
    --checkpoint_dir=./multi_label_classification_model \
    --learning_rate=3e-5  \
    --epoch_num=1  \
    --random_seed=42 \
    --save_checkpoint_steps=100 \
    --sequence_length=128 \
    --train_batch_size=32 \
    --app_name=text_classify \
    --user_defined_parameters='pretrain_model_name_or_path=hfl/chinese-roberta-wwm-ext'

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

! python main.py \
    --mode evaluate \
    --worker_gpu=1 \
    --tables=dev.csv \
    --input_schema=content_seq:str:1,label:str:1 \
    --first_sequence=content_seq \
    --label_name=label \
    --label_enumerate_values=母婴,三农,科学,美文,科技,时尚,房产,美食,艺术,职场,健康,财经,国际,家居,娱乐,文化,教育,游戏,读书,动漫,体育,旅游,汽车,搞笑,健身,宠物,育儿 \
    --checkpoint_dir=./multi_label_classification_model \
    --sequence_length=128 \
    --micro_batch_size=32 \
    --app_name=text_classify \
    --user_defined_parameters=''

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

! python main.py \
    --mode predict \
    --worker_gpu=1 \
    --tables=dev.csv \
    --outputs=dev.pred.csv \
    --input_schema=content_seq:str:1,label:str:1 \
    --output_schema=predictions,probabilities,logits,output \
    --append_cols=label \
    --first_sequence=content_seq \
    --checkpoint_path=./multi_label_classification_model \
    --micro_batch_size=32 \
    --sequence_length=128 \
    --app_name=text_classify \
    --user_defined_parameters=''

利用bash文件命令行执行

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

模型训练:

! bash run_train_eval_predict_user_defined_local.sh 0 train

模型评估:

! bash run_train_eval_predict_user_defined_local.sh 0 evaluate

模型预测:

! bash run_train_eval_predict_user_defined_local.sh 0 predict
相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
自然语言处理 数据格式
【DSW Gallery】基于ModelScope的中文GPT-3模型(1.3B)的微调训练
本文基于ModelScope,以GPT-3(1.3B)为例介绍如何使用ModelScope-GPT3进行续写训练与输入输出形式的训练,训练方式不需要额外指定,训练数据集仅包含 src_txt 时会进行续写训练,同时包含 src_txt 和 tgt_txt 时会进行输入输出形式的训练。
【DSW Gallery】基于ModelScope的中文GPT-3模型(1.3B)的微调训练
|
缓存 自然语言处理 算法
【DSW Gallery】基于EasyNLP Transformer模型的中文文图生成
EasyNLP提供多种模型的训练及预测功能,旨在帮助自然语言开发者方便快捷地构建模型并应用于生产。本文简要介绍文图生成的技术,以及如何在PAI-DSW中基于EasyNLP轻松实现文图生成,带你秒变艺术家。
【DSW Gallery】基于EasyNLP Transformer模型的中文文图生成
|
缓存 自然语言处理 Shell
【DSW Gallery】基于预训练模型的多场景文本生成(以新闻标题生成为例)
EasyNLP提供多种模型的训练及预测功能,旨在帮助自然语言开发者方便快捷地构建模型并应用于生产。本文以中文文本生成为例,为您介绍如何在PAI-DSW中使用EasyNLP。
【DSW Gallery】基于预训练模型的多场景文本生成(以新闻标题生成为例)
|
算法 PyTorch 算法框架/工具
【DSW Gallery】基于EasyCV的视频分类示例
EasyCV是基于Pytorch,以自监督学习和Transformer技术为核心的 all-in-one 视觉算法建模工具,并包含图像分类,度量学习,目标检测,姿态识别等视觉任务的SOTA算法。本文以视频分类为例,为您介绍如何在PAI-DSW中使用EasyCV。
【DSW Gallery】基于EasyCV的视频分类示例
|
机器学习/深度学习 人工智能 自然语言处理
【DSW Gallery】基于EasyNLP的中文信息抽取
EasyNLP提供多种模型的训练及预测功能,旨在帮助自然语言开发者方便快捷地构建模型并应用于生产。本文以中文信息抽取为例,为您介绍如何在PAI-DSW中基于EasyNLP快速使用K-Global Pointer算法进行中文信息抽取模型的训练、评估、推理。
【DSW Gallery】基于EasyNLP的中文信息抽取
|
缓存 自然语言处理 Shell
【DSW Gallery】基于CK-BERT的中文序列标注
EasyNLP提供多种模型的训练及预测功能,旨在帮助自然语言开发者方便快捷地构建模型并应用于生产。本文以序列标注(命名实体识别)为例,为您介绍如何在PAI-DSW中使用EasyNLP。
【DSW Gallery】基于CK-BERT的中文序列标注
|
人工智能 并行计算 算法
【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模型的中文文图生成
|
机器学习/深度学习 并行计算 数据可视化
【DSW Gallery】EasyCV-基于关键点的视频分类示例
EasyCV是基于Pytorch,以自监督学习和Transformer技术为核心的 all-in-one 视觉算法建模工具,并包含图像分类,度量学习,目标检测,姿态识别等视觉任务的SOTA算法。本文以基于关键点的视频分类为例,为您介绍如何在PAI-DSW中使用EasyCV。
【DSW Gallery】EasyCV-基于关键点的视频分类示例
|
文字识别 并行计算 算法
【DSW Gallery】基于EasyCV的文字识别示例
EasyCV是基于Pytorch,以自监督学习和Transformer技术为核心的 all-in-one 视觉算法建模工具,并包含图像分类,度量学习,目标检测,姿态识别等视觉任务的SOTA算法。本文以文字识别为例,为您介绍如何在PAI-DSW中使用EasyCV。
【DSW Gallery】基于EasyCV的文字识别示例

热门文章

最新文章