PaddleNLP基于ERNIR3.0文本分类以CAIL2018-SMALL数据集罪名预测任务为例【多标签】

2022-11-03 10:27:37 浏览数 (1)

相关项目链接:

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

Paddlenlp之UIE分类模型【以情感倾向分析新闻分类为例】含智能标注方案)

应用实践:分类模型大集成者[PaddleHub、Finetune、prompt]

Paddlenlp之UIE关系抽取模型【高管关系抽取为例】

PaddleNLP基于ERNIR3.0文本分类以中医疗搜索检索词意图分类(KUAKE-QIC)为例【多分类(单标签)】

基于Ernie-3.0 CAIL2019法研杯要素识别多标签分类任务

本项目链接:

基于ERNIR3.0文本分类:CAIL2018-SMALL罪名预测为例(多标签)

0.前言:文本分类任务介绍

文本分类任务是自然语言处理中最常见的任务,文本分类任务简单来说就是对给定的一个句子或一段文本使用文本分类器进行分类。文本分类任务广泛应用于长短文本分类、情感分析、新闻分类、事件类别分类、政务数据分类、商品信息分类、商品类目预测、文章分类、论文类别分类、专利分类、案件描述分类、罪名分类、意图分类、论文专利分类、邮件自动标签、评论正负识别、药物反应分类、对话分类、税种识别、来电信息自动分类、投诉分类、广告检测、敏感违法内容检测、内容安全检测、舆情分析、话题标记等各类日常或专业领域中。

文本分类任务可以根据标签类型分为多分类(multi class)、多标签(multi label)、层次分类(hierarchical等三类任务,接下来我们将以下图的新闻文本分类为例介绍三种分类任务的区别。

PaddleNLP采用AutoModelForSequenceClassification, AutoTokenizer提供了方便易用的接口,可指定模型名或模型参数文件路径通过from_pretrained() 方法加载不同网络结构的预训练模型,并在输出层上叠加一层线性层,且相应预训练模型权重下载速度快、稳定。Transformer预训练模型汇总包含了如 ERNIE、BERT、RoBERTa等40多个主流预训练模型,500多个模型权重。下面以ERNIE 3.0 中文base模型为例,演示如何加载预训练模型和分词器:

代码语言:txt复制
from paddlenlp.transformers import AutoModelForSequenceClassification, AutoTokenizer
num_classes = 10
model_name = "ernie-3.0-base-zh"
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_classes=num_classes)
tokenizer = AutoTokenizer.from_pretrained(model_name)

0.1 多标签任务介绍

文本多标签分类是自然语言处理(NLP)中常见的文本分类任务,文本多标签分类在各种现实场景中具有广泛的适用性,例如商品分类、网页标签、新闻标注、蛋白质功能分类、电影分类、语义场景分类等。多标签数据集中样本用来自 n_classes 个可能类别的 m 个标签类别标记,其中 m 的取值在 0 到 n_classes 之间,这些类别具有不相互排斥的属性。通常,我们将每个样本的标签用One-hot的形式表示,正类用 1 表示,负类用 0 表示。例如,数据集中样本可能标签是A、B和C的多标签分类问题,标签为 1,0,1 代表存在标签 A 和 C 而标签 B 不存在的样本。

在现实中的案情错综复杂,同一案件可能适用多项法律条文,涉及数罪并罚,需要多标签模型充分学习标签之间的关联性,对文本进行分类预测。CAIL2018—SMALL数据集中罪名预测任务数据来自“中国裁判文书网”公开的刑事法律文书,包括19.6万份文书样例,其中每份数据由法律文书中的案情描述和事实部分组成,包括每个案件被告人被判的罪名,数据集共包含202项罪名,被告人罪名通常涉及一项至多项。以数据集中某一法律文书为例:

