【问题标题】:How are word vectors co-trained with paragraph vectors in doc2vec DBOW?doc2vec DBOW 中的词向量如何与段落向量共同训练?
【发布时间】:2019-08-30 16:58:52
【问题描述】:

我不明白在 DBOW 模式 (dm=0) 下使用 gensim 的 doc2vec 训练过程中词向量是如何参与的。我知道默认情况下它被 dbow_words=0 禁用。但是当我们将dbow_words 设置为 1 时会发生什么?

在我对 DBOW 的理解中,上下文词是直接从段落向量中预测出来的。所以模型的唯一参数就是Np维的段落向量加上分类器的参数。

但多个消息来源暗示在 DBOW 模式下可以共同训练单词和文档向量。例如:

那么,这是怎么做到的呢? 任何澄清将不胜感激!

注意:对于 DM,段落向量与词向量进行平均/连接以预测目标词。在这种情况下,很明显单词向量是与文档向量同时训练的。还有N*p + M*q + classifier 参数(其中M 是词汇大小,q 词向量空间暗淡)。

【问题讨论】:

    标签: gensim word2vec doc2vec


    【解决方案1】:

    如果您设置dbow_words=1,则将skip-gram 词向量训练添加到训练循环中,与正常的PV-DBOW 训练交错。

    因此,对于文本中的给定目标词,第一个候选文档向量(单独)用于尝试预测该词,然后对模型和文档向量进行反向传播调整。然后,使用一组周围的单词,一次一个,以 skip-gram 的方式,尝试预测同一个目标单词——并进行后续调整。

    然后,文本中的下一个目标词得到相同的 PV-DBOW 加上 skip-gram 处理,以此类推。

    作为这样的一些逻辑后果:

    • 训练时间比普通 PV-DBOW 长 - 大约是 window 参数的一个因子

    • 总体而言,词向量比 doc 向量获得更多的总训练关注度,同样的因子等于 window 参数

    【讨论】:

    • 非常感谢您快速而有帮助的回答! (1) 我理解在这种设置下,word 和 doc 向量确实是同时训练的,但它们不交互。因此,就质量而言,与分别训练单词和文档向量相比,可能没有任何改进? (2) 我得出结论,当dm=0dbow_words=0 时,词向量仍然被创建但从未使用/训练过。您是否知道如何摆脱它们以减少磁盘和 RAM 上的模型大小?
    • dbow_words=0 案例中,不支持丢弃分配的、未经训练的词向量的方法。如果您完成了训练和推理(这也是一种训练),并且需要访问经过训练的 doc-vectors,您可能会 del 关联的 d2v_model.wv属性 - 但 可能 会阻止其他 save()/load() 操作工作,我不确定。
    • dbow_words=1模式下,词向量用一些(context_word->target_word)对训练,然后doc向量用(doc_tag->target_word)对训练,然后在交错中重复时尚。因此,没有一个单独的微训练示例涉及两者。但这也是许多单词之间的情况,在正常的单词训练中——但单词仍然处于有用的相对位置。这是因为所有训练样本共享相同的神经网络隐藏层->输出层。因此,对比示例各自改变了一些共享参数,并且间接相互影响。
    • 添加dbow_words 是帮助还是伤害将取决于您的数据、目标和元参数。使用预训练的词向量为Doc2Vec 模型播种是否有帮助(没有官方gensim 支持的选项)将取决于预训练的词汇表与您的文档和模型模式的匹配程度。在dbow_words=0 模式下,预加载的词向量不能对文档向量产生任何直接或间接的影响——在论文所暗示的范围内,它被混淆了。 (我也在:groups.google.com/d/msg/gensim/4-pd0iA_xW4/UzpuvBOPAwAJ 提出这一点)
    • 您可以在项目 github 问题的一些讨论中找到我对该论文的具体声明/测试/差距的更多担忧——从github.com/RaRe-Technologies/gensim/issues/… 开始——以及其他讨论组链接问题。
    猜你喜欢
    • 2015-02-12
    • 2017-03-17
    • 1970-01-01
    • 2019-11-21
    • 2019-07-12
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 2021-10-14
    相关资源
    最近更新 更多