gensim Word2Vec 中的“null_word”参数是什么?

What is the `null_word` parameter in gensim Word2Vec?

gensim 中的 Word2Vec 对象有一个 null_word 参数,文档中没有解释。

class gensim.models.word2vec.Word2Vec(sentences=None, size=100, alpha=0.025, window=5, min_count=5, max_vocab_size=None, sample=0.001, seed=1, workers=3, min_alpha=0.0001, sg=0, hs=0, negative=5, cbow_mean=1, hashfxn=, iter=5, null_word=0, trim_rule=None, sorted_vocab=1, batch_words=10000)

null_word参数有什么用?

检查 https://github.com/RaRe-Technologies/gensim/blob/develop/gensim/models/word2vec.py#L680 处的代码,它指出:

    if self.null_word:
        # create null pseudo-word for padding when using concatenative L1 (run-of-words)
        # this word is only ever input – never predicted – so count, huffman-point, etc doesn't matter
        word, v = '[=11=]', Vocab(count=1, sample_int=0)
        v.index = len(self.wv.vocab)
        self.wv.index2word.append(word)
        self.wv.vocab[word] = v

什么是"concatenative L1"?

null_word 仅在使用具有串联模式的 PV-DM 时使用 - 模型初始化中的参数 dm=1, dm_concat=1

在这种非默认模式下,doctag-vector 和目标词 window 位置内的相邻词的向量被 连接 成一个非常-宽输入层,而不是更典型的平均。

此类模型比其他模式更大、更慢。如果目标词靠近文本示例的开头或结尾,可能没有足够的相邻词来创建此输入层——但模型需要这些槽的值。所以 null_word 基本上用作填充。

虽然最初的 Paragraph Vectors 论文提到在他们的一些实验中使用这种模式,但这种模式不足以重现他们的结果。 (据我所知,没有人能够重现这些结果,其中一位作者的其他评论暗示原始论文在其过程中存在一些错误或遗漏。)

此外,我还没有发现此模式提供明显好处的案例,以证明添加 time/memory 的合理性。 (它可能需要非常大的数据集或非常长的训练时间才能显示任何好处。)

所以您不必太在意这个模型 属性 除非您正在使用这种不太常见的模式进行高级实验 – 在这种情况下,您可以查看源代码以了解有关如何操作的所有详细信息它用作填充。