准备工作:序列标注
数据准备
在文心中,基于ERNIE的模型都不需要用户自己分词和生成词表文件,非ERNIE的模型需要用户自己提前切好词,词之间以空格分隔,并生成词表文件。切词和词表生成可以使用[快速使用->数据预处理]进行处理。
文心中的所有数据集、包含词表文件、label_map文件等都必须为为utf-8格式,如果你的数据是其他格式,请使用[快速使用->数据预处理]进行格式转换。
文心中的训练集、测试集、验证集和预测集分别存放在./data目录下的train_data、test_data、dev_data和predict_data文件夹下,词表文件存放在./dict目录下。
在序列标注任务中,训练集、测试集和验证集的数据格式相同,数据分为两列,列与列之间用\t进行分隔。第一列为文本,第二列为标签。
-
实体识别
-
训练集数据示例:数据分为两列,列与列之间用\t进行分隔。第一列为文本,第二列为标签。
海 钓 比 赛 地 点 在 厦 门 与 金 门 之 间 的 海 域 。 O O O O O O O B-LOC I-LOC O B-LOC I-LOC O O O O O O 周 恩 来 总 理 说 , 那 就 送 一 株 万 古 常 青 的 友 谊 红 杉 吧 ! B-PER I-PER I-PER O O O O O O O O O O O O O O O O O O O O 沙 特 队 教 练 佩 雷 拉 : 两 支 队 都 想 胜 , 因 此 都 作 出 了 最 大 的 努 力 。 B-ORG I-ORG I-ORG O O B-PER I-PER I-PER O O O O O O O O O O O O O O O O O O O O
-
词表文件:词表分为两列,第一列为词,第二列为id(从0开始),列与列之间用\t进行分隔,一般是vocab.txt文件。文心的词表中,[PAD]、[CLS]、[SEP]、[MASK]、[UNK]这5个词是必须要有的,若用户自备词表,需保证这5个词是存在的。
[PAD] 0 [CLS] 1 [SEP] 2 [MASK] 3 , 4 的 5 、 6 一 7 人 8 有 9 是 10
- 标签词表文件:标签词表分为两列,第一列为词,第二列为id(从0开始),列与列之间用\t进行分隔,一般是vocab_label_map.txt文件。标签顺序需要满足对应的标签体系,比如下面是BIO的标签体系,同一类别的标签B要排在I前面,O排在整个标签词表的最后。
B-PER 0 I-PER 1 B-ORG 2 I-ORG 3 B-LOC 4 I-LOC 5 O 6
-
网络(模型)选择
文心预置的可用于序列标注的模型在wenxin_appzoo/tasks/sequence_labeling目录下,目前支持模型的特点如下所示:
网络名称(py文件的类名) | 简介 | 支持类型 | 支持预训练模型 | 备注 |
---|---|---|---|---|
ErnieFcSeqLabel | 基于ERNIE和FC的序列标注模型,本质是对每个token做分类,分类的类别总数是标签的数目 | 序列标注 | ERNIE1.0、ERNIE2.0-Base、ERNIE2.0-Large、ERNIE2.1-Base、ERNIE2.1-Large、ERNIE2.2-Base、ERNIE-Tiny、ERNIE3.0-Base、ERNIE3.0-Large、ERNIE3.0-Tiny | 忽略了标签之间的关系 |
ERNIE预训练模型选择
文心提供的ERNIE预训练模型的参数文件和配置文件在wenxin_appzoo/models_hub目录下,由对应的download_xx.sh文件是下载得到,包括模型的参数文件、配置文件以及词表等。以下是各个ERNIE预训练模型的介绍:
模型名称 | 简介 | 备注 |
---|---|---|
ERNIE 3.0-Tiny | 由于预训练语言模型越来愈大,过大的参数量导致了模型难以使用。ERNIE 3.0-Tiny 通过知识蒸馏的方式将大模型压缩到若干个不同大小的小模型,以便满足不同的需求。同时,ERNIE 3.0-Tiny采用task-agnostic蒸馏方案,与以往蒸馏不同,ERNIE 3.0-Tiny 模型开箱即用,在下游任务上直接finetune就能取得不错的效果,无需额外使用下游老师模型进行蒸馏。 | |
ERNIE 3.0 Base/Large | ERNIE 3.0系列模型是针对ERNIE模型优化的最新版本,通过提出字词混合的自监督对比学习预训练技术和字词混合数据增强自对抗微调技术,使得模型在8个中文主流下游任务上获得了明显的效果提升。 | |
ERNIE 3.0-10B | ERNIE 3.0中,提出了一个多范式统一的大规模预训练框架,基于该框架,ERNIE 3.0融合了自回归网络和自编码网络,同时由于大规模知识图谱类数据的引入,使得模型能够在理解任务、生成任务、零样本学习任务和常识推理任务上均获取优秀的表现。 | |
ERNIE3.0-1.5B | ERNIE3.0-1.5B是针对理解任务训练的大模型,模型规模处于ERNIE-Large和ERNIE3.0(10B)模型之间。通过增大模型规模以及提出Pretrain-RDrop技术,使得模型在多个中文主流下游任务上获得了明显的效果提升。在6大中文数据集上,1.5B模型相对ERNIE 2.3 Large模型平均提升+0.49%。 | |
ERNIE 3.0-Doc | 传统预训练模型(ERNIE、BERT等)的最大建模长度一般不超过512,因此在处理长度超过512的文本时,或是选择随机截断成512个字符长度,或是选择裁剪为多个长度不超过512的文本片段。上述的两种策略均会造成信息丢失或者文本语义割裂的问题,也即传统的预训练模型并不适用于超长文本的应用场景。ERNIE_DOC是一种基于Transformer-XL架构的长文本预训练语言模型。 | |
ERNIE 2.0 | ERNIE 2.0是基于持续学习的语义理解预训练框架,使用多任务学习增量式构建预训练任务。在ERNIE2.0中,新构建的预训练任务类型可以无缝的加入训练框架,持续的进行语义理解学习。 通过新增的实体预测、句子因果关系判断、文章句子结构重建等语义任务,ERNIE 2.0 语义理解预训练模型从训练数据中获取了词法、句法、语义等多个维度的自然语言信息,极大地增强了通用语义表示能力。 | |
ERNIE 2.3 | ERNIE 2.3是针对ERNIE 2.0优化后的一个版本,通过提出多视角对抗预训练语言技术、随机位置编码策略和对比自监督预训练技术,使得模型在8个中文主流下游任务上获得了明显的效果提升。 |
模型评估指标选择
序列标注任务常用的指标有:Acc(准确率)、Precision(精确率)、Recall(召回率)、F1,这几个指标与常见的分类、匹配等任务的计算有所区别,详见常用指标解析中的Chunk指标计算。 文心中上述已有的网络(模型)代码中已经默认预置了Acc(准确率)、Precision(精确率)、Recall(召回率)、F1计算。
运行环境选择
- 非ERNIE网络,优先考虑CPU机器
- ERNIE网络优先考虑GPU机器,显存大小最好在10G以上。