文本分类,可能有用的tricks

一、稳定有收益的,祖传老方子

  1. RNN based model 包括LSTM和GRU,使用双向结构
  2. embedding之后使用dropout
  3. ensemble集成
  4. 尽可能找到还原语义的pretrained embedding,实际情况是oov千奇百怪,拼写检查,基本上是100倍的努力,一点点收益,或者拆词,拆字能一定程度上缓解(比如说你要训练一个某个领域(量化投资)的人短信文本分类,有条件下尽量自己拿相近的行业比较大的语聊训练一个词向量,实际上线的遇见比如investvanguard(OOV)【假设一个投资公司的名称】可能就要用到n-gram(一般二元就成)去切割成invest和 vanguard【其切完后的有可能就是强特征的invest,如果将这个OOV直接赋值零向量可能会损失强特征】)

二、有可能有负作用,跟具体的配方有关,考验炼丹水平,看运气

  1. embedding是否参与训练(Yoon Kim论文的结论是训练好,然而实际中基本对半)
  2. BN和dropout,以及他们的相对位置和顺序
  3. meta-feature的使用,比如说词性,情感,还有各种语言学特征和元信息等
  4. 要用CNN的话,用空洞版本,大窗口
  5. 数据增强,drop,shuffle,replace,近义词,扩充,截取
  6. 循环学习率(这个base max step 调的好,能巨大加速收敛速度)
  7. char/subword level的使用
  8. 词元化,词干化(有收益的比较少)怼好分词
  9. 不均衡下的采样,梯度放缩,focal loss
  10. 伪标签,半监督
  11. 去停用词(基本都是负作用),标点保留还是去掉
  12. 过拟合后冻层finetune
  13. 长短文本各适合什么模型呢,仅在一个数据集上发现,ngram+svm可以吊打深度模型,文本挺长的,结论应该不可以泛化
  14. 多embedding concat,mean,收益不稳定,有时候能发现加速收敛
  15. 加宽加深(知乎看山杯)
  16. boosting(知乎看山杯)
  17. vocab的数量,是否统一替换或者过滤低频词(kaggle avito)
  18. 网络增加冗余的激活然后concat(kaggle mecri)
  19. Maxlen覆盖百分之99就可以了,不需要最大
  20. 还有一招,换种子

总结一下,数据量足够的情况下,强行破坏分布的行为,都有可能是无用功,比如清洗。但是小数据,或者分布有偏,就考验你能不能往正确的方向上改了。文本分类的论文,除了textCNN,fasttext,bert(顺路碾压下)。恕我直言,其他的哈哈哈哈,故事讲的一个比一个好看。就普适性(10个以上数据集的表现)来看,几乎所有的吊炸天structure可以被精调的两层lstm干掉。

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值