文档相似度的词向量加权和

数据挖掘 nlp word2vec tfidf
2021-09-27 01:53:43

我已经在文档语料库上训练了一个 word2vec 模型。然后我计算每个文档中每个单词的词频( TfIDF中的相同 Tf ),将每个单词 Tf 乘以其对应的单词向量(这是加权部分),并将这些加权向量中的每一个元素逐个相加以获得文档的单个向量。

这种方法有效吗?

举个例子,让它更清楚。拿文件:

“汽车在路上行驶”

每个单词的 Tf 将是{'the':0.3333, 'car':0.1666, 'drives':0.1666, 'on':0.1666, 'road':0.16666}(通过获取单词的字数并除以文档中的总单词数获得)。如果我们有一个训练有素的 word2vec 模型,我们可以执行以下操作

0.333[the0the1then]+0.1666[car0car1carn]+...

其中每个列向量是该词的词向量。最终结果是一个n×1 表示文档的维向量。

[0.333the0+0.1666car0+0.333the1+0.1666car1+0.333then+0.1666carn+]

我很欣赏还有其他方法,例如doc2vec,它们的目标是做非常相似的事情,但方式要复杂得多。但是我的方法有效吗/这里有什么明显的错误吗?

我已经测试过这种方法,甚至使用了一些文档相似度指标(是的,当然是在对向量进行归一化之后),并为我的工业应用产生了一些不错的结果。但我想更多地了解这种方法的学者。

这种方式的好处是,通过使用 word2vec 向量,由于词向量之间的语义相似性(欧几里德接近度),文档之间的相似性查询会产生非常好的结果,即使跨文档使用不同的词也是如此;这是 TfIDF 无法做到的,因为每个单词的处理方式都不同。

提前致谢!

3个回答

是的,您的方法是有效的,并且在被称为词嵌入平均值 (MOWE) 或词嵌入总和 (SOWE) 之前已经对其进行了研究,尽管您的方法更像是向量的加权平均值。我认为了解更多关于该方法的学术知识的一个很好的起点是这篇论文:How Well Sentence Embeddings Capture Meaning它讨论了您的方法,并为其他讨论该方法有效性的论文提供了一些指导。

TF-IDF 是训练段落嵌入的最简单和起点。SIF 和 doc2vec 也为嵌入提供了替代方法。跳过思想使用编码器来训练嵌入。有多种获取嵌入的方法。

论文A Simple but Tough-to-Beat Baseline for Sentence Embeddings中提供了对某些任务使用词嵌入向量的加权平均值的功效的理论“解释” (结合一个额外的步骤,它给出了平滑逆频率(SIF) . 详情请参阅论文。)