gpt4 book ai didi

Python使用word2vec、doc2vec计算两个文档之间的相似度

转载 作者:太空宇宙 更新时间:2023-11-04 04:26:05 25 4
gpt4 key购买 nike

我正在尝试计算由数千个句子组成的两个文档之间的相似度。

基线将使用 BOW 计算余弦相似度。

但是,我想捕捉更多文档之间的语义差异。

因此,我构建了词嵌入并通过简单地对每个文档中的所有词向量进行平均来生成文档向量来计算文档相似度,并测量这些文档向量之间的余弦相似度。

但是,由于每个输入文档的大小都相当大,所以我使用上述方法得到的结果与简单的 BOW 余弦相似度非常相似。

我有两个问题,

Q1。我发现 gensim 模块提供软余弦相似度。但是我很难理解我上面使用的方法的区别,我认为这可能不是计算百万对文档之间相似度的机制。

Q2。我发现 gensim 的 Doc2Vec 更适合我的目的。但我认识到训练 Doc2Vec 需要比我拥有的内存 (32GB) 更多的内存(我的整个文档的大小约为 100GB)。有没有什么办法可以用整个语料库的一小部分(比如 20GB)来训练模型,并使用这个模型来计算整个语料库的两两相似度?如果是,那么理想的训练集大小是多少?有没有我可以遵循的教程?

最佳答案

Ad Q1:如果相似度矩阵包含词嵌入的余弦相似度(它或多或少包含,请参见 SimBow at SemEval-2017 Task 3 中的等式 4)并且如果词嵌入是 L2 归一化的,则 SCM(软余弦Measure)等同于对词嵌入(即你的基线)进行平均。有关证明,请参阅 the Implementation Notes for the SCM 中的引理 3.3。 .我的 SCM 的 Gensim 实现(12)另外稀疏了相似性矩阵以保持较小的内存占用并规范嵌入,因此与普通的 SCM 相比,您会得到略有不同的结果。如果嵌入平均给你的结果与简单的 BOW 余弦相似性相似,我会质疑嵌入的质量。

广告 Q2:在整个数据集上训练 Doc2Vec 模型一个时期相当于在整个数据集的较小部分上训练一个 Doc2Vec 模型,每个部分一个时期。请注意 Doc2Vec 使用文档 ID 作为训练过程的一部分,因此您必须确保 ID 在分割后仍然是唯一的(即第一个片段的第一个文档必须与第二个片段的第一个文档具有不同的 ID段)。

关于Python使用word2vec、doc2vec计算两个文档之间的相似度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53467414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com