文本分类方法有哪些?

文本分类问题:给定一个文档p(它可能包含标题t),将该文档分类为n个类别中的一个或多个。

文本分类应用:常见垃圾邮件识别,情感分析。

文本分类方向:主要有两种分类,多分类和多标签分类

文本分类方法:传统的机器学习方法(贝叶斯、svm等。)和深度学习方法(fastText,TextCNN等。).

本文的思路:主要介绍文本分类的处理过程和主要方法。力求让读者明白在处理文本分类时从什么方向入手,关注什么问题,针对不同场景采取什么方法。

文本分类的处理大致可以分为文本预处理、文本特征提取和分类模型构建。与英文文本处理和分类相比,中文文本预处理是关键技术。

中文分词是中文文本分类中的一项关键技术。特征粒度远好于词粒度,其分类算法大多不考虑词序信息,基于词粒度的n元文法信息损失过多。下面简单总结一下中文分词技术:基于字符串匹配的分词,基于理解的分词,基于统计的分词[1]。

1,基于字符串匹配的分词方法:

流程:这是一个基于词典的中文分词,核心是先建立统一的词典表。当一个句子需要分词时,首先将句子分成多个部分,每个部分与词典一一对应。如果单词在词典中,则分词成功,否则继续拆分匹配,直到成功。

核心:词典、分词规则、匹配顺序是核心。

分析:优点是速度快,时间复杂度可以保持在O(n),实现简单,效果可以接受;但在处理歧义和不认识的词时效果不佳。

2.基于理解的分词方法:基于理解的分词方法是通过让计算机模拟人对句子的理解来达到识别单词的效果。其基本思想是在分词的同时进行句法和语义分析,利用句法和语义信息处理歧义。它通常包括三个部分:分词子系统、句法语义子系统和通用控制部分。在总控部分的协调下,分词子系统可以获取关于词和句子的句法和语义信息来判断分词的歧义性,即它模拟了人们理解句子的过程。这种分词方法需要用到大量的语言知识和信息。由于汉语语言知识的概括性和复杂性,很难将各种语言信息组织成机器可以直接阅读的形式,所以目前基于理解的分词系统还处于实验阶段。

3、基于统计的分词方法:

过程:从统计学上讲,分词是一个概率最大化问题,也就是拆分句子。基于语料库,统计由相邻词组成的词的概率。相邻词出现的次数越多,概率越大。所以分词是根据概率值进行的,所以一个完整的语料库很重要。

主要的统计模型有:N-gram、隐马尔可夫模型、最大熵模型(ME)、条件随机场模型(CRF)等。

1,分词:中文任务分词必不可少,一般使用杰霸分词,行业内的佼佼者。

2.去停用词:建立停用词词典。目前关于停用词的词典大约有2000本,停用词主要包括一些副词、形容词和一些连词。维护非索引字表实际上是一个特征提取的过程,本质上是特征选择的一部分。

3.词性标注:判断分词后的词性(动词、名词、形容词、副词……),使用街霸分词时通过设置参数即可得到。

文本分类的核心是如何从文本中提取能够反映文本特征的关键特征,并捕捉特征与类别之间的映射。因此,特征工程非常重要,可以由四部分组成:

1,基于bag模型的特征表示:词单元(Unigram)构造的bag可能达到几万维,如果考虑二元和三元模型,bag的大小可能达到几十万,所以基于bag模型的特征表示通常是极其稀疏的。

(1)包特征有三种方法:

(2)优缺点:

2.基于嵌入的特征表示:通过词向量计算文本的特征。(主要针对短文本)

4.基于任务本身提取的特征:主要是为特定的任务设计的。通过我们对数据的观察和感知,我们也许能够发现一些潜在有用的特征。有时,这些手动特征极大地提高了最终的分类效果。例如,对于分类正面和负面评论的任务,对于负面评论,负面词的数量是一个很强的一维特征。

5.特征融合:在特征维数高、数据模式复杂的情况下,建议采用非线性模型(如流行的GDBT和XG Boost);对于特征维数低、数据模式简单的情况,建议使用简单的线性模型(如LR)。

6、主题特色:

LDA(文档的主题):可以假设文档集合中有t个主题,一个文档可能属于一个或多个主题。通过LDA模型可以计算出文档属于某个主题的概率,从而可以计算出DxT矩阵。LDA特性在诸如文档标记的任务中表现良好。

LSI(文档的潜在语义):文档的潜在语义是通过分解文档-词频矩阵计算出来的,类似于LDA,是文档的潜在特征。

这部分不是重点。可以使用传统机器学习算法中可以用于分类的所有模型,例如NB模型、随机森林模型(RF)、SVM分类模型、KNN分类模型和神经网络分类模型。

这里强调贝叶斯模型,因为业界使用这个模型来识别垃圾邮件[2]。

1,fastText模型:fastText是word2vec的作者Mikolov转战脸书:高效文本分类的锦囊妙计[3]后,于16年7月刚刚发表的论文。

模型结构:

改进:注意机制是自然语言处理领域常用的建模长时记忆机制,可以直观地给出每个单词对结果的贡献,基本上已经成为Seq2Seq模型的标准。其实文本分类在某种意义上也可以理解为一种特殊的Seq2Seq,所以最近才考虑引入注意力机制。

流程:

前向和后向RNN用于获得每个单词的前向和后向上下文的表示:

单词的表示变成了单词向量和前后向上下文向量相连的形式;

显然,模型并不是最重要的:一个好的模型设计对于获得好的结果非常重要,也是学术界关注的热点。但在实际中,模型的工作量占用的时间相对较少。虽然第二部分介绍了CNN/RNN及其变种的五种模型,但实际上仅通过CNN就足以在中文文本分类任务中取得非常好的效果。我们的实验测试表明,RCNN提高了约1%的准确率,但并不十分显著。最好的做法是用TextCNN模型把整体任务效果调试到最好,然后再尝试改进模型。

了解你的数据:虽然应用深度学习有一个很大的优势就是不再需要繁琐低效的人工特征工程,但是如果你只是把它当成一个黑箱,那么你必然会频繁地怀疑人生。一定要理解你的数据,记住无论传统方法还是深度学习方法,数据感总是非常重要的。注意badcase分析,了解你的数据是否合适,为什么对或者错。

超参数调整:可以参考深度学习网络参数调整技巧-知乎专栏

一定要用dropout:有两种情况可以避免:数据量极小,或者你用更好的正则化方法,比如bn。事实上,我们已经尝试了不同参数的dropout,最好的是0.5,所以如果你的计算资源有限,默认值0.5是一个不错的选择。

你不必是softmax loss:这取决于你的数据。如果你的任务在多个类别之间不是互斥的,可以尝试训练多个二元分类器,即把问题定义为多标签而不是多类。经过调整,准确率提高了> 1%。

品类失衡:基本上是一个已经在很多场景下验证过的结论:如果你的损失被某些品类所主导,那么对整体来说多半是负面的。建议可以尝试用类似booststrap的方法来调整样品的失重。

避免训练休克:默认情况下必须加入随机抽样因子,尽可能使数据分布iid,默认的洗牌机制可以使训练结果更加稳定。如果训练模型仍然非常不稳定,可以考虑调整学习率或mini_batch_size。

知乎的文字多标签分类大赛,给第一第二名的介绍网站:

NLP大赛冠军总结:300万知乎多标签文本分类任务(附深度学习源代码)

2017知乎坎山杯从参赛到第二。