2017-08-03 83 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算法的窗口化或加權過程,沒有什麼神奇的證明 - 它只是做了一些有趣的事情。其他選擇可能對其他類型的語料庫同樣好或更好。