本项目给出本次法研杯详细的技能计划,从UIE-base开始到UIE数据蒸馏以及自动学习的主张,欢迎咱们尝试,ps:自动学习标示需求自行完成,参阅项目,楼主就不标示了。

项目链接:aistudio.baidu.com/aistudio/pr…

0.法研杯 LAIC2022 司法人工智能挑战赛犯罪事实实体辨认

0.1比赛简介

使命介绍

本赛道由中国司法大数据研究院承办。

犯罪事实实体辨认是司法NLP运用中的一项中心根底使命,能为多种下流场景所复用,是案子特征提取、类案推荐等众多NLP使命的重要根底工具。本赛题要求选手运用模型抽取出犯罪事实中相关预定义实体。

与传统的实体抽取不同,犯罪事实中的实体具有范畴性强、散布不均衡等特性。

官网:data.court.gov.cn/pages/laic.…

数据介绍

  • (1) 本赛题数据来源于风险驾驭罪的犯罪事实,分为有标示样本和无标示样本,供选手挑选运用;
  • (2) 数据格式:练习集数据每一行表示为一个样本,context表示犯罪事实,entities表示实体对应的标签(label)及其位置信息(span);entities_text表示每个标签label对应的实体内容;
  • (3) 两条标示样本之间以换行符为切割;
  • (4) 练习集:有标示练习样本:200条(分初赛、复赛两次供给,数据集包括验证集,不再单独供给验证集,由选手自己切分);无标示样本10000条;
  • (5) 标示样本示例:
{"datasetid": "2552", "id": "813087", "context": "经审理查明,2014年4月12日下午,被告人郑某某酒后驾驭二轮摩托车由永定县凤城镇往仙师乡方向行进进程中,与郑某甲驾驭的小轿车相碰刮,形成交通事端。经福建南方司法判定中心司法判定,事发时被告人郑某某血样中检出乙醇,乙醇含量为193.27mg/100ml血。经永定县公安局交通管理大队职责确定,被告人郑某某及被害人郑某甲均负事端的平等职责。案发后,被告人郑某某与被害人郑某甲已达成民事补偿协议并已实行,被告人郑某某的行为已得到被害人郑某甲的体谅。另查明,被告人郑某某的机动车驾驭证E证已于2014年2月6日到期,且未在合理期限内办理相应续期手续。", "entities": [{"label": "11341", "span": ["25;27"]}, {"label": "11339", "span": ["29;34"]}, {"label": "11344", "span": ["54;57", "156;159", "183;186", "215;218"]}, {"label": "11345", "span": ["60;63"]}, {"label": "11342", "span": ["34;47"]}, {"label": "11348", "span": ["164;168"]}], "entities_text": {"11341": ["酒后"], "11339": ["二轮摩托车"], "11344": ["郑某甲", "郑某甲", "郑某甲", "郑某甲"], "11345": ["小轿车"], "11342": ["由永定县凤城镇往仙师乡方向"], "11348": ["平等职责"]}}

点评办法:

F1=2× 准确率 ( precision )× 召回率 ( recall ) 准确率 ( precision )+ 召回率 ( recall )F_1=\frac{2 \times \text { 准确率 }(\text { precision }) \times \text { 召回率 }(\text { recall })}{\text { 准确率 }(\text { precision })+\text { 召回率 }(\text { recall })}

其中:精确率(precision):辨认出正确的实体数/辨认出的实体数,召回率(recall):辨认出正确的实体数 / 样本的实体数

相关要求及提交阐明

初赛阶段采用上传猜测答案的办法进行测评,复赛需上传模型,请选手严厉按照以下阐明规范提交:

1. 本赛题不允许经过添加额定有监督样本数量提高模型的猜测作用。
2. 只允许产出一个模型,复赛前需求打印模型结构进行验证。主模型不允许多个模型串行或许并行,比方bert+bert;主模型以外允许适当的结构串行,比方bert+crf。模型结构随压缩包供给。
3. 模型存储空间 ≤2.0G。
4. 法研基线模型请前往LAIC2022GitHub网站;请必须按照README中的相关阐明组织文件,并制成ZIP压缩包上传。

