白话自然语言处理(2)——文本分类
话说两年前我一脸蒙圈地开始了自己文本挖掘的职业生涯,领导给我的第一个任务就是文本分类任务。小伙伴手把手教我怎么来做一个三分类任务,上手还挺快,正能量爆炸,原来这就自然语言处理,也没有那么复杂吗?无知者无畏。
自然语言处理博大精深,越到细节处越是难,一不小心就从入门到放弃了。一个好的新手任务是入门到深入的前提,而文本分类任务就是一个很不错的选择,保准给你打满鸡血,至于能不能坚持到最后?就暂时不是我们关心的问题。万事开头难,好的开头有好结尾的概率会高一点。不啰嗦,回归正题开始胡说八道。
分类大家都知道吧?我且大胆地尝试下个定义,把事物按某特性划分为几种类别。
生活处处是分类,前段时间上海风风火火地垃圾分类,就算一种!按照垃圾的材质/是否可回收分类。垃圾分类出来没多久,有聪明的小伙伴就说我们是不是可以搞一个垃圾分类的模型,商机无限,我感叹小伙伴这头脑该去做ceo啊,也没有太在意。不过没多久市面上就有各种垃圾分类应用涌现,感觉错过一个亿的商机。
上学的时候,对分类的认识是不够的,觉得搞这么多分类干啥,有啥用啊。那时候文小刚大佬组里的文章喜欢各种分类,奈何智商有限,每次都云里雾里,大佬的世界我不懂。后来做了文本分类任务,才渐渐去想想为什么要分类?我想最简单的,分类意味着对事物认知,可以定位到更细的类别,可以进行筛选;分得越细,说明我们研究的越清楚,最终 …(原谅我浅薄的认知,故事编不下去了)
知道了分类也理解了分类的重要,再谈文本分类就简单了。所谓文本分类,说句废话,就是对文本按照某种特性进行分类。比如情感分类,按照文本的情感极性进行分类;还有最近在聊天机器人中使用到的,情绪分类,把文本分为开心、愤怒、失望…balabala;垃圾文本分类,识别文本是否为垃圾… 还有一些有意思的分类任务,比如去检测一句话的性别偏向,文本是否口语化的 … 都是我脑补的,大家也可以想想有哪些有意思的文本分类任务
从应用的层面来说,做文本分类,你首先要知道你的目标是什么,要构建一个什么样的分类模型?最好是梳理一套明确的分类标准,这样我们就可以去获取数据。或用规则或用人肉,都是可行的。有了数据集合,就可以尝试各种分类模型,可繁可简,可骚可闷… (当然你最终会认识到,模型并不是越复杂越好,简简单单或许才是最好的!)
此处假设我们已经明确了要做的分类任务,也有了一部分数据集。那么我们就可以说道说道文本分类的方法了,从简单到高大上的都可以吹一吹(反正吹牛逼又不用上税,说错了最多被打脸!我脸厚不怕)。
大家玩垃圾邮件识别任务的时候,可能会学到朴素贝叶斯吧,简单来说通过判断每个词在垃圾邮件中出现的概率,最终判断出整个文本是否为垃圾邮件。这时候大家会被反复灌输贝叶斯公式,一听名字觉得高大上,很多同学可能被吓退,但是当你真的写出来并理解之,简单优美大方!(数学果然是不是我这种屌丝气质的人可以搞的。)
不过朴素贝叶斯方法也太简单了,要满足条件独立假设,表现往往一般。这时我们可以上其他常规武器了,比如决策树,决策树的算法逻辑非常有意思,符合人们做决断的逻辑!通过逐一判断特征是否满足某些条件,来对文本进行分类。
如果你觉得一棵树妥妥不足决断,就可以上集成方法。所谓集成方法,就是单兵作战不行,那我们就群殴啊,总有一种办法来干死你。集成方法可以分为两类,一类是bagging方法,就是分别用几颗树单独来做决策,然后把它们的结果组合起来,随机森林就是其中一种;另一类是boosting方法,大概是一棵树决策有误差,那我再用一颗树来学习误差,如果不行我再来…有没有想到某公子子孙孙无穷尽也,当然我们作为凡人…
其他常规算法还有SVM(校招面试算法工程师感觉不会SVM都不好意思说自己懂机器学习),逻辑回归, 感知机 …
常规武器说完,那开始高级武器吧——蛇精网络。不过先慢慢铺垫一下,从我开始准备找工作的时候,深度学习就已经复苏,开始大红大紫,到处都是蛇精网络,深度学习.. 当年nature还是science出了几篇使用蛇精网络做强联量的,感觉整个物理圈子都躁动了,不过大佬们还是比较理性的指出蛇精网络没发总结出基本的物理定律。我们不是大佬,只兴奋滴看到这次饭碗终于有着落了。
个人觉得文本分类最好用的蛇精网络算法是fasttetxt,模型简单效率,准确率也不错,是众屌丝的理想选择。模型可以快速训练和上线应用,分分钟报告领导任务已经完成,请做下一步指示。不过fasttext虽然好,有一个问题啊,你不好吹牛逼啊,到年终汇报,你和各位大佬说我用fasttext完成某某任务,你很大概率和升职加薪绝缘(开个玩笑)。
我们不仅要fasttext来兜底,我们还需要TextCNN(卷积来学习局部的n-gram特征)、RNN(文本就是序列)、迁移学习(虽然任务不一样,但是有***性,所以可以迁移。一般一个神经网络越浅层的网络越通用。预训练什么的也可以认为是在迁移,最近大红大紫的BERT、GPT...)、主动学习(少样本的时候是一个不错的选择,当年我吹过牛逼,主动学习可以帮助我们自动标注出一些没有标注但是置信度高的数据,这一批数据会包含更多的数据,可以逐渐扩展模型的能力)...
算法说多了容易飘,我们回到实际应用,那么有哪些文本的任务呢?其实前面已经说过了,再重复一下
当年一不小心入了文本分类的坑,刚开始沾沾自喜,觉得还挺好玩,后来分类任务越来越复杂,有点招架不住了。做人要低调 ...
分类任务几个要注意的问题,你的数据不足的时候该怎么办?有几个选择使用简单模型、迁移学习,主动学习,文本数据增强(不过文本的增强没有图片效果好;有通过多语种翻译来获得文本增强的,挺好玩)。模型怎么选择?我们前面介绍了很多方法,最终使用什么模型呢?其实最终综合效果+资源,效果好可能耗资源,我们在实际应用的时候,对误差是有忍耐程度的,不一定要十全十美,千万不要强迫症。有聪明的小伙伴,理解数据能帮助我们更好地选择模型。其他问题还有但不限于类别数据分布不均、炼丹调参指南 ...
文本分类唠叨到此,希望大家不要被误导。
/u014248127/article/details/80774668