2016-11-07 14 views
12

word2vecモデルでは、ボキャブ空間内の単語を隠しレイヤー( "in"ベクトル)に変換し、その後vocabスペースに戻す2つの線形変換があります"ベクター)。通常、このアウトベクトルはトレーニング後に破棄されます。 gensimのpythonでoutベクトルにアクセスする簡単な方法があるのだろうか?同様に、どのようにしてアウトマトリックスにアクセスできますか?gensim word2vec in/out vectorへのアクセス

動機:私はこの最近の論文で提示アイデアを実装したいと思います:ここでA Dual Embedding Space Model for Document Ranking

は、より詳細です。私たちは、次のword2vecモデル持っている上に、参照から:ここで

enter image description here

を、入力層は、サイズの$ V $の語彙サイズであり、中間層は、大きさ$ d個の$、および出力層でありますサイズ$ V $の2つの行列はW_ {IN}とW_ {OUT}です。 通常の場合、word2vecモデルはW_IN行列のみを保持します。これはgensimでword2vecモデルを訓練した後、あなたのようなものを取得する場合は、返されるものです。

モデル[ 'ポテト'] = [ - 0.2,0.5,2、...]

W_ {OUT}にアクセスする方法、またはW_ {OUT}を保持する方法はありますか?これはかなり計算量が多い可能性が高いですし、これを行うには、gensimで組み込みのメソッドをいくつか期待しています。これをゼロからコード化すると、良いパフォーマンスが得られない恐れがあるからです。

+0

これまでのコードはありますか? – rebeling

答えて

5

これは適切な回答ではないかもしれませんが(まだコメントできません)、これを指摘した人はいませんが、hereをご覧ください。作成者は同様の質問に答えているようです。また、それはあなたが有効な答えのためのより高いチャンスを持っている場所です。

linkで掘り下げ、彼はword2vecソースコードに投稿しました。あなたのニーズに合わせてsyn1の削除を変更できます。完了したらそれを削除することを覚えておいてください。メモリホッグであることが証明されているからです。

+2

ありがとう!これは私が探しているもののように見えます。答えを言い換えると、入力/出力埋め込みは次のとおりです。 入力:model.syn0, 出力:model.syn1、model.syn1neg –

0

以下のコードは、モデルの保存/読み込みを有効にします。 pickleを内部的に使用します。オプションで、モデルの内部の大きなNumPy行列を、ディスク間のファイルから直接仮想メモリにmmapして、プロセス間のメモリ共有を行います。

model.save('/tmp/mymodel.model') 
new_model = gensim.models.Word2Vec.load('/tmp/mymodel') 

いくつかの背景情報Gensimは、生の、非構造化デジタルテキストを処理するために設計された無料のPythonライブラリ(「プレーンテキスト」)です。潜在セマンティック分析、潜在的ディリクレ割り当ておよびランダムプロジェクションなどのgensimのアルゴリズムは、訓練文書のコーパス内の単語の統計的共起パターンを調べることによって、文書の意味構造を発見する。

プロジェクトのキックスタートするのに使用すると、サンプルコードベースについて記述したいくつかの良いブログ

インストール参照here

+2

あなたの答えをありがとう。しかし、これは私の質問とは全く関係ありません。具体的には、word2vecには2つの別個の単語ベクトル( "in"と "out")があり、word2vecはそれらのうちの1つだけを保持します( "in")。私は他のことについて尋ねています。 –

0

word2vec.pyファイルでこの変更を行う必要があります 次の関数では、現在 "in"ベクトルを返します。あなたが "アウト"ベクトルをしたい。 "in"はsyn0オブジェクトに保存され、 "out"はsyn1negオブジェクト変数に保存されます。

def save_word2vec_format(self, fname, fvocab=None, binary=False): 
    .... 
    .... 
    row = self.syn1neg[vocab.index] 
関連する問題