为什么 KNN 算法在 Word2Vec 上比在 TF-IDF 向量表示上表现更好?

问题描述

我正在做一个关于多类文本分类的项目,可以提供一些建议。

我有一个评论数据集,分为 7 个产品类别。

首先,我使用 TF-IDF(来自 sklearn 的 tfidfvectorizer)创建了一个术语文档矩阵。这会生成一个 n x m 的矩阵,其中 n 是我数据集中的评论数量,m 是特征数量

然后将术语文档矩阵拆分为 80:20 train:test 后,通过 K-Nearest Neighbors (KNN) 算法并达到 53% 的准确率。

在另一个实验中,我使用了 Google 新闻 Word2Vec 预训练嵌入(300 维),并对每条评论的所有词向量求平均值。因此,每条评论由 x 个单词组成,每个单词都有一个 300 维的向量。对每个向量进行平均,以生成一个 300 维向量。

然后我通过 KNN 传递这个矩阵。我的准确率为 72%。

至于我在同一数据集上测试的其他分类器,它们都在 TF-IDF 向量化方法上表现更好。然而,KNN 在 word2vec 上表现更好。

谁能帮助我理解为什么使用 word2vec 方法时 KNN 的准确度比使用 tfidf 方法时高?

解决方法

通过使用外部词向量,您已经向 word2vec 派生特征引入了有关词的额外信息——这些信息可能根本无法推导出到普通词出现 (TF-IDF) 模型。

例如,假设您的训练集中只有一条评论,而您的测试集中有另一条评论,使用一些不太常见的词来表示 car,例如 jalopy – 然后将其他汽车归零-关联词。

TFIDF 模型将在特定插槽中为该唯一项设置权重 - 但在训练数据集中可能没有其他提示 jalopy 与汽车完全相关。在 TFIDF 空间中,该权重只会使这 2 条评论与所有其他评论(在该维度上具有 0.0)的距离更远。它没有多大帮助或伤害。评论'nice jalopy'不会比'nice car'更接近'nice movie'

另一方面,如果 GoogleNews 具有该词的向量,并且该向量非常接近 carautowheels 等,则所有这些词的评论将在 word2vec 空间中向同一方向移动一点,为某些分类器提供额外提示,尤其是 KNN 分类器。现在,'nice jalopy''nice car' 或大多数其他 'nice movie' 评论更接近于 'nice [X]'

使用来自外部来源的词向量可能无法很好地覆盖数据集的领域词。 (GoogleNews 中的单词来自大约 2013 年的新闻文章训练,可能会在您的替代评论和最近的评论中遗漏单词和词义。)而且,通过平均所有单词来总结文本是一种非常粗略的方法:它无法从词序/语法中学到任何东西(通常会颠倒原意),并且在较长的文本中,单词的各个方面都可能相互抵消/稀释。

但是,它仍然带来了更多的语言信息,否则这些信息根本不会出现在数据中,因此在某些情况下可能会有所帮助。

如果您的数据集足够大,训练您自己的词向量也可能会有所帮助。 (不过,到目前为止,您所看到的收益表明,一些有用的单词相似性模式可能无法从您有限的数据集中得到很好的教导。)

当然还要注意,您可以使用混合技术。也许,每个文本可以通过 N 个 TF-IDF 维度和 M 个 word2vec-average 维度的串联来更好地表示。 (如果您的文本有许多意义重大的 2 词短语,这些短语的含义与单个词不同,那么添加词 2-gram 特征可能会有所帮助。如果您的文本有许多拼写错误或罕见的变体,但仍与其他词共享词根,比添加字符-n-gram - 单词片段 - 可能会有所帮助。)