与使用doc2vec模型的文档相比,如何计算单词或几个单词的相似度?

问题描述 投票:0回答:1

在gensim中我有一个训练有素的doc2vec模型,如果我有一个文档和一个单词或两三个单词,那么计算单词与文档相似性的最佳方法是什么?

我是否只是将它们之间的标准余弦相似性视为2个文档?或者是否有更好的方法来比较小字符串和文档?

首先想到的是,我可以从1-3个单词字符串中的每个单词和文档中的每个单词获取余弦相似度,但是我不知道这会有多么有效。

python gensim doc2vec
1个回答
3
投票

有许多可能的方法,最好的方法可能取决于培训数据的种类/质量和最终目标。

使用任何Doc2Vec模型,您可以通过infer_vector()方法推断包含已知单词的新文本的向量 - 甚至是单字文本。然而,像Doc2Vec一般,这往往更适用于至少数十个,最好是数百个单词的文档。 (微小的1-3字文档似乎特别容易得到一些奇特/极端的推断向量,特别是如果模型/训练数据开始时功能不足的话。)

请注意infer_vector()会忽略未知单词,所以如果你输入一个3个单词的文档,其中两个单词是未知的,那么它实际上只是根据一个已知单词进行推断。如果你只喂它未知的单词,它将返回一个随机的,温和的初始化向量,它没有经过推理调整。 (所有的推理/训练总是以这样一个随机向量开始,如果没有已知的单词,你就可以得到它。)

尽管如此,这可能值得尝试,你可以通过余弦相似性直接比较来自微小和巨型文档的推断向量。

许多Doc2Vec模式训练doc-vectors和兼容的word-vectors。如果添加可选的交错字矢量训练(dm=1),默认的PV-DM模式(dm=0)会执行此操作,或PV-DBOW(dbow_words=1)。 (如果你使用dm=0, dbow_words=0,你将获得快速训练,并且通常是非常好的doc-vectors,但是单词向量根本不会被训练 - 所以你不想查找这样一个模型的单词 - 矢量直接用于任何目的。)

有了这样一个包含有效单词向量的Doc2Vec模型,你还可以通过他们各自的单词'向量来分析你的短1-3个单词文档。您可以针对完整文档的向量单独检查每个单词,或者使用短文档单词与完整文档向量的平均值。

同样,哪个最好可能取决于您需要的其他细节。例如,如果简短文档是一个查询,并且您列出了多个结果,则可能是查询结果种类繁多 - 通过显示一些非常接近查询中单个单词的匹配,即使不接近完整查询 - 对于用户而言,与接近完整查询的文档一样有价值。

值得关注的另一个衡量标准是“Word Mover的距离”,它与文本单词的单词向量一起使用,好像它们对于较长的文本而言是“一堆意义”。这有点像你接受的单词 - 每个单词的方法 - 但是在比较文本中努力将单词与最接近的类似物进行匹配。计算起来可能相当昂贵(特别是在较长的文本上) - 但有时可以在使用不同单词的替代文本与相似效果相关联时给出令人印象深刻的结果。

© www.soinside.com 2019 - 2024. All rights reserved.