代码语言:txt复制
"公诉机关指控,2009年12月18日22时许,被告人李某(已判刑)伙同被告人丁某、李某乙、李某甲、杨某某在永吉县岔路河镇夜宴歌厅唱完歌后离开,因之前对该歌厅服务生刘某某心怀不满,遂手持事先准备好的镐把、扎枪再次返回夜宴歌厅,在追赶殴打刘某某过程中,任意损毁歌厅内的笔记本电脑、调音台、麦克接收机等物品。被告人丁某用镐把随意将服务员齐某某头部打伤。经物价部门鉴定,笔记本电脑、调音台、麦克接收机总价值人民币7120.00元;经法医鉴定,齐某某左额部硬膜外血肿,构成重伤。被告人丁某、李某乙、李某甲、杨某某案发后外逃,后主动到公安机关投案。并认为,被告人丁某随意殴打他人,致人重伤,其行为已构成××罪。被告人李某乙、李某甲、杨某某在公共场所持械随意殴打他人,情节恶劣,任意毁损他人财物,情节严重,其行为均已构成××罪,应予惩处。"

该案件中被告人涉及故意伤害,寻衅滋事两项罪名。接下来我们将讲解如何利用多标签模型,根据输入文本预测案件所涉及的一个或多个罪名。

0.2 文本分类应用全流程介绍

接下来,我们将按数据准备、训练、性能优化部署等三个阶段对文本分类应用的全流程进行介绍。

在这里插入图片描述在这里插入图片描述
  • 数据准备 如果没有已标注的数据集,推荐doccano数据标注工具,如何使用doccano进行数据标注并转化成指定格式本地数据集详见文本分类任务doccano使用指南。如果已有标注好的本地数据集,我们需要根据不同任务要求将数据集整理为文档要求的格式:多分类数据集格式要求、多标签数据集格式要求、层次分类数据集格式要求。

准备好数据集后,我们可以根据现有的数据集规模或训练后模型表现选择是否使用数据增强策略进行数据集扩充。

  • 模型训练 数据准备完成后,可以开始使用我们的数据集对预训练模型进行微调训练。我们可以根据任务需求,调整可配置参数,选择使用GPU或CPU进行模型训练,脚本默认保存在开发集最佳表现模型。中文任务默认使用"ernie-3.0-base-zh"模型,英文任务默认使用"ernie-2.0-base-en"模型,ERNIE 3.0还支持多个轻量级中文模型,详见ERNIE模型汇总,可以根据任务和设备需求进行选择。

首先我们需要根据场景选择不同的任务目录,具体可以见 多分类任务点击这里 多标签任务点击这里 层次分类任务点击这里

训练结束后,我们可以加载保存的最佳模型进行模型测试,打印模型预测结果。

  • 模型预测

在现实部署场景中,我们通常不仅对模型的精度表现有要求,也需要考虑模型性能上的表现。我们可以使用模型裁剪进一步压缩模型体积,文本分类应用已提供裁剪API对上一步微调后的模型进行裁剪,模型裁剪之后会默认导出静态图模型。

模型部署需要将保存的最佳模型参数(动态图)导出成静态图参数,用于后续的推理部署。

文本分类应用提供了基于ONNXRuntime的本地部署predictor,并且支持在GPU设备使用FP16,在CPU设备使用动态量化的低精度加速推理。

文本分类应用同时基于Paddle Serving的服务端部署方案。

本项目主要讲解:数据准备、模型训练、模型预测部分,对于部署部分篇幅有限,感兴趣同学可以跑一跑试一试。

参考链接:

https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification(https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification

1.文本分类任务doccano使用指南【多分类、多标签、层次分类】

安装详细事宜参考项目:

Paddlenlp之UIE分类模型【以情感倾向分析新闻分类为例】含智能标注方案)

强烈推荐:数据标注平台doccano----简介、安装、使用、踩坑记录

这里就不对安装等进行重复讲解,默认都会。

具体参考项目链接:

本项目链接:

