文本分类
什么是文本分类
文本分类指的是计算机通过算法对输入的文本按照一定的类目体系进行自动化归类的过程。在人工智能浪潮席卷全球的今天,文本分类技术已经被广泛地应用在文本审核、广告过滤、情感分析和反黄识别等NLP领域。
image.png数据清洗
在实际的中文文本分类问题中,我们面对的原始中文文本数据经常会存在许多影响最终分类效果的部分,这部分数据或文本都需要在文本分类最开始的时候就被清洗干净,否则很容易导致所谓的“Trash in,trash out”问题。除了一般分类问题的数据清洗都包含的缺失值处理、去重处理和噪声处理等步骤之外,中文文本分类还应该做到以下的清洗与处理以下数据:
- 非文本数据
很多时候我们的分类文本都来自爬虫的爬取结果,因此文本中常常会附带有HTML标签、URL地址等非文本内容,所以需要清除这部分内容对分类没有什么帮助的内容。
- 长串数字或字母
通常情况下中文文本中长串的数字代表手机号、车牌号、用户名ID等文本内容,在非特定的文本分类情境下可以去除。或者将其转换为归一化的特征,如是否出现长串数字的布尔值特征HAS_DIGITAL、按长度归一的DIGIAL_LEN_10等等。值得一提的是,表情代号常常作为长串数字或字母出现,却能在情感分析中却能起到巨大作用。
- 无意义文本
此外,还需要过滤掉剩余文本当中的诸如广告内容、版权信息和个性签名的部分,毫无疑问这些也都不应该作为特征被模型所学习。
停用词与标点符号
停用词指的是诸如代词、介词、连接词等不包含或包含极少语义的词,另外标点符号也可以被认为是一种停用词。通常情况下,在文本中去掉这些停用词能够使模型更好地去拟合实际的语义特征,从而增加模型的泛化能力。
但值得注意的是,停用词表并不是一成不变的。针对不同的文本分类情景,所采用的停用词表也应该作出针对性的调整。例如书名号“《”和“》”往往比书名本身更能代表书名的特征、冒号“:”通常出现在人物访谈类文章的标题中,以及人称代词“他”和“她”在情感类文章标题中的频繁使用等。根据情景灵活地使用停用词表,往往能够起到意想不到的效果。
多标签分类
许多人将多标签分类(Multi-labelClassification)与多类分类(Multi-classClassification)混淆。后者主要区别于二分类问题,指的是在类别数大于2的候选集合中互斥地选取一个类别作为输出,例如将一条评论按情感倾向分类到{“正面”、“中立”、“负面”}当中的一个。而多标签分类则表示在类别数大于等于2的候选集合中非互斥地选取任意个类别作为输出,例如一篇标题为“国务院决定设立河北雄安新区”的新闻文章可以同时被分为政治、经济两个类别。
关键词规则与后处理
在面对实际中文文本分类问题时,谁都无法保证自己的模型能够100%分类准确。后处理旨在对模型输出的预测结果进行人工干预,从而保证最后的结果的可靠性。
关键词规则是最常用的后处理方法,其特点在于能够直接地将领域知识引入到分类系统当中。关键词规则不仅可以实现一个或多个关键词对应一个类别,更可以在上层算法给出概率输出的情况下实现一对多和多对多的规则映射。并且,我们可以根据实际情况对不同的关键词规则设定作用强度和优先级,从而更加灵活地调整得到预测结果。值得注意的是要控制关键词规则的粒度大小,粒度过大可能导致其它原本正确的样本被误操作而使得总体的准确性降低;粒度过小会使每条的作用范围变小,极大地增加设置后处理规则的工作量。
在最后输出阶段,还有一个实用的后处理方法就是对概率或置信度较低的预测结果归为“其他”类别,即让模型学会说:“我不知道”。这样做可以提高分类系统的使用体验,而不致于让使用者迷失在错误的猜测结果中。
传统文本分类方法
文本分类问题算是自然语言处理领域中一个非常经典的问题了,相关研究最早可以追溯到上世纪50年代,当时是通过专家规则(Pattern)进行分类,甚至在80年代初一度发展到利用知识工程建立专家系统,这样做的好处是短平快的解决top问题,但显然天花板非常低,不仅费时费力,覆盖的范围和准确率都非常有限。后来伴随着统计学习方法的发展,特别是90年代后互联网在线文本数量增长和机器学习学科的兴起,逐渐形成了一套解决大规模文本分类问题的经典玩法,这个阶段的主要套路是人工特征工程+浅层分类模型。训练文本分类器过程见下图:
image.png
特征工程
特征工程在机器学习中往往是最耗时耗力的,但却极其的重要。抽象来讲,机器学习问题是把数据转换成信息再提炼到知识的过程,特征是“数据-->信息”的过程,决定了结果的上限,而分类器是“信息-->知识”的过程,则是去逼近这个上限。然而特征工程不同于分类器模型,不具备很强的通用性,往往需要结合对特征任务的理解。文本分类问题所在的自然语言领域自然也有其特有的特征处理逻辑,传统分本分类任务大部分工作也在此处。文本特征工程分位文本预处理、特征提取、文本表示三个部分,最终目的是把文本转换成计算机可理解的格式,并封装足够用于分类的信息,即很强的特征表达能力。
- 文本预处理
文本预处理过程是在文本中提取关键词表示文本的过程,中文文本处理中主要包括文本分词和去停用词两个阶段。之所以进行分词,是因为很多研究表明特征粒度为词粒度远好于字粒度,其实很好理解,因为大部分分类算法不考虑词序信息,基于字粒度显然损失了过多“n-gram”信息。具体到中文分词,不同于英文有天然的空格间隔,需要设计复杂的分词算法。传统算法主要有基于字符串匹配的正向/逆向/双向最大匹配;基于理解的句法和语义分析消歧;基于统计的互信息/CRF方法。近年来随着深度学习的应用,WordEmbedding + Bi-LSTM+CRF方法逐渐成为主流,本文重点在文本分类,就不展开了。而停止词是文本中一些高频的代词连词介词等对文本分类无意义的词,通常维护一个停用词表,特征提取过程中删除停用表中出现的词,本质上属于特征选择的一部分。经过文本分词和去停止词之后淘宝商品示例标题变成了下图“ / ”分割的一个个关键词的形式:
夏装 / 雪纺 / 条纹 / 短袖 / t恤 / 女 / 春 / 半袖 / 衣服 / 夏天 / 中长款 / 大码 / 胖mm / 显瘦 / 上衣 / 夏
文本表示和特征提取
文本表示的目的是把文本预处理后的转换成计算机可理解的方式,是决定文本分类质量最重要的部分。传统做法常用词袋模型(BOW, Bag Of Words)或向量空间模型(Vector Space Model),最大的不足是忽略文本上下文关系,每个词之间彼此独立,并且无法表征语义信息。词袋模型的示例如下:
( 0, 0, 0, 0, .... , 1, ... 0, 0, 0, 0)
一般来说词库量至少都是百万级别,因此词袋模型有个两个最大的问题:高纬度、高稀疏性。词袋模型是向量空间模型的基础,因此向量空间模型通过特征项选择降低维度,通过特征权重计算增加稠密性。
特征提取:向量空间模型的文本表示方法的特征提取对应特征项的选择和特征权重计算两部分。特征选择的基本思路是根据某个评价指标独立的对原始特征项(词项)进行评分排序,从中选择得分最高的一些特征项,过滤掉其余的特征项。常用的评价有文档频率、互信息、信息增益、χ²统计量等。特征权重主要是经典的TF-IDF方法及其扩展方法,主要思路是一个词的重要度与在类别内的词频成正比,与所有类别出现的次数成反比。
基于语义的文本表示
传统做法在文本表示方面除了向量空间模型,还有基于语义的文本表示方法,比如LDA主题模型、LSI/PLSI概率潜在语义索引等方法,一般认为这些方法得到的文本表示可以认为文档的深层表示,而word embedding文本分布式表示方法则是深度学习方法的重要基础,下文会展现。
分类器
分类器基本都是统计分类方法了,基本上大部分机器学习方法都在文本分类领域有所应用,比如朴素贝叶斯分类算法(Naïve Bayes)、KNN、SVM、最大熵和神经网络等等,传统分类模型不是本文重点,在这里就不展开了。
深度学习文本分类方法
传统做法主要问题的文本表示是高纬度高稀疏的,特征表达能力很弱,而且神经网络很不擅长对此类数据的处理;此外需要人工进行特征工程,成本很高。而深度学习最初在之所以图像和语音取得巨大成功,一个很重要的原因是图像和语音原始数据是连续和稠密的,有局部相关性。应用深度学习解决大规模文本分类问题最重要的是解决文本表示,再利用CNN/RNN等网络结构自动获取特征表达能力,去掉繁杂的人工特征工程,端到端的解决问题。
文本的分布式表示:词向量(word embedding)
分布式表示(Distributed Representation)其实Hinton 最早在1986年就提出了,基本思想是将每个词表达成 n 维稠密、连续的实数向量,与之相对的one-hot encoding向量空间只有一个维度是1,其余都是0。分布式表示最大的优点是具备非常powerful的特征表达能力,比如 n 维向量每维 k 个值,可以表征 image.png个概念。事实上,不管是神经网络的隐层,还是多个潜在变量的概率主题模型,都是应用分布式表示。
下图是03年Bengio在 A Neural Probabilistic Language Model 的网络结构:
这篇文章提出的神经网络语言模型(NNLM,Neural Probabilistic Language Model)采用的是文本分布式表示,即每个词表示为稠密的实数向量。词的分布式表示即词向量(word embedding)是训练语言模型的一个附加产物,即图中的Matrix C。
深度学习文本分类模型
- fastText
- TextCNN
- TextRNN
- TextRNN + Attention
- TextRCNN(TextRNN + CNN)
参考: