该模型在StructBERT预训练模型的基础上使用400GB司法语料进行预训练。训练语料涵盖了裁判文书、法律法规、庭审笔录、法律问答和法律百科等司法领域文本。
本模型为Tiny规模(Layer-4 / Hidden-256 / Head-4),参数规模约为9M。
200GB通用语料和400GB司法语料,共计2150亿个tokens,涵盖了裁判文书、法律法规、庭审笔录、法律问答和法律百科等司法领域文本。
由于司法文书格式十分规范,为了防止模型过拟合,在处理预训练数据时,基于自建的司法文书结构化引擎标识出了司法文书各类段落(如诉情、辩称、事实认定、审理经过等等),接着针对不同的司法文本内容采取了不同的采样规则。
在预训练任务方面结合了token-level和sentence-level的任务。
token-level的预训练任务主要以MLM任务为主 ,shuffle任务和random任务的预测为辅。
句级别的预训练任务以simcse为主。
本模型主要用于中文相关下游任务微调。用户可以基于自有训练数据进行微调。具体调用方式请参考代码示例。
在安装完成ModelScope之后即可基于nlp_structbert_backbone_tiny_law进行下游任务finetune。
from modelscope.metainfo import Preprocessors
from modelscope.msdatasets import MsDataset
from modelscope.trainers import build_trainer
from modelscope.utils.constant import Tasks
# 通过这个方法修改cfg
def cfg_modify_fn(cfg):
# 将backbone模型加载到句子相似度的模型类中
cfg.task = Tasks.sentence_similarity
# 使用句子相似度的预处理器
cfg['preprocessor'] = {'type': Preprocessors.sen_sim_tokenizer}
# 演示代码修改,正常使用不用修改
cfg.train.dataloader.workers_per_gpu = 0
cfg.evaluation.dataloader.workers_per_gpu = 0
# 补充数据集的特性
cfg['dataset'] = {
'train': {
# 实际label字段内容枚举,在训练backbone时需要传入
'labels': ['0', '1'],
# 第一个字段的key
'first_sequence': 'sentence1',
# 第二个字段的key
'second_sequence': 'sentence2',
# label的key
'label': 'label',
}
}
# lr_scheduler的配置
cfg.train.lr_scheduler.total_iters = int(len(dataset['train']) / 32) * cfg.train.max_epochs
return cfg
#使用clue的afqmc进行训练
dataset = MsDataset.load('clue', subset_name='afqmc')
kwargs = dict(
model='damo/nlp_structbert_backbone_tiny_law',
train_dataset=dataset['train'],
eval_dataset=dataset['validation'],
work_dir='/tmp',
cfg_modify_fn=cfg_modify_fn)
#使用nlp-base-trainer
trainer = build_trainer(name='nlp-base-trainer', default_args=kwargs)
trainer.train()
基于司法领域数据进行训练得到,在其他领域的表现存在一定的偏差。
@article{wang2019structbert,
title={Structbert: Incorporating language structures into pre-training for deep language understanding},
author={Wang, Wei and Bi, Bin and Yan, Ming and Wu, Chen and Bao, Zuyi and Xia, Jiangnan and Peng, Liwei and Si, Luo},
journal={arXiv preprint arXiv:1908.04577},
year={2019}
}