gensim word2vecでは、入力は文のリストです。しかし、テンソルフローword2vecでは、入力は単語のリスト(連結文をまとめて)です。 {target word、context word}の組を作るときに文を分ける方法はありますか? 私は次のコードを使用しています: https://github.com/tensorflow/tensorflow/blob/r0.8/tensorflow/models/embedding/word2vec.pyテンソルフローでは、word2vecモデルを実行しているときに文で区切る方法は?
答えて
この例では、ほとんどの場合、可能な限り最高のパフォーマンスを得るためにデータ処理用にカスタム演算子を使用しています。代わりに自分でデータをフィードして、訓練する単語のペアを取得することもできますが、小さなミニバッチの方が少し遅いかもしれません。大規模なミニバッチの場合は、それほど遅くすべきではありませんが、これらのタイプのモデルでは、ミニバッチを小さくして学習の進捗状況を最適化できます。
これを行う方法をアドバイスできますか?私は次のステップを変更する必要があると考えました: '(単語、数、words_per_epoch、self._epoch、self._words、examples、 ラベル)= word2vec.skipgram(ファイル名= opts.train_data、 batch_size = opts.batch_size、 window_size = opts.window_size、 min_count = opts.min_count、 subsample = opts.subsample) '私は自分自身のスキップグラムアルゴリズムを書く必要がありますか?また、上のスキップグラムからの出力はテンソルです。テンソルを自分で構築する方法がわかりません。 –
文の最後にある単語を次の文の先頭にある単語と関連付ける(同じローカルコンテキストウィンドウの一部である)ようには思えません。もしそうなら、これを達成するためのいくつかの異なる方法があります。
word2vecのサンプルコードでコードを変更したくない場合、最も簡単な方法は、各文の最後と最初にいくつかのスペーサワードを追加することです。 window_size
パラメータと同じくらい多くの単語を追加する必要があります。デフォルトのwindow_size
は5
です。
例文がある場合:あなたのように最初と最後にスペーサー(ここではXYZ
)を追加する必要があります
The dog jumped over the fence
:ここ
XYZ XYZ XYZ XYZ XYZ The dog jumped over the fence XYZ XYZ XYZ XYZ XYZ
はTensorflow例からスキップグラムペアジェネレータです:あなたはモジュール上で実行した場合https://github.com/tensorflow/tensorflow/blob/r0.9/tensorflow/examples/tutorials/word2vec/word2vec_basic.py
# Step 3: Function to generate a training batch for the skip-gram model.
def generate_batch(batch_size, num_skips, skip_window):
global data_index
assert batch_size % num_skips == 0
assert num_skips <= 2 * skip_window
batch = np.ndarray(shape=(batch_size), dtype=np.int32)
labels = np.ndarray(shape=(batch_size, 1), dtype=np.int32)
span = 2 * skip_window + 1 # [ skip_window target skip_window ]
buffer = collections.deque(maxlen=span)
for _ in range(span):
buffer.append(data[data_index])
data_index = (data_index + 1) % len(data)
for i in range(batch_size // num_skips):
target = skip_window # target label at the center of the buffer
targets_to_avoid = [ skip_window ]
for j in range(num_skips):
while target in targets_to_avoid:
target = random.randint(0, span - 1)
targets_to_avoid.append(target)
batch[i * num_skips + j] = buffer[skip_window]
labels[i * num_skips + j, 0] = buffer[target]
buffer.append(data[data_index])
data_index = (data_index + 1) % len(data)
return batch, labels
、あなたは各ミニバッチ内{ターゲット単語、文脈語}のペアを取得します。 originated -> as
、originated -> anarchism
:スキップグラムは、コンテキストの単語を予測しているので
with num_skips = 2 and skip_window = 1:
batch: ['originated', 'originated', 'as', 'as', 'a', 'a', 'term', 'term', 'of', 'of', 'abuse', 'abuse', 'first', 'first', 'used', 'used']
labels: ['as', 'anarchism', 'originated', 'a', 'term', 'as', 'a', 'of', 'term', 'abuse', 'of', 'first', 'used', 'abuse', 'against', 'first']
:あなたのデータは
data: ['anarchism', 'originated', 'as', 'a', 'term', 'of', 'abuse']
のように見えるならば、あなたは下の入力と出力のペアを取得します。例えば
、。
私はCBOWバッチジェネレータの実装も行っています。もし私がここにそれを掲載したいのであれば、コメントしてください。
- 1. テンソルフローのword2vecモデルに特定の単語を与える方法
- 2. パイプ文字区切り文字でフィールドを区切る方法
- 3. 文章をスペースで区切って分割する方法は?
- 4. テンソルフローWord2Vecエラー
- 5. 区切り文字をrdlcの新しい行に置き換える方法
- 6. bash:区切り文字付きの区切り文字で区切られているが、括弧で囲まれた文字列ではない場合は
- 7. 区切り文字で区切り文字を区切り、改行して印刷する
- 8. yaml.dumpキーと値のペアを新しい行で区切る方法は?
- 9. SQLで行データをコンマで区切る方法は?
- 10. 両方の小数点区切り文字をカンマとドットで区切ってDoubleに変換する方法
- 11. 複数の単語を1つのセルに区切る方法区切りなしで区切る方法
- 12. 区切り文字なしの文字列をカンマ区切りの文字列に変換する方法は?
- 13. パンダ:read_csvで区切り文字として新しい行を無視する
- 14. sedが行区切り文字と考える変更方法
- 15. 日付を2行で区切る方法は?
- 16. ログファイルのレコードを空白行で区切る方法は? Log4j
- 17. PHP;区切り文字と区切り文字の間の文字列を削除する方法は?
- 18. 区切り記号として区切り記号の前または後にカンマ区切りでカンマを区切る方法
- 19. 区切り文字を区切り文字として使用
- 20. TextTransform.exeを実行しているときに、TextTemplatingFilePreprocessorとTextTemplatingFileGeneratorを区別する方法は?
- 21. String.split() - タブ区切り値とコンマ区切り値を区別する方法は?
- 22. 文字列を区切り文字に基づいて複数の行に分割する方法ですが、区切り文字の前に '?'
- 23. 単語区切りで区切られたdivタグに改行を入れることはできますか?
- 24. word2vecでfit_predictを実行する
- 25. テンソルフローによるマルチラベル分類の実行方法は?
- 26. 電子メール文字列を区切り文字で区切る
- 27. word2vecのテンソルフローのデータ形式
- 28. closureを実行して適切に実行する方法
- 29. forループバッチスクリプトの区切り文字として新しい行
- 30. Applescript - 改行で区切られたクリップボードの各行を取得し、各行でアクションを実行する方法?
{target word、context word}はどういう意味ですか?私は文からの言葉が必要だと思っています。スキムグラム・モデルはコンテキスト・ワードを取り出します。 –
@SungKimはい、スキムグラムモデルは文脈語を把握します。しかし、現在のモデルは長い単語リストをサポートしているだけで、各ミニバッチ内で{ターゲット単語、コンテキスト単語}の組を構成しているようです。私は代わりに各文の中に{target word、context word}の組を作りたいと思います。 –