基于ERNIR3.0文本分类:CAIL2018-SMALL罪名预测为例(多标签)

2.基于ERNIR3.0文本分类任务模型微调

代码语言:txt复制
以下是本项目主要代码结构及说明:
├── train.py # 训练评估脚本
├── predict.py # 预测脚本
├── export_model.py # 动态图参数导出静态图参数脚本
├── utils.py # 工具函数脚本
├── metric.py # metric脚本
├── prune.py # 裁剪脚本
├── prune_trainer.py # 裁剪trainer脚本
├── prune_config.py # 裁剪训练参数配置
├── requirements.txt # 环境依赖
└── README.md # 使用说明

以公开数据集CAIL2018—SMALL中罪名预测任务为示例,在训练集上进行模型微调,并在开发集上验证。

程序运行时将会自动进行训练,评估,测试。同时训练过程中会自动保存开发集上最佳模型在指定的 save_dir 中,保存模型文件结构如下所示:

代码语言:txt复制
checkpoint/
├── model_config.json
├── model_state.pdparams
├── tokenizer_config.json
└── vocab.txt

NOTE:

如需恢复模型训练,则可以设置 init_from_ckpt , 如 init_from_ckpt=checkpoint/model_state.pdparams 。

如需训练中文文本分类任务,只需更换预训练模型参数 model_name 。中文训练任务推荐使用"ernie-3.0-base-zh",更多可选模型可参考Transformer预训练模型。

2.1.加载本地数据集

在许多情况,我们需要使用本地数据集来训练我们的文本分类模型,本项目支持使用固定格式本地数据集文件进行训练。如果需要对本地数据集进行数据标注,可以参考文本分类任务doccano数据标注使用指南进行文本分类数据标注。本项目将以CAIL2018-SMALL数据集罪名预测任务为例进行介绍如何加载本地固定格式数据集进行训练:

代码语言:python代码运行次数:0复制
# !wget https://paddlenlp.bj.bcebos.com/datasets/cail2018_small_charges.tar.gz
!tar -zxvf cail2018_small_charges.tar.gz
!mv cail2018_small_charges data

本地数据集目录结构如下:

代码语言:txt复制
data/
├── train.txt # 训练数据集文件
├── dev.txt # 开发数据集文件
├── test.txt # 可选,测试训练集文件
├── label.txt # 分类标签文件
└── data.txt # 可选,待预测数据文件

train.txt(训练数据集文件), dev.txt(开发数据集文件), test.txt(可选,测试训练集文件)中输入文本序列与标签数据用 't' 分隔开,标签中多个标签之间用 ',' 逗号 分隔开。

train.txt/dev.txt/test.txt 文件格式:

代码语言:txt复制
<输入序列1>'t'<标签1>','<标签2>
<输入序列2>'t'<标签1>
...

train.txt/dev.txt/test.txt 文件样例:

