5.1 Übersicht - mkappus1/DatenmanagementMTHS24 GitHub Wiki
Woche 5 Erstellung von vergleichbaren Korpora
1. Einleitung
Letzte Woche haben wir bereits gesehen, dass es möglich ist, übersetzte Segmente in Korpora zu erkennen, die nicht parallel sind. Dies ermöglicht uns die Erstellung paralleler Korpora aus vergleichbaren Korpora, d.h. die Suche nach Segmenten, die in nicht-parallelen Korpora Übersetzungsäquivalente darstellen. Später werden wir auch noch sehen, dass einsprachige Korpora zum Trainieren neuronaler maschineller Übersetzungsmaschinen verwendet werden können. Diese Woche werden wir lernen, wie man vergleichbare Korpora aus Wikipedia erstellt. Dies kann eine sehr interessante Ressource sein, da diese Enzyklopädie in vielen Sprachen vorliegt und sich mit vielen Themen befasst.
2. Empfohlene Lektüre
In dieser Woche empfehle ich Ihnen die Lektüre eines Artikels, der sich mit der Erstellung des Wikimatrix-Korpus befasst, da er einen gewissen Bezug zu dem hat, was wir in dieser Woche tun werden.
Schwenk, H., Chaudhary, V., Sun, S., Gong, H., & Guzmán, F. (2021, April). WikiMatrix: Mining 135M Parallel Sentences in 1620 Sprachpaaren aus Wikipedia. In Proceedings of the 16th Conference of the European Chapter of the Association for Computational Linguistics: Main Volume (S. 1351-1361)
3. Wikipedia
Wikipedia ist eine kollaborative Enzyklopädie, die in etwa 300 verschiedenen Sprachen verfügbar ist. Zu Wikipedia ist Folgendes anzumerken:
Die Wikipedias in den einzelnen Sprachen sind unabhängig voneinander. Selbst wenn zwei Wikipedias einen Artikel zum gleichen Thema haben, bedeutet das nicht, dass es sich um Übersetzungen handelt. Die Artikel werden unabhängig voneinander erstellt, obwohl es stimmt, dass sie oft auf der Übersetzung eines Artikels in einer anderen Sprache basieren. Es ist daher nicht zu erwarten, dass Artikel zum selben Thema in zwei Sprachen Übersetzungen sind.
Wikipedia-Artikel sind sprachübergreifend verlinkt, so dass Sie von dem Artikel in einer Sprache direkt zu demselben Artikel in einer anderen Sprache gelangen können.
Die Artikel sind thematisch nach einer Reihe von Kategorien geordnet. Diese Kategorien sind im Prinzip frei wählbar, aber es gibt eine Reihe von weit verbreiteten Kategorien, die in der Regel üblich sind. Diese Kategorien können auch auf Wissensgebiete bezogen sein. Siehe: Wikipedia:Inhalte/Kategorien. Es gibt Projekte, die die Inhalte von Wikipedia in Datenbanken umwandeln, zum Beispiel dBPedia. Alle Wikipedia-Inhalte können über Dumps heruntergeladen werden. Es handelt sich dabei um sehr große Dateien. Im zweiten Teil dieser Woche werden wir lernen, wie man mit diesen Dateien arbeitet. Wikipedia-Artikel sind sprachübergreifend verlinkt, so dass Sie von dem Artikel in einer Sprache direkt zu demselben Artikel in einer anderen Sprache gelangen können.
Die Artikel sind thematisch nach einer Reihe von Kategorien geordnet. Diese Kategorien sind im Prinzip frei wählbar, aber es gibt eine Reihe von weit verbreiteten Kategorien, die in der Regel üblich sind. Diese Kategorien können auch auf Wissensgebiete bezogen sein. Siehe: Wikipedia:Inhalte/Kategorien.
4. Erstellen vergleichbarer Korpora mit CCWikipedia
Für diesen Teil der Aktivität werden wir https://github.com/aoliverg/CCWikipedia verwenden. Diese Anwendung wird im dazugehörigen Wiki ausführlich erklärt. Wie Sie sehen werden, gibt es eine Version mit einer visuellen Schnittstelle. Sie können diese verwenden, aber ich empfehle Ihnen, die Terminal-Version zu benutzen, da Sie sie auch auf Servern ohne grafische Oberfläche verwenden können.
Denken Sie daran, dass Sie, bevor Sie beginnen, die Datenbank CPfromWiki.sqlite besorgen müssen (erstellen Sie sie noch nicht selbst, aber das ist machbar). Um sie herunterzuladen, gehen Sie zu
wget http://lpg.uoc.edu/smarterp/CPfromWiki.sqlite
Jetzt können wir CCWikipedia erhalten, indem wir
git clone https://github.com/aoliverg/CCWikipedia.git
Wir werden das Programm createCCWCorpus.py verwenden, das die Option -h bietet, um die Hilfe zu erhalten:
python3 createCCWCorpus.py -h
Verwendung: createCCWCorpus.py [-h] -d FILENAME -c CATEGORY --level LEVEL --lang LANG -o OUTDIR [-a ARTICLELIST]
Skript für die Erstellung von parallelen Korpora aus Wikipedia
Optionen:
-h, --help diese Hilfemeldung anzeigen und beenden
-d FILENAME, --datenbank FILENAME
Die zu verwendende CCW-Sqlite-Datenbank.
-c KATEGORIE, --Kategorien KATEGORIE
Die Kategorien, nach denen gesucht werden soll (eine Kategorie oder eine Liste von Kategorien, getrennt durch ,
--level LEVEL Die Tiefe der Kategorieebene.
--lang LANG Die Sprache (zweistelliger ISO-Code, der in Wikipedia verwendet wird.
-o OUTDIR, --output OUTDIR
Der Name der zu erstellenden sqlite-Datenbank.
-a ARTICLELIST, --articlelist ARTICLELIST
Der Name der Textdatei, die die Liste der Dateien enthält.
Wenn wir die medizinischen Artikel auf Englisch und bis zu zwei Ebenen darunter herunterladen möchten, können wir schreiben:
python3 createCCWCorpus.py -d CPfromWiki.sqlite -c Medicine --level 2 --lang en -o medicine-eng -a medicine-eng.txt
Wichtig, das Ausgabeverzeichnis muss existieren, also müssen wir es mit erstellen:
mkdir medicine-eng
mkdir medicine-spa
Die Liste der Artikel (die auch in der Datei medicine-eng.txt gespeichert wird) und die Gesamtzahl der Artikel werden auf dem Bildschirm angezeigt. Um zu bestätigen, dass Sie die Artikel herunterladen möchten, klicken Sie auf Y.
...
Desmethylchlorotrianisene
Alpha-Hydroxyetizolam
Cannabielsoin
Deuterierte Droge
SEITEN INSGESAMT 13554
Herunterladen (J/N)
Und nun für die andere Sprache (beachten Sie, dass die Kategorie(n) in Englisch angegeben werden müssen):
python3 createCCWCorpus.py -d CPfromWiki.sqlite -c Medicine --level 2 --lang es -o medicine-spa -a medicine-spa.txt
KATEGORIEN INSGESAMT 350
SEITEN GESAMT 3707
Herunterladen (J/N)
Bitte laden Sie diese Artikel herunter oder die Artikel, die den Sprachen und Themen entsprechen, an denen Sie am meisten interessiert sind.
Nach dem Download werden alle Dateien in die Verzeichnisse der Ausgangs- und Zielsprachen unterteilt:
python3 MTUOC-segmenterDIR.py -i medicine-eng -o medicine-seg-eng -s segment.srx -l English
python3 MTUOC-segmenterDIR.py -i medicine-spa -o medicine-seg-spa -s segment.srx -l Spanisch
Jetzt fügen wir alle Segmente der einzelnen Sprachen zusammen und entfernen Wiederholungen:
cat ./medicine-seg-eng/* | sort | uniq | shuf > medicine-uniq-eng.txt
cat ./medicine-seg-spa/* | sort | uniq | shuf > medicine-uniq-spa.txt
Wir können die erhaltenen Segmente zählen:
wc -l medizin-uniq-*
742062 medizin-uniq-eng.txt
185324 medizin-uniq-spa.txt
Und nun können wir sie "alignieren", d.h. nach möglichen Segmenten suchen, die Übersetzungsäquivalente sind. Wir können dies tun:
Wenn wir einen Grafikprozessor in unserem Computer haben:
python3 MTUOC-bitext_mining-GPU.py medicine-uniq-eng.txt medicine-uniq-spa.txt medicine-aligned-brut-eng-spa.txt medicine-aligned-brut-eng-spa.txt
Wenn wir keine GPU haben, tun wir es (aber denken Sie daran, dass der Prozess sehr langsam sein kann):
python3 MTUOC-bitext_mining.py medicine-uniq-eng.txt medicine-uniq-spa.txt medicine-aligned-brut-eng-spa.txt medicine-aligned-brut-eng-spa.txt
Sie können die Ergebnisse der Prozesse unter den folgenden Links herunterladen:
-
Artikel auf Englisch: http://lpg.uoc.edu/seminarioTAN/semana_5/medicine-eng.zip
-
Artikel auf Spanisch: http://lpg.uoc.edu/seminarioTAN/semana_5/medicine-spa.zip
-
Segmentierte Artikel auf Englisch: http://lpg.uoc.edu/seminarioTAN/semana_5/medicine-seg-eng.zip
-
Segmentierte Artikel auf Spanisch: http://lpg.uoc.edu/seminarioTAN/semana_5/medicine-seg-spa.zip
-
Ergebnis des Abgleichs: http://lpg.uoc.edu/seminarioTAN/semana_5/medicine-aligned-brut-eng-spa.txt
Wenn Sie sich das Ergebnis des Alignments ansehen, werden Sie feststellen, dass in den ersten Positionen (denken Sie daran, dass die Alignment-Datei so geordnet ist, dass die Alignments mit den höchsten Konfidenzindizes an den ersten Positionen stehen) englisch-englische Alignments zu finden sind. Das liegt daran, dass es in den spanischen Artikeln auch Segmente in englischer Sprache gibt und diese aus diesem Grund ausgerichtet werden. Dies kann jedoch durch Korpusbereinigungstechniken automatisch herausgefiltert werden, was wir nächste Woche sehen werden.
5. Direkte Verwendung von Wikipedia-Dumps
Im vorigen Abschnitt haben wir erklärt, wie man mit Hilfe eines speziellen Programms vergleichbare Korpora aus Wikipedia erstellen kann. Das Programm verwendet eine große Datenbank, um zu wissen, welche Artikel heruntergeladen werden sollen, aber die Artikel werden direkt von Wikipedia heruntergeladen. Dies führt zu massiven Abfragen auf der Wikipedia-Website, was letztendlich ein Problem für Wikipedia selbst darstellen kann. Um diese massiven Abfragen zu vermeiden, können Sie direkt mit Wikipedia-Dumps arbeiten. Das sind sehr große Dateien, die alle Wikipedia-Artikel in einer bestimmten Sprache enthalten.
Wikipedia-Dumps und alle anderen Wikimedia-Projekte können von https://dumps.wikimedia.org/backup-index.html heruntergeladen werden.
Wenn wir zum Beispiel die englische Wikipedia herunterladen möchten, suchen wir auf dieser Seite nach "enwiki" und folgen dem Link. Dasselbe können wir mit der spanischen Wikipedia tun, indem wir nach "eswiki" suchen. Das Problem ist, dass diese Dateien RIESIG sind und der Download daher sehr lange dauert und viel Speicherplatz verbraucht.
Um diesen Teil agiler zu gestalten, werden wir mit zwei Sprachen üben, die kleinere Wikipedias haben. Konkret schlage ich vor, dass wir jetzt mit den asturischen und okzitanischen Wikipedias arbeiten. Alles, was wir tun, wird genau dasselbe sein wie bei größeren Wikipedias, z.B. den englischen und spanischen Wikipedias. Aber das Testen wird bei den kleineren Wikipedias viel agiler sein.
Wir laden die Wikipedias herunter:
wget https://dumps.wikimedia.org/astwiki/20240501/astwiki-20240501-pages-articles.xml.bz2
wget https://dumps.wikimedia.org/ocwiki/20240501/ocwiki-20240501-pages-articles.xml.bz2
Die heruntergeladenen Dateien sind im bz2-Format komprimiert. UNKOMPRIMIEREN SIE SIE NICHT! Wir werden direkt mit den komprimierten Dateien arbeiten. Dies ist besonders wichtig, wenn Sie mit großen Wikipedias arbeiten. Zum Beispiel können wir den Inhalt mit bzmore oder bzcat anzeigen, anstatt mit more und cat.
Werfen Sie einen Blick auf den Inhalt dieser Dateien. Wie Sie sehen können, handelt es sich bei diesen Dateien um XML-Dateien, die verschiedene Informationen über die Artikel und den Text der Dateien selbst enthalten, der im Wiki-Format vorliegt.
5.1 Konvertierung des Dumps in Textdateien
Sobald wir die Dumps haben, sind wir daran interessiert, für jeden der interessierenden Artikel eine Textdatei zu extrahieren. Wir können daran interessiert sein, die Texte aller Artikel zu extrahieren, oder wir können uns auf eine Reihe von Kategorien beschränken.
Im Repository https://github.com/aoliverg/dumpsWikipedia stehen Ihnen eine Reihe von Skripten zur Verfügung, die Ihnen diese Aufgabe erleichtern werden.
Mit dem Skript wikipedia2text.py, das mit der Option -h die Hilfe anzeigt, können wir einen Wikipedia-Dump in Textdateien umwandeln, eine für jeden Artikel: ´´´ python3 wikipedia2text.py -h usage: wikipedia2text.py [-h] -d DUMP_PATH -l LANGUAGE -o OUTDIR [-c CATEGORIES] [-t TITLESFILE]
Skript zur Konvertierung von Wikipedia-Dumps in Textdateien entsprechend einer Reihe von Kategorien.
Optionen: -h, --help diese Hilfemeldung anzeigen und beenden -d DUMP_PATH, --dump DUMP_PATH Der Wikipedia-Dump. -l LANGUAGE, --language LANGUAGE Der Sprachcode (en, es, fr ...). -o OUTDIR, --outdir OUTDIR Das Ausgabeverzeichnis. -c CATEGORIES, --categories CATEGORIES Eine Datei mit einer Kategorie pro Zeile. -t TITLESFILE, --titlesfile TITLESFILE Eine Datei, in der die konvertierten Artikeltitel gespeichert werden. Standardmäßig titles-list.txt.
Wenn wir den gesamten Wikipedia-Dump konvertieren wollen (passen Sie den Namen des Dumps an denjenigen an, den Sie heruntergeladen haben:
`python3 wikipedia2text.py -d astwiki-20240501-pages-articles.xml.bz2 -l ast -o wikipedia-ast/`
Das Ausgabeverzeichnis, im Beispiel _wikipedia-ast_, wird erstellt, wenn es noch nicht existiert, und enthält eine Textdatei für jeden Artikel. In der Datei titles-list.txt werden die Titel der heruntergeladenen Dateien gespeichert. Wir können mit der Option -t einen anderen Namen für diese Datei angeben.
In vielen Fällen werden wir jedoch daran interessiert sein, die in Text konvertierten Artikel auf eine Reihe von Kategorien zu beschränken. Zu diesem Zweck können wir eine Textdatei erstellen, z.B. categorias.txt, die eine Kategorie pro Zeile enthält. Der Name der Kategorie muss in der Sprache sein, die dem Dump entspricht, mit dem wir arbeiten. Erstellen Sie zunächst eine Textdatei categorias.txt, die z.B. Medicina enthält (wenn Sie den Dump in Asturisch verarbeiten). Im nächsten Abschnitt werden wir sehen, wie wir die Kategorien in einer Sprache untersuchen können. Um die Konvertierung auf Artikel in der Kategorie Medizin (oder was immer Sie in der Datei categorias.txt haben) zu beschränken, können Sie Folgendes eingeben:
python3 wikipedia2text.py -d astwiki-20240501-pages-articles.xml.bz2 -l ast -o wikipedia-medicine-ast/ -c categories.txt
#### 5.2. die Kategorien erforschen
Um herauszufinden, welche Kategorien in die Kategoriedatei aufgenommen werden sollen und somit die generierten Dateien einzuschränken, haben wir mehrere Möglichkeiten:
* Manuelle Option I. Die englische Wikipedia bietet eine Seite mit Kategorien, die nach akademischen Disziplinen geordnet sind: https://en.wikipedia.org/wiki/Outline_of_academic_disciplines. Wenn Sie oben nachsehen, ist die gleiche Seite auch in anderen Sprachen verfügbar. Wenn die Sprache, für die Sie sich interessieren, zu diesen Sprachen gehört, können Sie dort interessante Informationen über die Kategorien erhalten, die Sie interessieren.
* Manuelle Option II. Sie können nach Artikeln zu den Themen suchen, die Sie interessieren, und unten nachsehen, mit welchen Kategorien diese Seiten in Verbindung stehen. Wenn Sie auf diese Kategorie klicken, öffnet sich eine Kategorieseite, die oft Informationen über Unterkategorien enthält. Indem Sie all dies erkunden, können Sie das Kategoriearchiv aufbauen.
* Automatische Option: Im gleichen Repository finden Sie das Programm exploreCategories.py, mit dem Sie die Kategorien erkunden können, zu denen die Artikel gehören, die eine Reihe von Kategorien enthalten, die Sie erkunden möchten. Dieses Programm verfügt auch über die Option -h, die uns die Hilfe anzeigt:
python3 erkundenKategorien.py -h Verwendung: exploreCategories.py [-h] -d DUMP_PATH -l LANGUAGE -c CATEGORY -o OUTFILE [--limit LIMIT]
Skript zum Erkunden von Kategorien aus einem Wikipedia-Dump
Optionen: -h, --help diese Hilfemeldung anzeigen und beenden -d DUMP_PATH, --dump DUMP_PATH Der Wikipedia-Dump. -l LANGUAGE, --language LANGUAGE Der Sprachcode (en, es, fr ...). -c CATEGORY, --Kategorien CATEGORY Eine Kategorie oder eine Liste von Kategorien, getrennt durch :. -o OUTFILE, --outfile OUTFILE Das Ausgabeverzeichnis. --limit LIMIT Das Limit für die Anzahl der gefundenen Artikel.
Wenn wir zum Beispiel die Kategorien sehen wollen, die mit Medizin verbunden sind, können wir eingeben:
`python3 exploreCategories.py -d astwiki-20240501-pages-articles.xml.bz2 -l ast -c Medicine --limit 100 -o categories-medicine-ast.txt`
Der Prozess ist recht langsam, daher können Sie die Option --limit verwenden, die den Prozess anhält, wenn es eine bestimmte Anzahl von Seiten mit der angegebenen Kategorie gefunden hat (in diesem Beispiel 100). Wenn kein Limit angegeben wird, durchsucht das Programm den gesamten Speicherauszug. Das Programm erstellt die Datei categories-medicine-ast.txt, die die Liste der verwandten Kategorien in absteigender Reihenfolge der Häufigkeit ihres Auftretens enthält, zum Beispiel:
Medizin Medizinische Fachgebiete Biologie Anatomie Biographien nach Tätigkeit Biochemie Medikamente Ethik Biophysik Chemie Wikipedia:Artikel in einfacher Sprache Griechische Mythologie Linguistik Nobelpreise Physiologie Psychologie Anthropologie Soziologie
Die Kategorien und ihre Häufigkeit werden ebenfalls auf dem Bildschirm angezeigt:
Medizin 33 Medizinische Fachgebiete 5 Biologie 3 Anatomie 2 Biographien nach Tätigkeit 1 Biochemie 1 Medikamente 1 Ethik 1 Biophysik 1 Chemie 1 Wikipedia:Artikel in einfacher Sprache 1 Griechische Mythologie 1 Linguistik 1 Nobelpreise 1 Physiologie 1 Psychologie 1 Anthropologie 1 Soziologie 1
Wir können diese Datei bearbeiten, um sie an unsere Bedürfnisse anzupassen und sie mit dem oben erläuterten Programm wikipedia2text.py zu verwenden.
Anstelle einer einzelnen Kategorie können Sie zum Beispiel eine Reihe von Kategorien angeben, die durch ":" getrennt sind:
`python3 exploreCategories.py -d astwiki-20240501-pages-articles.xml.bz2 -l ast -c "Medizin:Anatomie:Medizinische Fachgebiete" --limit 100 -o categories-medicine-ast.txt`