複数のワーカーのサポートを受けて、gensimでword2vecをバッチトレーニングします

マーカス

環境

ストリーミングデータWord2Vecを使用gensimてトレーニングする方法については、いくつかの質問があります。とにかく、これらの質問は、スレッド間で分割する配列がないため、ストリーミングで複数のワーカーを使用できないという問題を扱っていません。

したがって、gensimにそのような機能を提供するジェネレーターを作成したかったのです。私の結果は次のようになります。

from gensim.models import Word2Vec as w2v

#The data is stored in a python-list and unsplitted.
#It's too much data to store it splitted, so I have to do the split while streaming.
data = ['this is document one', 'this is document two', ...]

#Now the generator-class
import threading

class dataGenerator:
    """
    Generator for batch-tokenization.
    """

    def __init__(self, data: list, batch_size:int = 40):
        """Initialize generator and pass data."""

        self.data = data
        self.batch_size = batch_size
        self.lock = threading.Lock()


    def __len__(self):
        """Get total number of batches."""
        return int(np.ceil(len(self.data) / float(self.batch_size)))


    def __iter__(self) -> list([]):
        """
        Iterator-wrapper for generator-functionality (since generators cannot be used directly).
        Allows for data-streaming.
        """
        for idx in range(len(self)):
            yield self[idx]


    def __getitem__(self, idx):

        #Make multithreading thread-safe
        with self.lock:

            # Returns current batch by slicing data.
            return [arr.split(" ") for arr in self.data[idx * self.batch_size : (idx + 1) * self.batch_size]]


#And now do the training
model = w2v(
             sentences=dataGenerator(data),
             size=300,
             window=5,
             min_count=1,
             workers=4
            )

これによりエラーが発生します

TypeError:ハッシュ不可能なタイプ: 'リスト'

dataGenerator(data)分割されたドキュメントを1つだけ生成すれば機能するので、gensimsword2vecはジェネレーターを追加のリストにラップしていると思います。この場合、次の__iter__ようになります。

def __iter__(self) -> list:
    """
    Iterator-wrapper for generator-functionality (since generators cannot be used directly.
    Allows for data-streaming.
    """
    for text in self.data:
        yield text.split(" ")

したがって、私のバッチもラップ[[['this', '...'], ['this', '...']], [[...], [...]]]され、gensimで処理できない(=>リストのリストのリスト)のようなものになります。




私の質問:

複数のワーカーを使用するためにバッチを「ストリーミング」パスすることはできますか?それに応じてコードを変更するにはどうすればよいですか?

マーカス

焦りすぎたようです。上記のストリーミング関数を実行しました。この関数は、バッチではなく1つのドキュメントのみを処理します。

def __iter__(self) -> list:
    """
    Iterator-wrapper for generator-functionality (since generators cannot be used directly.
    Allows for data-streaming.
    """
    for text in self.data:
        yield text.split(" ")

w2v-functionを開始してから、すべてのコアが正しく機能するまで約10分かかりました。

語彙の構築は複数のコアをサポートしていないようであるため、このタスクには1つだけが使用されました。おそらく、コーパスサイズのためにとても時間がかかりました。gensimが語彙を作成した後、すべてのコアがトレーニングに使用されました。

したがって、この問題でも実行している場合は、ある程度の忍耐がすでに役立つかもしれません:)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

非線形性のあるスタックオートエンコーダーを使用してWord2vecをトレーニングできますか?

分類Dev

Gensimを使用してWord2vecモデルをトレーニングする

分類Dev

GensimのWord2Vecは提供されたドキュメントをトレーニングしていません

分類Dev

事前トレーニング済みのgensim Word2vec埋め込みをケラスに埋め込む

分類Dev

H2Oは、h2o word2vecで使用するための事前トレーニング済みのベクターを提供しますか?

分類Dev

Word2Vecで事前トレーニング済みモデルをマージしますか?

分類Dev

Word2Vecはいくつのエポックをトレーニングする必要がありますか?推奨されるトレーニングデータセットは何ですか?

分類Dev

Gensim Word2Vecは、事前にトレーニングされたモデルから単語ベクトルのマイナーセットを選択します

分類Dev

gensim:Googleの事前トレーニング済みword2vecモデルをロードすると、「Doc2Vec」オブジェクトに属性「intersect_word2vec_format」がありません

分類Dev

TensorFlowと並行して複数のミニバッチでGPUをトレーニングする

分類Dev

非常に大きなデータセットでWord2vecをトレーニングする方法は?

分類Dev

Relay.jsは、複数のセッションでの同形のサーバー側レンダリングをサポートしていますか?

分類Dev

トレーニング済みのGloVe / word2vecモデルを使用して、記事からキーワードを抽出するにはどうすればよいですか?

分類Dev

複数のトレーニング方法を使用して、EncogでANNをトレーニングします

分類Dev

新しい語彙でword2vecモデルを段階的にトレーニングする方法

分類Dev