代码语言:txt复制
灵璧县人民检察院指控:××事实2014年11月29日1时许,被告人彭某甲驾驶辽A×××××小型轿车行驶至辽宁省沈阳市于洪区太湖街红色根据地酒店门口路段时,与前方被害人闻某驾驶的辽A×××××号轿车发生追尾的交通事故。事故发生后,被告人彭某甲与乘坐人韩某下车与闻某发生口角争执,并在一起互相厮打。在厮打过程中,彭某甲与韩某用拳头将闻某面部打伤。经鉴定,闻某的损伤程度为轻伤二级。××事实2015年6月至2015年9月,被告人彭某甲通过其建立的“比特战斗”微信群,将47部淫秽视频文件上传至该微信群供群成员观看。公诉机关针对指控提供了相关书证,证人证言,被害人陈述,被告人供述,鉴定意见,现场勘验检查笔录等证据,公诉机关认为,被告人彭某甲伙同他人故意非法损害公民身体健康,致人轻伤;利用移动通讯终端传播淫秽电子信息,情节严重,其行为已触犯《中华人民共和国刑法》××××、××××、××××之规定,构成××罪、××罪,提请法院依法判处。    故意伤害,[制造、贩卖、传播]淫秽物品,传播淫秽物品
酉阳县人民检察院指控,2014年1月17日1时许,被告人周某某在酉阳县桃花源美食街万州烤鱼店外与田某甲发生口角,随后周某某持刀将在店内的被害人田某某砍伤。经重庆市酉阳县公安局物证鉴定室鉴定,田某某所受伤为轻伤二级。指控的证据有被告人立案决定书,户籍信息,鉴定意见,辨认笔录,被害人田某某的陈述,证人冉某、陈某某等人的证言,周某某的供述与辩解等。公诉机关认为,被告人周某某××他人身体,致人轻伤,其行为触犯了《中华人民共和国刑法》第二百三十四××的规定,犯罪事实清楚,证据确实、充分,应当以××罪追究其刑事责任。周某某在××考验期内发现有其他罪没有判决的,适用《中华人民共和国刑法》××、六十九条。提请依法判决。    故意伤害,[组织、强迫、引诱、容留、介绍]卖淫,[引诱、容留、介绍]卖淫
...

label.txt(分类标签文件)记录数据集中所有标签集合,每一行为一个标签名。

label.txt 文件格式:

代码语言:txt复制
故意伤害
盗窃
危险驾驶
非法[持有、私藏][枪支、弹药]
...

label.txt 文件样例:

代码语言:txt复制
故意伤害
盗窃
危险驾驶
非法[持有、私藏][枪支、弹药]
...

data.txt(可选,待预测数据文件)

data.txt 文件格式:

代码语言:txt复制
<输入序列1>
<输入序列2>
...

data.txt 文件样例:

代码语言:txt复制
经审理查明,2012年4月5日19时许,被告人王某在杭州市下城区朝晖路农贸市场门口贩卖盗版光碟、淫秽光碟时被民警当场抓获,并当场查获其贩卖的各类光碟5515张,其中5280张某属非法出版物、235张某属淫秽物品。上述事实,被告人王某在庭审中亦无异议,且有经庭审举证、质证的扣押物品清单、赃物照片、公安行政处罚决定书、抓获经过及户籍证明等书证;证人胡某、徐某的证言;出版物鉴定书、淫秽物品审查鉴定书及检查笔录等证据证实,足以认定。
榆林市榆阳区人民检察院指控:2015年11月22日2时许,被告人王某某在自己经营的榆阳区长城福源招待所内,介绍并容留杨某向刘某某、白某向乔某某提供性服务各一次
...

2.2 模型预测

