自然语言处理NLP Learning

NLP之文本分类

2019-05-25  本文已影响0人  摩天轮的守候

前言

作为NLP领域最经典的使用场景之一,文本分类积累了许多的实现方法。这里我们根据是否使用深度学习方法将文本分类主要分为一下两个大类:

一、基于传统机器学习的文本分类

随着统计学习方法的发展,特别是在90年代后互联网在线文本数量增长和机器学习学科的兴起,逐渐形成了一套解决大规模文本分类问题的经典玩法,这个阶段的主要套路是人工特征工程+浅层分类模型。整个文本分类问题就拆分成了特征工程分类器两部分。

1.1 特征工程

这里的特征工程也就是将文本表示为计算机可以识别的、能够代表该文档特征的特征矩阵的过程。在基于传统机器学习的文本分类中,我们通常将特征工程分为文本预处理、特征提取、文本表示等三个部分。

1.1.1 文本预处理

文本预处理过程是提取文本中的关键词来表示文本的过程。中文文本预处理主要包括文本分词去停用词两个阶段。
文本分词,是因为很多研究表明特征粒度为词粒度远好于字粒度(其实很好理解,因为大部分分类算法不考虑词序信息,基于字粒度显然损失了过多“n-gram”信息)。具体到中文分词,不同于英文有天然的空格间隔,需要设计复杂的分词算法。传统分词算法主要有基于字符串匹配的正向/逆向/双向最大匹配基于理解的句法和语义分析消歧基于统计的互信息/CRF方法。近年来随着深度学习的应用,WordEmbedding + Bi-LSTM+CRF方法逐渐成为主流,本文重点在文本分类,就不展开了。
停止词文本中一些高频的代词、连词、介词等对文本分类无意义的词,通常维护一个停用词表,特征提取过程中删除停用表中出现的词,本质上属于特征选择的一部分。

1.1.2 特征提取

特征提取包括特征选择特征权重计算两部分。
特征选择的基本思路根据某个评价指标独立的对原始特征项(词项)进行评分排序,从中选择得分最高的一些特征项,过滤掉其余的特征项。常用的评价有:文档频率、互信息、信息增益、χ²统计量等。
特征权重计算主要是经典的TF-IDF方法及其扩展方法。TF-IDF的主要思想一个词的重要度与在类别内的词频成正比,与所有类别出现的次数成反比

1.1.3 文本表示

文本表示的目的是把文本预处理后的转换成计算机可理解的方式,是决定文本分类质量最重要的部分。传统做法常用词袋模型(BOW, Bag Of Words)或向量空间模型(Vector Space Model),最大的不足是忽略文本上下文关系,每个词之间彼此独立,并且无法表征语义信息。

1.2 分类器

大部分机器学习方法都在文本分类领域有所应用,比如朴素贝叶斯分类算法(Naïve Bayes)、KNN、SVM、最大熵和神经网络等等。

二、基于深度学习的文本分类

2.1 FastText文本分类

2.1.1 FastText使用场景

FastText是Facebook AI Research在16年开源的一种文本分类器。 其特点就是fast。相对于其它文本分类模型,如SVMLogistic Regression等模型,fastText能够在保持分类效果的同时,大大缩短了训练时间。

2.1.2 FastText的几个特点

2.1.3 FastText原理

FastText方法包含三部分,模型架构层次SoftMaxN-gram特征

2.1.3.1 模型架构

FastText模型架构和 Word2Vec 中的 CBOW 模型很类似,因为它们的作者都是Facebook的科学家Tomas Mikolov。不同之处在于,FastText预测标签,而CBOW 模型预测中间词

2.1.3.2 层次SoftMax
2.1.3.3 N-gram特征

2.1.4 FastText 和 word2vec 对比

2.2 Text-CNN文本分类

TextCNN 是利用卷积神经网络对文本进行分类的算法,它是由 Yoon Kim 在2014年在 “Convolutional Neural Networks for Sentence Classification” 一文中提出的。详细的原理图如下。

Text-CNN文本分类模型原理图
TextCNN详细过程:第一层是图中最左边的7乘5的句子矩阵,每行是词向量,维度=5,这个可以类比为图像中的原始像素点了。然后经过有 filter_size=(2,3,4) 的一维卷积层,每个filter_size 有两个输出 channel。第三层是一个1-max pooling层,这样不同长度句子经过pooling层之后都能变成定长的表示了,最后接一层全连接的 softmax 层,输出每个类别的概率。

特征:这里的特征就是词向量,有静态(static)非静态(non-static)方式。static方式采用比如word2vec预训练的词向量,训练过程不更新词向量,实质上属于迁移学习了,特别是数据量比较小的情况下,采用静态的词向量往往效果不错。non-static则是在训练过程中更新词向量。推荐的方式是 non-static 中的 fine-tunning方式,它是以预训练(pre-train)的word2vec向量初始化词向量,训练过程中调整词向量,能加速收敛,当然如果有充足的训练数据和资源,直接随机初始化词向量效果也是可以的。

通道(Channels):图像中可以利用 (R, G, B) 作为不同channel,而文本的输入的channel通常是不同方式的embedding方式(比如 word2vec或Glove),实践中也有利用静态词向量和fine-tunning词向量作为不同channel的做法。

一维卷积(conv-1d):图像是二维数据,经过词向量表达的文本为一维数据,因此在TextCNN卷积用的是一维卷积。一维卷积带来的问题是需要设计通过不同 filter_size 的 filter 获取不同宽度的视野。

Pooling层:利用CNN解决文本分类问题的文章还是很多的,比如这篇 A Convolutional Neural Network for Modelling Sentences 最有意思的输入是在 pooling 改成 (dynamic) k-max pooling,pooling阶段保留 k 个最大的信息,保留了全局的序列信息。

参考文献

1. FastText算法原理解析
2. FastText原理总结
3. 文本分类解决方法综述
上一篇 下一篇

猜你喜欢

热点阅读