使用Doc2Vec测量两个文档之间的相似度

6

我已经训练好了gensim doc2Vec模型,可以找到与一个未知文档最相似的文档。

现在我需要找出两个未知文档之间的相似度值(它们不在训练数据中,因此无法用文档ID引用它们)。

d2v_model = doc2vec.Doc2Vec.load(model_file)

string1 = 'this is some random paragraph'
string2 = 'this is another random paragraph'

vec1 = d2v_model.infer_vector(string1.split())
vec2 = d2v_model.infer_vector(string2.split())

在上面的代码中,vec1和vec2被成功地初始化为一些值,并且它们的大小为“vector_size”。
现在查看gensim API和示例,我找不到适合我的方法,它们都期望TaggedDocument。
我能否逐个比较特征向量的值,如果它们更接近,则说明文本更相似?
1个回答

12

你好,如果有人感兴趣的话,只需计算两个向量之间的余弦距离即可实现此功能。

我发现大多数人在这个目的上都使用“空间”。

以下是一个小代码片段,如果您已经训练好了doc2vec,则应该可以很好地工作。

from gensim.models import doc2vec
from scipy import spatial

d2v_model = doc2vec.Doc2Vec.load(model_file)

fisrt_text = '..'
second_text = '..'

vec1 = d2v_model.infer_vector(fisrt_text.split())
vec2 = d2v_model.infer_vector(second_text.split())

cos_distance = spatial.distance.cosine(vec1, vec2)
# cos_distance indicates how much the two texts differ from each other:
# higher values mean more distant (i.e. different) texts

更高的值意味着它们是相似的吗? - BlackHat
2
较高的值意味着它们不同。 - Borislav Stoilov
明白了。通常使用从-1到1的值范围,其中1表示相似,-1表示不相似。 - BlackHat
1
范围是-1到1,但由于存在一些舍入误差,因此如果值小于-1,则将其设为-1,如果值大于1,则将其设为1。 - Borislav Stoilov
1
我知道我有点晚了,但是使用cosine_similarity来检查关系不应该是可能的吗? - Stormsson
@Stormsson 你是对的。可能当时我不知道这样的函数存在。 - Borislav Stoilov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接