代码语言:python代码运行次数:0复制
#单卡训练
!python train.py --early_stop --epochs 10  --warmup --save_dir "./checkpoint" --batch_size 32 --dataset_dir "data/cail2018_small_charges"
代码语言:python代码运行次数:0复制
[2022-07-27 15:03:55,267] [    INFO] - global step 530, epoch: 1, batch: 530, loss: 0.19550, micro f1 score: 0.01304, macro f1 score: 0.01056, speed: 0.60 step/s
[2022-07-27 15:04:12,334] [    INFO] - global step 540, epoch: 1, batch: 540, loss: 0.18821, micro f1 score: 0.01303, macro f1 score: 0.01053, speed: 0.60 step/s
[2022-07-27 15:04:29,497] [    INFO] - global step 550, epoch: 1, batch: 550, loss: 0.18063, micro f1 score: 0.01302, macro f1 score: 0.01051, speed: 0.59 step/s
[2022-07-27 15:04:46,820] [    INFO] - global step 560, epoch: 1, batch: 560, loss: 0.17561, micro f1 score: 0.01301, macro f1 score: 0.01049, speed: 0.59 step/s
[2022-07-27 15:05:04,307] [    INFO] - global step 570, epoch: 1, batch: 570, loss: 0.17048, micro f1 score: 0.01300, macro f1 score: 0.01046, speed: 0.58 step/s
[2022-07-27 15:05:22,099] [    INFO] - global step 580, epoch: 1, batch: 580, loss: 0.16223, micro f1 score: 0.01299, macro f1 score: 0.01044, speed: 0.57 step/s
[2022-07-27 15:05:39,808] [    INFO] - global step 590, epoch: 1, batch: 590, loss: 0.15865, micro f1 score: 0.01298, macro f1 score: 0.01041, speed: 0.58 step/s
[2022-07-27 15:05:57,613] [    INFO] - global step 600, epoch: 1, batch: 600, loss: 0.15361, micro f1 score: 0.01297, macro f1 score: 0.01039, speed: 0.57 step/s
[2022-07-27 15:06:15,583] [    INFO] - global step 610, epoch: 1, batch: 610, loss: 0.14710, micro f1 score: 0.01296, macro f1 score: 0.01037, speed: 0.57 step/s
[2022-07-27 15:06:33,658] [    INFO] - global step 620, epoch: 1, batch: 620, loss: 0.14317, micro f1 score: 0.01295, macro f1 score: 0.01034, speed: 0.56 step/s
[2022-07-27 15:06:51,894] [    INFO] - global step 630, epoch: 1, batch: 630, loss: 0.13964, micro f1 score: 0.01294, macro f1 score: 0.01032, speed: 0.56 step/s
[2022-07-27 15:07:10,206] [    INFO] - global step 640, epoch: 1, batch: 640, loss: 0.13328, micro f1 score: 0.01293, macro f1 score: 0.01030, speed: 0.56 step/s
[2022-07-27 15:07:28,673] [    INFO] - global step 650, epoch: 1, batch: 650, loss: 0.12832, micro f1 score: 0.01292, macro f1 score: 0.01028, speed: 0.55 step/s
[2022-07-27 15:07:47,244] [    INFO] - global step 660, epoch: 1, batch: 660, loss: 0.12585, micro f1 score: 0.01292, macro f1 score: 0.01026, speed: 0.55 step/s
[2022-07-27 15:08:05,915] [    INFO] - global step 670, epoch: 1, batch: 670, loss: 0.12514, micro f1 score: 0.01291, macro f1 score: 0.01024, speed: 0.55 step/s
[2022-07-27 15:08:24,775] [    INFO] - global step 680, epoch: 1, batch: 680, loss: 0.11939, micro f1 score: 0.01290, macro f1 score: 0.01021, speed: 0.54 step/s
[2022-07-27 15:08:43,779] [    INFO] - global step 690, epoch: 1, batch: 690, loss: 0.11547, micro f1 score: 0.01289, macro f1 score: 0.01019, speed: 0.54 step/s
[2022-07-27 15:09:02,844] [    INFO] - global step 700, epoch: 1, batch: 700, loss: 0.11291, micro f1 score: 0.01288, macro f1 score: 0.01017, speed: 0.53 step/s
[2022-07-27 15:09:22,234] [    INFO] - global step 710, epoch: 1, batch: 710, loss: 0.10988, micro f1 score: 0.01287, macro f1 score: 0.01015, speed: 0.53 step/s
[2022-07-27 15:09:41,752] [    INFO] - global step 720, epoch: 1, batch: 720, loss: 0.10556, micro f1 score: 0.01286, macro f1 score: 0.01013, speed: 0.52 step/s
[2022-07-27 15:10:01,621] [    INFO] - global step 730, epoch: 1, batch: 730, loss: 0.10424, micro f1 score: 0.01285, macro f1 score: 0.01011, speed: 0.51 step/s
[2022-07-27 15:10:21,675] [    INFO] - global step 740, epoch: 1, batch: 740, loss: 0.09951, micro f1 score: 0.01284, macro f1 score: 0.01009, speed: 0.51 step/s
[2022-07-27 15:10:41,949] [    INFO] - global step 750, epoch: 1, batch: 750, loss: 0.09677, micro f1 score: 0.01283, macro f1 score: 0.01007, speed: 0.50 step/s
[2022-07-27 15:11:02,267] [    INFO] - global step 760, epoch: 1, batch: 760, loss: 0.10009, micro f1 score: 0.01282, macro f1 score: 0.01005, speed: 0.50 step/s
[2022-07-27 15:11:22,657] [    INFO] - global step 770, epoch: 1, batch: 770, loss: 0.09277, micro f1 score: 0.01281, macro f1 score: 0.01003, speed: 0.50 step/s