路程安排


1. 初赛阶段(2022921日-202212月09日)
开释初赛数据集,开放初赛排名榜。选手所提交答案的得分超过初赛基线模型分数,自动晋级复赛。
2. 复赛阶段(20221031日-202212月09日)
开释复赛数据集,开放复赛排名榜;选手于复赛结束前挑选三个模型和所选模型对应的源代码等检查资料[注]进入封测评定阶段。
3. 封测评定阶段(20221210日-1225日)
模型将在封闭数据集上进行测试,取得模型的封测成果。
4. 技能交流会(202212月下旬)
邀请成果优异的选手进行模型共享,并和专家观众进行论证和评论。
5. 发布成果(202212月底)
公布终究成果,参赛者的终究成果为模型的封测成果和复赛成果按7:3加权取得的分数的最高分。
注:请提前预备,若未在规定时刻内提交,视为抛弃。
若选手所供给的源代码无法复现初复赛成果,或被判为成果无效,终究解释权归中国司法大数据研究院一切。

成果预览:

模型 Precision Recall F1
Base 88.96 95.37 92.06
Base+全量 93.86 (+4.9) 99.2 (+3.83) 96.45 (+4.39)
UIE Slim 98.632 (+9.67) 98.736 (+3.37) 98.684(+6.62)

在这里刺进图片描绘

0.2 数据集预览:

无标示:

{"fullText": "经审理查明,2016年6月4日0时57分许,被告人张伟饮酒后驾驭号跨界高尔夫牌小型轿车由北向南行进至滨河东路南中环桥向西转匝路途段时,遇张某驾驭的无号牌春风-福龙马牌中型载货专项作业车逆向行进后预备向南右转时横在滨河东路中间,二车产生相撞,形成同乘人曹某当场逝世、同乘人杨某经医院抢救无效逝世、张伟自己受伤及两车损坏的交通事端。经判定,从张伟送检的血样中检出乙醇成分,含量为140.97mg/100ml。从张某送检的血样中未检出乙醇成分,经交警部门依法确定,张伟、张某承当事端的平等职责,杨某、曹某无职责。2016年6月13日,张某所属的太原市高新技能产业开发区环境卫生管理中心向曹某、杨某家属进行了民事补偿。被害人曹某的家属对被告人张伟的行为表示体谅。", "id": "dfe98005-0491-4015-94ff-a7f50185aa70"}

有标示:

{"id": "813046", "context": "经审理查明,2016年9月24日19时20分许,被告人陈某某酒后驾驭蒙L80783号比亚迪牌小型轿车由东向西行进至内蒙古自治区鄂尔多斯市准格尔旗薛家湾镇鑫凯盛小区“金娃娃拉面馆”门前路途处时,与由西向东行进至此处的驾驭人范某某驾驭的蒙ANB577号丰田牌小型越野客车相撞,形成两车不同程度受损的路途交通事端。被告人陈某某在该起事端中承当平等职责。经某政府1判定,被告人陈某某血液酒精含量查验成果为259.598mg/100ml,属醉酒状态。被告人陈某某明知别人报警而在现场等候。2016年9月29日被告人陈某某的妻子冯某某与驾驭人范某某就车损补偿达成了私了协议书。", "entities": [{"label": "11341", "span": ["30;32"]}, {"label": "11339", "span": ["46;50"]}, {"label": "11340", "span": ["50;56"]}, {"label": "11342", "span": ["57;94"]}, {"label": "11346", "span": ["97;106"]}, {"label": "11344", "span": ["110;113", "265;268"]}, {"label": "11345", "span": ["127;133"]}, {"label": "11348", "span": ["168;172"]}, {"label": "11350", "span": ["215;219"]}], "entities_text": {"11341": ["酒后"], "11339": ["小型轿车"], "11340": ["由东向西行进"], "11342": ["内蒙古自治区鄂尔多斯市准格尔旗薛家湾镇鑫凯盛小区“金娃娃拉面馆”门前路途处"], "11346": ["由西向东行进至此处"], "11344": ["范某某", "范某某"], "11345": ["小型越野客车"], "11348": ["平等职责"], "11350": ["醉酒状态"]}}

