NLP通常包括两个关键问题:
1.选择什么样的语言模型?
2.选择什么样的分类算法?
第二个问题是机器学习领域的标准问题,各种针对不同数据类型、数据分布的算法和技巧,这里不再赘述。而在NLP当中,语言模型更加重要一些。
不同语言模型的区别,也就是对文本提取特征的不同。常用的模型有:
1.Bag-of-words:最原始的特征集,一个单词/分词就是一个特征。往往一个数据集就会有上万个特征;有一些简单的指标可以帮助筛选掉一些对分类没帮助的词语,例如去停词,计算互信息熵等等,但不管怎么训练,特征维度都很大,每个特征的信息量太小;
2.统计特征:包括Term frequency(TF) , Inverse document frequency(IDF), 以及合并起来的TF-IDF。这种语言模型主要是用词汇的统计特征来作为特征集,每个特征都能够说得出物理意义,看起来会比bag-of-words效果好,但实际效果也差不多;
3.NGram:一种考虑了词汇顺序的模型,就是N阶Markov链,每个样本转移成了转移概率矩阵。也能取得不错的效果;
然而,这些特征的一个关键问题,在于并没有对样本特征进行很大程度的压缩,没有提取出关键的信息。这样的问题就是在分类问题中会出现overfit,也就是训练好的分类器只在训练它的数据集(例如用Facebook训练)中有效,换一个数据集(例如换成了Twitter)效果就会很差。
近期,机器学习界的一个研究热点,叫做稀疏表示(Sparse Representation)。也就是认为不管维度多么高的数据集,其实其关键特征就那么几个。这几个关键特征之间刻画了初噪声之外的全部关键信息,并且特征之间没有太多的相关性。
PSI、LDA就是文本的稀疏表示,代表的这一类语言模型叫做Topic Model。认为单词量再大的文本,其文章主题就那么几个。一个K个主题的LDA模型,可以把一个文本压缩成K维的向量:每一个维度就是该文本属于该主题的概率,这个向量也叫做Topic Proportion(注意和Topic Distribution区别)。然后得到压缩后的K维数据集后,再使用任何的分类器,甚至最简单的余弦相似性指标,都可以得到非常漂亮的分类效果。