StructBERT-mental预训练模型-中文-base
StructBERT-mental的中文Base预训练模型是在StructBert的基础上使用Adapter的方式融合心理以及情感相关知识的中文自然语言理解预训练模型
  • 模型资讯
  • 模型资料

基于StructBERT-mental的中文Base预训练模型介绍

StructBERT-mental的中文Base预训练模型是在StructBert的基础上使用Adapter的方式融合心理以及情感相关知识的中文自然语言理解预训练模型。

模型描述

模型在StructBERT的基础上,通过独立的Adapter使用动态权重mlm任务在知乎、心理论坛等1.03GB语料上进行训练,使得Adapter获得mental领域的知识,同时避免原有StructBert信息的遗忘。

本模型为Base规模(Layer-12 / Hidden-768 / Head-12),参数规模约为111M。

期望模型使用方式以及适用范围

本模型主要用于中文相关(心理和情感任务为主)下游任务微调。用户可以基于自有训练数据进行微调。具体调用方式请参考代码示例。

如何使用

在安装完成ModelScope-lib之后即可基于nlp_plug-mental_backbone_base进行下游任务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_plug-mental_backbone_base',
    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()

模型局限性以及可能的偏差

基于中文数据进行训练,模型训练数据有限,效果可能存在一定偏差。主要针对心理、情感领域的任务,其它领域的效果可能存在一定偏差。

训练数据介绍

数据来源于知乎论坛心理相关的语料以及心理论坛的语料,共1.03GB

模型训练流程

  1. 对StructBert模型进行freeze,训练adapter部分,避免StructBert中信息的遗忘以及加快训练速度。
  2. 使用上述的语料,使用内部的抽取工具赋予抽取文本在mlm任务更大的权重进行训练

数据评估及结果

在下游任务finetune后,nlpcc2013中文微博情绪识别和SMP2020微博情绪分类结果如下:

Model nlpcc2013 SMP2020
roberta_base 66.45 79.27
structbert_base 67.82 80.43
StructBERT-mental(without pretrain) 67.60 80.53
StructBERT-mental(ours) 69.22 80.82

注:StructBERT-mental(without pretrain)为增加adapter,但是没有进行pretrain的模型,目的是对增加参数这个因子进行消融

相关论文以及引用信息

如果我们的模型对您有帮助,请您引用我们的文章:

@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}
}