实体类型:

    '11339': '被告人交通工具',
    '11340': '被告人行进状况',
    '11341': '被告人违规状况',
    '11342': '行为地址',
    '11343': '搭载人名字',
    '11344': '其他事情参加人',
    '11345': '参加人交通工具',
    '11346': '参加人行进状况',
    '11347': '参加人违规状况',
    '11348': '被告人职责确定',
    '11349': '参加人职责确定',
    '11350': '被告人行为总结',

1.baseline——模型练习猜测(UIE model)

UIE模型运用状况参阅下面链接,写的很详细了要考虑了工业布置状况计划

参阅链接:

UIE Slim满意工业运用场景,处理推理布置耗时问题,提高效能!

PaddleNLP之UIE信息抽取小样本进阶(二)[含doccano详解]

Paddlenlp之UIE模型实战实体抽取使命【打车数据、快递单】

1.1 数据处理

#数据转化
import json
span={'11339': '被告人交通工具',
    '11340': '被告人行进状况',
    '11341': '被告人违规状况',
    '11342': '行为地址',
    '11343': '搭载人名字',
    '11344': '其他事情参加人',
    '11345': '参加人交通工具',
    '11346': '参加人行进状况',
    '11347': '参加人违规状况',
    '11348': '被告人职责确定',
    '11349': '参加人职责确定',
    '11350': '被告人行为总结',
    }
def convert_record(source):
    target = {}
    target["id"] = int(source["id"])
    target["text"] = source["context"]
    target["relations"] = []
    target["entities"] = []
    id = 0
    for item in source["entities"]:
        for i in range(len((item['span']))):
            tmp = {}
            tmp['id'] = id        
            id = id + 1
            tmp['start_offset'] = int(item['span'][i].split(';')[0])
            tmp['end_offset'] = int(item['span'][i].split(';')[1])
            tmp['label'] = span[item['label']]
            target["entities"].append(tmp)
    return target
if __name__ == '__main__':
    train_file = 'data/train.json'
    json_data = []
    content_len=[]
    for line in open(train_file, 'r',encoding='utf-8'):
        json_data.append(json.loads(line))
        content_len.append(len(json.loads(line)["context"]))
    ff = open('data/train_new.txt', 'w')
    for item in json_data:
        target = convert_record(item)
        ff.write(json.dumps(target, ensure_ascii=False ) + '\n')
    ff.close()
    print(content_len)

1.2 模型练习验证

#模型练习
!python finetune.py \
    --train_path "./data/train.txt" \
    --dev_path "./data/dev.txt" \
    --save_dir "./checkpoint_base" \
    --learning_rate 5e-6  \
    --batch_size 32 \
    --max_seq_len 512 \
    --num_epochs 30 \
    --model "uie-base" \
    --seed 1000 \
    --logging_steps 10 \
    --valid_steps 100 \
    --device "gpu"

练习成果预览:

