【问题标题】:Measure similarity between two documents using Doc2Vec使用 Doc2Vec 测量两个文档之间的相似性
【发布时间】:2019-04-29 09:25:58
【问题描述】:

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

现在我需要找到两个未知文档之间的相似度值(不在训练数据中,所以它们不能被 doc 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

我可以按值比较特征向量,如果它们更接近 => 文本更相似?

【问题讨论】:

    标签: python machine-learning nlp gensim doc2vec


    【解决方案1】:

    你好,如果有人感兴趣,你只需要两个向量之间的余弦距离。

    我发现大多数人都在使用“空间”来表达这种姿势

    这是一个小代码,如果你已经训练过 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
    

    【讨论】:

    • 更高的价值意味着它们相似......?
    • 更高的价值意味着它们是不同的
    • 知道了。最好有一个从 -1 到 1 的值,因为 1 是相似的,-1 是不同的。
    • 范围是 -1 到 1,但存在一些舍入误差,所以我最终将值设为 -1,如果它们小于 -1,则与 1 相同
    猜你喜欢
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2015-12-12
    相关资源
    最近更新 更多