因此,我已经开始学习word2vec和doc2vec的gensim,并且它可以工作。相似度分数实际上非常有效。但是,对于一个实验,我想通过比较单个单词并使其与一段文本相似来优化基于关键字的搜索算法。
做到这一点的最佳方法是什么?我考虑过对文本中所有单词的单词向量取平均值(也许先删除填充和停止单词),然后将其与搜索单词进行比较?但这真的只是直觉,什么是最好的方法?
答案 0 :(得分:1)
对较长文本的所有单词向量进行平均是一种获取全文本单个向量的粗略但有效的方法。然后,所得的矢量可能会有用地与单个单词矢量进行比较。
Doc2Vec
模式可将词向量与doc-vector训练到相同的“空间” – PV-DM(dm=1
),如果添加了词训练,则将PV-DBOW训练为({ {1}})–可以考虑。最接近单个单词向量的doc向量可能适用于您的目的。
另一种用于计算两个单词向量的“紧密度”的技术是“单词移动器的距离”(“ WMD”)。与将文本缩减为单个矢量的技术相比,计算成本更高,因为它实际上是在考虑将矢量集相关联的许多可能的成本最小化方法。我不确定在一个“文本”只是一个单词(或很短的短语)的退化情况下,它的效果如何,但值得尝试。 (gensim中的dm=0, dbow_words=1
方法提供了这一点。)
我还提到了另一种称为“软余弦相似度”的计算方法,该计算方法可能比大规模杀伤性武器更为有效,但具有类似的好处。现在也可以在gensim中使用。有一个Jupyter notebook intro tutorial as well。