样本集过大这边就部继续演示了,

可支持配置的参数:

save_dir保存训练模型的目录;默认保存在当前目录checkpoint文件夹下。

dataset:训练数据集;默认为"cail2018_small"。

dataset_dir:本地数据集路径,数据集路径中应包含train.txt,dev.txt和label.txt文件;默认为None。

task_name:训练数据集;默认为"charges"。

max_seq_length:ERNIE模型使用的最大序列长度,最大不能超过512, 若出现显存不足,请适当调低这一参数;默认为512。

model_name:选择预训练模型;默认为"ernie-3.0-base-zh"。

device: 选用什么设备进行训练,可选cpu、gpu、xpu、npu。如使用gpu训练,择使用参数gpus指定GPU卡号。

batch_size:批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数;默认为32。

learning_rate:Fine-tune的最大学习率;默认为3e-5。

weight_decay:控制正则项力度的参数,用于防止过拟合,默认为0.00。

early_stop:选择是否使用早停法(EarlyStopping);默认为False。

early_stop_nums:在设定的早停训练轮次内,模型在开发集上表现不再上升,训练终止;默认为6。

epochs: 训练轮次,默认为1000。

warmup:是否使用学习率warmup策略;默认为False。

warmup_steps:学习率warmup策略的steps数,如果设为2000,则学习率会在前2000 steps数从0慢慢增长到learning_rate, 而后再缓慢衰减;默认为2000。

logging_steps: 日志打印的间隔steps数,默认5。

seed:随机种子,默认为3。

2.2.1 评价指标定义

对评价指标进行阐述一下:

代码语言:txt复制
    criterion = paddle.nn.BCEWithLogitsLoss()
    metric = MetricReport() #得到F1 值  如果需要修改参考多分类文章
    
   micro_f1_score, macro_f1_score = evaluate(model, criterion, metric,
                                                  dev_data_loader)

可以看到性能指标主要关于F1值,具体大家可以参考文档

本次使用的是metrics.py文件从sklearn库导入的:

代码语言:txt复制
from sklearn.metrics import f1_score, classification_report

如有额外需求可以,使用metrics1.py文件从sklearn库导入的:

代码语言:txt复制
from sklearn.metrics import roc_auc_score, f1_score, precision_score, recall_score
代码语言:txt复制
import numpy as np
from sklearn.metrics import roc_auc_score, f1_score, precision_score, recall_score

from paddle.metric import Metric


