听说你不会调参?TextCNN的优化经验Tricks汇总 (2)

最后的结果过于依赖某一特征,比如我们的模型过于依赖A特征,但是A 特征的准确率只有88%左右,导致A特征的准确率成了我们模型优化的瓶颈 (占比约30%)

泛化能力较差,比如"我要看黄渤的电影"可以判别正确,但是"我要看周星驰的电影"就判别不对 (占比约20%)

缺乏先验知识,比如"青花瓷" 更容易出现在音乐当中, 而不是出现在baike 当中,但是我们在训练数据当中并没有特征可以体现这一先验知识(占比约10%)

3: 针对原因,专项优化

原因一:训练集合和测试集合部分特征抽取方式不一致

优化方法

由于测试集合是使用java 代码进行特征抽取以及预测的,训练集合是用python 代码进行特征抽取以及训练的,所以我们统一了预测代码与测试代码,共用一套代码

由于之前历史原因,我们训练集合与测试集合抽取特征使用的数据源不同,根据分析来看这种影响非常的大,本次优化使用了同一份数据源

优化结果:相对于原来的baseline,提升了0.4%

原因二:过于依赖效果不佳的特征

优化方法

在全连接层 增加dropout层,设置神经元随机失活的比例为0.3,即keep_rate= 0.7

在数据预处理的时候,随机去掉10%的A特征

优化结果

针对方法1,效果提升了0.11%,可以认为在这里随机扔掉30%的所有特征(包括A特征),让训练结果与A特征不强相关

针对方法2,效果提升了0.29%,因为我们只是过于依赖A特征,并没有过分依赖其他特征,故只在数据预处理的随机去掉10%的A特征,更有针对性的

原因三:泛化能力差

优化方法:增加槽位抽取:针对部分query, 增加槽位抽取的处理,比如将"黄渤", "周星驰" 等映射为aritist. 这样此类query, 模型见到的都是 我要看artist的电影,不存在缺乏泛化能力的问题. 瓶颈在于槽位抽取的准确率。

优化结果:没有单独实验, 增加槽位抽取后共同实验,分析badcase发现此类问题基本解决

原因四:缺乏先验知识

优化方法:引入200万外部词表以及 计算”青花瓷“在整体语料中出现在其他类别的频率来部分解决这个问题

优化结果:模型提升了0.5%

4.模型调优实操

1) 模型优化术语说明

在我们下面行文中,会有一些术语,为了方便说明我们先提前解释一下

baseline: 最开始的实验结果, 后续所有的实验结果,都会和baseline的结果进行对比,来体现每一次实验优化的提升

baseline diff:相比baseline的结果, 我们实验的提升有多少

测试集acc:即我们的模型在测试集合的准确率

epoch :一个epoch 表示将将所有训练样本学习一遍

iteration(step)或者叫迭代步数: 表示运行一次iteration或者(step) 更新一次参数。每运行一次iteration 都需要一个batch size 的数据进行学习,学习完一个batch size 的数据,更新一次参数, 下面的所有实验 迭代步数全部为26万步

batch size: 迭代一次需要的样本量,下面的实验,batch size 全部设置为64

听说你不会调参?TextCNN的优化经验Tricks汇总

举例说明:exampleNums(样本数) = 100000, epoch = 64, batch size = 64, 那么iteration = 100000

2) 模型优化过程说明 实验BaseLine 无论是论文还是日常的工作,最首要一点是跑出baseline 即我们实验的起点,我们本次的baseline 即不对textCNN的网络结构做任何调整在我们测试集合的准确率

 

实验0 baseline 测试基本参数在测试集合的表现

 

修改内容

 

测试集acc

 

迭代步数

 

baseline diff

 

无任何修改

 

85.14%

 

26w

 

0

 

 

优化实验一:修改embedding_dim长度

Embeddinga_dim :128, 即将我们的query 映射成向量的时候,向量本身的维度

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzwyj.html