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:
idx | article_uuid | Satz | gereinigter Satz | gereinigte SatzlÀnge |
---|
0 | 74fb822b-54bb-4bfb-95ef-4eac9465c7d7 | Jean I de Chatillon (Graf von Pentevre) Jean I de ... | jean i de chĂątillon count de pentevre jean i de cha ... | 38 |
1 | 74fb822b-54bb-4bfb-95ef-4eac9465c7d7 | War unter dem Schutz von Robert de Vera, Graf O ... | wurde von robert de vera graph oxford bewacht ... | 18 |
2 | 74fb822b-54bb-4bfb-95ef-4eac9465c7d7 | Henry de Gromont, gr ... | Henry de Gromon Gras war jedoch dagegen ... | 14 |
3 | 74fb822b-54bb-4bfb-95ef-4eac9465c7d7 | Der König bot ihm ein weiteres wichtiges Merkmal als Ehefrau an ... | der könig bot seiner frau eine weitere wichtige person von fili ... | 48 |
4 | 74fb822b-54bb-4bfb-95ef-4eac9465c7d7 | Jean 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
- Fast-Text- Wortvektoren, die in einem Wiki trainiert wurden;
- Fast-Text- und Word2Vec- Modelle fĂŒr die russische Sprache;
- Fantastische Wiki-Extraktionsbibliothek fĂŒr Python;
- Die offizielle Seite mit Links fĂŒr Wiki;
- Unser Skript zur Nachbearbeitung;
- Hauptartikel ĂŒber Worteinbettungen : Word2Vec , Fast-Text , Tuning ;
- Mehrere aktuelle SOTA-AnsÀtze:
- InferSent ;
- Generatives CNN vor dem Training ;
- ULMFiT ;
- Kontextuelle AnsÀtze zur Darstellung von Wörtern (Elmo);
- Imagenet Moment in NLP ?
- Grundlagen fĂŒr die Einbettung der VorschlĂ€ge 1 , 2 , 3 , 4 ;
- Definition von gefĂ€lschten Phrasen fĂŒr Angebotscodierer;