[2022-10-31 10:25:43,181] [    INFO] - global step 510, epoch: 8, loss: 0.00172, speed: 2.33 step/s
[2022-10-31 10:25:45,959] [    INFO] - global step 520, epoch: 8, loss: 0.00171, speed: 3.60 step/s
[2022-10-31 10:25:51,260] [    INFO] - global step 530, epoch: 9, loss: 0.00169, speed: 1.89 step/s
[2022-10-31 10:25:55,512] [    INFO] - global step 540, epoch: 9, loss: 0.00167, speed: 2.35 step/s
[2022-10-31 10:25:59,746] [    INFO] - global step 550, epoch: 9, loss: 0.00166, speed: 2.36 step/s
[2022-10-31 10:26:04,010] [    INFO] - global step 560, epoch: 9, loss: 0.00164, speed: 2.35 step/s
[2022-10-31 10:26:08,215] [    INFO] - global step 570, epoch: 9, loss: 0.00162, speed: 2.38 step/s
[2022-10-31 10:26:12,343] [    INFO] - global step 580, epoch: 9, loss: 0.00160, speed: 2.42 step/s
[2022-10-31 10:26:16,597] [    INFO] - global step 590, epoch: 10, loss: 0.00159, speed: 2.35 step/s
[2022-10-31 10:26:20,881] [    INFO] - global step 600, epoch: 10, loss: 0.00157, speed: 2.33 step/s
[2022-10-31 10:26:26,571] [    INFO] - Evaluation precision: 0.90678, recall: 0.89727, F1: 0.90200
[2022-10-31 10:26:26,571] [    INFO] - best F1 performence has been updated: 0.87898 --> 0.90200
best模型已保存

PaddleXPaddleXPaddleX

#模型评价
!python evaluate.py \
    --model_path ./checkpoint_base/model_best \
    --test_path ./data/dev.txt \
    --batch_size 16 \
    --max_seq_len 512
[2022-10-31 10:31:33,982] [    INFO] - -----------------------------
[2022-10-31 10:31:33,983] [    INFO] - Class Name: all_classes
[2022-10-31 10:31:33,983] [    INFO] - Evaluation Precision: 0.90678 | Recall: 0.89727 | F1: 0.90200
!python evaluate.py \
    --model_path ./checkpoint_base/model_best \
    --test_path ./data/dev.txt \
    --debug
[2022-10-31 10:31:43,857] [    INFO] - -----------------------------
[2022-10-31 10:31:43,857] [    INFO] - Class Name: 被告人交通工具
[2022-10-31 10:31:43,857] [    INFO] - Evaluation Precision: 0.97500 | Recall: 0.95122 | F1: 0.96296
[2022-10-31 10:31:44,297] [    INFO] - -----------------------------
[2022-10-31 10:31:44,297] [    INFO] - Class Name: 行为地址
[2022-10-31 10:31:44,297] [    INFO] - Evaluation Precision: 1.00000 | Recall: 0.94872 | F1: 0.97368
[2022-10-31 10:31:44,780] [    INFO] - -----------------------------
[2022-10-31 10:31:44,781] [    INFO] - Class Name: 其他事情参加人
[2022-10-31 10:31:44,781] [    INFO] - Evaluation Precision: 0.90604 | Recall: 0.95745 | F1: 0.93103
[2022-10-31 10:31:44,898] [    INFO] - -----------------------------
[2022-10-31 10:31:44,898] [    INFO] - Class Name: 被告人行为总结
[2022-10-31 10:31:44,898] [    INFO] - Evaluation Precision: 1.00000 | Recall: 0.70000 | F1: 0.82353
[2022-10-31 10:31:45,324] [    INFO] - -----------------------------
[2022-10-31 10:31:45,324] [    INFO] - Class Name: 被告人职责确定
[2022-10-31 10:31:45,325] [    INFO] - Evaluation Precision: 0.89474 | Recall: 0.91892 | F1: 0.90667
[2022-10-31 10:31:45,775] [    INFO] - -----------------------------
[2022-10-31 10:31:45,775] [    INFO] - Class Name: 被告人违规状况
[2022-10-31 10:31:45,776] [    INFO] - Evaluation Precision: 0.90909 | Recall: 0.87719 | F1: 0.89286
[2022-10-31 10:31:46,124] [    INFO] - -----------------------------
[2022-10-31 10:31:46,124] [    INFO] - Class Name: 被告人行进状况
[2022-10-31 10:31:46,124] [    INFO] - Evaluation Precision: 0.94286 | Recall: 0.86842 | F1: 0.90411
[2022-10-31 10:31:46,574] [    INFO] - -----------------------------
[2022-10-31 10:31:46,574] [    INFO] - Class Name: 参加人交通工具
[2022-10-31 10:31:46,574] [    INFO] - Evaluation Precision: 0.93617 | Recall: 0.93617 | F1: 0.93617
[2022-10-31 10:31:46,924] [    INFO] - -----------------------------
[2022-10-31 10:31:46,924] [    INFO] - Class Name: 参加人行进状况
[2022-10-31 10:31:46,924] [    INFO] - Evaluation Precision: 0.82353 | Recall: 0.77778 | F1: 0.80000
[2022-10-31 10:31:47,137] [    INFO] - -----------------------------
[2022-10-31 10:31:47,137] [    INFO] - Class Name: 参加人职责确定
[2022-10-31 10:31:47,137] [    INFO] - Evaluation Precision: 0.86667 | Recall: 0.76471 | F1: 0.81250
[2022-10-31 10:31:47,191] [    INFO] - -----------------------------
[2022-10-31 10:31:47,191] [    INFO] - Class Name: 搭载人名字
[2022-10-31 10:31:47,191] [    INFO] - Evaluation Precision: 1.00000 | Recall: 0.85714 | F1: 0.92308
[2022-10-31 10:31:47,246] [    INFO] - -----------------------------
[2022-10-31 10:31:47,246] [    INFO] - Class Name: 参加人违规状况
[2022-10-31 10:31:47,246] [    INFO] - Evaluation Precision: 1.00000 | Recall: 0.28571 | F1: 0.44444

