使用余弦相似度对文档进行分类

Posted

技术标签:

【中文标题】使用余弦相似度对文档进行分类【英文标题】:Using cosine similarity for classifying documents 【发布时间】:2019-10-25 14:52:34 【问题描述】:

我有一组五个不同类别的文件,其中大多数没有正确标记。目标是在上传相同文件时预测文件的正确类别。我使用余弦相似度和 tf -idf 来预测到目前为止,余弦相似度最大的文档类我得到了很好的结果,但真的不确定这在路上会有多好。另外,当文件类别被正确标记时,为什么在构建文档分类器而不是机器学习模型时不使用余弦相似度?非常感谢您对我的方法的反馈以及您对问题的回答。

【问题讨论】:

【参考方案1】:

Cosine similarity 用于计算两个 n 维向量之间的角度。这些向量主要由 Embeddings 产生。它们是产生词嵌入或固定大小向量的预训练模型。

余弦相似度主要用于单词产生的向量 嵌入。如果您使用的是 Doc2Vec 之类的东西,那么您会得到一个 整个文档的向量。这些向量可以分类为 使用余弦相似度。

在您的情况下,您应该尝试使用嵌入层的 LSTM 文本分类器。一维卷积层也很有用。

另外,参考 TF-IDF,它对于依赖于语料库中某些单词的文本分类很有用。词频较高且文档频率较低的词具有较高的 TF-IDF 分数。该模型学习根据这些分数对文本进行分类。

在大多数情况下,RNN 是对文本进行分类的最佳选择。使用预训练嵌入使模型变得高效。

此外,同样重要的是,您可以尝试贝叶斯文本分类。它在垃圾邮件分类中非常有用。

提示:

您可以将上述方法相互实现,创建一个文本分类系统。按照这样的过程,

    从 Doc2Vec 生成嵌入。 比较输入与其他文本的相似性,从而确定其类别。 使用 LSTM 网络中的嵌入来产生类别概率。 应用贝叶斯文本分类。

步骤 2 、 3 、 4 给出三个预测。如果多数预测是 CLASS1,那么我们可以使系统的输出为 CLASS1!。

【讨论】:

Doc2vec+余弦相似度应该是我的下一个方法,如果考虑到 doc2vec 将考虑文档的语义性质这一事实,tfidf+余弦相似度不起作用。但肯定会给它一个尝试就朴素贝叶斯而言,标签不正确,使其成为一个无人监督的问题(所以不真正了解朴素贝叶斯将如何执行)。 所以我手动标记了几个文件,取出属于每个类别的 10 个文件的唯一关键字,将它们附加到一个列表中,然后 word2vec 和 cosibe 相似度。我想到的另一种方法是聚类,但坦率地说,如果余弦相似度很好并且肯定会很好地扩展,我不想涉及机器学习。让我们看看,非常感谢您的反馈,非常感谢:)

以上是关于使用余弦相似度对文档进行分类的主要内容,如果未能解决你的问题,请参考以下文章

不同长度向量的余弦相似度?

在 python 中使用余弦相似度返回与查询文档相比最相似的文档

如何使用已计算的 TFIDF 分数计算余弦相似度

如何使用python通过余弦相似度有效地检索前K相似文档?

如何编写返回两个文档之间余弦相似度的方法

余弦相似度实际用例