Frage

Ich möchte eine Wortvorhersagbarkeitsaufgabe ausbilden, um Worteinbettungen zu generieren. Die Dokumentsammlung enthält 243K -Dokumente. Die Code -Implementierung befindet sich in Fackel. Ich kämpfe mit der enormen Größe des Datensatzes und brauche Ideen, wie man Wortbettendings in einem so großen Datensatz trainiert, das eine Sammlung von 243.000 vollständigen Artikeldokumenten darstellt. Die Research Computing -Ressource ist zeitlich festgelegt. Erhalten Sie also einen kurzen Zugriff auf den GPU -Knoten und entscheiden Sie sich damit für ein inkrementelles Modelltraining:

  1. Inkrementelles Modelltraining: Eine Möglichkeit, im gesamten Datensatz zu trainieren, besteht darin, ein inkrementelles Modelltraining zu verwenden, das das Modell auf einem Teil der Daten trainiert und speichert. Später das gleiche vorgebreitete Modell aufnehmen und mit dem Training als nächster Datenblock mit dem Training beginnen. Das Problem, das ich bei diesem Ansatz habe, ist, wie ich das Wortschatz/Wörterbuch von Wörtern aufrechterhalten kann. In Wortbettungsmethoden spielt Dictionary/Vocab eine wichtige Rolle. Wir fegen alle Dokumente über und erstellen ein Vokab der Wörter, die mehr als eine minimale festgelegte Frequenz zählen. Tatsächlich ist dieses Vokab eine Hash -Karte, die jedem Wort zugeordnet ist, und in Trainingsmuster ersetzen wir Wörter durch ihre Indizes im Vokab, für die Einfachheit im Modell. Wie erstelle ich bei inkrementellem Training inkrementell ein Wörterbuch? Muss ich anfänglich Vokabel/Wörterbuch für ganze Dokumente erstellen und dann schrittweise trainieren? Oder ist auch die Möglichkeit, das Vokabale in schrittweisen Ausbildung zu erweitern?
  2. Ein weiteres Problem ist die Speichergrenze für die Größe der Vokabendatenstruktur. Ich implementiere mein Modell in Torch, das auf LUA basiert. LUA legt also eine Grenze für die Größe der Tabellen vor, ich kann Vokab für ganze Dokumente in einer einzigen Tabelle nicht laden. Wie kann man solche Gedächtnisprobleme überwinden?
  3. Lassen Sie sich von Handschuhvektoren inspirieren. In ihrer Zeitung sagen sie, dass sie „unser Modell auf fünf Korpora unterschiedlicher Größen ausgebildet haben: eine Wikipedia -Dump 2010 mit 1 Milliarde Token; ein Wikipedia-Dump 2014 mit 1,6 Milliarden Kern; Gigaword 5 mit 4,3 Milliarden Token; die Kombination Gigaword5 + Wikipedia2014, die 6 Milliarden Token hat; und auf 42 Milliarden Token von Webdaten aus dem gemeinsamen Crawl5. Wir haben jeden Korpus mit dem Stanford-Tokenizer an und bauen ein Vokabular der 400.000 häufigsten Wörter6 und bauen dann eine Matrix des Ko-Auftretens x “. Irgendeine Idee, wie Handschuhvektoren auf einem so großen Korpus und einem großen Wortschatz trainiert wurden und wie Gedächtnisbeschränkungen in ihrem Fall möglicherweise behandelt werden können? Papierreferenz - http://nlp.stanford.edu/pubs/glove.pdf
  4. Irgendwelche Ideen, wie man die Größe des Datensatzes zum Generieren von Worteinbettungen begrenzt? Wie würde es die Leistung oder Abdeckung von Worteinbettungen mit der Zunahme oder Abnahme der Anzahl der Dokumente beeinflussen? Ist es eine gute Idee, Stichprobentechniken zu verwenden, um Dokumente aus dem Datensatz zu probieren? Wenn ja, schlagen Sie bitte einige der Stichprobentechniken vor.
War es hilfreich?

Lösung

Möglicherweise können Sie die integrierte Speichergrenze mit der TDS-Bibliothek überwinden, mit der Sie mehr oder weniger äquivalente Strukturen erstellen können, die nicht durch die Speicherkappe von Lua eingeschränkt sind. Dies hilft nicht bei den Grenzen Ihrer Hardware, aber Sie werden in der Lage sein, Dinge wie Tische zu haben, die größer als 2 GB sind.

https://github.com/torch/tds

Wenn alles andere fehlschlägt, können Sie in Betracht ziehen, Ihr Wortschatz in kleinere Tabellen zu unterteilen. Wenn Sie dann darauf zugreifen müssen, hätten Sie eine Art Master -Tabelle, in dem Sie die richtige Vokababelle für das von Ihnen gesuchte Element nachschlagen würden. Dies würde erforderlich sein, um Ihr Wortschatz zu sortieren, daher müssten Sie immer noch alles gleichzeitig im Speicher haben (oder Ihren eigenen schlauen Sortieralgorithmus implementieren) bleibt konstant. Dann serialisieren Sie alle Vokabebene und laden sie von der Festplatte als notwendig, was langsam, aber immer noch schneller ist, als Ihr physisches Gedächtnis zu füllen und den Austausch zu essen. Wahrscheinlich.

Andere Tipps

Ich bin mit Torch nicht vertraut, aber da Word2Vec und Doc2VEC im Grunde genommen berücksichtigt werden, lernen diese Modelle aus den einzelnen Sätzen und daher müssen nicht alle Sätze in der Erinnerung enthalten. Sie könnten über jeden Satz in der Korpora iterieren und das Modell aus jedem Satz lernen lassen. Und so schulen Menschen wahrscheinlich mit oder ohne hohe Berechnungsmaschinen auf riesige Korpora.

Ein kurzes Beispiel in Python:

class SentenceIterator(object):
   def __iter__(file_name):
      for line in open(file_name)
         yield line

sentences = SentenceIterator("path/to/file")
for line in sentences:
    model.train(line)

Auf diese Weise wird der Speicher jeweils nur mit einem Satz geladen und wenn er fertig ist, wird der Speicher die nächste geladen. Für den Aufbau des Wortschatzes können Sie das gesamte Iterieren über alle Dokumente durchführen, um das Vokabel zuerst zu erstellen und dann die Daten zu trainieren, abhängig von den implementierten Wortmettierungsfunktionen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit datascience.stackexchange
scroll top