1.3模型猜测

# 猜测
import json
from paddlenlp import Taskflow
def predict(ie, result_item):
    result = ie(result_item['context'])[0]
    # print(result)
    sub_list = []
    for item in result:
        sub_tmp = {}
        sub_tmp["label"] = str(keys[values.index(str(item))])
        all_search=str_all_index(result_item['context'], result[item][0]["text"])
        txt_list=[]
        sub_span=[]
        if len(result[item])==1:
            for i in range(len(all_search)):            
                txt_list.append(result[item][0]["text"])            
                sub_span.append([all_search[i], all_search[i] +len(result[item][0]["text"])])    
        else:
            for i in range(len(result[item])):                
                txt_list.append(result[item][i]["text"])            
                sub_span.append([result[item][i]["start"], result[item][i]["end"]])   
        sub_tmp["text"]=txt_list
        sub_tmp["span"]=sub_span
        sub_list.append(sub_tmp)
    result_item["entities"] = sub_list    
    return result_item
if __name__ == '__main__':
    test_file = 'data/test.json'
    span={'11339': '被告人交通工具',
        '11340': '被告人行进状况',
        '11341': '被告人违规状况',
        '11342': '行为地址',
        '11343': '搭载人名字',
        '11344': '其他事情参加人',
        '11345': '参加人交通工具',
        '11346': '参加人行进状况',
        '11347': '参加人违规状况',
        '11348': '被告人职责确定',
        '11349': '参加人职责确定',
        '11350': '被告人行为总结',
        }
    values = list(span.values())
    keys=list(span.keys())
    # idx = values.index("被告人交通工具")
    # print(idx)
    # print(keys)
    # key = keys[idx]
    # print(key)
    schema = span.values()
    # 设定抽取目标和定制化模型权重途径
    ie = Taskflow("information_extraction", schema=schema,batch_size=32,precision='fp32',use_faster=True, task_path='./checkpoint_base/model_best')
    ff = open('output/result_base.txt', 'w')
    for line in open(test_file, 'r',encoding='utf-8'):
        result_item=json.loads(line)
        target = predict(ie, result_item)
        ff.write(json.dumps(target, ensure_ascii=False) + '\n')
    ff.close()
    print("数据成果已导出")

部分成果预览:

