【问题标题】:How to obtain document vectors in doc2vec in gensim如何在gensim的doc2vec中获取文档向量
【发布时间】:2017-11-15 06:09:06
【问题描述】:

我知道在 doc2vec 中使用print(model.docvecs['recipe__11']) 获取给定标签的文档向量。

我的文档向量是食谱(标签以recipe__ 开头)、报纸(标签以news__ 开头)或配料(标签以ingre__ 开头)

现在我想检索食谱的所有文档向量。我的食谱文档的模式是recipe__<some number>(例如,recipe__23、recipe__34)。我有兴趣知道是否可以使用模式获取多个文档向量(例如,以recipe__ 开头的标签)

请帮帮我!

【问题讨论】:

    标签: python gensim doc2vec


    【解决方案1】:

    没有模式检索,但您可以访问model.docvecs.offset2doctag 中所有已知(字符串)文档标签的列表。然后,您可以遍历该列表以查找所有匹配项,并分别检索每个匹配项。

    此外,所有 doc-vector 都在一个大数组 model.docvecs.doctag_syn0 中并且,如果您只使用字符串 doc-tags,那么标签在 offset2doctag 中的位置将恰好是相应向量的索引在doctag_syn0。这将允许您使用 numpy 的“掩码索引”来获取向量子集作为新数组,例如:

    recipes_mask = [tag.startswith('recipe_') for tag in model.dacvecs.offset2doctag]
    recipes_vectors = model.docvecs.doctag_syn0[recipes_mask]
    

    当然,这个向量数组不再具有与原始位置相同的配方,因此您需要额外的步骤才能知道“recipe__11”向量在recipes_vectors 中的位置(例如)。

    【讨论】:

    • 非常感谢您的出色回答。 :) 获得配方文档向量后,我不能使用most.similar 之类的命令(因为它们现在不在原始位置)?
    • 正确。上面的示例只为您提供了原始向量,而不是完整的 Doc2VecWord2VecKeyedVectors 对象(具有实用方法 most_similar())。不过,您也许可以模仿该方法,或者将子集强制为构造的KeyedVectors。但是您可能希望在所有 doc-vecs 中执行 most_similar(),获得更多的顶级结果,然后过滤一种类型的向量。
    • 这是个好主意。我将对所有 doc-vecs 执行 most similar 并过滤结果。非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 2018-08-14
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    相关资源
    最近更新 更多