1 第五届中国法研杯 LAIC2022 司法人工智能挑战赛—小样本多任务学习赛道
1.1 任务介绍
本赛道由中国司法大数据研究院承办。在司法的各个业务中,存在着丰富的NLP场景,但往往会出现标注样本不足的现象,因此研究小样本场景的模型训练问题就变得非常必要。本赛题发布了关于司法的小样本多任务数据,旨在探索小样本学习最佳模型和在司法上的实践。
1.2 数据介绍
(1) 本赛题数据来源于法律领域,包括文本分类、命名实体识别任务,总任务数量为10个(分类:案件要素8个、刑档1个,命名实体识别:1个);
(2) 训练集:案件要素304条,刑档90条,命名实体识别150条,10个任务共544条数据(包括验证集,不再单独提供验证集,由选手自己切分);
标注样本示例
(a) 文本分类-案件要素样本示例:
{
"id": 491,
"data": "经审理查明:2017年8月21日13时许,被告人杨信驾驶强制报废的赣0131133变型拖拉机,由北向南行驶至南昌县新莲塔公路曹骆十字路口时,闯红灯继续行驶,将由西向东被害人邓某1驾驶的三轮电动车撞倒,致被害人邓某1受伤。经南昌县公安局交通管理大队道路交通事故认定书认定:被告人杨信负本次事故的主要责任。2017年10月10日,经南昌县公安司法鉴定中心鉴定:被害人邓某1损伤构成重伤二级。2018年2月12日,被害人邓某1死亡。经鉴定被害人邓某1符合因交通事故致颅脑损伤后并衰竭死亡。\n案发后,被告人杨信打电话报警,并随救护车辆送被害人邓某1到医院救治,支付了部分医疗费。2017年10月24日,经传唤,被告人杨信主动向公安机关投案。\n上述事实,被告人在开庭审理过程中亦无异议,且有法医学鉴定书,事故责任认定书,现场勘验、检查笔录,现场照片,事故车辆技术鉴定书,交通事故车辆安全性能鉴定报告书,医疗费票据,预付款收据,归案经过等相关证据证实,足以认定。\n",
"label": ["负"],
"task": "CLS"
}
(b) 文本分类-刑档样本示例:
{
"id": 491,
"data": "交通肇事罪[SEP]河北省[SEP]本院认为,被告人许祥东违反交通运输管理法规,发生重大交通事故,且肇事后逃逸致人死亡,其行为已构成交通肇事罪,公诉机关指控事实和罪名成立,予以支持。被告人许祥东到案后,如实供述犯罪事实,当庭自愿认罪认罚,可依法从轻处罚。公诉机关提出的对被告人许祥东的量刑意见以及被告人许祥东的辩护人提出的相关辩护意见予以采纳。为维护公共安全,保护公民人身权利,打击刑事犯罪。[SEP]经审理查明,2019年12月6日6时18分许,在308国道宁晋县处,被告人许祥东无机动车驾驶证驾驶冀E小型轿车由东南向西北行驶时,与由南向西北转弯的田某1驾驶自行车相撞,致田某1及其驾驶的自行车倒地,许祥东驾驶冀E小型轿车逃逸。后由东南向西北行驶的张某驾驶冀A冀A重型仓栅式半挂车又与倒在公路上的田某1及其自行车相撞,造成田某1死亡,三车不同程度损坏的交通事故。许祥东负事故的主要责任。经鉴定,田某1符合车祸致颅脑损伤合并肺脏、肝脏破裂死亡。",
"label": ["三档"],
"task": "CLS"
}
© 命名实体识别-示例:
{
"id": 139,
"relations": []
"text": "经审理查明:2016年10月12日10时50分许,被告人昌某无驾驶资格驾驶无号牌机动三轮车沿某政府1门前路段由东向西行驶,行驶过程中该机动三轮车车厢中人员王某2从车上掉落受伤。2016年10月13日,被告人昌某被某政府2处以行政拘留五日、罚款500元的行政处罚;2016年10月16日被害人王某2经医院抢救无效死亡。经某政府2交通警察支队二大队认定,被告人昌某承担本次事故的全部责任。2016年11月30日,被告人昌某接公安机关电话通知后主动到案。",
"entities": [
{"id": 11017, "start_offset": 30, "end_offset": 35, "label": "犯罪嫌疑人情况"},
{"id": 11018, "start_offset": 77, "end_offset": 80, "label": "被害人"},
{"id": 11018, "start_offset": 145, "end_offset": 148, "label": "被害人"},
{"id": 11020, "start_offset": 40, "end_offset": 45, "label": "犯罪嫌疑人交通工具"},
{"id": 11021, "start_offset": 37, "end_offset": 40, "label": "犯罪嫌疑人交通工具情况"},
{"id": 11023, "start_offset": 187, "end_offset": 191, "label": "犯罪嫌疑人责任认定"},
{"id": 11019, "start_offset": 72, "end_offset": 77, "label": "被害人类型"},
{"id": 11025, "start_offset": 46, "end_offset": 54, "label": "事故发生地"}],
"task": "NER"
}
1.3 评价方式
相关要求及提交说明
初赛阶段采用上传预测答案的方式进行测评。复赛需上传模型,请选手严格按照以下说明规范提交模型:
1.本赛题不允许通过增加额外有监督样本数量提升模型的预测效果。
2.只允许产出一个模型,复赛前需要打印模型结构进行验证。主模型不允许多个模型串行或者并行,比如bert+bert;主模型以外允许适当的结构串行,比如bert+crf;模型结构随压缩包提供。
3.模型存储空间 ≤2.0G。
4.基线模型请前往LAIC2022GitHub网站; 请务必按照README中的相关说明组织文件,并制成ZIP压缩包上传。
# 更新paddlenlp到最新版本
!pip install -U paddlenlp
2 运行官方基线
LAIC2022的官方基线本身是基于UIE模型,首先跑通整个基线项目,然后针对赛事任务和UIE模型做一些优化,取得优于Baseline成绩
1.根据官方基线README中的相关说明跑通官方baseline
2.优化官方基线
为了防止项目无法一键Run,出现路径对应的问题,保留了修改后的官方基线,重命名为modify_laic_2022
若需要一键Run项目,可以直接从2.4开始!需要学习如何一步一步跑通官方基线,可以从2.1开始克隆基线,按步骤一步一步修改laic_2022文件内容!
2.1 克隆基线项目
!git clone https://github.com/LAICcompet/laic_2022
正克隆到 'laic_2022'...
remote: Enumerating objects: 250, done.[K
remote: Counting objects: 100% (169/169), done.[K
remote: Compressing objects: 100% (140/140), done.[K
remote: Total 250 (delta 33), reused 120 (delta 21), pack-reused 81[K
接收对象中: 100% (250/250), 155.69 KiB | 0 bytes/s, 完成.
处理 delta 中: 100% (48/48), 完成.
检查连接... 完成。
2.2 解压赛题数据
赛题数据已挂载在项目中,将数据解压到laic_2022/drw/baseline同级目录中
!unzip -d laic_2022/drw/baseline data/data173198/1666064587435.zip
2.3 运行doccano.py生成输入数据
-
使用doccano.py处理赛事数据,生成符合UIE输入的数据格式
-
注意: 直接运行doccano.py会报错,需要打开doccano.py修改doccano_file和save_filed的路径,替换为当前数据所在的路径
项目中使用laic_2022/drw/baseline/训练集
为替换路径,将原本的./input/train
和./input
替换为laic_2022/drw/baseline/训练集
,如下:
parser.add_argument("--doccano_file", default="laic_2022/drw/baseline/训练集/ner")
parser.add_argument("--save_dir", default="laic_2022/drw/baseline/训练集")
- 下面运行的代码为后续已经修改好路径的doccano.py文件,防止一键Run过程中断,文件夹名为modify_laic_2022
!python modify_laic_2022/drw/baseline/doccano.py
2.4 运行finetune.py训练UIE模型
1.配置超参数,修改train_path、dev_path、save_dir路径
2.修改batch_size从6
改为 18
,爆显存就调小一点(测试了下,32GB显存最大的batch_size的上限是46)
3.学习率调大一些,从1e-5
改为5e-5
,可以多多尝试不同的炼丹组合
4.finetune.py中每50步验证一次并保存模型,当在chekpoint文件夹下留存模型文件时会导致AIstudio保存和加载的等待时间变长,
可以注释finetune.py第127行到133行的代码,这样只会保留最佳模型。
!python modify_laic_2022/drw/baseline/finetune.py \
--train_path ./modify_laic_2022/drw/baseline/训练集/train.txt \
--dev_path ./modify_laic_2022/drw/baseline/训练集/dev.txt \
--save_dir ./modify_laic_2022/drw/baseline/checkpoint \
--learning_rate 5e-5 \
--model uie-base \
--batch_size 18 \
--max_seq_len 512 \
--logging_steps 10 \
--valid_steps 50 \
--num_epochs 20 \
--device gpu
2.5 运行evaluate.py查看模型在验证集上的表现
!python modify_laic_2022/drw/baseline/evaluate.py \
--model_path ./modify_laic_2022/drw/baseline/checkpoint/model_best \
--test_path ./modify_laic_2022/drw/baseline/训练集/dev.txt \
--batch_size 64 \
--max_seq_len 512
2.6 运行main.py预测测试集数据
1.修改mian.py第31行的task_path
参数替换为./laic_2022/drw/baseline/checkpoint/model_best
路径,加载训练好的模型
2.先解决运行mian.py报GPU错误的问题:删除第31行代码中的device_id=args.device
参数
3.再解决ValueError: all input arrays must have the same shape
维度问题,此问题的原因是在刑案数据中存在[SEP]
,导致封装的tokenizer编码在输出offset_mapping的位置上发生变化,产生错误。
最简单的解决方法就是,对文本做replace('[SEP]',' ')
替换操作:定位第47行,result = ie(line[tq_name].strip())
变为result = ie(line[tq_name].strip().replace('[SEP]',''))
!python modify_laic_2022/drw/baseline/main.py \
--device 1 \
--input_file "./modify_laic_2022/drw/baseline/测试集_选手"\
--output_file "./modify_laic_2022/drw/baseline/test_baseline.txt"
print("Run Finsh!")
[32m[2022-10-27 17:02:58,916] [ INFO][0m - We are using <class 'paddlenlp.transformers.ernie.tokenizer.ErnieTokenizer'> to load './modify_laic_2022/drw/baseline/checkpoint/model_best'.[0m
[0mRun Finsh!
!head ./modify_laic_2022/drw/baseline/test_baseline.txt
{"id": 100, "data": "交通肇事罪[SEP]江西省[SEP]本院认为,被告人袁青平违反道路交通运输管理法规,致使发生交通事故,造成死亡一人的严重后果,负事故的全部责任,其行为已构成交通肇事罪。事发后被告人袁青平主动投案,并能如实供述自己的犯罪事实,属自首,依法可从轻处罚。被告人赔偿了被害人近亲属的经济损失,并取得了被害人近亲属的谅解,可酌情从轻处罚。因此,公诉机关指控被告人袁青平犯交通肇事罪的事实清楚,证据确实、充分,指控罪名成立,量刑建议适当,应予采纳。综合被告人袁青平的犯罪情节、悔罪表现及审前社会调查情况,对其适用缓刑其所在社区无重大不良影响,可依法适用缓刑。为确保公民的人身权利不受侵犯,[SEP]经审理查明,2019年8月12日19时55分许,被告人袁青平驾驶赣A号小型普通客车,行驶至南昌县金桂尚居小区路口时,将行人喻保莲撞倒,造成喻保莲伤后送医院抢救无效于当日死亡的交通事故。事故发生后,被告人袁青平在案发现场被民警传唤到案。经南昌县公安局交管大队认定,袁青平承担本次事故的全部责任。2019年10月12日,被告人袁青平与被害人近亲属达成调解协议,赔偿了被害人近亲属的损失,取得了被害人近亲属的谅解。公诉机关认为,被告人袁青平自愿认罪认罚,建议判处被告人袁青平有期徒刑七个月。", "task": "CLS", "label": [["一档"]]}
{"id": 101, "data": "交通肇事罪[SEP]江苏省[SEP]本院认为,被告人赵福林违反交通运输管理法规,发生重大交通事故,致一人死亡,且负事故全部责任,其行为已构成交通肇事罪,依法应当在“三年以下有期徒刑或者拘役”的量刑幅度内处罚。被告人赵福林系又聋又哑的人,依法可以从轻处罚。被告人赵福林犯罪以后自动投案,并如实供述自己的罪行,系自首,且已经与被害人近亲属达成赔偿协议,取得了被害人近亲属的谅解,并自愿接受处罚,依法可从轻处罚。结合本案具体情节,可给予被告人赵福林一定的缓刑考验期限。公诉机关对被告人赵福林的指控,事实清楚,证据确实、充分,其指控罪名成立,量刑建议适当,本院予以支持。被告人赵福林的辩护人提出被告人赵福林具有自首情节,系聋哑人过失犯罪,其家人积极赔偿被害人近亲属经济损失并取得谅解,请求从宽处罚并适用缓刑的辩护意见,有事实和法律依据,本院予以支持。据此,[SEP]经审理查明,2019年9月19日10时35分许,被告人赵福林驾驶电动三轮车,沿仪征市新城镇新农西街由西向东行驶至雅迪电动车专卖店东侧路段,因疏于观察,与前方由南向北横过道路的行人被害人韩某发生碰撞,事故致被害人韩某受伤,后经抢救无效于次日死亡。经鉴定,被害人韩某符合交通事故致颅脑损伤后而死亡。经仪征市公安局交通管理部门认定,被告人赵福林负事故全部责任。案发后,被告人赵福林主动向公安机关投案,并如实供述了自己罪行,且已与被害人近亲属达成赔偿协议并取得了被害人近亲属的谅解。被告人赵福林系多重残疾人,残疾类别:言语能力,残疾等级:壹级。", "task": "CLS", "label": [["一档"]]}
{"id": 102, "data": "交通肇事罪[SEP]湖北省[SEP]本院认为,未按驾驶证载明的准驾车型驾驶机动车且未让右方来车先行,因而发生重大交通事故,致一人死亡,负事故的主要责任,其行为已构成交通肇事罪。公诉机关指控被告人张文强犯交通肇事罪成立,本院予以确认。事故发生后,被告人张文强让妻妹陈某1拨打了急救和报警电话,并在现场等候处理,到案后又如实供述自己的罪行,系自首,可以从轻处罚。被告人真诚悔罪并积极赔偿了被害方的经济损失,取得了被害人近亲属的谅解,可以酌情从轻处罚。鉴于被告人有悔罪表现、宣告缓刑对所居住社区没有重大不良影响,可以宣告缓刑。[SEP]经审理查明的事实与公诉机关的指控一致。", "task": "CLS", "label": [["一档"]]}
{"id": 103, "data": "交通肇事罪[SEP]河南省[SEP]本院认为,被告人高小飞违反交通运输管理法规驾驶机动车发生交通事故,致一人重伤,负事故全部责任,且在事故发生后逃离现场,其行为已构成交通肇事罪。舞钢市人民检察院指控高小飞犯交通肇事罪罪名成立,本院予以支持。关于辩护人提出的“高小飞系自首,且为初犯、偶犯,已与被害人达成赔偿协议,取得被害人谅解”的辩护意见,经查证属实,本院予以采纳,作为对其从轻处罚的量刑情节予以考虑。根据本案的事实、情节和社会危害,[SEP]经审理查明,2019年3月17日5时25分许,被告人高小飞驾驶豫A重型厢式货车沿平驻公路由北向南行驶至舞钢市新汽车站路段时,撞住正在该路段工作的环卫工人即被害人彭某,造成车辆损坏、彭某受伤的道路交通事故。事发后高小飞驾驶豫A重型厢式货车逃逸。经舞钢市公安交通警察大队出具的道路交通事故认定书认定,高小飞承担事故全部责任,彭某不承担事故责任。2019年3月18日,高小飞经货车车主通知后到舞钢市公安交通警察大队投案。经平顶山金正法医临床司法鉴定所鉴定:彭某损伤程度查时属重伤二级。2019年11月13日,高小飞与彭某达成赔偿协议,彭某对高小飞表示谅解。", "task": "CLS", "label": [["一档"]]}
{"id": 104, "data": "交通肇事罪[SEP]广东省[SEP]本院认为,被告人蓝敏构成交通肇事罪。公诉机关的指控成立。对辩护人提出的辩护意见可予采纳。被告人蓝敏犯罪以后自动投案,如实供述自己的罪行,是自首,依法予以从轻处罚。鉴于被告人蓝敏没有犯罪前科,归案后认罪认罚,确有悔罪表现,本人具备监管条件,对其适用缓刑对所居住的社区没有重大不良影响,依法可对其适用缓刑。公诉机关的量刑建议适当。[SEP]经审理查明的事实、证据与公诉机关的指控一致。", "task": "CLS", "label": [["一档"]]}
{"id": 105, "data": "交通肇事罪[SEP]湖北省[SEP]本院认为,被告人武小斌违反交通运输管理法规,发生交通事故,致一人死亡,二人重伤、三人轻伤,且负事故的主要责任,其行为构成交通肇事罪,公诉机关的指控成立,本院予以支持。被告人武小斌在案发后停车报警,抢救伤者,到案后如实供述自己的罪行,是自首,依法可以从轻处罚。其与被害黄某2继刘某2足英黄某1兰的亲属达成和解协议,赔偿了损失并取得了谅解,可以酌情从轻处罚。其愿意接受处罚,对其可以从轻处罚。公诉机关的量刑建议适当。[SEP]经依法审理查明,2019年5月28日7时许,被告人武小斌驾豫H7豫H挂)重型半挂牵引车,沿S108省道黄土线自北向南行驶红安县村金家店路段时,因疲劳驾驶且未与前方车辆保持安全距离,与前方同向金某勤驾驶鄂J3正三轮摩托车尾部相撞,致使双方车辆受损,正三轮摩托车上司乘人黄某1兰(1953年3月17日出生)刘某1兰刘某2足英黄某2继黄某3洲孙某荣金某勤、黄金国等人受伤黄某1兰经抢救无效于当日死亡。经武汉福田爱民司法鉴定中心鉴定黄某1兰因交通事故致重型颅脑损伤而死亡黄某2继肝脏破裂,手术修补后损伤程度为重伤二级刘某2足英脾破裂,行脾脏切除术,损伤程度为重伤二级。经红安县公安局交通警察大队认定,被告人武小斌承担此次交通事故的主要责任金某勤承担此次交通事故的次要责任黄某1兰黄某2继刘某2足英孙某荣、黄金国黄某3洲刘某1兰无责任。事故发生后,被告人武小斌立即停车报警,抢救伤者,到案后与被害黄某1兰近亲属黄某2继刘某2足英达成和解协议并取得了谅解。上述事实,有经庭审质证、确认的牌号豫H7豫H挂)重型半挂牵引车物证;行驶证、驾驶证、到案经过、无违法犯罪证明、机动车、驾驶人信息查询结果单、保险单、户籍信息、办案说明、收条、谅解书及谅解协议等书证;道路交通事故认定书;证杨某林的证言;被害金某勤黄某2继黄某3洲、黄金国的陈述;被告人武小斌的供述与辩解;武汉福田爱民司法鉴定中心的鉴定意见、武汉中诚法医司法鉴定所司法鉴定意见书;道路交通事故现场勘查笔录及交通事故现场图;", "task": "CLS", "label": [["一档"]]}
{"id": 106, "data": "交通肇事罪[SEP]安徽省[SEP]本院认为:被告人屠国伟违反道路交通安全法,驾驶机动车在道路上行驶,发生重大交通事故,致一人死亡,并负事故的全部责任,其行为构成交通肇事罪,应依法惩处。公诉机关指控罪名成立,本院予以确认。被告人屠国伟系自首,依法予以从轻处罚,其补偿了被害方部分经济损失,取得谅解,酌情予以从轻处罚。经被告人屠国伟住所地社区矫正部门评估,对其适用缓刑对所居住的社区没有重大不良影响。[SEP]经审理查明:2019年7月8日21时53分,被告人屠国伟(持有C1证)驾驶皖A号小型轿车,沿霍邱县城西湖乡湖心路由东向西行驶至城西湖乡何家圩桥东150米路段时,与前方同方向行驶的吕某1驾驶的电动三轮车追尾相撞,致吕某1当场死亡。经霍邱县公安司法鉴定中心鉴定,吕某1符合交通事故致重度闭合性颅脑损伤死亡。经霍邱县公安局交通管理大队认定,屠国伟负此起事故的全部责任。另查明:被告人屠国伟肇事后立即报警并在现场等候处理。案发后屠国伟与吕某1近亲属达成协议,屠国伟在保险公司赔偿份额外,补偿被害方经济损失人民币15万元,取得谅解。", "task": "CLS", "label": [["一档"]]}
{"id": 107, "data": "交通肇事罪[SEP]天津市[SEP]本院认为,被告人杨建国作为机动车辆的实际管理者,指使司机违章驾驶造成重大交通事故,造成一人死亡,其行为已构成交通肇事罪。滦州市人民检察院指控被告人杨建国犯交通肇事罪,事实清楚,证据确实、充分,罪名成立。被告人杨建国经民警电话通知后主动投案,如实供述自己的罪行,是自首,依法可以从轻处罚,被告人杨建国家属代为赔偿被害人家属损失,取得了被害人家属的谅解,可酌情予从轻处罚。为维护交通运输安全,惩罚犯罪,[SEP]经审理查明,被告人杨建国作为/号重型半挂牵引车的实际管理者,其明知/号重型半挂牵引车为拼装的机动车、悬挂着号的伪造号牌、未投保机动车保险、张某不具有驾驶半挂牵引车的资格,仍指使张某违章、超载驾驶该车从事道路运输。张某受杨建国指使,违章驾驶BP4826/号(悬挂号)重型半挂牵引车于2018年7月24日5时20分在滦州市境内97公里+300米处,发生交通事故,造成四车受损,王伟当场死亡,张某承担此事故的全部责任。另查明,附带民事赔偿部分双方已经达成和解协议,被告人杨建国家属代为赔偿被害人亲属经济损失人民币88万元,被告人杨建国取得被害人亲属谅解。", "task": "CLS", "label": [["二档"]]}
{"id": 108, "data": "交通肇事罪[SEP]江西省[SEP]本院认为,被告人晏露征违反道路交通安全法规驾驶机动车,发生重大交通事故,致一人死亡,负事故全部责任,其行为已构成交通肇事罪,且有肇事逃逸情节。公诉机关指控被告人晏露征的主要犯罪事实清楚,证据确实、充分,指控的罪名成立,量刑建议适当,本院予以确认。被告人晏露征有自首情节,自愿认罪认罚,依法可从轻或减轻处罚;被告人晏露征家属赔偿了被害人家属经济损失并取得了被害人家属的谅解,当事双方达成调解协议,亦可酌情从轻处罚。根据被告人晏露征犯罪的事实、犯罪的性质、情节和对于社会的危害程度并结合其所在社区矫正机构同意对其进行监管的反馈意见,本院决定对其宣告缓刑。[SEP]经审理查明:2019年6月26日4时19分许,被告人晏露征驾驶赣C福田牌轻型普通货车在本市沿江北大道由南往北行驶至南昌市东湖区人民检察院门口段时,追尾前方同向行驶的被害人罗某驾驶的无牌电动三轮车,该三轮车又碰撞中心护栏,事故发生后,晏露征驾车逃离现场;被害人罗某经医院抢救无效,于当日死亡。经交管部门认定,被告人晏露征负本次事故全部责任;被害人罗某不负本次事故责任。2019年6月26日5时50分许,民警电话联系被告人晏露征,得知其驾车行驶至滕王阁隧道,遂通知晏露征靠边停车等候处理,归案后,晏露征如实供述了自己的罪行。同年7月7日,被告人晏露征家属与被害人家属就民事赔偿部分签订调解协议书,支付赔偿款,取得被害人家属谅解。另查明,被告人晏露征家属在案发后代其赔偿了因本案交通事故造成的道路中心护栏损失。", "task": "CLS", "label": [["二档"]]}
{"id": 109, "data": "交通肇事罪[SEP]山西省[SEP]本院认为,被告人范某酒后无证驾驶无牌普通二轮摩托车,发生交通事故,致一人死亡,且负事故的全部责任,其行为侵犯了交通运输安全和他人的人身健康权,构成交通肇事罪。公诉机关指控被告人范某犯罪事实清楚,证据确实、充分,罪名成立,本院予以支持。被告人范某在事故发生后原地等待,积极施救伤者,可视为自首,可从轻处罚。被告人范某在案发后能与被害人家属达成调解协议,并取得被害人家属的谅解,可酌情从轻处罚。综合被告人范某犯罪情节、认罪、悔罪表现,可对其适用缓刑。其辩护人的相关从轻、减轻处罚的辩护意见,本院予以采纳。其辩护人的被害人存在过错的辩解意见,与本院审理查明的事实不符,本院不予采纳。[SEP]经审理查明:2019年7月3日2时许,被告人范某酒后驾驶无号牌名雅牌二轮普通摩托车(车上乘坐秦某)沿晋城市城区境内的陵沁线(省道332线)由西向东行驶至七岭店立交桥路段(57km+300m处),驶出路面,与指示牌立柱碰撞,造成摩托车损坏、被告人范某受伤、被害人秦某受伤经抢救无效于2019年7月4日10时死亡的重大交通事故。经晋城市公安局交通警察支队三大队认定:范某负事故的全部责任;秦某无责任。经晋城市公安司法鉴定中心鉴定:死者秦某系颅脑损伤合并胸腹腔脏器损伤死亡;范某血液中检出乙醇成分,乙醇含量为131mg/100ml。另查明,被告人范某在案发后与被害人家属在交警三大队人民调解委员会的主持下达成调解协议,并取得被害人家属的谅解。", "task": "CLS", "label": [["一档"]]}
提交官方基线查看分数,比官方基线高一些
3 优化官方基线
3.1 AEDA数据增强
AEDA是一种简单便捷的文本数据增强技术,使用AEDA增强文本分类任务的训练数据,优化模型性能
参考资料:EMNLP2021之AEDA:一种更简单的文本分类数据增强技术
# --- AEDA 代 码 实 现---
import json
import random
PUNCTUATIONS = ['.', ',', '!', '?', ';', ':']
PUNC_RATIO = 0.3
def insert_punctuation_marks(sentence,n_sample=1,punc_ratio=PUNC_RATIO):
new_lines =[]
for _ in range(n_sample):
words = sentence
new_line = []
q = random.randint(1, int(punc_ratio * len(words) + 1))
qs = random.sample(range(0, len(words)), q)
for j, word in enumerate(words):
if j in qs:
new_line.append(PUNCTUATIONS[random.randint(0, len(PUNCTUATIONS)-1)])
new_line.append(word)
else:
new_line.append(word)
new_line = ''.join(new_line)
new_lines.append(new_line)
return new_lines
# --- AEDA 代 码 实 现---
3.2 AEDA效果测试
# 测试AEDA效果
# n_sample代表数据增强后产生的文本条数
n_sample = 2
# 读取文件
with open("laic_2022/drw/baseline/训练集/刑档", "r", encoding="utf-8") as f:
raw_examples = f.readlines()
task_type = 'cls'
start_idx = 100000
# 复制原始数据
copy_raw_examples = raw_examples.copy()
# 开始AEDA
for ner_example in copy_raw_examples[:2]:
ner_example = json.loads(ner_example)
if task_type == 'ext':
...
# 只针对文本分类数据
if task_type == 'cls':
new_data = insert_punctuation_marks(ner_example['data'],n_sample=n_sample)
# 制作新数据
for nd in new_data:
nds = {'id':start_idx,'data':nd,'label': ner_example['label'],'task': ner_example['task']}
nds = json.dumps(nds,ensure_ascii=False)
start_idx = start_idx + 1
raw_examples.append(nds)
print(nds + '\n')
print("=="*30)
{"id": 100000, "data": "交通肇事罪[SE?P].江苏省[SEP]本院,认为,被告人李腾夜间驾!驶超:载的机动车上道?路行驶,因观察,疏!忽,发生重大交通!事故!,致一人死亡,承担事故主要责任,其行为已构成交通肇事罪,依!法应判;处三年以下有期;徒刑或者拘役。被告人李腾主动报警,如!实供:述犯罪事实,系自首,依法:可以从轻或.者减轻处罚;赔偿丧葬费用,酌情从轻处罚。公诉机关指控被告人李腾犯交通!肇事罪事实清楚,证据;确实.、充分,指控的.罪名.正确,本,院:予以采纳。关于辩护人提出被告人李腾具有自首情节、赔偿了?丧葬费用以及所驾驶车辆!投保了相关保险等请求从轻处罚的辩护意见,经查属实,予以采纳?。,据此,[SEP]经审理查明:201.9;年8月!10.日3!时许,!被?告?人李腾驾驶苏C号重!型普通货车沿505省道由西向东行驶至XX地段时,?因观察疏忽与,同向前?方;机动车道内袁某骑;行的电动自行车及谢某甲驾驶的无号牌正三轮.摩托车发生,事故,致袁某当场死亡,谢某甲受伤,三车损坏。经新沂市!公安局物证,鉴定室法医,学尸体检验,袁某符合?交,通事故致胸腹腔脏器损伤死亡。经新沂市公安局交通?警察大队道路交通事故认定,被告人李腾承担事故主.要责:任。事故发;生后,被告人李腾主动拨打电话报警,并在现场等候交警.处理,归案后如实供述.犯罪.事实,并自愿认罪认.罚;且已赔?偿丧葬费3万元。", "label": ["一档"], "task": "CLS"}
{"id": 100001, "data": "交通,肇!事罪[SE;P:]江;苏省[.SEP];本院认为,!被告.人李,腾夜间驾驶超载,的机动车上道:路行驶,因观察疏忽,发:生重大交通事故.,致一,人?死!亡,承担事故?主:要?责任:,其行为已构成.交通:肇事;罪,依法.应;判处三年以下有期?徒刑或者拘役?。被告人:李腾主动报警?,!如:实供述犯罪;事实.,?系自首,依法可以,从轻!或者减轻处罚;?赔偿!丧葬!费?用,酌情从轻处罚。:公诉机.关指控被告人李?腾犯交通肇事;罪事实清楚,证据确,实、充,分,指控的:罪名正确,!本;院予以采纳?。关于辩.护!人提出被告人李腾具有自首情节、赔偿了.丧葬!费!用以及所.驾,驶车辆投保了相关保险.等请求从轻处罚!的辩,护,意.见?,经:查.属实,予,以采纳?。!据此,[SEP]:经审理查明:!2?0,19年.8?月10日3时许,,被告人?李腾驾驶苏.C号重型普通货车沿50?5!省道由西向东:行,驶?至XX地段时,因观.察疏忽?与,同向前方机动车道内.袁某骑行的电?动自行车及谢某:甲驾驶;的!无,号牌,正三;轮?摩托:车发生,事;故,致?袁某当场死亡,,:谢;某甲受伤,.三车损坏。经新:沂市公安局物?证.鉴:定室法医!学尸体!检验!,袁某符合:交通事故致!胸腹.腔;脏器损伤死亡。经新;沂.市公安局交;通警:察大队道,路:交,通事:故,认定,.被;告人!李腾.承担!事故主.要责任。事故发生后.,.被告:人李,腾主?动拨.打:电话:报警:,并在:现场.等候交警处理,.归案后如实供述;犯!罪事实,.并?自愿,认!罪认罚;且已:赔偿丧葬.费3,万元。", "label": ["一档"], "task": "CLS"}
============================================================
{"id": 100002, "data": "交通!肇事罪?[SEP]广,东省[SEP]本院认为,被告人梁永昌违反交:通运输管理法规,驾驶机动车通过人行横道时未减速行驶,因而发生重大交通事故,致一人死亡,负事故的主!要责任,其行为已构成交通肇,事罪,应依法惩处。;公诉机:关指控被告人罪名成立,本院予以支持。鉴于?被告人梁永昌交通肇事后主动报.警,在.现场等待:交警处理,到案后如实供述犯罪事实,是自首,且能积极处理善后赔偿事宜并取得被害.人,家属的谅解,自愿接受处罚,确有悔罪表现,依法可,以从轻处,罚。公诉机?关量刑建议理由充分,符合法律规定,本院予以,采纳。综合考虑被告人的犯罪事实、情节和对社会的危害程度,[SEP]另查明,事故发生后,被告人梁永昌用,手机(147***!**089),拨打120和110,电话报警,?并;在原地等候交警处理:。2019年8月?7日,被?告人梁永!昌经公安机关传!唤:到案。粤M***,**号牌小型轿车登记在梁茂城名下,该车在中华联合保险股;份有限公司!梅州中心支公司、阳光保险集团财产保险广:东省分公司梅州市梅江支公司分别投保交强险和:商业险。案发后,保险公司及被告人梁永昌已赔付,并取得了;被害人家属的谅解。", "label": ["一档"], "task": "CLS"}
{"id": 100003, "data": "交通肇事罪?[SEP]广东省![.SEP;]本院认为:,被告人.梁永,昌违反;交通运输管理法规?,驾驶机动车通过人,行横道时未减速行驶,因而发生重?大交通事故,致一人死亡;,负事故;的主要责任,,其行为?已构:成?交通肇:事罪.,,应依;法惩;处:。公诉机关指控被告人罪名成:立,本院;予以;支持。鉴于被告人梁永;昌;交通肇事后?主动报警;,在!现场等待交警?处?理!,到案后如实供述犯!罪事实,?是:自.首,且能积极.处理善后赔偿?事宜?并,取得被:害人家属的谅解,自愿.接:受处.罚,.确有.悔罪表现,依:法可?以从轻处!罚。公诉机关!量刑建,议理;由充分,符:合法律规!定!,;本院予以采.纳。综:合:考虑:被告人.的犯;罪事实、;情:节和对:社!会的危害程度,[.SEP.]另查明,事故发!生后!,!被告人梁永昌用手机(147*****089):拨!打120和110电.话报警!,并.在原?地等候交警处理;。2!0!1?9年8月7日,被告人梁永昌经公安机关传唤.到案。粤M,***.*?*号.牌小型轿车登:记在,梁?茂城名下,该车在中华联合保险股份:有!限公司梅州;中心支公.司、?阳?光.保险集团财产!保险广?东省;分公司梅州市梅.江支公;司:分别.投保交强;险!和商,业险;。案发后,?保:险公司及被告人梁永昌已赔:付,并:取得了:被害人家属的谅解。", "label": ["一档"], "task": "CLS"}
============================================================
3.3 修改doccano.py 重新生成训练、验证数据
对doccano.python进行修改,插入AEDA代码,修改后的py文件在work中,内含新增和修改注释可以查看
# 1.先删除原本的train.txt | dev.txt | test.txt
!rm modify_laic_2022/drw/baseline/训练集/test.txt
!rm modify_laic_2022/drw/baseline/训练集/train.txt
!rm modify_laic_2022/drw/baseline/训练集/dev.txt
# 2.重新制作数据集
!python modify_laic_2022/drw/baseline/doccano_AEDA.py
3.4 训练和测试
模型保存路径切换为chekpoint2
# 3.重新训练
!python modify_laic_2022/drw/baseline/finetune.py \
--train_path ./modify_laic_2022/drw/baseline/训练集/train.txt \
--dev_path ./modify_laic_2022/drw/baseline/训练集/dev.txt \
--save_dir ./modify_laic_2022/drw/baseline/checkpoint \
--learning_rate 5e-5 \
--model uie-base \
--batch_size 18 \
--max_seq_len 512 \
--logging_steps 10 \
--valid_steps 50 \
--num_epochs 20 \
--device gpu
# 4.验证模型效果
!python modify_laic_2022/drw/baseline/evaluate.py \
--model_path ./modify_laic_2022/drw/baseline/checkpoint/model_best \
--test_path ./modify_laic_2022/drw/baseline/训练集/dev.txt \
--batch_size 64 \
--max_seq_len 512
[32m[2022-10-27 17:05:12,074] [ INFO][0m - We are using <class 'paddlenlp.transformers.ernie.tokenizer.ErnieTokenizer'> to load './modify_laic_2022/drw/baseline/checkpoint/model_best'.[0m
W1027 17:05:12.103307 32560 gpu_resources.cc:61] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.2, Runtime API Version: 11.2
W1027 17:05:12.107319 32560 gpu_resources.cc:91] device: 0, cuDNN Version: 8.2.
[32m[2022-10-27 17:05:22,743] [ INFO][0m - -----------------------------[0m
[32m[2022-10-27 17:05:22,743] [ INFO][0m - Class Name: all_classes[0m
[32m[2022-10-27 17:05:22,743] [ INFO][0m - Evaluation Precision: 0.87160 | Recall: 0.85888 | F1: 0.86520[0m
[0m
3.5 预测结果
由于更换了存储模型的位置, 需要进main.py修改task_path='./laic_2022/drw/baseline/checkpoint2/model_best'
# 5.得到测试集的预测结果
!python modify_laic_2022/drw/baseline/main.py \
--device 1 \
--input_file "./modify_laic_2022/drw/baseline/测试集_选手"\
--output_file "./modify_laic_2022/drw/baseline/test_aeda.txt"
print("Run Finsh!")
[32m[2022-10-27 17:04:17,146] [ INFO][0m - We are using <class 'paddlenlp.transformers.ernie.tokenizer.ErnieTokenizer'> to load './modify_laic_2022/drw/baseline/checkpoint/model_best'.[0m
[0mRun Finsh!
提交官方基线查看分数
4 总结
1.首先,本项目跑通官方基线项目,对中间遇到问题进行一一解决
2.在官方基线基础上,我们少样本数据的特点进行数据增强,采用AEDA方法增强文本分类任务的训练数据,取得了更好分数。
方法 | 分数 |
---|---|
官方基线 | 0.6969 |
baseline复现 | 0.7337 |
baseline + AEDA | 0.7841 |
作者:Armor
我在AI Studio上获得钻石等级,点亮8个徽章,来互关呀~ https://aistudio.baidu.com/aistudio/personalcenter/thirdview/392748
此文章为搬运
原项目链接