如何在 Gensim Word2Vec 模型中获取负词样本?

青葱年少 nlp 230

原文标题How to get negative word samples in Gensim Word2Vec Model?

我正在使用 gensim Word2Vec 模型来训练词嵌入。我的代码是:

w2v_model = Word2Vec(min_count=20,
                     window=2,
                     vector_size=50,
                     sample=6e-5,
                     alpha=0.03,
                     min_alpha=0.0007,
                     negative=20,
                     workers=cores-1)

w2v_model.build_vocab(sentences, progress_per=10000)

w2v_model.train(sentences, total_examples=w2v_model.corpus_count, epochs=50, report_delay=1)

我想知道在这个过程中我是否可以访问负面和正面的单词样本?

提前致谢。

原文链接:https://stackoverflow.com//questions/71884994/how-to-get-negative-word-samples-in-gensim-word2vec-model

回复

我来回复
  • gojomo的头像
    gojomo 评论

    在训练循环的深处,对于训练文本中要预测的每个单独的“中心”词——浅层神经网络的微训练示例——将选择一组不同的否定词。

    这些否定词将仅用于一组前向/后向神经网络轻推,然后在训练移至下一个词时丢弃。

    除了更改核心代码之外,没有其他方法可以访问它们——它实际上是用 Cython 编写的,并在任何更改后重新编译到本机库中。 (它比纯 Python 代码更难修改。)

    您可以在此处查看其中一种模式(CBOW w/negative-sampling)的源代码中确切选择负样本的位置:

    https://github.com/RaRe-Technologies/gensim/blob/91175ddc7e3d6f3a2af245c20af21ec3bf5e360f/gensim/models/word2vec_inner.pyx#L427

    如果您只需要一组有代表性的否定词,您可以在自己的代码中复制这些步骤。

    如果您想知道(并可能记录?)选择foreverypositive预测的负面词,我怀疑这是一个错误的想法:

    • 对该算法行为的有意义的分析既不依赖于单个的微样本,也不依赖于在所有训练中任意随机选择的否定词。有趣的特性仅来自于所有训练相互作用中发生的拔河比赛。
    • 由于这在训练循环中非常深入,因此即使是最有效的额外步骤,作为否定词的函数,也会大大减慢速度。或者,在记录的情况下,记录的负词比原始训练语料库多 20 倍(对于 window=20 )。对于这种算法运行良好的大型语料库,这样的减速/日志可能是繁重的;对于小玩具大小的例子,这个算法根本不会有趣。

    因此,如果你真的想在这个过程中看到所有(随机的、任意的)否定词,那么仅仅这个问题就表明你可能正在走一条有问题的道路。

    我更容易想象只想看到一组具有代表性的负样本词——因为任何 10、10,000 或 1,000,000 个这样的随机选择的词都和其他词一样好,而且算法(充分大小的数据)对实际选择否定词的通常方差具有鲁棒性。为此,您可以在训练之外运行相同的采样过程。

    另外:对于alpha&min_alpha-值来说,这些是奇怪的非默认选择,通常不需要任何调整,如果进行调整,真的应该只在有意识的计划下这样做,由比较替代值结果的定量评估驱动。但是,那些特定的、奇怪的、无动机的价值观在一些 worstonline 教程中很常见。所以要注意你在哪里学习 word2vec!

    2年前 0条评论