简单文本分类

这里主要简单介绍一下如何通过词袋模型和logistics回归做简单的文本分类。其实重点还是介绍如何把词袋模型应用到一个实际问题中,只要实现了文本特征表示后续的分析就是很普通的了。

首先数据来源为:https://www.kaggle.com/c/sentiment-analysis-on-movie-reviews

观察数据,可以看出数据已经将一句话进行了不同层次的划分,同时也标注了相对应的情感分数。所以最简单的分类方法就是直接对数据构建一元的词袋模型,具体来说,就是基于PhraseId,把每一行的一整句话看成一个词,而词袋就是由这些"词"构成,针对数据集我们就可以构建一个156060的词袋,为了说明更清晰一点,我们稍微简化一下,采取前63行构成一个词袋(因为这63行数据都是基于一个句子进行划分的,也就是:"A series of escapades demonstrating the adage that what is good for the goose is also good for the gander , some of which occasionally amuses but none of which amounts to much of a story ."

当我们构建了词袋之后,就可以用向量的方式表达每一句话了,主要是分析对于一句话有没有包含词袋的元素,如果包含那么数量为多少,通过这样就可以构建出一个和词袋长度一样的向量了。基本上,以上就是文本分类的主要也是最重要的步骤,当我们把文本通过向量表示之后,其实问题就变成了针对一个个向量和情感评分进行分类,这就可以用往常的思路通过logistic模型进行分类了。

最后也想补充说明一下,其实从以上步骤可以看出,我们不论训练处一个再完美的模型,模型也无法对一个没见过的句子进行正确的分类,因为词袋里很可能没有这些句子的词,这时候我们得到的分类结果就是不合理的了,这个现象也是正常的,试想一下,用中文问一个不懂中文的人问题,他也一样搭不出来,所以有时候,有人认为机器学习、深度学习这些模型说到底就是"记住"数据,再把它应用到其他情况,根本就没有实现真正的"学习",也不能否定这种观点,毕竟从一开始我们就很难定义,我们人类所说的"学习"到底意味着什么。