NewBeeNLP公众号原创出品
公众号专栏作者 @wulc
作者是字节跳动广告算法工程师,个人blog: http://wulc.me
所在团队长期招人,欢迎感兴趣的同学来撩~
最近在总结之前做的文本分类实验的一些经验和 tricks,同时也参考了网上的一些相关资料(见文末),其中有些 tricks 没尝试过,先在这里记下,或者日后能用上。
这里的经验和 tricks 大概可分为两部分:预处理部分和模型训练部分,下面分别介绍
「文本更正」,主要是将文本标准化,包括繁体转简体,全角转半角,拼音纠错等
「文本泛化」,如一个手机号码,因为有几千万的手机号码,不可能为每个手机号码设一个特征,所以最好将手机号码转化为同一个特征;另外表情符号、人名、地址、网址、命名实体等也要考虑这种泛化,泛化的程度这个视具体的任务,比如说地址可以以国家为粒度,也可以以省份为粒度
规范文本为统一长度时,取所有长度的均值或者中位数,但是别取最大值;截断时根据具体任务考虑从前面阶段或从后面截断
构建数据集的 vocabulary 时,需要考虑以下几个方面
词向量的选择,当数据集较小时,直接使用预训练好的词向量(如google、facebook开源的),且不用微调;当训练集比较大的时候,可随机初始化进行训练,也可以对预训练的词向量进行微调(微调收敛得更快,但是结果差异不大)
分词时考虑以下几个方面
数据增强
规则有时能解决大部分的问题,不一定要用到模型,使用时要权衡模型带来的收益和复杂性
传统的机器学习方法根据其特征工程的不同可分为三大类
对于深度学习模型,把模型变得更深更宽更复杂往往能够提升效果;但是当模型复杂到一定程度的时候,提升的效果微乎其微甚至没提升
rnn 类模型用双向一般会比单向要好
使用 dropout(经验值为 0.5) 基本都能提升效果,使用的地方包括:embedding 层后、FC层后
训练震荡问题:增加随机采样因素尽可能使得数据分布 iid,默认 shuffle 机制能使得训练结果更稳定。如果训练模型仍然很震荡,可以考虑调整学习率 或 mini_batch_size
采用预训练的 embedding 并进行 finetune 时,在最开始 embedding 的学习率设为 0,训练到效果较好时才开始 finetune embedding 层
学习率的设置考虑以下几个方面
超参数的设置经验可参考 A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification
模型融合时,差异性越大,融合效果越好,具体可参考知乎看山杯夺冠记[1]
知乎看山杯夺冠记: https://zhuanlan.zhihu.com/p/28923961
[2]在文本分类任务中,有哪些论文中很少提及却对性能有重要影响的tricks?: https://www.zhihu.com/question/265357659
[3]用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践: https://zhuanlan.zhihu.com/p/25928551
[4]深度学习网络调参技巧: https://zhuanlan.zhihu.com/p/24720954
- END -
由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:
(1)点击页面最上方"AINLP",进入公众号主页。
(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。
感谢支持,比心。
推荐阅读
征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)
完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)
模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法
文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化
斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。
阅读至此了,分享、点赞、在看三选一吧🙏