中文文本分类的总结

文本分类算法从机器学习的“人工特征 + lr/svm/xgboost”,到深度学习的"word embedding + DNN"、“language model + decoder”,不断演变。

0.文本的预处理

1)清洗数据:带有HTML标签、URL地址等非文本内容,长串数字或字母、无意义的文本。

2)变形词识别和替换:特殊符号替换、同音近型替换(拼音首字母)、简繁替换

3)停用词与标点符号:采用官方词表,针对不同的场景做一些调整

1.文本特征&文本表示

以词还是以字来表示一个句子的输入特征,都需要进行尝试,只有效果相差不大,都需要保留下来做模型融合。

如果文本长度不同,取占比95%或者98%的长度最为最大长度,然后进行截断补齐

文本特征的提取:

方法一:分词之后采用One-hot或TF-IDF等方法将每个样本转化为固定长度的特征编码作为分类算法的输入。

方法二:采用N-gram模型(一般同时采用N为1到3的N-gram)保留词与词之间的的位置和顺序信息。

方法三:Word2Vec和GloVe,拼接Word2Vec和GloVe作为新的特征输入,直接相加或者求平均效果通常都不好。如果要找到最合适的词向量维度,可以看看NeurIPS 2018斯坦福的这篇论文《On the Dimensionality of Word Embedding》。

方法四:语言模型,例如ELMo和BERT

其他特征:是否出现长串数字的布尔值特征HAS_DIGITAL、长串数字按长度归一的DIGIAL_LEN_10、文本长度(形如“长文本_小明”、“短文本_学校”)

同时采用了多种特征方法,不妨对这些特征进行分桶标记。如对分词特征“小明”标记为“wordseg:小明”、对skip-gram特征“小明_学校”标记为“skipgram:小明_学校”。

 

特征选择方法:

卡方检验:

信息增益:

 

2.文本分类算法

中文文本分类的总结_第1张图片

中文文本分类的总结_第2张图片

短文本:CNN配合Max-pooling池化(如TextCNN模型)速度快,而且效果也很好。Capsules效果比CNN好,短文本LSTM/GRU+Capusules是一个不错模型,也是目前Kaggle Quora比赛上(短文本分类)最好的baseline之一。

长文本:

TextCNN:

工作机制是:卷积窗口沿着长度为n的文本一个个滑动,类似于n-gram机制对文本切词,然后和文本中的每个词进行相似度计算,因为后面接了个Max-pooling,因此只会保留和卷积核最相近的词。这就是TextCNN抓取关键词的机制。

HAN模型

HAN的论文是《Hierarchical Attention Networks for Document Classification》

识别句号:训练词向量频次第二高的几乎都是句号

 

 

如图可得,不同的场合适用不同的算法:

1)如果是在线分类场景,那么预测速度较快的算法应该成为首选

2)如果需要快速迭代,那么训练速度快且调参难度小的算法更合适

3)若不考虑时间开销,那么尝试对多个模型进行集成(Ensemble)是最常用的提升分类效果的方法

 

语料语义简单的分类任务,用传统机器学习方法即可:

1)逻辑回归

SVM:

PCA降维(36维),使用SVC模型预测涨跌

PCA:降维依据

     第一个是explained_variance_,它代表降维后的各主成分的方差值。方差值越大,则说明越是重要的主成分。

     第二个是explained_variance_ratio_,它代表降维后的各主成分的方差值占总方差值的比例,这个比例越大,则越是重要的主成分。

 

2)贝叶斯分类模型

 

3)主题模型

如果是像社交数据之类语义丰富的场景,可以考虑深度学习模型:

深度学习的FastText

基于CNN/RNN的分类模型:CNN擅长捕获局部特征,RNN擅长处理时序信息,注意力机制在模型效果不满足时可以考虑一试

DPCNN: https://zhuanlan.zhihu.com/p/35457093

基于预训练模型的BERT

 

3.具体实现

爬取:数据集,标注标签

文本的预处理:清洗与处理、去停、分词、

预训练:

训练wiki的word2vec模型,编码词向量后加权平均获得文档向量(400维)

 

代码借鉴:

https://github.com/huseinzol05/NLP-Models-Tensorflow/tree/master/text-classification

 

embedding

https://github.com/huseinzol05/NLP-Models-Tensorflow/tree/master/embedded

attention

https://github.com/huseinzol05/NLP-Models-Tensorflow/tree/master/attention

 

 

你可能感兴趣的:(Python,机器学习)