3.9.5. Übungen zu den NLP Tools WittSim¶
Hands on! Nachdem wir aus Lizenz-Gründen Germanet leider nicht zur Verfügung stellen können - und da die Berechnung sehr lange dauert - werden wir Ihnen die vorberechneten Vektoren der Texte bereits zur Verfügung stellen. Nun können Sie mit diesen Vektoren ein eigenes K-Nearest-Neighbor-Modell trainieren und testen. Alles, was dafür nötig ist, ist im Folgenden Schritt für Schritt erklärt.
3.9.5.1. Docker Container laden¶
Damit Sie Python3, sowie alle benötigten Libraries und Programme zur Verfügung haben, haben wir Ihnen einen Docker Container bereitgestellt. Dieser heißt wittsim.tar.zip
und ist zum Download bereitgestellt: https://www.cis.uni-muenchen.de/kurse/max/wast/data/wittsim.tar.zip
Holen sie den Container, entpacken Sie ihn und wechseln Sie in das Verzeichnis wittsim.tar
.
Dort laden, starten und verbinden sich mit einer bash shell mit dem Container:
docker load -i wittsim.tar
docker run -it wast/wittsim /bin/bash
Nun sind Sie im WiTTSim Container als Nutzer “root” in einem Debian-Linux System. Nun können Sie Linux Befehle, Installationen, Python Programme usw. starten.
Alle Programme, die wir verwenden liegen im Verzeichnis /opt
in welches wir nun welchseln und uns anzeigen, welche Ordner hier verfügbar sind:
cd /opt/
ls
3.9.5.2. Installieren der Python Module¶
Um alle benötigten Python Module zu installieren, wechseln Sie in das Verzeichnis deployment
in wittsim_data
:
cd wittsim_data/deployment
Nun können alle Requirements aus der Datei requirements.txt
installiert werden. Hierfür gibt es zwei Möglichkeiten:
Option 1: Direkter Aufruf mit pip:
pip3 install -r requirements.txt
Option 2: Aufruf über das Makefile:
make install-python-modules
Die Installation dauert einen Moment. Währenddessen können schon einmal die Vektoren geholt werden, wie im nächsten Punkt beschrieben.
3.9.5.3. Holen der Vektoren¶
Holen Sie die vortrainierten Vektoren von https://www.cis.uni-muenchen.de/kurse/max/wast/data/megavectors_reduced.bin und legen Sie diese in einem lokalen Verzeichnis
Verschieben Sie diese nun in den Docker:
Schritt 1: Die Container ID herausfinden mit:
docker ps
Zum Beispiel:
952ec94eaaa3
Schritt 2: Die Datei ins Docker Verzeichnis kopieren:
sudo docker cp <Pfad>/megavectors_reduced.bin 952ec94eaaa3:/opt/wittsim_data/export-data/
3.9.5.4. KNN Modell trainieren¶
Nun ist alles vorbereitet, damit das KNN Modell trainiert werden kann. Wechseln Sie dafür in das Verzeichnis wittsim_data/tools
und rufen Sie das Python Programm train_knn_model.py
auf. Das Programm erwartet den Pfad der Text-Vektoren als 1. Argument, und den Modell-Pfad als 2. Argument (python3 train_knn_model.py <Megavector_Pfad> <Modell_Pfad>
):
cd wittsim_data/tools
python3 train_knn_model.py ../export-data/megavectors_reduced.bin ../export-data/knn_model.sav
3.9.5.5. Trainiertes KNN Modell ausprobieren¶
Achtung! Da
wittsim_data
nur für die Vorverarbeitung verwendet wird, wechseln wir nun nachwittsim
, also in das Verzeichnis des Hauptprogramms:cd ../../wittsim/html_button
Nun müssen die Pfade der vortrainierten bzw. vorberechneten Dateien eingetragen werden. Damit wir die Modelle bequem verändern und anpassen können, macht es Sinn, diese in ein lokales Verzeichnis zu kopieren. Dort kann man sie mit einem beliebigen Texteditor (Notepad++, Gedit, Atom…) verändern und wieder an den Container schicken. Dafür sind folgende Schritte notwendig:
Schritt 1: Die Container ID herausfinden mit:
sudo docker ps
Zum Beispiel:
952ec94eaaa3
Beachten Sie: unter Windows alle (auch nachfolgende Befehle) ohne “sudo” ausführen!Schritt 2: Kopieren von Dateien (beispielsweise knn_search.py):
sudo docker cp 952ec94eaaa3:/opt/wittsim/html_button/knn_search.py knn_search.py
Schritt 3: Öffnen Sie nun knn_search.py in einem beliebigen Texteditor und fügen Sie die die Pfade der vortrainierten bzw. vorberechneten Dateien ein:
megavectors_path = "../../wittsim_data/export-data/megavectors_reduced.bin" model_path = "../../wittsim_data/export-data/knn_model.sav"
Zudem muss angegeben werden, nach welchem Siglum gesucht werden soll:
search = "Ms-110,42[2]"
Am Ende des Programms müssen wir die KNN Suche nun noch aufrufen:
results = print_KNN(search, megavectors_path, model_path)
Zuletzt sollen die Ergebnisse (formatiert) angezeigt werden:
dash = '-' * 48 for i in range(len(results)): if i == 0: print(dash) print('{:<5s}{:<35s}{:>4s}'.format("TOP","Siglum","Distanz")) print(dash) print('{:<5d}{:<35s}{:>4f}'.format(i+1, results[i][0],results[i][1]))
Schritt 4: Die Datei unter neuem Namen speichern, dann zurück ins Verzeichnis kopieren:
sudo docker cp knn_search_2.py 952ec94eaaa3:/opt/wittsim/html_button/
Das Programm wird gestartet (unter dem neu vergebenen Namen) im Ordner
/opt/wittsim/html_button/
:python3 knn_search_2.py