引言
其实最近挺纠结的,有一点点焦虑,因为自己一直都期望往自然语言处理的方向发展,梦想成为一名NLP算法工程师,也正是我喜欢的事,而不是为了生存而工作。我觉得这也是我这辈子为数不多的剩下的可以自己去追求自己喜欢的东西的机会了。然而现实很残酷,大部分的公司算法工程师一般都是名牌大学,硕士起招,如同一个跨不过的门槛,让人望而却步,即使我觉得可能这个方向以后的路并不如其他的唾手可得的路轻松,但我的心中却一直有一股信念让我义无反顾,不管怎样,梦还是要有的,万一实现了呢~
扯得有点远了hhh,回到文章,因为目前有在做涉及到文本分析(情感分析)的项目,也想为以后的相关项目做下知识储备,最近开始入坑Tensorflow的一些深度学习的NLP相关实践,同时学习了文本分类领域中基于深度学习的模型的一些应用知识(然而还是个菜鸟,半懂不懂的哈哈哈)。这里对相关知识进行了总结,巩固个人知识体系,同时分享给大家~
(提前声明:菜鸡观点,非大佬观点,欢迎纠正,也会不断修正的)
持续更新........
基于深度学习的文本分类
文本分类领域,目前主要可分为:
- 情感分析
- 新闻分析
- 主题分类
- 问答系统
- 自然语言推理(NLI)
五大领域(当然也有一些其他细分领域,这里不进行讨论)。近几年随着深度学习在自然语言处理领域的应用,文本分类也进入了由深度学习模型所导引的第三个阶段,逐渐超越了基于传统机器学习的方法。
目前,学术界针对文本分类所提出的深度学习模型大致有150多种,根据结构可分为11大类:
- 前馈网络:将文本视为词袋
- 基于RNN的模型:将文本视为一系列单词,旨在捕获文本单词依存关系和文本结构
- 基于CNN的模型:经过训练,可以识别文本分类的文本模式(例如关键短语)。
- 胶囊网络(Capsule networks):解决了CNN在池化操作时所带来的信息丢失问题。
- 注意力机制:可有效识别文本中的相关单词,并已成为开发DL模型的有用工具。
- 内存增强网络:将神经网络与某种外部存储器结合在一起,该模型可以读取和写入。
- 图神经网络:旨在捕获自然语言的内部图结构,例如句法和语义解析树。
- 暹罗神经网络(Siamese):专门用于文本匹配,这是文本分类的特殊情况。
- 混合模型(Hybrid models):结合了注意力,RNN,CNN等以捕获句子和文档的局部和全局特征。
- Transformers:比RNN拥有更多并行处理,从而可以使用GPU高效的(预)训练非常大的语言模型。
- 监督学习之外的建模技术:包括使用自动编码器和对抗训练的无监督学习,以及强化学习。
阿巴阿巴,如果看不太懂也没关系,我也只认识比较经典的几个hhh,但是可以了解下做储备嘛,也许哪一天就接触到了呢~下面这张图是2013年至2020年发布的一些很经典的深度学习文本嵌入和分类模型。我们可以看到入门的word2vec在2013年就已经提出来了,还有当下比较热门的Tree-LSTM、BERT也是前几年提出来的,的确是更新很快啊emmmm...
如何选择合适的神经网络模型
我们在针对文本分类任务选择最佳的神经网络结构时,常常会很迷茫,像我这种菜鸟就是百度下哪个模型社区比较火就用大佬们的代码来复现hhh(当然使用比较多也说明这个模型的性能和适用性不会太差)。老师常说,其实要多试,采用精度最高的。呜呜呜,然而现实是前期用来做精度验证的数据集的标注就是一个很大的工程量了,然后每一个模型的实现也.....很!复!杂!啊!超级烧脑,毕竟神经网络的构建可不是传统机器学习算法那样调一两个参数就好了~
当然,多试肯定是要多试的,但是我们应该有选择性的试,那么,初步的筛选、确定模型的类别就很重要了,这一点其实很靠经验,我这个菜鸡就不教坏大家了,我们来看下大佬的官方思路:
神经网络结构的选择取决于目标任务和领域,领域内标签的可用性,应用程序的延迟和容量限制等,这些导致选择差异会很大。尽管毫无疑问,开发一个文本分类器是反复试错的过程,但通过在公共基准(例如GLUE )上分析最近的结果,我们提出了以下方法来简化该过程,该过程包括五个步骤:
- 选择PLM(PLM,pretraining language model预训练语言模型):使用PLM可以显着改善所有流行的文本分类任务,并且自动编码的PLM(例如BERT或RoBERTa)通常比自回归PLM(例如OpenAI GPT)更好。Hugging face拥有为各种任务开发的丰富的PLM仓库。
- 领域适应性:大多数PLM在通用领域的文本语料库(例如Web)上训练。如果目标领域与通用的领域有很大的不同,我们可以考虑使用领域内的数据,不断地预训练该PLM来调整PLM。对于具有大量未标记文本的领域数据,例如生物医学,从头开始进行语言模型的预先训练也可能是一个不错的选择。
- 特定于任务的模型设计:给定输入文本,PLM在上下文表示中产生向量序列。然后,在顶部添加一个或多个特定任务的层,以生成目标任务的最终输出。特定任务层的体系结构的选择取决于任务的性质,例如,需要捕获文本的语言结构。比如,前馈神经网络将文本视为词袋,RNN可以捕获单词顺序,CNN擅长识别诸如关键短语之类的模式,注意力机制可以有效地识别文本中的相关单词,而暹罗神经网络则可以用于文本匹配任务,如果自然语言的图形结构(例如,分析树)对目标任务有用,那么GNN可能是一个不错的选择。
- 特定于任务的微调整:根据领域内标签的可用性,可以使用固定的PLM单独训练特定任务的层,也可以与PLM一起训练特定任务的层。如果需要构建多个相似的文本分类器(例如,针对不同领域的新闻分类器),则多任务微调是利用相似领域的标记数据的好选择。
- 模型压缩:PLM成本很高。它们通常需要通过例如知识蒸馏进行压缩,以满足实际应用中的延迟和容量限制。
是不是看不懂了,我摊牌了,第一遍读完我整个人都是懵的,然后又仔细读了两遍,好像懂了一点点,又百度了一些专业名词,又懂了一丢丢了,但还是懂一半啊哈哈哈哈。估计要真正走一遍流程之后采用完全解读吧!等之后有时间实践一遍我再重新更新解读一下!
模型性能分析
当下常用的用于评估文本分类模型性能的指标,以下介绍4种:
- 准确率和错误率(Accuracy and Error Rate):评估分类模型质量的主要指标,是从整体角度出发的。假设TP,FP,TN,FN分别表示真积极,假积极,真消极和假消极,