Wie trainiere ich Word2vec mit sehr großen Datensätzen?

Lesezeit: 2 Minuten

Benutzer-Avatar
pbu

Ich denke darüber nach, word2vec auf riesigen Datenmengen mit einer Größe von mehr als 10 TB auf einem Web-Crawl-Dump zu trainieren.

Ich persönlich trainierte die C-Implementierung von GoogleNews-2012-Dump (1,5 GB) auf meinem iMac und brauchte etwa 3 Stunden, um Vektoren zu trainieren und zu generieren (beeindruckt von der Geschwindigkeit). Ich habe die Python-Implementierung jedoch nicht ausprobiert 🙁 Ich habe irgendwo gelesen, dass das Generieren von Vektoren auf einem Wiki-Dump (11 GB) mit einer Vektorlänge von 300 etwa 9 Tage zum Generieren dauert.

  1. Wie beschleunigt man word2vec? Muss ich verteilte Modelle verwenden oder welche Art von Hardware benötige ich, um dies innerhalb von 2-3 Tagen zu tun? Ich habe einen iMac mit 8 GB RAM.

  2. Welche ist schneller? Gensim-Python- oder C-Implementierung?

Ich sehe, dass die Word2vec-Implementierung kein GPU-Training unterstützt.

Es gibt eine Reihe von Möglichkeiten, Word2Vec-Modelle in großem Maßstab zu erstellen. Wie Sie bereits betont haben, sind Kandidatenlösungen verteilt (und/oder multithreaded) oder GPU. Dies ist keine vollständige Liste, aber hoffentlich bekommen Sie einige Ideen, wie Sie vorgehen können.

Verteilte / Multithreading-Optionen:

  • Gensim verwendet Cython, wo es darauf ankommt, und ist gleich oder nicht viel langsamer als C-Implementierungen. Das Multi-Threading von Gensim funktioniert gut, und die Verwendung einer Maschine mit ausreichend Speicher und einer großen Anzahl von Kernen verkürzt die Vektorgenerierungszeit erheblich. Möglicherweise möchten Sie die Verwendung von Amazon EC2-Instances mit 16 oder 32 Kernen untersuchen.
  • Deepdist kann Gensim und Spark verwenden, um Gensim-Workloads über einen Cluster zu verteilen. Deepdist hat auch einige clevere SGD-Optimierungen, die den Gradienten über Knoten hinweg synchronisieren. Wenn Sie Mehrkernmaschinen als Knoten verwenden, können Sie sowohl Clustering als auch Multithreading nutzen.

Es gibt eine Reihe von Word2Vec-GPU-Implementierungen. Angesichts der großen Dataset-Größe und des begrenzten GPU-Speichers müssen Sie möglicherweise eine Clustering-Strategie in Betracht ziehen.

  • Bidmach ist anscheinend sehr schnell (Dokumentation fehlt jedoch, und zugegebenermaßen habe ich mich bemüht, es zum Laufen zu bringen).
  • DL4J hat eine Word2Vec-Implementierung, aber das Team muss cuBLAS gemm noch implementieren und es ist relativ langsam im Vergleich zu CPUs.
  • Keras ist ein Deep-Learning-Framework für Python, das Theano verwendet. Obwohl es word2vec per se nicht implementiert, implementiert es eine Einbettungsschicht und kann verwendet werden, um Wortvektoren zu erstellen und abzufragen.

Es gibt eine Reihe anderer CUDA-Implementierungen von Word2Vec mit unterschiedlichem Reife- und Unterstützungsgrad:

Ich glaube, das SparkML-Team hat kürzlich einen Prototyp einer cuBLAS-basierten Word2Vec-Implementierung gestartet. Vielleicht möchten Sie dies untersuchen.

1246270cookie-checkWie trainiere ich Word2vec mit sehr großen Datensätzen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy