2017-08-03 8 views
0

Gensimの実装したWord2Vecを文章の代わりに入力としてコンテキスト・ワード・ペアのリストとともに使用したいと考えています。私はもともと、手作業で作成された文脈語の対を文章として入力することは、生の文章を入力してwindowパラメータを1に設定することと同じであると考えましたが、2つのアプローチは異なる結果をもたらします。 GensimのWord2Vecはどのようにして文の単語と単語のペアを計算しますか?また、手動で作成したペアを関数の入力としてどのように入力する必要がありますか?gensimのWord2Vecとカスタム・ワード・コンテキスト・ペアの使用

答えて

1

windowの元の文章とwindow=1のペアとの間に「異なる結果」が生じることを意味しますか?

skip-gramとwindow=1を使用していると仮定すると、のペアを長い文章から自分の2トークンテキストとしてシミュレートします。 ...

['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に注意してください単語頻度が頻繁な単語のダウンサンプリング(sampleパラメータで制御)と否定の選択(デフォルトの否定サンプリングモード)の両方に影響する可能性があります。それだけでは、結果がメソッド間で同一ではないことを意味します。

さらに、アルゴリズムの両方の側面(ダウンサンプリング&負サンプリング)には意図的なランダム性があります。複数のワーカーを使用する場合は乱数ジェネレータを確定的にシードしようとしても、OSスレッドスケジューリング実行間での作業者間の進捗の差異、したがってペアの考慮とランダム性の使用の順序が異なることを意味する可能性があります。つまり、各パラメータが同じパラメータであっても、多くのワーカースレッドを使用して実行すると、設計によって若干異なる結果が得られることがあります。

最後に、windowの値が1より大きい場合、アルゴリズムは実際には各ターゲットワードに対して、1から自分の値からランダムに選択された他のウィンドウサイズを使用するように選択します。 (これはより効果的に近い単語に重みを与えるために行われます。これは、遠くの単語にいくつかの倍率を適用した場合と同じ効果に近づきますが、全体的な作業が少なくて済み、トレーニングがスピードアップします)。

したがってwindowより大きい値の単語対をシミュレートしようとしていた場合、すべてのウィンドウ内の単語を新しい文として素朴なペアを作成することで、長文の動作を近似することはできませんでした。あなたは同様のランダムなウィンドウの縮小を実行する必要があります。 (そして、あなたはまだ全体の単語頻度に激しい影響を与えています。)

実際のデータが実際のものではない可能性があるため、この経路に興味があるとすると、単語順の自然言語文かもしれません。あなた自身の合成ペアを文章として提供しようとしても、最終目標が何であれ受け入れ可能な結果を​​得ることができます。試してみるべきです。元のword2vecアルゴリズムのウィンドウ処理や重み付けプロセスについて魔法のように正当化されたものはありません。興味深いことが起きるだけです。その他の選択肢は、他の種類のコーパスに対しても同様に優れているかもしれません。

関連する問題