Word2vecアルゴリズムをkerasに実装したいのですが、これは可能ですか?モデルをどのように適合させることができますか?カスタム損失関数を使用する必要がありますか?
これは可能ですか?
あなたはすでにそれを自分で答えました:はい。 gensim
を使用する Word2veckeras
に加えて、追加の依存関係がない別の CBOW実装 があります(念のため、私はmこのリポジトリとは提携していません)。それらを例として使用できます。
モデルをどのように適合させることができますか?
トレーニングデータは文の大きなコーパスであるため、最も便利な方法は model.fit_generator
です。これは、「a Pythonジェネレーター」。ジェネレーターは無期限に実行され、(Word, context, target)
CBOW(またはSG)タプルを生成しますが、トレーニングを制限するためにsample_per_Epoch
とnb_Epoch
を手動で指定します。このようにして、文の分析を切り離します。 (トークン化、Wordインデックステーブル、スライディングウィンドウなど)と実際のケラスモデルに加えて 多くのリソースを節約 。
カスタム損失関数を使用する必要がありますか?
CBOWは、中央の単語の予測された分布と実際の分布の間の距離を最小化するため、最も単純な形式ではcategorical_crossentropy
がそれを行います。 負のサンプリング を実装すると、少し複雑ですが、はるかに効率的になり、損失関数は binary_crossentropy
に変わります。カスタム損失関数は不要です。
数学と確率モデルの詳細に興味がある人には、スタンフォード大学のCS224Dクラスを強くお勧めします。 講義ノートはこちら Word2vec、CBOW、Skip-Gramについて。
別の有用なリファレンス: Word2vec実装 純粋なnumpy
およびc
。