事前トレーニング済みネットワーク(1ブランチ)を使用して、カフェに2つのブランチがあるネットワークのレイヤーの重みを初期化します。

分類Dev

Apacheストームについて、Tridentトポロジの1つのバッチを複数のワーカー並列で処理できますか?

分類Dev

TensorFlowで事前トレーニング済みの単語埋め込み(word2vecまたはGlove)を使用する

分類Dev

tf.dataデータセットを使用して同じバッチで複数のトレーニング操作を実行する方法

分類Dev

ニューラルネットワークへの事前トレーニング済み(Word2Vec)埋め込み

分類Dev

トレーニング後に新しく蓄積された最近のデータのバッチを使用してニューラルネットワークを再トレーニングするための用語は何ですか?

分類Dev

トレーニング中にRASAチャットボットフレームワークでエラーが発生しました:fit()がキーワード引数 'batch_size'に複数の値を取得しました

分類Dev

別の言語でトレーニングされたWord2vecモデルの精度を測定する方法は?

分類Dev

ワニスはグーグルモバイルテスターのデスクトップサイトをレンダリングしています

分類Dev

Gensim Word2Vec:トレーニングパフォーマンスが低い。

分類Dev

gensimのword2vecのレイヤーサイズ

分類Dev

事前にトレーニングされたword2vecから文の類似性を見つけるためのKeras

分類Dev

OpenOCD + STLINK-V3SETは、デイジーチェーン構成で複数のコントローラーのデバッグをサポートしていますか?

分類Dev

intellijデバッグ:カーソルの前のすべてのブレークポイントを無視してカーソルまで実行します

Related 関連記事

  1. 1

    非線形性のあるスタックオートエンコーダーを使用してWord2vecをトレーニングできますか?

  2. 2

    Gensimを使用してWord2vecモデルをトレーニングする

  3. 3

    GensimのWord2Vecは提供されたドキュメントをトレーニングしていません

  4. 4

    事前トレーニング済みのgensim Word2vec埋め込みをケラスに埋め込む

  5. 5

    H2Oは、h2o word2vecで使用するための事前トレーニング済みのベクターを提供しますか?

  6. 6

    Word2Vecで事前トレーニング済みモデルをマージしますか?

  7. 7

    Word2Vecはいくつのエポックをトレーニングする必要がありますか?推奨されるトレーニングデータセットは何ですか?

  8. 8

    Gensim Word2Vecは、事前にトレーニングされたモデルから単語ベクトルのマイナーセットを選択します

  9. 9

    gensim:Googleの事前トレーニング済みword2vecモデルをロードすると、「Doc2Vec」オブジェクトに属性「intersect_word2vec_format」がありません

  10. 10

    TensorFlowと並行して複数のミニバッチでGPUをトレーニングする

  11. 11

    非常に大きなデータセットでWord2vecをトレーニングする方法は?

  12. 12

    Relay.jsは、複数のセッションでの同形のサーバー側レンダリングをサポートしていますか?

  13. 13

    トレーニング済みのGloVe / word2vecモデルを使用して、記事からキーワードを抽出するにはどうすればよいですか?

  14. 14

    複数のトレーニング方法を使用して、EncogでANNをトレーニングします

  15. 15

    新しい語彙でword2vecモデルを段階的にトレーニングする方法

  16. 16

    事前トレーニング済みネットワーク(1ブランチ)を使用して、カフェに2つのブランチがあるネットワークのレイヤーの重みを初期化します。

  17. 17

    Apacheストームについて、Tridentトポロジの1つのバッチを複数のワーカー並列で処理できますか?

  18. 18

    TensorFlowで事前トレーニング済みの単語埋め込み(word2vecまたはGlove)を使用する

  19. 19

    tf.dataデータセットを使用して同じバッチで複数のトレーニング操作を実行する方法

  20. 20

    ニューラルネットワークへの事前トレーニング済み(Word2Vec)埋め込み

  21. 21

    トレーニング後に新しく蓄積された最近のデータのバッチを使用してニューラルネットワークを再トレーニングするための用語は何ですか?

  22. 22

    トレーニング中にRASAチャットボットフレームワークでエラーが発生しました:fit()がキーワード引数 'batch_size'に複数の値を取得しました

  23. 23

    別の言語でトレーニングされたWord2vecモデルの精度を測定する方法は?

  24. 24

    ワニスはグーグルモバイルテスターのデスクトップサイトをレンダリングしています

  25. 25

    Gensim Word2Vec:トレーニングパフォーマンスが低い。

  26. 26

    gensimのword2vecのレイヤーサイズ

  27. 27

    事前にトレーニングされたword2vecから文の類似性を見つけるためのKeras

  28. 28

    OpenOCD + STLINK-V3SETは、デイジーチェーン構成で複数のコントローラーのデバッグをサポートしていますか?

  29. 29

    intellijデバッグ:カーソルの前のすべてのブレークポイントを無視してカーソルまで実行します

ホットタグ

アーカイブ