法律领域多标签文本分类任务
更新时间:2022-12-17
任务简介
依据法律文书描述,判断属于那种罪名或者判断其适用于哪几个法条。本质上两个任务都是文本多标签分类任务。 该任务采用预训练模型ERNIE-Law进行训练。
快速开始
任务位于:./wenxin_appzoo/tasks/ernie_law_multi_label_classification
代码结构
├── data
│ ├── count_prediction_data ##罪名预测数据集目录
│ │ ├── dev_data_count_prediction
│ │ │ └── dev.txt
│ │ ├── predict_data_count_prediction
│ │ │ └── predict.txt
│ │ ├── test_data_count_prediction
│ │ │ └── test.txt
│ │ └── train_data_count_prediction
│ │ └── train.txt
│ └── legislative_recommendation_data ##法条推荐数据集目录
│ ├── dev_data_legislative_recommendation
│ │ └── dev.txt
│ ├── predict_data_legislative_recommendation
│ │ └── predict.txt
│ ├── test_data_legislative_recommendation
│ │ └── test.txt
│ └── train_data_legislative_recommendation
│ └── train.txt
├── dict
│ ├── count_prediction_label_map.txt
│ └── legislative_recommendation.txt
├── examples
│ ├── cls_ernie_multi_label_ch_infer.json
│ └── cls_ernie_multi_label_ch.json
├── inference
│ ├── custom_inference.py
│ └── __init__.py
├── __init__.py
├── model
│ ├── __init__.py
│ └── multi_label_classification.py
├── reader
│ ├── categorical_field_reader.py
│ └── multi_label_field_reader.py
├── run_infer.py
├── run_trainer.py
└── trainer
├── custom_dynamic_trainer.py
├── custom_trainer.py
└── __init__.py
数据准备
- 这里我们提供一份已标注的示例数据集。该任务预置网络基于ERNIE-Law模型进行训练,其中文本特征不需要分词且无需准备词表。
- 训练集、测试集、验证集和预测集分别存放在./data目录下,label_map词表存放在./dict目录下。
- 注:数据集与词表均为utf-8格式。
训练集
- 罪名预测的训练集样例如下所示。数据分为2列,列与列之间用\t进行分隔。第一列为文本,最后一列为标签。
安阳县人民检察院指控:2014年4月27日上午11时许,宋某甲在安阳县吕村镇翟奇务村被告人梁某甲家吃饭时,因琐事发生争执,梁某甲用板凳将宋某甲头部砸致轻伤。案发后民事部分已调解。上述事实,公诉机关向本院提供了被告人供述、被害人陈述、证人证言、鉴定意见等证据,认为被告人的行为触犯了《中华人民共和国刑法》××××之规定,构成××罪,提请本院依法判处。 0
富平县人民检察院指控,2016年6月11日18时许,在富平县某镇某村家中,被告人刘某因继任丈夫封某某给封某某之女封某入赘女婿用房一事,刘某、封某某两人发生冲突,后封某某离开并让封某锁上家中大门。在封某锁大门时,刘某用随身携带的折叠刀将封某腹部捅伤,致肝脏破裂。经渭南市公安司法鉴定中心鉴定,被害人封某所受损伤属重伤二级。为证实所指控的犯罪事实成立,公诉人当庭宣读,出示了受案登记表、诊断证明、出院病历、行政处罚决定书、证人证言、被害人陈述、被告人供述、鉴定意见、现场照片及勘验笔录等。据此认定被告人刘某之行为已构成××罪,要求依法判处。 0
- 法条推荐训练集样例如下所示。数据分为2列,列与列之间用\t进行分隔。第一列为文本,最后一列为标签,可以同时有多个标签。
贵州省平坝县人民检察院指控:2014年4月9日下午,被告人王某丁与其堂哥王4某(另案处理)假释驾驶大货车(贵A×××××)准备到乐某镇大屯村拉砂,行至大屯村时与被害人王某乙相遇,王4某与王某乙因琐事发生矛盾,准备打架时被路人劝开,双方离开现场。之后,王4某打电话邀约王某乙打架,接着又打电话召集郑3某、艾1某雷、邱某(均另案处理)、。王3某王6某、王某丁与艾1某雷、邱某、郑3某等人聚集后,行至乐某商务宾馆门前大街上时,与被害人高某乙、王某乙、王某甲、李某等人相遇,王4某、王某丁等人就从郑3某驾驶的面包车上拿出杀猪刀、砍刀等凶器准备,当王4某于与高某乙正在交谈时,艾1某雷大喊一声“杀”,王4某、郑3某等人手持凶器将高某乙、王某乙、王某甲、李某杀伤,王某丁等人手持凶器打砸车身。在将对方杀伤后,王4某、王某丁等人驾车逃离现场。被害人高某乙受伤经医院抢救无效,于2014年4月9日17时许死亡。经鉴定,高某乙系创伤性、失血性休克死亡;王某甲所受之伤为轻伤一级;王某乙所受之伤为轻伤二级;李某所受之伤为轻微伤。公诉机关认为,被告人王某丁伙同王4某等人××他人身体,致一人死亡,二人受轻伤,一人受轻微伤,其行为触犯了《中华人民共和国刑法》××××,犯罪事实清楚,证据确实、充分,应当以××罪追究其刑事责任。王某丁在共同犯罪中其次起次要作用,是从犯,依法应当从轻、减轻或者免除处罚;其到案后如实公式供述自己的罪行,是坦白,依法可从轻处罚。根据《中华人民共和国刑事诉讼法》××的规定,特对被告人王某丁提起公诉。请依法判处。 1 0
经审理查明:2014年5月6日14时许,被告人叶某某驾车途径赤壁市赵李桥镇胜利街涵洞时,被在此处饭店外的朱某某等人挡住去路,叶某某与朱某某为此发生争吵。随后,叶某某到赵李桥镇街道胡某某茶馆准备打牌,将自己的小车停在茶馆门前。朱某某的丈夫叶某甲带着外甥肖某回家时,发现叶某某的车子停在胡某某门外,肖某便用手拍打汽车,扬言要打叶某某,后被胡某某劝离。叶某某随后邀约余某某、黎某某、黄某某、陈某某(均另案处理)等人来到叶某甲楼下,与叶某甲、肖某及叶某甲另一个外甥刘某某发生厮打,被告人一伙手持木棍、砍刀、砖头将叶某甲、肖某、刘某某打伤。经鉴定:叶某甲为轻伤二级,肖某、刘某某均为轻微伤,叶某某亦受轻微伤。2015年1月26日18时许,被告人叶某某在赤壁市赵李桥镇紫阳酒店被公安民警抓获归案。同时查明,当事人双方已就本案民事赔偿问题自愿达成如下协议:即由被告人叶某某一次性赔偿被害人叶某甲、肖某、刘某某各项经济损失4万元,被害人表示不追究叶某某等人的法律责任。上述事实,被告人叶某某在开庭过程中亦无异议,且有被害人叶某甲、肖某、刘某某的陈述、证人朱某某、胡某某、甘某某等人的证言、辨认笔录、鉴定意见、调解协议、谅解书、户籍证明、到案经过等证据证实,足以认定。 0
label_map
- 罪名总共为4种,通过count_prediction_label_map.txt词表提供罪名与id的映射。count_prediction_label_map.txt词表分为两列,第一列为罪名,第二列为id(从0开始),列与列之间用\t进行分隔。词表示例如下所示:
意伤害 0
盗窃 1
危险驾驶 2
交通肇事 3
- 法条设定为4种,通过legislative_recommendation.txt词表提供法条与id的映射。label_map词表分为两列,第一列为法条,第二列为id(从0开始),列与列之间用\t进行分隔。词表示例如下所示:
234 0
292 1
133 2
128 3
测试集/验证集
- 测试集和验证集与训练集的数据格式保持一致。最后一列为标签。
预测集
- 预测集无需进行标签预占位,就是一列文本。
训练我的第一个模型
开始训练
- 使用预置网络进行训练的方式为使用./run_trainer.py入口脚本,通过--param_path参数来传入./examples/目录下的json配置文件。
- 训练分几个步骤
- 请使用以下命令在../../models_hub/中通过对应脚本download_ernie_law_penal_1.0_ch.sh下载模型参数文件,以及其对应配置文件ernie_law_penal_1.0_ch_config.json和词表vocab_ernie_law_penal_1.0_ch.txt.
# download_ernie_law_penal_1.0_ch.sh 模型下载
# 进入models_hub目录
cd ../../models_hub/
sh download_ernie_law_penal_1.0_ch.sh
- 基于示例的数据集,可以运行以下命令在训练集(train.txt)上进行模型训练,并在测试集(test.txt)上进行验证;
# 基于json实现预置网络训练。其调用了配置文件./examples/cls_ernie_multi_label_ch.json
python run_trainer.py --param_path ./examples/cls_ernie_multi_label_ch.json
- 训练运行的日志会自动保存在./log/test.log文件中;
- 训练中以及结束后产生的模型文件会默认保存在./output/目录下,其中save_inference_model/文件夹会保存用于预测的模型文件,save_checkpoint/文件夹会保存用于热启动的模型文件
- 可通过修改cls_ernie_multi_label_ch.json、cls_ernie_multi_label_ch_infer.json两个json文件数据集路径实现上述两个数据集任务的训练。
预测我的第一个模型
开始预测
- 使用预置网络进行预测的方式为使用./run_infer.py入口脚本,通过--param_path参数来传入./examples/目录下的json配置文件。
- 预测分为以下几个步骤:
- 基于示例的数据集,可以运行以下命令在预测集(predict.txt)上进行预测:
# 基于json实现预测。其调用了配置文件./examples/cls_ernie_multi_label_ch_infer.json
python run_infer.py --param_path ./examples/cls_ernie_multi_label_ch_infer.json
- 预测运行的日志会自动保存在./output/predict_result.txt文件中。