class MultiLabelReport(Metric):
    """
    AUC and F1 Score for multi-label text classification task.
    """

    def __init__(self, name='MultiLabelReport', average='micro'):
        super(MultiLabelReport, self).__init__()
        self.average = average
        self._name = name
        self.reset()

    def f1_score(self, y_prob):
        '''
        Returns the f1 score by searching the best threshhold
        '''
        best_score = 0
        for threshold in [i * 0.01 for i in range(100)]:
            self.y_pred = y_prob > threshold
            score = f1_score(y_pred=self.y_pred, y_true=self.y_true, average=self.average)
            if score > best_score:
                best_score = score
                precison = precision_score(y_pred=self.y_pred, y_true=self.y_true, average=self.average)
                recall = recall_score(y_pred=self.y_pred, y_true=self.y_true, average=self.average)
        return best_score, precison, recall

    def reset(self):
        """
        Resets all of the metric state.
        """
        self.y_prob = None
        self.y_true = None

    def update(self, probs, labels):
        if self.y_prob is not None:
            self.y_prob = np.append(self.y_prob, probs.numpy(), axis=0)
        else:
            self.y_prob = probs.numpy()
        if self.y_true is not None:
            self.y_true = np.append(self.y_true, labels.numpy(), axis=0)
        else:
            self.y_true = labels.numpy()

    def accumulate(self):
        auc = roc_auc_score(
            y_score=self.y_prob, y_true=self.y_true, average=self.average)
        f1_score, precison, recall = self.f1_score(y_prob=self.y_prob)
        return auc, f1_score, precison, recall

    def name(self):
        """
        Returns metric name
        """
        return self._name

详细细节参考项目:

代码语言:python代码运行次数:0复制
#多卡训练:
#unset CUDA_VISIBLE_DEVICES
#!python -m paddle.distributed.launch --gpus "0" train.py --early_stop --dataset_dir data
#使用多卡训练可以指定多个GPU卡号,例如 --gpus "0,1"

2.3 模型预测

输入待预测数据和数据标签对照列表,模型预测数据对应的标签

使用默认数据进行预测:

代码语言:txt复制
python predict.py --params_path ./checkpoint/

也可以选择使用本地数据文件data/data.txt进行预测:

代码语言:python代码运行次数:0复制
!python predict.py --params_path ./checkpoint/ --dataset_dir data/cail2018_small_charges

输入样本:

代码语言:txt复制
经审理查明,2012年4月5日19时许,被告人王某在杭州市下城区朝晖路农贸市场门口贩卖盗版光碟、淫秽光碟时被民警当场抓获,并当场查获其贩卖的各类光碟5515张,其中5280张某属非法出版物、235张某属淫秽物品。上述事实,被告人王某在庭审中亦无异议,且有经庭审举证、质证的扣押物品清单、赃物照片、公安行政处罚决定书、抓获经过及户籍证明等书证;证人胡某、徐某的证言;出版物鉴定书、淫秽物品审查鉴定书及检查笔录等证据证实,足以认定。
榆林市榆阳区人民检察院指控:2015年11月22日2时许,被告人王某某在自己经营的榆阳区长城福源招待所内,介绍并容留杨某向刘某某、白某向乔某某提供性服务各一次。
静乐县人民检察院指控,2014年8月30日15时许,静乐县苏坊村村民张某某因占地问题去苏坊村半切沟静静铁路第五标施工地点阻拦施工时,遭被告人王某某阻止,张某某打电话叫来儿子李某某,李某某看到张某某躺在地上,打了王某某一耳光。于是王某某指使工人殴打李某某,致李某某受伤。经忻州市公安司法鉴定中心鉴定,李某某的损伤评定为轻伤一级。李某某被打伤后,被告人王某某为逃避法律追究,找到任某某,指使任某某作实施××的伪证,并承诺每月给1万元。同时王某某指使工人王某甲、韩某某去丰润派出所作由任某某打伤李某某的伪证,导致任某某被静乐县公安局以涉嫌××罪刑事拘留。公诉机关认为,被告人王某某的行为触犯了《中华人民共和国刑法》××、《中华人民共和国刑法》××××之规定,应以××罪和××罪追究其刑事责任,数罪并罚。

输出结果:自行运行一下

3. 结论

本项目主要讲解了犯罪名预测任务、以及doccano标注指南(对于多分类多标签问题),和对性能指标的简单探讨,可以看到实际更多问题是关于多标签分类的。

欢迎大家关注我的主页:https://aistudio.baidu.com/aistudio/usercenter

以及博客:https://blog.csdn.net/sinat_39620217?type=blog

0 人点赞