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 ab.

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 nach wittsim, 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