在数据增强、蒸馏剪枝下ERNIE3.0模型性能提升
项目链接:
https://aistudio.baidu.com/aistudio/projectdetail/4436131?contributionType=1
以CBLUE数据集中医疗搜索检索词意图分类为例:
本项目首先讲解了数据增强和数据蒸馏的方案,并在后面章节进行效果展示,结果预览:
| 模型 | ACC |Precision |Recall| F1 |average_of_acc_and_f1 |
| -------- | -------- | -------- | -------- | -------- |-------- |
| ERNIE 3.0 Base| 0.80255 | 0.9317147 |0.908284 | 0.919850 |0.86120 |
| ERNIE 3.0 Base 数据增强 | 0.7979539 | 0.901004 |0.92899 | 0.91478 |0.8563 |
| ERNIE 3.0 Base 剪裁保留比0.5 | 0.79846 | 0.951257 |0.89497 | 0.92225 |0.8603 |
| ERNIE 3.0 Base 剪裁保留比2/3 | 0.8092071 | 0.9415384 |0.905325 | 0.923076 |0.86614 |
gensim安装最新版本:pip install gensim
tqdm安装:pip install tqdm
LAC安装最新版本:pip install lac
**Gensim库介绍**
Gensim是在做自然语言处理时较为经常用到的一个工具库,主要用来以无监督的方式从原始的非结构化文本当中来学习到文本隐藏层的主题向量表达。
主要包括TF-IDF,LSA,LDA,word2vec,doc2vec等多种模型。
**Tqdm**
是一个快速,可扩展的Python进度条,可以在 Python 长循环中添加一个进度提示信息,用户只需要封装任意的迭代器 tqdm(iterator)。目的为了程序显示的美观
**中文词法分析-LAC**
LAC是一个联合的词法分析模型,整体性地完成中文分词、词性标注、专名识别任务。LAC既可以认为是Lexical Analysis of Chinese的首字母缩写,也可以认为是LAC Analyzes Chinese的递归缩写。
LAC基于一个堆叠的双向GRU结构,在长文本上准确复刻了百度AI开放平台上的词法分析算法。效果方面,分词、词性、专名识别的整体准确率95.5%;单独评估专名识别任务,F值87.1%(准确90.3,召回85.4%),总体略优于开放平台版本。在效果优化的基础上,LAC的模型简洁高效,内存开销不到100M,而速度则比百度AI开放平台提高了57%
LAC链接:https://www.paddlepaddle.org.cn/modelbasedetail/lac
!pip install --upgrade paddlenlp
!pip install gensim
!pip install tqdm
!pip install lac
2.数据增强方案介绍
数据增强工具提供4种增强策略:遮盖、删除、同词性词替换、词向量近义词替换
!unzip ERNIE-.zip -d ./ERNIE
#添加ERNIE工具包
代码语言:txt复制如果程序报错:
可以发现提示有一个.ipynb_checkpoints的文件。但当我去对应的文件夹找时根本看不到这个文件,所以猜测是一个隐藏文件。所以通过终端进入对应的目录:输入cd coco进入对应目录,输入ls -a显示所有文件。然后输入rm -rf .ipynb_checkpoints删除该文件。再次输入ls -a查看文件是否被删除。
下载词表,词表有1.7G会花点时间。下面以情感分析数据样例展示demo,看看数据增强的效果。
代码语言:python代码运行次数:0复制!wget -q --no-check-certificate http://bj.bcebos.com/wenxin-models/vec2.txt
**python data_aug.py "输入文件夹的目录" "输出文件夹的目录"**
* **data_aug.py脚本传参说明**
代码语言:txt复制shell输入:
python data_aug.py -h
shell输出:
usage: data_aug.py [-h] [-n AUG_TIMES] [-c COLUMN_NUMBER] [-u UNK]
[-t TRUNCATE] [-r POS_REPLACE] [-w W2V_REPLACE]
[-e ERNIE_REPLACE] [--unk_token UNK_TOKEN]
input output
main
positional arguments:
input #原始待增强数据文件所在文件夹,带label的,一个或多个文本列
output #输出文件路径
optional arguments:
-h, --help show this help message and exit
-n AUG_TIMES, --aug_times AUG_TIMES #数据集数目放大n倍,output行数为input的n 1倍
-c COLUMN_NUMBER, --column_number COLUMN_NUMBER #明文文件中所要增强列的列序号,多列用逗号分割,如:1,2
-u UNK, --unk UNK #unk 增强策略的概率
-t TRUNCATE, --truncate TRUNCATE #truncate 增强策略的概率
-r POS_REPLACE, --pos_replace POS_REPLACE #pos_replace 增强策略的概率
-w W2V_REPLACE, --w2v_replace W2V_REPLACE #w2v_replace 增强策略的概率
--unk_token UNK_TOKEN
分类问题中:推荐使用前三种即可,w2v词向量近义词替换可以不用,花费时间太长。
代码语言:python代码运行次数:0复制!python data_aug.py --unk 0.25 --truncate 0.25 --pos 0.5 --w2v 0 ./train ./output
代码语言:python代码运行次数:0复制demo结果展示:
机器 背面 似乎 被 撕 了 张 什么 标签 , 残 胶 还在 。 但是 又 看 不 出 是 什么 标签 不见 了 , 该 有 的 都 在 , 怪 0
机器 背面 似乎 被 撕 了 张 什么 标签 , 胶 还在 。 但是 又 看 不 出 是 什么 标签 不见 了 , 该 有 的 都 在 , 怪 0
机器 背面 了 张 什么 标签 , 残 胶 还在 。 但是 又 看 不 出 是 什么 标签 了 , 该在 , 怪 0
呵呵 , 虽然 表皮 看上去 不错 很 精致 , 但是 我 还是 能 看得出来 是 盗 的 。 但是 里面 的 内容 真 的 不错 , 我 妈 爱 看 , 我自己 也 学 着 找 一些 穴位 。 0
呵呵 , 虽然 表皮 看上去 不错 很 精致 , 但是 我 还是 能 看得出来 是 盗 的 。 但是 里面 的 内容 真 的 不错 , 我