Woche 6: Korpusbereinigung - mkappus1/DatenmanagementMTHS24 GitHub Wiki
1. Einführung
- Hier gibt es eine Kurzübersicht/Check-Liste für Block 6
Unabhängig davon, ob Sie ein paralleles Korpus aus dem Internet bezogen oder selbst erstellt haben, ist es sehr ratsam, das Korpus zu bereinigen. Parallelkorpora können eine Reihe von Problemen aufweisen:
- Das Vorhandensein von Zeichen, die durch ihre html/xml-Entität dargestellt werden. Wir können zum Beispiel einige „ oder á zusammen mit einigen Instanzen des entsprechenden Zeichens im Korpus finden.
- Leere Segmente in einigen der Sprachen.
- Segmente in anderen als den gewünschten Sprachen.
- Segmente mit einem hohen Anteil an numerischen Ausdrücken.
- Segmente mit XML/HTML-Tags. Systeme werden normalerweise mit Korpora trainiert, aus denen diese Tags entfernt wurden.
- Fehler in der Zeichenkodierung.
- Segmente mit nicht druckbaren Zeichen.
- und viele mehr
Ausserdem ist es möglich, dass selbst wenn das Ausgangssegment in der Ausgangssprache und das Zielsegment in der Zielsprache ist, es sich nicht wirklich um Übersetzungsäquivalente handelt. In dieser Woche lernen Sie, wie man verschiedene Bereinigungsoperationen an Parallelkorpora automatisiert durchführen kann. Als Beispiel-Korpus für diese Übungen können Sie folgende Korpora verwenden, die durch die in Woche 4 beschriebenen Schritte mit Daten von der Webseite des BAG erstellt wurden. BAG Korpus (EN-DE) (ca. 16 000 Segmente) BAG Korpus (EN-IT) (ca. 11 000 Segmente)
In den nächsten Tagen stelle ich noch weitere Beispielkorpora zur Verfügung, Sie können aber auch die Korpora verwenden, die Sie in den ersten beiden Wochen erstellt haben.
2. Empfohlene Lektüre
Diese Woche empfehle ich Ihnen eine Blick in die Folien von Janine Aeberhardt aus dem CAS Translation Technology and AI aus dem Jahr 2021 (ab Folie 59). Mehr zu den dort erwähnten Tools in der kommenden Woche.
Und als weitere Referenz zwei Artikel zu Tools, die ähnliche Operationen durchführen wie die, die wir diese Woche verwenden werden:
3. Korpusbereinigung
Die gesamte Skriptsammlung können Sie hier herunterladen https://github.com/mtuoc/MTUOC-clean-parallel-corpus/archive/refs/heads/main.zip oder über den Befehl git clone https://github.com/mtuoc/MTUOC-clean-parallel-corpus.git
.
Im Verzeichnis MTUOC-clean-parallel-corpus sollten Sie folgenden Programme und Skripte finden:
Als erstes können sie das Skript MTUOC-clean-parallel-corpus.py benutzen.
Denken sie daran die in der Datei _requirements.txt _aufgeführten Module zu importieren
pip install -r requirements.txt
bzw.pip3 install -r requirements.txt
Lassen Sie sich über die Option -h, die verschiedenen Parameter für das Skript anzeigen python3 MTUOC-clean-parallel-corpus.py -h
python3 MTUOC-clean-parallel-corpus.py -h
usage: MTUOC-clean-parallel-corpus.py [-h] -i INPUTFILE -o OUTPUTFILE [-a] [--remove_control_characters]
[--remove_non_printable] [--norm_apos] [--norm_unicode] [--remove_tags]
[--unescape_html] [--fixencoding] [--remove_empty] [--remove_short REMOVE_SHORT]
[--remove_equal] [--remove_NUMPC REMOVE_NUMPC] [--remove_URLPC REMOVE_URLPC]
[--remove_URL] [--remove_long REMOVE_LONG] [--remove_non_latin]
[--remove_non_script] [--check_weights] [--escapeforMoses]
[--stringFromFile STRINGFROMFILE] [--regexFromFile REGEXFROMFILE] [--vSL VSL]
[--vTL VTL] [--vSetLanguages VSETLANGUAGES] [--vTNOTL VTNOTL] [--noUPPER]
[--verbose]
MTUOC program for cleaning tab separated parallel corpora.
options:
-h, --help show this help message and exit
-i INPUTFILE, --in INPUTFILE
The input file.
-o OUTPUTFILE, --out OUTPUTFILE
The output file.
-a, --all Performs default cleaning actions.
--remove_control_characters
Remove control characters.
--remove_non_printable
Remove control characters.
--norm_apos Normalize apostrophes.
--norm_unicode Normalize unicode characters to NFC.
--remove_tags Removes html/XML tags.
--unescape_html Unescapes html entities.
--fixencoding Tries to restore errors in encoding.
--remove_empty Removes segments with empty SL or TL segments.
--remove_short REMOVE_SHORT
Removes segments with less than the given number of characters.
--remove_equal Removes segments with equal SL or TL segments.
--remove_NUMPC REMOVE_NUMPC
Removes segments with a percent of numbers higher than the given.
--remove_URLPC REMOVE_URLPC
Removes segments with a percent of URLs higher than the given.
--remove_URL Removes segments with URLs.
--remove_long REMOVE_LONG
Removes segments with more characters than the given number.
--remove_non_latin Removes chars outside the latin extended.
--remove_non_script Removes chars outside the Unicode script chars.
--check_weights Removes segments not having a valid weight.
--escapeforMoses Replaces [ ] and | with entities.
--stringFromFile STRINGFROMFILE
Removes segments containing strings from the given file (one string per line).
--regexFromFile REGEXFROMFILE
Removes segments matching regular expressions from the given file (one regular expression per
line).
--vSL VSL Verify language of source language segments.
--vTL VTL Verify language of target language segments.
--vSetLanguages VSETLANGUAGES
Set the possible languages (separated by ",". For example: en,es,fr,ru,ar,zh.)
--vTNOTL VTNOTL Verify target language not being a given one (to avoid having SL in TL, for example).
--noUPPER Deletes the segment if it is uppercased (either source or target segment).
--verbose If set, shows the actions on standard output.
Wenn Sie sich das Programm ansehen, gibt es sehr viele Optionen. Der Einfachheit halber hat es auch die Option -a --all
, die die häufigsten Bereinigungsoptionen durchführt, nämlich die folgenden:
- Steuerzeichen entfernen
- Entfernen von nicht druckbaren Zeichen
- Normalisierung von Apostrophen
- Normalisierung von Unicode-Zeichen
- Entfernen von Tags
- Unescape html-Zeichen
- Kodierungsfehler beheben
- Leere Segmente entfernen
- Entfernen von kurzen Segmenten (weniger als 5 Zeichen)
- Entfernen von Segmenten mit mehr als 60% numerischen Zeichen
- Entfernen von Segmenten mit gleichen Quell- und Zielsegmenten
- Entfernen von Segmenten mit mehr als 10% der Segmente in URLs
Jetzt schauen wir uns ein paar Anwendungsbeispiele mit den Dateien an, die wir in den letzten Wochen erstellt haben (siehe Links ZU BAG Korpora oben), Zunächst führen wir eine grundlegende Bereinigung des Korpus bag-uniq-en-it.txt bzw. bag-uniq-en-de.txt durch, Dazu habe ich die beiden Korpora in das gleiche Verzeichnis kopiert, wie das Skript MTUOC-clean-parallel-corpus.py.
Um die Bereinigung mit den gängigsten Optionen durchzuführen, verwenden Sie die Option -a
. Sie können den Befehl also folgendermassen anpassen:
python3 MTUOC-clean-parallel-corpus.py -i bag-uniq-en-de.txt -o clean-bag-uniq-en-de.txt -a
python3 MTUOC-clean-parallel-corpus.py -i bag-uniq-en-it.txt -o clean-bag-uniq-en-it.txt -a
Jetzt können Sie die Segmente in den beiden Dateien zählen und die Anzahl vergleichen, um zu sehen, ob tatsächlich Segmente entfernt worden sind. Dazu verwenden Sie den Befehl wc -l
, den Sie schon in anderen Lektionen gesehen haben. Sie können die ursprüngliche Datei und die bereinigte Datei nacheinander einzeln zählen.
Erst:
wc -l bag-uniq-en-de.txt
11476 bag-uniq-en-de.txt
und dann:
wc -l clean-bag-uniq-en-de.txt
11157 clean-bag-uniq-en-de.txt
Oder Sie können über einen regulären Ausdruck die Segmente in beiden Dateien mit einem einzigen Befehl zu Zählen:
wc -l *bag-uniq-en-de.txt
11476 bag-uniq-en-de.txt
11157 clean-bag-uniq-en-de.txt
22633 total
Sie sehen, dass ca 300 Segmente auf diese Art entfernt wurden. Hier die Segmentzählung für die Italienische Version:
wc -l *bag-uniq-en-it.txt
11851 bag-uniq-en-it.txt
10960 clean-bag-uniq-en-it.txt
22811 total
Aufgabe 1: Machen Sie einen Screenshot, der die Zeilenzahlen der ursprünglichen Datei und der bereinigten Datei zeigt, und laden Sie ihn unter Aufgabe 1 auf Moodle hoch.
Sie können die Dateien, die aus der Bereinigung resultieren, unter folgenden Links herunterladen:
Jetzt könnte es interessant sein, einen Blick auf die Segmente zu werfen, die bereinigt wurden (also aus der Datei entfernt wurden) um zu sehen, was das Skript eigentlich gemacht hat. Das Pythonskript MTUOC-clean-parallel-corpus.py bietet leider keine direkte Möglichkeit, eine Datei mit den entfernten Inhalte zu erstellen. Das Unix-Tool grep bietet uns aber die Möglichkeit die ursprüngliche Datei mit der bereinigten Datei zu vergleichen und die Segmente (Zeilen), die nur in der ursprünglichen Datei vorkommen. in eine neue Datei zu schrieben. Der entsprechende Befehl sieht schematisch so aus:
grep -Fxv -f kleinere_datei.txt groessere_datei.txt > unterschiede.txt
Wobei kleinere_datei.txt für die bereinigte Datei steht und groessere_datei.txt für die ursprüngliche Datei. Die Segmente, die in der kleineren Datei nicht mehr vorhanden sind, werden in die Datei unterschiede.txt geschrieben. Das sind die Parameter für grep, die hier benutzt werden:
-F
: Behandelt die Muster als feste Strings (kein Regex).-x
: Nur Zeilen, die genau übereinstimmen.-v
: Gibt die Zeilen aus, die nicht übereinstimmen.-f kleinere_datei.txt
: Nutzt die kleinere Datei als Vergleichsmuster.
In unserem Fall könnte der Befehl so aussehen:
grep -Fxv -f clean-bag-uniq-en-de.txt bag-uniq-en-de.txt > unterschiede-de.txt
oder folgendermassen für Italienisch:
grep -Fxv -f clean-bag-uniq-en-it.txt bag-uniq-en-it.txt > unterschiede-it.txt
Aufgabe 2: Erstellen Sie eine solche Datei mit den entfernten Segmenten (Zeilen). Öffnen Sie sie in einem geeigneten Texteditor (in wsl/UNIX oder Windows). Entspricht das Ergebnis Ihren Erwartungen? Was für Segmente wurden entfernt? Notieren Sie Ihre Beobachtungen stichwortartig und laden Sie sie (zusammen mit der Datei mit den Unterschieden) unter Aufgabe 2 auf Moodle hoch..
Das Bereinigungsprogramm ermöglicht es Ihnen auch, die Sprachen der Segmente zu überprüfen und Segmente zu löschen, wenn sie nicht in der richtigen Sprache sind. Sie können auch das anhand der bereits oben verwendeten BAG-Korpora ausprobieren. Dazu führen wir das Skript _MTUOC-clean-parallel-corpus.py _ noch einmal - aber mit zusätzlichen Parametern - aus.
Stellen Sie sicher, dass Sie Ihre bisherigen Ergebnisse und bereinigten Dateien im folgenden nicht überschrieben. Kopieren Sie die bisherigen Ergebnisse in ein anderes Verzeichnis oder stellen Sie ganz sicher, dass Sie bei der nächsten Ausführung des Bereinigungsskripts MTUOC-clean-parallel-corpus.py einen anderen Dateinamen für die bereinigte Datei angeben als vorher.
python3 MTUOC-clean-parallel-corpus.py -i bag-uniq-en-de.txt -o clean-neu-bag-uniq-en-de.txt --vSL en --vTL de --vSetLanguages en,de --verbose > test.txt
Mit der Option --vSL
geben wir die Ausgangssprache und mit --vTL die Zielsprache an. Mit --vSetLanguages können wir die Anzahl der zu erkennenden Sprachen begrenzen. Das kann nützlich sein, wenn wir uns sehr sicher sind, dass keine anderen Sprachen im Spiel sein können. Mit der Option --verbose
können wir uns die Aktionen bzw. Ergebnisse des Bereinigungsprogramms auf dem Bildschirm ansehen. Über den Befehl > text.txt
lassen wir das, was am Bildschirm ausgegeben würde, in eine Textdatei mit dem Namen text.txt schrieben.
Wenn wir sie uns ansehen (more
. less
, ...), sieht das etwa so aus:
Die Ausgabe des Skripts ist folgendermassen zu interpretieren:
TARGET NOT MATCHING: de en - Palliative Care
- Hier wurde in der Zielsprache ein deutsches Segment erwartet, das Skript hat das Zielsegment als Englisch erkannt bzw. eingestuft.
SOURCE NOT MATCHING: en de - Faktenblatt: KVG-Solvenztest 2024 (in German) (PDF, 273 kB, 26.09.2024)
- Hier wurde in der Ausgangssprache ein Englisches Segment erwartet, das Segment wurde vom Skript aber als Deutsch interpretiert.
Die Spracherkennung ist bei kurzen Segmenten oft nicht zuverlässig, und wir können damit -- fälschlicherweise -- korrekte Segmente ausschliessen. Wenn das Korpus jedoch gross genug ist, ist es in der Regel besser, fälschlicherweise richtige Inhalte zu entfernen, als falsche Inhalte im Korpus zu belassen.
Aufgabe 3: Suchen Sie in Ihrer Datei text.txt 3 Beispiele, bei denen die Spracherkennung (also hier die Erkennung der falschen Sprache) gut funktioniert hat und 3 Segmente bei denen sie ein falsches Ergebnis geliefert hat. Erklären Sie, warum die Spracherkennung sich geirrt hat. Laden Sie Ihre Beobachtungen unter Aufgabe 3 auf Moodle hoch..
4. Korpus-Re-Scoring
Bitte lesen Sie diesen Abschnitt (4. Korpus-Re-Scoring) aufmerksam durch. Nach Möglichkeit sollten Sie die Skripte und Prozesse auch durchführen, es kann jedoch sein, dass einzelne Schritte mehr Zeit ins Anspruch nehmen als die Übungen in den vorherigen Abschnitten.
Im vorherigen Abschnitt haben wir eine Reihe von Bereinigungsoperationen für parallele Korpora gesehen. Unter anderem gibt es die Möglichkeit, die Sprachen der Segmente zu überprüfen, um sicherzustellen, dass es sich um die richtigen Sprachen handelt. Aber bei keinem dieser Vorgänge wird überprüft, ob das ursprüngliche Segment und das übersetzte Segment wirklich übersetzungsgleich sind. Es ist möglich, dass die Sprachen des Ausgangs- und des Zielsegments zwar korrekt sind, die beiden Segmente aber keine Übersetzungsäquivalente darstellen.
In diesem Abschnitt erläutern wir einen Algorithmus, der die Ausgangs- und die Zielsprache wiederherstellt und ausserdem prüft, ob das ursprüngliche und das übersetzte Segment übersetzungsäquivalent sind. Für diese Prüfung werden die ursprünglichen und die übersetzten Segmente mit demselben mehrsprachigen Satzeinbettungsmodell dargestellt.
Achtung :warning: MATHE - muss aber für die Anwendung nicht im Detail verstanden werden
Sobald die beiden Segmente durch ihre Satzeinbettungen repräsentiert sind, befinden sie sich im gleichen Vektorraum und wir können ein Ähnlichkeitsmass berechnen, das z. B. auf dem Kosinus zwischen den Vektoren basiert. Wenn dieses Ähnlichkeitsmass ausreichend hoch ist, können wir daraus schliessen, dass die Segmente übersetzungsmässig äquivalent sind. Ist die Ähnlichkeit hingegen gering, können wir daraus schliessen, dass sie nicht translatorisch äquivalent sind. Es gibt keinen konkreten Wert, der unterscheidet, was übersetzungsmässig äquivalent ist und was nicht. Wir müssen also einen Kompromiss finden, um sicher zu sein, dass sie äquivalent sind, und um nicht zu viele parallele Segmente zu eliminieren.
Der folgende Artikel beschreibt die Funktionsweise dieses Algorithmus genauer (für diejenigen, die mehr Details wissen wollen, ist er eine empfehlenswerte Lektüre, aber es ist nicht zwingend notwendig, der Aktivität zu folgen): Oliver, A., & Álvarez, S. (2023). Filtering and rescoring the CCMatrix corpus for Neural Machine Translation training. In Proceedings of the 24th Annual Conference of the European Association for Machine Translation (S. 39-45).
Laden Sie die Dafür benötigte Skriptsammlung mit dem Befehl git clone https://github.com/mtuoc/MTUOC-PCorpus-rescorer.git
herunter.
Der Rescoring-Prozess kann langsam sein und bei sehr grossen Korpora ist Geduld gefragt. Um den Algorithmus zu testen, habe ich (basierend auf die Dateien von Antoni Oliver) eine Datei mit 100 Segmenten erstellt, die etwa die Hälfte der Segmentpaare enthält, die übersetzungsäquivalent sind, und die Hälfte, die es nicht sind:
Aufgabe 4: Laden Sie die beiden Dateien herunter und suche Sie 3 Segmente, die tatsächlich übersetzungäquivalent und 3 Segmente, die es nicht sind.
Geben Sie dann folgenden Befehl ein, um das Programm MTUOC-PCorpus-rescorer.py auszuführen:
Vorher muss das Spracherkennungsmodell herunter geladen werden - diese Operation kann eine Weile dauern
wget https://dl.fbaipublicfiles.com/fasttext/supervised-models/lid.176.bin
Denken sie daran die in der Datei _requirements.txt _aufgeführten Module zu importieren
pip install -r requirements.txt
bzw.pip3 install -r requirements.txt
- das kann in diesem Fall länger dauern (bei mir waren es ca. 20 Minuten). Wahrscheinlich ist es sinnvoll, den Befehlsudo pip3 install -r requirements.txt
zu verwenden
python3 MTUOC-PCorpus-rescorer.py -i medline-part-toscore-en-de-neu.txt -d medline-part-rescore-database.sqlite
python3 MTUOC-PCorpus-rescorer.py -i medline-part-toscore-en-it-neu.txt -d medline-part-rescore-database.sqlite
Möglicherweise erhalten Sie einige Warnungen, die Sie jedoch ignorieren können. Sobald der Vorgang abgeschlossen ist, wird die SQLite-Datenbank medline-part-rescore-database.sqlite erstellt, die alle Informationen enthält.
:warning::warning::warning::warning::warning::warning:
Mit dem Befehl ls -sh
können Sie die Grösse der Dateien im Verzeichnis sehen.
Die erstellte SQLITE Datenbank sollte ca. 36KB gross sein (wie die beiden Datenbanken medline-part-rescore-database-it.sqlite und medline-part-rescore-database-de.sqlite hier im Screenshot). Wenn die Datei nur 8 KB gross ist (wie die Datei medline-part-rescore-database.sqlite im Screenshot), dann ist im vorherigen Schritt etwas schief gelaufen. Dieser Fehler ist ab und zu vorgekommen, ich kann ihn aber bisher nicht zuverlässig reproduzieren und habe daher keine endgültige Lösung dafür.
Um den letzten Schritt trotzdem durchführen zu können, können sie eine Version der Datenbank über die folgenden Befehl herunterladen:
-
wget https://github.com/mkappus1/DatenmanagementMTHS24/raw/refs/heads/main/Woche6/medline-part-rescore-database-de.sqlite
-
wget https://github.com/mkappus1/DatenmanagementMTHS24/raw/refs/heads/main/Woche6/medline-part-rescore-database-it.sqlite
Mit diesen Datenbanken sollten Sie im nächsten Schritt eine "nicht-leere" Textdatei erhalten.
Da es sich um eine SQLite-Datenbank handelt, kann sie direkt mit sqlite3 durchsucht werden. Um die Verwendung dieses Programms zu erleichtern, wird das Skript _MTUOC-PCorpus-selector.py _bereitgestellt, das auch die Option -h hat, um die Hilfe zu erhalten:
python3 MTUOC-PCorpus-selector.py -h
usage: MTUOC-PCorpus-selector.py [-h] -d DATABASE --sl SL --sldc SLDC --tl TL --tldc TLDC [-m MINSBERT] [-l LIMIT] -o
OUTFILE
MTUOC-PCorpus-selector: a script to select parallel segments from a rescorer database created with MTUOC_PCorpus-
rescorer.
options:
-h, --help show this help message and exit
-d DATABASE, --database DATABASE
The SQLITE database file.
--sl SL The source language code.
--sldc SLDC The minimum source language detection confidence.
--tl TL The target language code.
--tldc TLDC The minimum target language detection confidence.
-m MINSBERT, --minSBERT MINSBERT
The minimum value for SBERT score.
-l LIMIT, --limit LIMIT
The number of segments to be selected.
-o OUTFILE, --outfile OUTFILE
The output file containing the parallel corpus.
Wenn Sie nur die Segmente erhalten wollen, die Englisch als Ausgangssprache und Deutsch bzw. Italienisch als Zielsprache haben und die mit einer Konfidenz von 0,75 für die Spracherkennung übersetzungsäquivalent sind, schreiben Sie:
-
python3 MTUOC-PCorpus-selector.py -d medline-part-rescore-database.sqlite --sl en --sldc 0.75 --tl de --tldc 0.75 -m 0.75 -o medline-part-rescored-de.txt
-
python3 MTUOC-PCorpus-selector.py -d medline-part-rescore-database.sqlite --sl en --sldc 0.75 --tl it --tldc 0.75 -m 0.75 -o medline-part-rescored-it.txt
Das Programm zeigt die Anzahl der resultierenden Segmente in der Ausgabe an (für Deutsch z.B. 35) und erstellt die Ausgabedatei medline-part-rescored-de.txt oder medline-part-rescored-it.txt.
Aufgbe 5 - optional: Schauen Sie sich die Ausgabedatei medline-part-rescored-de.txt oder medline-part-rescored-it.txt an und prüfen Sie ob es sich tatsächlich um Übersetzungsequivalente handelt. Laden Sie Ihre medline-part-rescored-de.txt oder medline-part-rescored-it.txt Dateien mit den "echten" Überstezungen unter Aufgabe 5 auf Moodle hoch..
5. Training eines Spracherkennungsmodells - nicht zu bearbeiten
In den vorherigen Beispielen haben wir ein Spracherkennungsmodell verwendet, das mit dem fasttext-Tool geliefert wird. Dieses Modell ist in der Lage, zwischen vielen verschiedenen Sprachen zu unterscheiden. In diesen mehrsprachigen Modellen sind „kleinere“ Sprachen in der Regel weniger vertreten. Wenn ein Satz in zwei ähnlichen Sprachen vorliegt, zum Beispiel Spanisch und Asturisch, neigt der Algorithmus dazu, ihn als Spanisch zu klassifizieren. Es kann sinnvoll sein, ein eigenes Modell zu trainieren, das nur eine Gruppe von Arbeitssprachen enthält, vor allem wenn diese Sprachen weniger Ressourcen haben. In diesen Fällen kann es interessant sein, die Grösse des verwendeten Korpus für die kleinere Sprache zu kompensieren.
Hier erklären wir, wie man ein Fasttext-Modell für zwei Sprachen trainiert, aber das Verfahren ist für eine grössere Anzahl von Sprachen dasselbe. Hier werden wir einen kleinen Korpus verwenden, zum Beispiel den Wikimedia-Korpus für Asturisch und Spanisch, der etwa 45.000 Segmente enthält.
Sie können das Korpus direkt herunterladen, indem Sie
wget https://object.pouta.csc.fi/OPUS-wikimedia/v20230407/moses/ast-es.txt.zip
herunterladen und nach dem Entpacken die folgenden Schritte durchführen:
Fügen Sie den Sätzen in jeder Sprache eine bestimmte Vorsilbe hinzu. Dieses Präfix muss, in unserem Beispiel, __label__ast für Asturisch und __label_es für Spanisch sein. Für weitere Sprachen würden wir das Gleiche tun. Unter Linux können wir jeder Zeile ein Präfix hinzufügen, indem wir Folgendes eingeben:
sed 's/^/__label__ast /' wikimedia.ast-es.ast > wikimedia-prefix-ast.txt
sed 's/^/__label__ast /' wikimedia.ast-en.ast > wikimedia-prefix-ast.txt
Alternativ können Sie auch das Skript addPrefix.py verwenden, das mit MTUOC-PCorpus-rescorer verteilt wird, indem wir Folgendes eingeben:
python3 addPrefix.py wikimedia.ast-en.ast wikimedia-prefix-ast.txt ast
python3 addPrefix.py wikimedia.ast-es.es wikimedia-prefix-es.txt es
Jetzt fügen wir die Dateien zusammen und verbinden sie:
cat wikimedia-prefix-ast.txt wikimedia-prefix-en.txt | shuf > korpus-training.txt
In corpus-training.txt befindet sich unser Trainingskorpus.
Trainiere das Modell:
Um das Modell zu trainieren, müssen Sie Folgendes schreiben:
python3 trainFasttextModel.py corpus-training.txt model-ast-de.bin
Das Modell wird in der Datei model-ast-de.bin gespeichert.
Wenn Sie die Trainingsparameter ändern möchten, Können Sie die folgende Zeile des Skripts trainFasttextModel.py bearbeiten:
model = fasttext.train_supervised(input=training_data, epoch=25, lr=1.0, wordNgrams=2, verbose=2, minCount=1)