Parsim Wikipedia fĂŒr NLP-Aufgaben in 4 Teams

Essenz


Es stellt sich heraus, dass es ausreicht, nur einen solchen Befehlssatz auszufĂŒhren:


git clone https://github.com/attardi/wikiextractor.git cd wikiextractor wget http://dumps.wikimedia.org/ruwiki/latest/ruwiki-latest-pages-articles.xml.bz2 python3 WikiExtractor.py -o ../data/wiki/ --no-templates --processes 8 ../data/ruwiki-latest-pages-articles.xml.bz2 

und dann ein wenig mit einem Skript fĂŒr die Nachbearbeitung polieren


 python3 process_wikipedia.py 

Das Ergebnis ist eine fertige .csv Datei mit Ihrem Körper.


Es ist klar, dass:


  • http://dumps.wikimedia.org/ruwiki/latest/ruwiki-latest-pages-articles.xml.bz2 kann in die gewĂŒnschte Sprache geĂ€ndert werden, weitere Details hier [4] ;
  • Alle Informationen zu den wikiextractor Parametern finden Sie im Handbuch (im Gegensatz zu Mana wurde anscheinend sogar das offizielle Dock nicht aktualisiert).

Ein Nachbearbeitungsskript konvertiert Wiki-Dateien in eine Tabelle wie die folgende:


idxarticle_uuidSatzgereinigter Satzgereinigte SatzlÀnge
074fb822b-54bb-4bfb-95ef-4eac9465c7d7Jean I de Chatillon (Graf von Pentevre) Jean I de ...jean i de chĂątillon count de pentevre jean i de cha ...38
174fb822b-54bb-4bfb-95ef-4eac9465c7d7War unter dem Schutz von Robert de Vera, Graf O ...wurde von robert de vera graph oxford bewacht ...18
274fb822b-54bb-4bfb-95ef-4eac9465c7d7Henry de Gromont, gr ...Henry de Gromon Gras war jedoch dagegen ...14
374fb822b-54bb-4bfb-95ef-4eac9465c7d7Der König bot ihm ein weiteres wichtiges Merkmal als Ehefrau an ...der könig bot seiner frau eine weitere wichtige person von fili ...48
474fb822b-54bb-4bfb-95ef-4eac9465c7d7Jean wurde freigelassen und kehrte 138 nach Frankreich zurĂŒck ...Jean befreit Frankreich Jahr Hochzeit m ...52

article_uuid - ein pseudo-eindeutiger SchlĂŒssel, dessen Ideenreihenfolge nach einer solchen Vorverarbeitung beibehalten werden sollte.


Warum


Vielleicht hat die Entwicklung von ML-Tools im Moment ein solches Niveau erreicht [8], dass buchstĂ€blich ein paar Tage ausreichen, um ein funktionierendes NLP-Modell / eine funktionierende Pipeline zu erstellen. Probleme treten nur auf, wenn keine zuverlĂ€ssigen DatensĂ€tze / fertigen Einbettungen / fertigen Sprachmodelle vorhanden sind. Der Zweck dieses Artikels ist es, Ihre Schmerzen ein wenig zu lindern, indem gezeigt wird, dass ein paar Stunden ausreichen, um die gesamte Wikipedia zu verarbeiten (theoretisch das beliebteste Korpus zum Trainieren von Worteinbettungen in NLP). Wenn ein paar Tage ausreichen, um ein einfaches Modell zu erstellen, warum sollten Sie dann viel mehr Zeit damit verbringen, Daten fĂŒr dieses Modell abzurufen?


Das Prinzip des Skripts


wikiExtractor speichert Wiki-Artikel als durch <doc> wikiExtractor getrennten Text. TatsÀchlich basiert das Skript auf der folgenden Logik:


  • Erstellen Sie eine Liste aller Dateien in der Ausgabe.
  • Wir teilen Dateien in Artikel;
  • Entfernen Sie alle verbleibenden HTML-Tags und Sonderzeichen.
  • Mit nltk.sent_tokenize teilen nltk.sent_tokenize in SĂ€tze;
  • Damit der Code nicht zu groß wird und lesbar bleibt, wird jedem Artikel eine eigene UUID zugewiesen.

Als Textvorverarbeitung ist es einfach (Sie können es leicht selbst schneiden):


  • Nicht-Buchstaben-Zeichen löschen;
  • Stoppwörter löschen;

Datensatz ist, was jetzt?


Hauptanwendung


In der Praxis muss man sich in NLP meistens mit der Aufgabe befassen, Einbettungen zu erstellen.


Verwenden Sie zur Lösung normalerweise eines der folgenden Tools:


  • Fertige Vektoren / Einbettungen von Wörtern [6];
  • Die internen ZustĂ€nde von CNN, die auf Aufgaben wie das Definieren gefĂ€lschter SĂ€tze / Sprachmodellierung / Klassifizierung trainiert wurden [7];
  • Eine Kombination der obigen Methoden;

DarĂŒber hinaus wurde mehrfach gezeigt [9], dass man als gute Basis fĂŒr das Einbetten von SĂ€tzen auch einfach gemittelte (mit ein paar kleinen Details, die wir jetzt weglassen werden) Wortvektoren verwenden kann.


Andere AnwendungsfÀlle


  • Wir verwenden zufĂ€llige SĂ€tze aus dem Wiki als negative Beispiele fĂŒr den Triplettverlust.
  • Wir trainieren Encoder fĂŒr SĂ€tze unter Verwendung der Definition von falschen Phrasen [10];

Ein paar Grafiken fĂŒr das russische Wiki


LĂ€ngenverteilung von SĂ€tzen fĂŒr russische Wikipedia


Keine Logarithmen (auf der X-Achse sind die Werte auf 20 begrenzt)



In dezimalen Logarithmen



Referenzen


  1. Fast-Text- Wortvektoren, die in einem Wiki trainiert wurden;
  2. Fast-Text- und Word2Vec- Modelle fĂŒr die russische Sprache;
  3. Fantastische Wiki-Extraktionsbibliothek fĂŒr Python;
  4. Die offizielle Seite mit Links fĂŒr Wiki;
  5. Unser Skript zur Nachbearbeitung;
  6. Hauptartikel ĂŒber Worteinbettungen : Word2Vec , Fast-Text , Tuning ;
  7. Mehrere aktuelle SOTA-AnsÀtze:
    1. InferSent ;
    2. Generatives CNN vor dem Training ;
    3. ULMFiT ;
    4. Kontextuelle AnsÀtze zur Darstellung von Wörtern (Elmo);
  8. Imagenet Moment in NLP ?
  9. Grundlagen fĂŒr die Einbettung der VorschlĂ€ge 1 , 2 , 3 , 4 ;
  10. Definition von gefĂ€lschten Phrasen fĂŒr Angebotscodierer;

Source: https://habr.com/ru/post/de425507/


All Articles