{"id": "812546", "context": "经审理查明,2016年3月12日15时50分许,被告人王某酒后驾驭无牌一般两轮摩托车由东向西行进至本市凉州区黄羊镇二坝小学路段时,与同向行进的被害人蒋某某驾驭的甘HB0622小轿车产生碰撞,致王某受伤、车辆受损的一般交通事端。2016年3月15日,甘肃申证司法医学判定所以甘申司法毒物鉴字(2016)第179号关于王某酒精含量司法判定查验报告书判定:送检的王某字样试管血液样中检测出酒精成份,含量为118.18mg/100m1。2016年4月11日,某政府以武公交凉认字第622301XXXXXXXXXX号路途交通事端职责确定书确定:王某负此次事端的悉数职责,蒋某某在事端中无职责。案发后,被告人王某与受害人蒋某某就民事补偿已某某了宽和协议,双方已实行了协议。", "entities": [{"label": "11339", "text": ["一般两轮摩托车"], "span": [[35, 42]]}, {"label": "11340", "text": ["无牌", "由东向西行进"], "span": [[33, 35], [42, 48]]}, {"label": "11341", "text": ["酒后"], "span": [[29, 31]]}, {"label": "11342", "text": ["本市凉州区黄羊镇二坝小学路段"], "span": [[49, 63]]}, {"label": "11344", "text": ["蒋某某", "蒋某某", "蒋某某"], "span": [[74, 77], [304, 307], [280, 283]]}, {"label": "11345", "text": ["小轿车"], "span": [[87, 90]]}, {"label": "11346", "text": ["同向行进"], "span": [[66, 70]]}, {"label": "11348", "text": ["悉数职责"], "span": [[275, 279]]}, {"label": "11349", "text": ["无职责"], "span": [[287, 290]]}]}
{"id": "812531", "context": "经审理查明:2015年10月4日20时21分许,被告人王某某在未取得机车动车驾驭证的状况下醉酒驾驭云F98XXX号小型一般客车沿红塔大路西向东行进,当行进至红塔大路32号门前处时追尾同向行进的王某驾驭的云AKOXXX号丰田轿车,形成两车受损的路途交通事端。经判定,被告人王某某血液中乙醇含量为180.64mg/100ml血。经路途交通事端确定书确定,王某某承当事端的悉数职责。被告人王某某在事端产生后明知对方报了警而在现场等候处理,案发后,其补偿了王某车辆损失费合计14000元。", "entities": [{"label": "11339", "text": ["小型一般客车"], "span": [[57, 63]]}, {"label": "11340", "text": ["沿红塔大路西向东行进"], "span": [[63, 73]]}, {"label": "11341", "text": ["未取得机车动车驾驭证", "醉酒"], "span": [[31, 41], [45, 47]]}, {"label": "11342", "text": ["红塔大路32号门前处"], "span": [[78, 88]]}, {"label": "11344", "text": ["王某", "王某"], "span": [[224, 226], [96, 98]]}, {"label": "11345", "text": ["丰田轿车"], "span": [[109, 113]]}, {"label": "11346", "text": ["同向行进"], "span": [[91, 95]]}, {"label": "11348", "text": ["悉数职责"], "span": [[183, 187]]}]}

base比赛成果

在这里刺进图片描绘

2.全量练习

项目链接:aistudio.baidu.com/aistudio/pr…

[2022-10-31 11:02:25,276] [    INFO] - global step 2010, epoch: 8, loss: 0.00076, speed: 2.36 step/s
[2022-10-31 11:02:29,618] [    INFO] - global step 2020, epoch: 8, loss: 0.00075, speed: 2.30 step/s
[2022-10-31 11:02:33,167] [    INFO] - global step 2030, epoch: 8, loss: 0.00075, speed: 2.82 step/s
[2022-10-31 11:02:37,961] [    INFO] - global step 2040, epoch: 9, loss: 0.00075, speed: 2.09 step/s
[2022-10-31 11:02:42,213] [    INFO] - global step 2050, epoch: 9, loss: 0.00074, speed: 2.35 step/s
[2022-10-31 11:02:46,600] [    INFO] - global step 2060, epoch: 9, loss: 0.00074, speed: 2.28 step/s
[2022-10-31 11:02:50,923] [    INFO] - global step 2070, epoch: 9, loss: 0.00074, speed: 2.31 step/s
[2022-10-31 11:02:55,188] [    INFO] - global step 2080, epoch: 9, loss: 0.00074, speed: 2.34 step/s
[2022-10-31 11:02:59,528] [    INFO] - global step 2090, epoch: 9, loss: 0.00073, speed: 2.30 step/s
[2022-10-31 11:03:03,827] [    INFO] - global step 2100, epoch: 9, loss: 0.00073, speed: 2.33 step/s
[2022-10-31 11:03:27,192] [    INFO] - Evaluation precision: 0.98632, recall: 0.98736, F1: 0.98684
[2022-10-31 11:03:27,193] [    INFO] - best F1 performence has been updated: 0.98193 --> 0.98684
best模型已保存

