Anwenden von word2vec auf kleine Textdateien

11

Ich bin völlig neu in word2vec, also tragen Sie es bitte mit mir. Ich habe eine Reihe von Textdateien, die jeweils eine Reihe von Tweets zwischen 1000 und 3000 enthalten. Ich habe ein allgemeines Schlüsselwort ("kw1") ausgewählt und möchte mit word2vec semantisch relevante Begriffe für "kw1" finden. Wenn das Schlüsselwort beispielsweise "apple" lautet, würde ich erwarten, dass verwandte Begriffe wie "ipad" "os" "mac" ... basierend auf der Eingabedatei angezeigt werden. Dieser Satz verwandter Begriffe für "kw1" wäre also für jede Eingabedatei unterschiedlich, da word2vec für einzelne Dateien trainiert würde (z. B. 5 Eingabedateien, führe word2vec 5 Mal für jede Datei aus).

Mein Ziel ist es, Sätze verwandter Begriffe für jede Eingabedatei mit dem gemeinsamen Schlüsselwort ("kw1") zu finden, das für andere Zwecke verwendet wird.

Meine Fragen / Zweifel sind:

  • Ist es sinnvoll, word2vec für eine solche Aufgabe zu verwenden? Ist es technisch richtig, es angesichts der geringen Größe einer Eingabedatei zu verwenden?

Ich habe den Code von code.google.com heruntergeladen: https://code.google.com/p/word2vec/ und habe ihn gerade wie folgt getestet :

 time ./word2vec -train $file -output vectors.bin -cbow 1 -size 200 -window 10 -negative 25 -hs 1 -sample 1e-3 -threads 12 -binary 1 -iter 50

./distance vectors.bin 
  • Aus meinen Ergebnissen habe ich gesehen, dass ich viele verrauschte Begriffe (Stoppwörter) bekomme, wenn ich das 'Distanz'-Tool verwende, um verwandte Begriffe zu "kw1" zu erhalten. Also habe ich Stoppwörter und andere verrauschte Begriffe wie Benutzererwähnungen entfernt. Aber ich habe nirgendwo gesehen, dass word2vec bereinigte Eingabedaten benötigt ...?

  • Wie wählen Sie die richtigen Parameter aus? Ich sehe, dass die Ergebnisse (beim Ausführen des Distanzwerkzeugs) stark variieren, wenn ich Parameter wie '-window', '-iter' ändere. Welche Technik soll ich verwenden, um die richtigen Werte für die Parameter zu finden? (Manuelles Ausprobieren ist für mich nicht möglich, da ich den Datensatz vergrößern werde).

Samsamara
quelle

Antworten:

9

Word2Vec ist keine gute Wahl für einen Datensatz dieser Größe. Nach Recherchen, die ich gesehen habe, wird es seine Kraft entfesseln, wenn Sie mindestens ein paar Millionen Wörter füttern. 3.000 Tweets würden für eine prägnante Wortähnlichkeit nicht ausreichen.

Chewpakabra
quelle
Müssen wir Stoppwörter als Datenvorverarbeitungsschritt entfernen?
Samsamara
2
Nein, beim word2vec-Ansatz müssen Sie dies nicht tun, da der Algorithmus selbst auf einem breiten Kontext beruht, um Ähnlichkeiten in Wörtern zu finden. Stoppwörter (von denen die meisten Präpositionen, Pronomen usw. sind) sind daher wichtige Asses für den Algorithmus .
Chewpakabra
Aber als ich das Entfernungswerkzeug verwendete, um die ähnlichsten Wörter zu einem bestimmten Wort zu finden, gab mir die Version mit entfernten Stoppwörtern vernünftigere Wörter als die Version ohne. Kannst du erraten, was das bedeutet?
Samsamara
Wahrscheinlich verwenden Sie einen zu engen Kontext: Wenn Ihr Modell beispielsweise zwei Wörter vor und zurück untersucht, haben Sie bis zu zwei Stoppwörter im Kontext, was zu schlechteren Ergebnissen führen kann. Wenn Sie den Kontext erweitern (wodurch das Modell größer und die Trainingszeit länger wird), liefert das Modell mit Stoppwörtern vermutlich bessere Ergebnisse.
Chewpakabra
danke für die Eingabe, macht jetzt mehr Sinn. Auch wenn word2vec die Eingabe Satz für Satz verarbeitet, was würde passieren, wenn ich die Sätze im Eingabedokument verwechsle? das sollte die Ausgangsvektoren total verändern, oder? Wie unterscheidet sich word2vec angesichts der von send gesendeten Verarbeitung von doc2vec? Danke noch einmal.
Samsamara