Word2Vec的随机方面是什么?

时间:2019-01-13 00:26:24

标签: nlp gensim word2vec

我正在用Gensim在几个不同的语料库上对单词进行矢量化处理,并且获得的结果使我重新思考Word2Vec的功能。我的理解是Word2Vec是确定性的,并且单词在向量空间中的位置不会因训练而改变。如果语料库中的两个句子是“我的猫在跑”和“你的狗在跑”,那么“正在跑”(或其茎)的值似乎一定是固定的。

但是,我发现该值确实在各个模型中确实有所不同,并且当我训练模型时,单词会不断改变它们在向量空间中的位置。差异并不总是很有意义,但是它们确实表明存在一些随机过程。我在这里想念什么?

2 个答案:

答案 0 :(得分:2)

这在Gensim FAQ中有很好的介绍,我在这里引用:

  

Q11:我已经使用完全相同的文本语料库反复训练了Word2Vec / Doc2Vec / etc模型,但是每次的向量都不相同。是否有错误或我做错了? (* 2vec训练不确定性)

     

答案: * 2vec模型(word2vec,fasttext,doc2vec…)以随机初始化开始,然后大多数模式使用附加的随机化   在训练中。 (例如,训练窗口是随机的   截断是加权较高的较近单词的有效方法。的   选择默认负采样模式下的负样本   随机地。以及对高频词的降采样   由sample参数决定,由随机选择决定。这些   行为均在原始Word2Vec论文的算法中定义   说明。)

     

即使所有这些随机性都来自于   伪随机数生成器已被播种以提供一个   可重现的随机数流(gensim默认情况下会执行此操作),   通常多线程训练可以进一步改变   文本示例的训练顺序,以及最终的模型状态。   (此外,在Python 3.x中,每个字符串的哈希值都是随机的   重新启动Python解释器-更改迭代顺序   从头到尾的词汇量,因此甚至相同   随机数字符串绘制以不同的方式选择不同的单词   发射。)

     

因此,可以预见的是,每个运行阶段的模型也会有所不同,甚至   在相同的数据上训练。没有任何一个“正确的地方”   要结束的词向量或doc向量:仅位于   与其他向量的距离和方向逐渐有用   在同一模型中共同训练。 (通常,只有   在相互对照的用法交织在一起的过程中一起训练   在坐标上具有可比性。)

     

合适的训练参数应产生大致如下的模型   彼此之间非常有用。测试与评估   过程应容忍矢量位置的任何变化,以及   在模型的整体效用中产生小的“抖动”,这是由于   固有算法随机性。 (如果观察到的质量来自   运行之间的差异很大,可能还有其他问题:数据太少,   参数调整不良或评估中的错误/不足   方法。)

     

您可以尝试使用workers=1来限制确定性   训练到单个线程–如果在Python 3.x中使用   PYTHONHASHSEED环境变量以禁用其通常的字符串哈希   随机化。但是训练会比增加训练慢得多   线程。而且,您会掩盖内在的   基础算法的随机性/近似性   可能会使结果更脆弱,并取决于运气   特定的设置。最好容忍一点抖动,并使用   过多的抖动表明数据中其他地方存在问题,或者   模型设置–而不是施加肤浅的确定性。

答案 1 :(得分:1)

虽然我不知道gensim中Word2Vec的任何实现细节,但我确实知道,一般来说,Word2Vec是由一个简单的神经网络训练的,该神经网络具有嵌入层作为第一层。该嵌入层的权重矩阵包含我们感兴趣的词向量。

这就是说,随机初始化神经网络的权重通常也很普遍。这样便有了随机性的起源。

但是无论起始条件不同(随机)如何,结果如何都不同?

训练有素的模型将为具有相似含义的单词分配相似的向量。这种相似性是通过两个向量之间的角度的余弦值来衡量的。从数学上讲,如果vw是两个非常相似的单词的向量,则

dot(v, w) / (len(v) * len(w)) # this formula gives you the cosine of the angle between v and w

将接近1

此外,它将允许您执行著名的算术运算

king - man + woman = queen

出于说明目的,请想象2D向量。如果您将这些算术属性丢失,例如围绕原点旋转所有角度?有了一点数学背景,我就可以向您保证:不,他们不会!

所以,你的假设

  

如果“我的猫正在跑步”和“你的狗无法跑步”是两个   语料库中的句子,然后是“ running”(或其词干)的值   似乎一定是固定的。

是错误的。 “运行”的值根本不是固定的。但是,(固定)固定的是与其他单词的相似度(余弦)和算术关系。