PaddleXPaddleXPaddleX

3.UIE Slim 数据蒸馏

上面办法只重视了标示数据集,下面经过练习好的UIE定制模型猜测无监督数据的标签。
项目链接:aistudio.baidu.com/aistudio/pr…

4.自动学习计划:

参阅项目:自动学习(Active Learning)总述以及在文本分类和序列标示运用

1.自动学习简介

  1. 自动学习是指对需求符号的数据进行优先排序的进程,这样可以确定哪些数据对练习监督模型产生最大的影响。

  2. 自动学习是一种学习算法可以交互式查询用户(teacher 或 oracle),用实在标签标示新数据点的战略。自动学习的进程也被称为优化实验规划。

  3. 自动学习的动机在于认识到并非一切标有标签的样本都平等重要

自动学习是一种战略/算法,是对现有模型的增强。而不是新模型架构。自动学习背面的关键思想是,如果允许机器学习算法挑选它学习的数据,这样就可以用更少的练习标签完成更高的准确性。——Active Learning Literature Survey, Burr Settles。经过为专家的符号工作进行优先级排序可以大大削减练习模型所需的符号数据量。降低成本,一起提高准确性。

自动学习不是一次为一切的数据收集一切的标签,而是对模型了解最困难的数据进行优先级排序,并仅对那些数据要求标示标签。然后模型对少数已符号的数据进行练习,练习完成后再次要求对最不确定数据进行更多的符号。

经过对不确定的样本进行优先排序,模型可以让专家(人工)集中精力供给最有用的信息。这有助于模型更快地学习,并让专家越过对模型没有太大帮助的数据。这样在某些状况下,可以大大削减需求从专家那里收集的标签数量,而且依然可以得到一个很好的模型。这样可以为机器学习项目节省时刻和金钱!

4.1 active learning的基本思想

自动学习的模型如下:

A=(C,Q,S,L,U),

其中 C 为一组或许一个分类器,L是用于练习已标示的样本。Q 是查询函数,用于从未标示样本池U中查询信息量大的信息,S是督导者,可以为U中样本标示正确的标签。学习者经过少数初始符号样本L开始学习,经过必定的查询函数Q挑选出一个或一批最有用的样本,并向督导者询问标签,然后运用取得的新知识来练习分类器和进行下一轮查询。自动学习是一个循环的进程,直至到达某一中止原则停止
这个原则可以是迭代次数,也可以是准确率等目标到达设定值

在这里刺进图片描绘

在各种自动学习办法中,查询函数的规划最常用的战略是:不确定性原则(uncertainty)和差异性原则(diversity)。 不确定性越大代表信息熵越大,包括的信息越丰富;而差异性越大代表挑选的样本可以更全面地代表整个数据集。

关于不确定性,咱们可以凭借信息熵的概念来进行了解。咱们知道信息熵是衡量信息量的概念,也是衡量不确定性的概念。信息熵越大,就代表不确定性越大,包括的信息量也就越丰富。事实上,有些根据不确定性的自动学习查询函数便是运用了信息熵来规划的,比方熵值装袋查询(Entropy query-by-bagging)。所以,不确定性战略便是要想方设法地找出不确定性高的样本,因为这些样本所包括的丰富信息量,对咱们练习模型来说便是有用的。

