2017-08-03 84 views
0

我想用Gensim的实施Word2Vec与作为输入,而不是句子上下文的单词对的列表。我本来以为进入手动创建上下文的单词对作为句子就相当于进入原句和窗口参数设置为1,但是这两种方法产生不同的结果。如何Gensim的Word2Vec计算句子的上下文的单词对,我应该怎么进入我的手动创建对作为输入的功能?使用gensim的Word2Vec自定义字上下文对

回答

1

您的意思是说,在提供原始句子与长window与配对window=1之间发生“不同的结果”?

假设您使用skip-gram和window=1,您可以可以将较长句子中的对模拟为您自己的双令牌文本。那就是:

这句话...

['A', 'B', 'C', 'D'] 

...会产生window=1训练对...

[('B', 'A'), 
('A', 'B'), ('C', 'B'), 
('B', 'C'), ('D', 'C'), 
('C', 'D')] 

而且,你会得到同样的训练,对你反而喂了Word2Vec window=1句子:

['A', 'B'] 
['B', 'C'] 
['C', 'D'] 

但是,现在要注意r elative字频率已经改变 - 和词频率可以影响频繁字降频采样(用sample参数作为控制)和负示例性选择(在缺省负采样模式)。仅此一项就意味着方法之间的结果将不尽相同。如果使用多个worker,即使您试图确定性地种植随机数生成器,操作系统线程调度(下面采样& negative-sampling)也涉及有意的随机性可能意味着不同运营商之间的工作进程不同,因此也有不同的配对顺序 - 考虑和随机使用。因此,每次运行(即使使用完全相同的参数,但使用多个工作线程),通过设计可以给出略微不同的结果。

最后,如果使用大于1的window值,则算法会为每个目标词实际选择使用从1到您的值中随机选择的其他窗口大小。 (这样做的目的是为了更有效地提供更接近单词的重量,这种方法的效果与将某些缩放因子应用于更遥远的单词相同,但整体工作量较少,从而加快训练速度。)

因此,如果您试图模拟字对大于-1 window值的,你不能创建的所有内窗词的幼稚的配对为您的新句子近似长句行为。你必须执行一个类似的随机窗口缩小。 (而且,你还是对整个字的频率的波动影响。)

不过,假设你有兴趣在这条道路,因为你真正的数据可能不是真实的,字排序自然语言中的句子,没有可能很重要。你可以尝试提供自己的合成对作为句子,无论你的最终目标是什么,仍然可以得到可接受的结果 - 你应该尝试一下,看看。对于原始的word2vec算法的窗口化或加权过程,没有什么神奇的证明 - 它只是做了一些有趣的事情。其他选择可能对其他类型的语料库同样好或更好。