天池选手介绍:万创杯中医药大数据竞赛——中药说明书实体识别挑战赛
冠军团队:门头沟战队。
张祥祥,中国科学院大学研二在读,
专业:计算机应用技术,研究方向为自然语言处理、多模态。
柴铮,浙江大学控制系博士在读,
研究方向:机器学习、数据挖掘。
祝斐然,浙江大学计算机科学与技术系研二在读,
研究方向:信息抽取,知识库问答。
大牛来历
大家好,我叫张祥祥,是一名来自中国科学院大学的研二在读学生,非常荣幸受邀接受阿里云天池平台的采访,在此与大家分享我的参赛故事。
我先后共参加两次天池的比赛,这次获得冠军,给我个人带来了很大的成就感,增强了我的自信心,并且把在实验室里学到的理论知识运用到实际问题中,也的确是很有趣的一次体验。通过比赛,收获知识的同时,也可以结实许多的良师益友,此次比赛锻炼的很大一部分是团队的协作能力,希望我的经验可以给到大家一些指导性意见和想法,在日后的工作以及生活中,共同进步,相互学习。
「参赛经历」
❝
张祥祥:“万创杯”中医药天池大数据竞赛——中药说明书实体识别挑战 名次 1/1683
NLP中文预训练模型泛化能力挑战赛(进行中) 目前名次 3/1641
❞
❝
祝斐然:2020科大讯飞事件抽取挑战赛——冠军
2020 CCKS百度实体链接——季军
“万创杯”中药说明书实体识别挑战——冠军
❞
❝
柴铮:天池中医药大数据竞赛冠军选手。
并已发表期刊/会议论文5篇,其中IEEE汇刊文章4篇。
❞
「问:」
请问您是从哪了解到的天池大赛呢?最初参赛的目的是什么?
❝
答:相信很多同学都听说过天池大赛,在专业内还是非常有名的,此次参赛最主要的原因是想把平时在实验室内学到的理论知识应用到实际问题中,感受一下思维变现的过程。
❞
「问:」
参加天池比赛的收获:
❝
答:在整个比赛过程中,除了增加了实战经验和学到更多的专业知识外,我想最大的收获就是结实了两个非常优秀的队友,祝斐然与柴峥。起初我们并不认识,是在参赛过程中结识,经过交流,顿感相识恨晚,首次组队就获得这么好的成绩,也让我们感到非常兴奋和激动!
❞
「问:」
参加天池比赛有哪些意外惊喜吗?
❝
答:当然有,记得在比赛后,有幸与陈漠沙老师进行了深度交流,老师提到这个专业方向有两条出路,分为研究出路和实际应用出路,时候我结合自己的实际情况和兴趣点,认为自己更偏向第二条出路,所以日后还会参加更多的比赛和实习机会,真实的场景更有意思,能解决实际问题,受益良多。
❞
「问:」
你认为,此次比赛中最锻炼你哪方面的能力?
❝
答:毫无疑问是团队协作能力,在此次比赛前我和队友祝斐然与柴峥并不认识,也是在比赛中慢慢磨合,合作分工,过程中肯定会有一些小摩擦和矛盾,但经过互相了解,磨合以及沟通,合作效率非常高,相互协调力求最完美的效果,最后一周做答辩ppt时,全力以赴,最终成果我们都非常满意。
❞
「问:」
参赛过程中有什么印象深刻的事情或者趣事吗?
❝
答:因为我们三个队友是异地,我在北方他们两个在南方,之前一直都是在线上联系交流,还记得第一次见面时一起吃饭,当时的感觉和心情真的印象非常深刻,从之前的线上交流到“网友奔现”,过程中也对对方充满了好奇与想象,再到之后的一起合作参赛,我想是我学习生涯中最有意义的一段经历。
❞
「问:」
参加天池大赛对你最大的帮助是什么?
❝
答:我认为对日后的工作帮助很大,对个人信心有很大提升,增强团队合作能力和个人耐性,无论是在理论知识上还是实际操作能力,都得到了很大的提升。日后走出校园,可以更快的适应企业的需求和工作模式。还有很重要的一点是可以结识到很多志同道合的好朋友,和与业界大牛one to one交流的机会。
❞
大赛经验分享
「大赛名称:」
天池中药说明书实体识别挑战
「大赛地址:」
https://tianchi.aliyun.com/competition/entrance/531824/introduction
1 赛题分析
1.1 贡献者
zxx飞翔的鱼: https://github.com/z814081807
我是蛋糕王:https://github.com/WuHuRestaurant
数青峰:https://github.com/zchaizju
后续官方开放数据集后DeepNER项目会进行优化升级,包含完整的数据处理、训练、验证、测试、部署流程,提供详细的代码注释、模型介绍、实验结果,提供更普适的基于预训练的中文命名实体识别方案,开箱即用,欢迎Star!(代码框架基于pytorch and transformers, 框架复用性、解耦性、易读性较高,很容易修改迁移至其他NLP任务中)
1.2 代码运行环境
1.3 项目目录说明
DeepNER
│
├── data # 数据文件夹
│ ├── mid_data # 存放一些中间数据
│ │ ├── crf_ent2id.json # crf 模型的 schema
│ │ └── span_ent2id.json # span 模型的 schema
│ │ └── mrc_ent2id.json # mrc 模型的 schema
│
│ ├── raw_data # 转换后的数据
│ │ ├── dev.json # 转换后的验证集
│ │ ├── test.json # 转换后的初赛测试集
│ │ ├── pseudo.json # 转换后的半监督数据
│ │ ├── stack.json # 转换后的全体数据
│ └── └── train.json # 转换后的训练集
│
├── out # 存放训练好的模型
│ ├── ...
│ └── ...
│
├── src
│ ├── preprocess
│ │ ├── convert_raw_data.py # 处理转换原始数据
│ │ └── processor.py # 转换数据为 Bert 模型的输入
│ ├── utils
│ │ ├── attack_train_utils.py # 对抗训练 FGM / PGD
│ │ ├── dataset_utils.py # torch Dataset
│ │ ├── evaluator.py # 模型评估
│ │ ├── functions_utils.py # 跨文件调用的一些 functions
│ │ ├── model_utils.py # Span & CRF & MRC model (pytorch)
│ │ ├── options.py # 命令行参数
│ | └── trainer.py # 训练器
|
├── competition_predict.py # 复赛数据推理并提交
├── README.md # ...
├── convert_test_data.py # 将复赛 test 转化成 json 格式
├── run.sh # 运行脚本
└── main.py # main 函数 (主要用于训练/评估)
2 使用说明
2.1 预训练使用说明
• 腾讯预训练模型 Uer-large(24层):https://github.com/dbiir/UER-py/wiki/Modelzoo
• 哈工大预训练模型 :https://github.com/ymcui/Chinese-BERT-wwm
相关模型已经给大家下载好,大家可以在公众号:天池大数据科研平台,回复:
训练营模型
获取。
(注意:需人工将 vocab.txt 中两个 [unused] 转换成 [INV] 和 [BLANK])
「tips:」
推荐使用 uer、roberta-wwm、robert-wwm-large
2.2 数据转换
注:已提供转换好的数据 无需运行
python src/preprocessing/convert_raw_data.py
2.3 训练阶段
bash run.sh
注:
脚本中指定的 BERT_DIR 指BERT所在文件夹,需要把 BERT 下载到指定文件夹中。
「BERT-CRF模型训练」
task_type='crf'
mode='train' or 'stack'
# train:单模训练与验证 ;stack:5折训练与验证
swa_start: swa 模型权重平均开始的 epoch
attack_train: 'pgd' / 'fgm' / ''
# 对抗训练 fgm 训练速度慢一倍, pgd 慢两倍,pgd 本次数据集效果明显。
「BERT-SPAN模型训练」
task_type='span'
mode:同上
attack_train: 同上
loss_type: 'ce':交叉熵; 'ls_ce':label_smooth; 'focal': focal loss
「BERT-MRC模型训练」
task_type='mrc'
mode:同上
attack_train: 同上
loss_type: 同上
2.4 预测复赛 test 文件 (上述模型训练完成后)
注:暂无数据运行,等待官方数据开源后可运行
# convert_test_data
python convert_test_data.py
# predict
python competition_predict.py
3 赛题背景
3.1 任务描述
人工智能加速了中医药领域的传承创新发展,其中中医药文本的信息抽取部分是构建中医药知识图谱的核心部分,为上层应用如临床辅助诊疗系统的构建(CDSS)等奠定了基础。本次NER挑战需要抽取中药药品说明书中的关键信息,包括药品、药物成分、疾病、症状、证候等13类实体,构建中医药药品知识库。
3.2 数据探索分析
本次竞赛训练数据有三个特点:
3.3 核心思路
「数据预处理」
首先对说明书文本进行预清洗与长文本切分。预清洗部分对无效字符进行过滤。针对长文本问题,采用两级文本切分的策略。切分后的句子可能过短,将短文本归并,使得归并后的文本长度不超过设置的最大长度。此外,利用全部标注数据构造实体知识库,作为领域先验词典。
「Baseline: BERT-CRF」
❝
1)
预训练模型:选用 UER-large-24 layer[1],UER在RoBerta-wwm 框架下采用大规模优质中文语料继续训练,CLUE 任务中单模第一
2)
差分学习率:BERT层学习率2e-5;其他层学习率2e-3
3)
参数初始化:模型其他模块与BERT采用相同的初始化方式
4)
滑动参数平均:加权平均最后几个epoch模型的权重,得到更加平滑和表现更优的模型
❞
优化1:对抗训练
❝