那么差异性怎样来了解呢?之前提到或查询函数每次迭代中查询一个或许一批样本。咱们当然期望所查询的样本供给的信息是全面的,各个样本供给的信息不重复不冗余,即样本之间具有必定的差异性。在每轮迭代抽取单个信息量最大的样本参加练习集的状况下,每一轮迭代中模型都被重新练习,以新取得的知识去参加对样本不确定性的评价可以有效地防止数据冗余。可是如果每次迭代查询一批样本,那么就应该想办法来保证样本的差异性,防止数据冗余。

在这里刺进图片描绘

从上图也可以看出来,在相同数目的标示数据中,自动学习算法比监督学习算法的分类差错要低。这里留意横轴是标示数据的数目,关于自动学习而言,相同的标示数据下,自动学习的样本数>监督学习,这个比照首要是为了阐明两者关于练习样本的运用效率不同:自动学习练习运用的样本都是经过算法筛选出来关于模型练习有帮助的数据,所以效率高。可是如果是相同样本的数量下去比照两者的差错,那肯定是监督学习占优,这是毋庸置疑的。

4.2active learning与半监督学习的不同

  很多人认为自动学习也归于半监督学习的范畴了,但实际上是不一样的,半监督学习和直推学习(transductive learning)以及自动学习,都归于运用未符号数据的学习技能,但基本思想仍是有区别的。

  如上所述,自动学习的“自动”,指的是自动提出标示恳求,也便是说,仍是需求一个外在的可以对其恳求进行标示的实体(一般便是相关范畴人员),即自动学习是交互进行的。

  而半监督学习,特指的是学习算法不需求人工的干涉,根据自身对未符号数据加以运用。

4.3.自动学习根底战略(小试牛刀)

常见自动学习战略

在未符号的数据集上运用自动学习的步骤是:

  • 首要需求做的是需求手动符号该数据的一个十分小的子样本。
  • 一旦有少数的符号数据,就需求对其进行练习。该模型当然不会很棒,可是将帮助咱们了解参数空间的哪些范畴需求首符号。
  • 练习模型后,该模型用于猜测每个剩下的未符号数据点的类别。
  • 根据模型的猜测,在每个未符号的数据点上挑选分数
  • 一旦挑选了对标签进行优先排序的最佳办法,这个进程就可以进行迭代重复:在根据优先级分数进行符号的新标签数据集上练习新模型。一旦在数据子集上练习完新模型,未符号的数据点就可以在模型中运转并更新优先级分值,持续符号。
  • 经过这种办法,随着模型变得越来越好,咱们可以不断优化标签战略。

在这里刺进图片描绘

参阅项目:自动学习(Active Learning)总述以及在文本分类和序列标示运用

5.总结

模型 Precision Recall F1
Base 88.96 95.37 92.06
Base+全量 93.86 (+4.9) 99.2 (+3.83) 96.45 (+4.39)
UIE Slim 98.632 (+9.67) 98.736 (+3.37) 98.684(+6.62)

简略归纳一下:添加标示量是关键

  1. 数据标示占比很重要,未运用的1w数据需求运用起来,而且小样本数据下数据覆盖面需求用必定办法保持,目前得分高的应该都是额定添加标示量了

  2. 提高猜测速度,UIE数据蒸馏计划推荐运用(GlobalPointer),并可以在这个根底上优化,用mini等更小的模型

  3. 自动学习用起来,筛选出困难样本,争取到达30%标示量完成全样本作用!经过多轮迭代完成在这个使命的智能标示

最后感谢肝王@javaroom之前供给的baseline的数据预处理进程和提交数据转换,剩了编写处理时刻。

参阅项目:自动学习(Active Learning)总述以及在文本分类和序列标示运用

UIE模型运用状况参阅下面链接,写的很详细了要考虑了工业布置状况计划

参阅链接:

UIE Slim满意工业运用场景,处理推理布置耗时问题,提高效能!

PaddleNLP之UIE信息抽取小样本进阶(二)[含doccano详解]

Paddlenlp之UIE模型实战实体抽取使命【打车数据、快递单】