参考链接: https://developers.google.com/machine-learning/guides/text-classification
0. 文本分类简介
文本分类在很多软件产品中都占据重要位置,很多智能应用都用到了文本分类模型。有的是将文本分类的结果作为输入以便进行后续其他任务,例如对话系统中的意图识别;有的是直接将文本分类结果最为任务的输出,例如垃圾邮件过滤、评论情感分类等等。无论何种场景,文本分类的准确程度都是一个很关键的指标。
1. 数据集介绍
Internet Movie Database (IMDb) movie reviews dataset
该数据集搜集了人们的影评数据,包含正面和负面两类,是情感分类的常用数据集。
数据集的主要信息如下:
- 样本数量(训练集25000条,测试集25000条)
- 类别数量(2)
- 每一类的样本数量(12500)
- 每条样本的单词个数(中位数174)
- 每个单词在数据集中的频率
- 每条样本的长度的分布
2. 模型选择
模型选择包含一下几方面的考虑:
- 选择何种文本表示方法?(将文本数值化的方法)
- 选择何种分类模型?
- 模型参数如何确定?
根据google的实验,我们可以参考他们总结出的以下几条经验:
- 计算(样本个数)/(每个样本内的单词数),简记为S/W,其中分母一般取所有样本里面的单词书的中位数。
- 如果上述比例小于1500,则采用bag-of-words(词袋)特征(n-grams+tf-idf),然后利用传统的分类模型(SVM,MLP,LR等)即可,具体见后文
- 如果上述比例大于1500,则采用神经网络(CNN,RNN),将文本序列作为输入特征,它们可以学习到词与词之间的前后关系。
本文涉及的数据集,S/W=144,因此我们可以采用n-gram+MLP作为数据预处理和分类模型的选择方案。
3. 数据预处理
- 随机打乱数据。主要是为了划分训练集和测试集的时候,能够保证训练集和测试集中各类别的样本分布比较均匀。当然,更严谨的一种做法是对label分层抽样。
- 将数据划分为80%的训练集和20%的验证集。有时还要再划分出一个测试集。
- Tokenization:把训练样本切分为一些更小的文本,它们是组成词袋(或者叫词表、词库)的元素,称之为“词”。这样能够泛化样本和label之间的关系,也即更利于模型去学习到样本与label之间的对应关系。
- Vectorization:对词的数值化表示