【问题标题】:Word2Vec, most_similar(word1) returns same output on different runsWord2Vec, most_similar(word1) 在不同的运行中返回相同的输出
【发布时间】:2016-04-21 14:24:59
【问题描述】:

我正在做一个小实验,我有 2000 条推文作为我的输入文档。我在这个输入推文上训练 word2vec,然后找到与特定词最相似的前 10 个词 - w1。

我担心的是,如果我运行 word2vec 10 次(使用相同的参数)并检查与 w1 最相似的前 10 个单词,会得到相同的单词集(权重也相同)。

现在 AFAIK word2vec 在开始时初始化随机权重,为什么它在不同的运行中给我相同的输出?

【问题讨论】:

    标签: python gensim word2vec


    【解决方案1】:

    gensim 的 word2vec 的默认 seed 设置为 1,如 documentation 中所述。对于不同的输出,尝试改变种子变量

    from gensim.models.word2vec import Word2Vec
    
    sentences = ['a quick brown fox jumps over a dog'.split()]
    model = Word2Vec(sentences, min_count=1, size=5, seed=1)
    print model['fox']
    
    Out: array([ 0.0629408 ,  0.07386301, -0.00788937, -0.09287976,  0.05859811], dtype=float32)
    
    model = Word2Vec(sentences, min_count=1, size=5, seed=2)
    print model['fox']
    
    Out: array([-0.05617044,  0.00294411, -0.09557492,  0.02923537, -0.08322554], dtype=float32)
    

    【讨论】:

    • 但是当我改变输入文档中推文的顺序时,我得到不同的权重。这可能会发生,因为第一个词和最后一个词的上下文会根据顺序而改变。但是 gensim 文档说 - “窗口是句子中当前单词和预测单词之间的最大距离。”,意思是上下文仅限于一个句子(此处推文)。为什么当我更改订单时它会改变?
    • 随机初始化词汇的权重。如果推文的顺序不同,很可能词汇表中的单词顺序不同,因此两种情况下词向量的初始化会不同
    • 随机的来源当然不止于此,其他的一些随机来源在stackoverflow.com/questions/32749330/…
    • “词汇的权重是随机初始化的。”,我使用相同的种子值,所以这是不可能的。如果是这种情况,那么当我在具有相同参数的相同输入上运行 word2vec 两次(或更多)时,我将如何获得相同的向量?
    • 由于推文的顺序不同,因此您的词汇表中的单词顺序也会不同。假设你之前的词汇是 ['a', 'b', 'c', 'd'],现在是 ['b', 'c', 'a', 'd'],即使你使用相同的种子,单词的初始化方式不同
    猜你喜欢
    • 1970-01-01
    • 2021-09-26
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 2019-07-01
    相关资源
    最近更新 更多