准备工作
数据准备
在文心中,基于ERNIE的模型都不需要用户自己分词和生成词表文件,非ERNIE的模型需要用户自己提前切好词,词之间以空格分隔,并生成词表文件。切词和词表生成可以使用数据预处理小工具进行处理。
文心中的所有数据集、包含词表文件、label_map文件等都必须为为utf-8格式,如果你的数据是其他格式,请使用数据预处理小工具进行格式转换。
文心中的训练集、测试集、验证集和预测集分别存放在./data目录下的train_data、test_data、dev_data和predict_data文件夹下,词表文件存放在./dict目录下。
在分类任务中,训练集、测试集和验证集的数据格式相同,数据分为两列,列与列之间用\t进行分隔。第一列为文本,第二列为标签。以下为示例:
单标签分类
-
非ERNIE训练集数据示例:数据分为两列,列与列之间用\t进行分隔。第一列为文本,第二列为标签。
房间 太 小 。 其他 的 都 一般 。 。 。 。 。 。 。 。 。 0 LED屏 就是 爽 , 基本 硬件 配置 都 很 均衡 , 镜面 考 漆 不错 , 小黑 , 我喜欢 。 1 差 得 要命 , 很大 股霉味 , 勉强 住 了 一晚 , 第二天 大早 赶紧 溜。 0 -
非ERNIE预测数据集示例:仅一列为文本,不需要标签列
USB接口 只有 2个 , 太 少 了 点 , 不能 接 太多 外 接 设备 ! 表面 容易 留下 污垢 ! 平时 只 用来 工作 , 上 上网 , 挺不错 的 , 没有 冗余 的 功能 , 样子 也 比较 正式 ! 还 可以 吧 , 价格 实惠 宾馆 反馈 2008年4月17日 : 谢谢 ! 欢迎 再次 入住 其士 大酒店 。 -
非ERNIE模型的词表文件示例:词表分为两列,第一列为词,第二列为id(从0开始),列与列之间用\t进行分隔。文心的词表中,[PAD]、[CLS]、[SEP]、[MASK]、[UNK]这5个词是必须要有的,若用户自备词表,需保证这5个词是存在的。部分词表示例如下所示:
[PAD] 0 [CLS] 1 [SEP] 2 [MASK] 3 [UNK] 4 郑重 5 天空 6 工地 7 神圣 8 -
ERNIE数据集与非ERNIE数据集格式一致,不同之处在于不用分词,如下所示:
选择珠江花园的原因就是方便,有电动扶梯直接到达海边,周围餐馆、食廊、商场、超市、摊位一应俱全。酒店装修一般,但还算整洁。 1 15.4寸笔记本的键盘确实爽,基本跟台式机差不多了,蛮喜欢数字小键盘,输数字特方便,样子也很美观,做工也相当不错 1 房间太小。其他的都一般。。。。。。。。。 0 -
ERNIE词表文件格式与非ERNIE的格式一致,由文心提供。
[PAD] 0 [CLS] 1 [SEP] 2 [MASK] 3 , 4 的 5 、 6 一 7 人 8 有 9
多标签分类
-
ERNIE训练集数据示例:数据分为两列,列与列之间用\t进行分隔。第一列为文本,第二列为标签,当该样本拥有多个标签时,标签之间使用空格进行分隔。比如你的标签有100种,某个样例的标签是第50个标签和第87个标签,其标签列就是“49 86”。像这个情况就是标签的第49和86维是正例1,其他维是负例0。非ERNIE的训练集数据与ERNIE一致,区别就是非ERNIE的文本需要切词,这里不再赘述。
互联网创业就如选秀 需求与服务就是价值 0 1 郭德纲式生存:时代的变与未变 2 快讯!腾讯市值突破10000亿港元 3 -
ERNIE预测数据集示例:仅一列为文本,不需要标签列,非ERNIE的训练集数据与ERNIE一致,区别就是非ERNIE的文本需要切词,这里不再赘述。
互联网创业就如选秀 需求与服务就是价值 郭德纲式生存:时代的变与未变 快讯!腾讯市值突破10000亿港元 - 词表的格式与单标签分类一致,不再赘述
网络(模型)选择
文心预置的可用于文本分类的模型源文件在wenxin/models/目录下,各个模型的特点如下所示:
| 网络名称(py文件的类名) | 简介 | 支持类型 | 支持预训练模型 | 备注 |
|---|---|---|---|---|
| BowClassification | 词袋模型,不考虑语法和语序,用一组无序单词来表达一段文本。 | 单标签分类 | 无 | |
| ErnieFcClassification | 基于ERNIE预训练模型的最简单的分类模型,在ERNIE的embedding输出层之后直接添加FC(全链接层)降维到标签数量的纬度,loss使用交叉熵。网络结构简单,效果好。 | 单标签分类 | ERNIE1.0、ERNIE2.0-Base、ERNIE2.0-Large、ERNIE2.1-Base、ERNIE2.1-Large、ERNIE2.2-Base、ERNIE-Tiny | |
| ErnieMultiLabelClassification | 处理多标签分类任务的网络结构,在ErnieFcClassification的基础上,loss由二分类交叉熵更换为 sigmoid cross entropy | 多标签分类 | ERNIE2.0-Base、ERNIE2.0-Large、ERNIE2.3-Base、ERNIE2.3-Large、ERNIE3.0 |
ERNIE预训练模型选择
文心提供的ERNIE预训练模型的参数文件和配置文件在./tasks/model_files/目录下,config目录下是所提供的所有ERNIE预训练模型的配置文件,dict目录下是所有ERNIR预训练模型对应的词表文件,ERNIE预训练模型的参数文件都存储在文心的仓库中,由对应的download_xx.sh文件是下载得到。以下是各个ERNIE预训练模型的介绍。
| 模型名称 | 简介 | 备注 |
|---|---|---|
| ERNIE 1.0 | ERNIE 1.0 通过建模海量数据中的词、实体及实体关系,学习真实世界的语义知识。相较于 BERT 学习原始语言信号,ERNIE 直接对先验语义知识单元进行建模,增强了模型语义表示能力。 | |
| ERNIE-Tiny | 同ERNIE-Tiny | |
| ERNIE 2.0 | ERNIE 2.0 是基于持续学习的语义理解预训练框架,使用多任务学习增量式构建预训练任务。ERNIE 2.0中,新构建的预训练任务类型可以无缝的加入训练框架,持续的进行语义理解学习。 通过新增的实体预测、句子因果关系判断、文章句子结构重建等语义任务,ERNIE 2.0语义理解预训练模型从训练数据中获取了词法、句法、语义等多个维度的自然语言信息,极大地增强了通用语义表示能力。 | |
| ERNIE 2.3 | ERNIE2.3是针对ERNIE 2.0优化后的一个版本,通过提出多视角对抗预训练语言技术、随机位置编码策略和对比自监督预训练技术,使得模型在8个中文主流下游任务上获得了明显的效果提升。 | |
| ERNIE 3.0 | ERNIE 3.0中,提出了一个多范式统一的大规模预训练框架,基于该框架,ERNIE 3.0融合了自回归网络和自编码网络,同时由于大规模知识图谱类数据的引入,使得模型能够在理解任务、生成任务、零样本学习任务和常识推理任务上均获取优秀的表现。 | |
| ERNIE 3.0-1.5B | ERNIE3.0-1.5B是针对理解任务训练的大模型,模型规模处于ERNIE-Large和ERNIE3.0(10B)模型之间。通过增大模型规模以及提出Pretrain-RDrop技术,使得模型在多个中文主流下游任务上获得了明显的效果提升。在6大中文数据集上,1.5B模型相对ERNIE 2.3 Large模型平均提升+0.49%。 | |
| ERNIE-Word | ERNIE-Word是利用百度研发的先进中文预训练语言模型ERNIE产出的静态词向量。 | |
| ERNIE-M | ERNIE-M 是一个多语言模型,它通过大规模的单语语料和双语语料来捕捉语言之间的语义,可以同时建模96种语言,适用于各项多语言任务,跨语言任务。 | |
| ERNIE-Doc | 传统预训练模型(ERNIE、BERT等)的最大建模长度一般不超过512,因此在处理长度超过512的文本时,或是选择随机截断成512个字符长度,或是选择裁剪为多个长度不超过512的文本片段。上述的两种策略均会造成信息丢失或者文本语义割裂的问题,也即传统的预训练模型并不适用于超长文本的应用场景。ERNIE_DOC是一种基于Transformer-XL架构的长文本预训练语言模型。 |
模型评估指标选择
分类任务常用的指标有:Acc(准确率)、Precision(精确率)、Recall(召回率)、F1,详见常用指标解析 文心中上述已有的网络(模型)代码中已经默认预置了Acc(准确率)、Precision(精确率)、Recall(召回率)、F1计算。
运行环境选择
- 非ERNIE网络,优先考虑CPU机器
- ERNIE网络优先考虑GPU机器,显存大小最好在10G以上。
