Blog DE

Alt, aber gut – Weihnachtslied für Unix-Hacker


better !pout !cry
better watchout
lpr why
santa claus < north pole >town


cat /etc/passwd >list
ncheck list
ncheck list
cat list | grep naughty >nogiftlist
cat list | grep nice >giftlist
santa claus < north pole >town


who | grep sleeping
who | grep awake
who | egrep ‚bad|good‘
for (goodness sake) {
     be good
     }

von Frank Carey, AT&T Bell Laboratories, 1985

Übersetzung:

Santa Claus is Coming to Town

You’d better watch out, you’d better not cry;
You’d better not pout, I’m telling you why;
Santa Claus is coming to town.

He’s checking his list, checking it twice;
Going to find out who’s been naughty and nice.
Santa Claus is coming to town.

He knows who is sleeping, he knows who is awake.
He knows who has been bad or good;
So be good for goodness sake.

You’d better watch out, you’d better not cry;
You’d better not pout, I’m telling you why;
Santa Claus is coming to town.

Translorial.com — Online-Version der Zeitschrift der Northern California Translators Association

Ich weiß, es herrscht hier schon seit einiger Zeit Sendepause. Ich habe nämlich an der Wiederauferstehung von Translorial.com gearbeitet, der Online-Version des Translorial, der Zeitschrift der Northern California Translators Association (NCTA).

Auf Translorial.com gibt es einige sehr interessante Beiträge, die sogar bis zum Jahr 1978 (!!!) zurückreichen!

Folien zum Vortrag auf der ATA58, ST-7, „An Introduction to Artificial Intelligence, Machine Learning, and Neural Networks“

Die Folien zum Vortrag (auf Englisch) auf der ATA58 können hier heruntergeladen werden.
(© Alle Rechte vorbehalten. Natürlich sende ich auf Anfrage gerne eine Version mit höherer Auflösung oder genehmige gegebenenfalls die weitere Verwendung.)

Zusammenfassung:

From spam filters to stock trading bots, the applications of artificial intelligence are already omnipresent. This poses important questions such as: Will my autonomous vacuum cleaner go on a rampage and eat the hamster? Do neural networks think like brains? What are the chances of a robot uprising? The presentation will address these questions and give an introduction to artificial intelligence, which is impacting all our lives, perhaps more than most people are aware of. However, the talk will not discuss machine translation and related topics. No knowledge of computer science or advanced mathematics is required to attend.

Mein neuronales Maschinenübersetzungsprojekt – Überblick über Open-Source-Toolkits — Aktualisierung Dez. 2017

Im Dez. 2017 aktualisiert.

Um eines der Open-Source-Toolkits für neuronale Maschinenübersetzung auszuwählen, die derzeit (September 2017) verfügbar sind, musste ich mir zuerst einen Überblick verschaffen. Im Folgenden fasse ich die einzelnen Funktionen der Toolkits aus meiner Sicht kurz zusammen. Diese Übersicht enthält keine der Toolkits, wie zum Beispiel Moses, die auf einem statistischen Ansatz basieren. Die folgenden Eindrücke sind hauptsächlich aus einigen Wochen in verschiedenen Supportforen und Online-Diskussionsgruppen entstanden.

Der dicke Fisch – TensorFlow

Von: Google (TensorFlow, das TensorFlow-Logo und alle damit verbundenen Marken sind Eigentum von Google Inc.)
Website: https://www.tensorflow.org
Sprache: Python (Haupt-API), mit APIs für C, Java und Go, letztere haben jedoch weniger Funktionalität als die Haupt-API.
Architektur: Da TensorFlow ein vollständiges Framework ist, stehen sowohl rekurrente als auch convolutional neuronale Netze zur Verfügung.
Whitepaper: Large-Scale Machine Learning on Heterogeneous Distributed Systems, M. Abadi et al., 9. November 2015
Support: Stack Overflow für technische Fragen; eine Google-Gruppe (was sonst?) für Diskussionen über Funktionen usw. auf höherer Ebene, obwohl auch einige technische Fragen in dieser Gruppe diskutiert werden; und ein Blog mit neuen Funktionen und Anleitungen
Zusammenfassung: TensorFlow ist ein großes Universal-Open-Source-Toolkit, nicht nur für Maschinenübersetzung, aber es gibt einige detaillierte Anleitungen zu Vektordarstellungen von Wörtern, rekurrente neuronale Netze und Sequenz-auf-Sequenz-Abbildungsmodelle, die die grundlegenden Bausteine für neuronale Maschinenübersetzungssysteme bilden. TensorFlow stellt auch verschiedene andere neuronale Netzwerkarchitekturen zur Verfügung und sehr viele Funktionen und Features, die man auch für die Maschinenübersetzung verwenden könnte. Aber es ist definitiv kein System für Anfänger.

Die benutzerfreundlichere Option – OpenNMT

Von: Harvard University und Systran
Website: http://opennmt.net
Sprache: Lua, aufgebaut auf dem Torch-Framework für maschinelles Lernen; es gibt auch zwei „leichtgewichtige“ Optionen für Python/PyTorch und C++.
Update: Seit Dezember 2017 gibt es neben der Lua-Hauptversion zwei weitere, voll funktionsfähige Versionen, eine Python-Version, die auf dem PyTorch-Framework aufbaut, und eine Tensorflow-Version.
Architektur: Rekurrentes neuronales Netz
Whitepaper: OpenNMT: Open-Source Toolkit for Neural Machine Translation, G. Klein et al., 10. Januar 2017
Support: ein sehr aktives Diskussionsforum (in dem unter anderem Systran’s CTO sehr aktiv ist)
Zusammenfassung: Eher ein System für Anfänger, obwohl die Wahl der Programmiersprache Lua, die nicht so verbreitet ist wie Python, ein Hindernis darstellen kann. Update Dezember 2017: Da es nun zwei neue Versionen gibt, die auf PyTorch und Tensorflow aufbauen, sollte die Sprache kein Hindernis mehr sein. Ende der Aktualisierung. Einige der Fragen, die im Forum besprochen werden, scheinen tatsächlich relativ trivial zu sein (und ich bin bei Weitem keine Expertin!). Wenn man sich also auf die Eingabe (das heißt, gut aufbereitete Korpora!) und auf verschiedene Metriken und Kostenfunktionen für die Ausgabe konzentrieren will, scheint dieses Toolkit die beste Wahl zu sein. Denn beim maschinellen Lernen sind Ein- und Ausgaben genauso wichtig wie die Architektur selbst — wie es so schön heißt „Garbage in – garbage out“. Deshalb ist es vielleicht für Sprachmittler und Sprachwissenschaftler sinnvoller, sich der Maschinenübersetzung von diesem Gesichtspunkt aus anzunähern, das heißt, sich auf die Eingabe (Korpora) und die Ausgabe („Übersetzungsqualitätsmetriken“) zu konzentrieren, anstatt sich über die Netzwerkarchitektur und den Code den Kopf zu zerbrechen.

Der neue Stern am Toolkit-Himmel – Nematus

Von: Universität Edinburgh
Website: keine eigene Website; das Projekt plus Anleitung ist auf Github zu finden.
Sprache: Python, aufgebaut auf dem Theano-Framework für maschinelles Lernen
Architektur: Rekurrentes neuronales Netz
Whitepaper: Nematus: a Toolkit for Neural Machine Translation, R. Sennrich et al., 13. März 2017
Support: eine Google-Gruppe
Zusammenfassung: Dies ist das neueste System auf dem Open-Source-Markt, jedoch nicht so aktiv wie die anderen zwei. Wie OpenNMT ist es ein Toolkit nur für Maschinenübersetzung, im Gegensatz zum Universal-Toolkit TensorFlow. Es verwendet Python im Gegensatz zur weniger bekannten Sprache Lua. Das wäre zumindest für mich ein Vorteil gegenüber OpenNMT. Der Nutzerstamm ist jedoch bei Weitem nicht so umfangreich oder aktiv wie der von OpenNMT. Deshalb scheint Nematus zumindest zum derzeitigen Zeitpunkt eine Option zu sein, die man im Auge behalten sollte, die aber nicht unbedingt die erste Wahl ist.

Brandneu – Sockeye

Von: Amazon
Website: Die Haupt-Website ist hier: http://sockeye.readthedocs.io/en/latest/. Das Projekt und eine Anleitung wurden auf Amazons AWS (Amazon Web Services) KI-Blog vorgestellt — https://aws.amazon.com/fr/blogs/ai/train-neural-machine-translation-models-with-sockeye/.
Sprache: Python, aufgebaut auf dem Apache-MXNet-Framework für maschinelles Lernen
Architektur: Rekurrentes neuronales Netz
Whitepaper: SOCKEYE: A Toolkit for Neural Machine Translation, F. Hieber et al., 15. Dez. 2017
Support: Abgesehen von der Website mit einer ausführlichen Dokumentation gibt es das allgemeine AWS-Diskussionsforum.
Zusammenfassung: Das neueste Open-Source-Toolkit für maschinelle Übersetzung ist für fortgeschrittene Anwender gedacht, die außerdem mit dem AWS-Setup und dem MXNet-Framework vertraut sind. Andererseits sind viele verschiedene Netzarchitekturen und erweiterte Optionen verfügbar, was den fortgeschrittenen Anwendern viel mehr Freiheit beim Experimentieren erlaubt.

Ein weiterer dicker Fisch – Fairseq

Von: Facebook
Website: Das Github-Projektarchiv ist hier zu finden: https://github.com/facebookresearch/fairseq. Eine Anleitung zur Verwendung von Fairseq wurde auf Facebooks Code-Blog veröffentlicht — https://code.facebook.com/posts/1978007565818999/a-novel-approach-to-neural-machine-translation/.
Sprache: Lua, aufbauend auf dem Torch-Framework für maschinelles Lernen
Architektur: Convolutional neuronales Netz
Whitepaper: Convolutional Sequence to Sequence Learning, J. Gehring et al., 8. Mai 2017
Support: eine Facebook-Gruppe (was sonst?) und eine Google-Gruppe.
Zusammenfassung: Dieses Toolkit ist ebenfalls für fortgeschrittene Anwender gedacht, erstens, weil es ebenfalls in der (im Vergleich zu Python) esoterischeren Sprache Lua geschrieben ist, und zweitens, weil die Zielgruppe anscheinend Forschungsexperten statt neugierige Endanwender sind. Außerdem ist das Toolkit ebenfalls relativ neu.

Mein neuronales Maschinenübersetzungsprojekt – 0. Schritt – Auswahl der Hardware

Dies ist der zweite Beitrag einer Beitragsreihe auf diesem Blog, in der ich meinen Versuch beschreibe, eine eigene neuronale Engine für Maschinenübersetzung einzurichten. Im ersten Beitrag stellte ich mich und das Projekt vor.

Für die Einrichtung von neuronalen Netzen ist die richtige Wahl der Hardware ebenso wichtig wie die Wahl der Software und der Algorithmen, da das Training neuronaler Netze im Grunde aus einer Unzahl an Matrixmultiplikationen besteht, die am besten parallel erfolgen. Das ist auch der Grund für die raschen Fortschritte bei künstlichen neuronalen Netzen in den letzten Jahren, da aufgrund der Erfindung von LCD-Monitoren und der wachsenden Beliebtheit von Spielen mit virtueller Realität mehr und bessere dedizierte Grafikprozessoren (GPUs) auf den Markt gekommen sind. Das Konzept eines neuronalen Netzes ist nicht neu. Künstliche neuronale Netze wurden bereits in den 40er Jahren konzipiert. Bis vor Kurzem konnte man damit jedoch keine praktischen Aufgaben lösen, da normale CPUs mit seriellen Rechenvorgängen für die damit verbundenen Berechnungen nicht ausreichen. Erst die Markteinführung von ausreichend rechenstarken GPUs brachte den Durchbruch, da GPUs eigens für intensive parallele Rechenaufgaben und Matrixmultiplikationen konstruiert sind.

Aber ich schweife vom Thema ab. Dieser Beitrag befasst sich mit der Einrichtung der richtigen Hardware für ein neuronales Netz für maschinelle Übersetzung (NMÜ). Die Entwickler der verschiedenen Open-Source-NMÜ-Toolkits empfehlen eine leistungsstarke GPU mit mindestens 6 GB an dediziertem, internem GPU-Arbeitsspeicher. Deshalb habe ich sofort zugeschlagen, als mein lokaler Händler in Sachen Gadgets für Nerds, Fry’s, einen sogenannten Gaming-PC von Asus mit einer Nvidia GeForce GTX-1070-Grafikkarte mit 8 GB Grafikspeicher stark reduziert im Angebot hatte. Die 1070 ist eine Leistungsstufe niedriger als das derzeitige Top-Produkt von Nvidia, die GTX 1080 Ti, kostet jedoch nur ungefähr die Hälfte der 1080 Ti. AMD stellt mit seiner Radeon-Serie ebenfalls gute GPUs her, aber da dieser Asus-PC als Ausstellungsstück extrem günstig war, war die Wahl getroffen. Leider ist das BIOS von Asus mit seinen eigenen Problemen verbunden, die ich nun beschreiben werden. Wenn Sie also an den (allzu) technischen Details der Einrichtung des PCs interessiert sind, lesen Sie bitte weiter.

Auf dem PC war Windows 10 vorinstalliert, was aber für rechenintensive Anwendungen wie neuronale Netze eher ungeeignet ist. Alle oben erwähnten Open-Source-Toolkits laufen standardmäßig auf Linux. Ich entschloss mich, Windows 10 auf der Maschine zu belassen, da der PC ohne Installationsmedium geliefert wurde, obwohl ich nicht die Absicht habe, je auf dem Gaming-PC Computerspiele zu spielen. Deshalb partitionierte ich die Festplatte neu, was mit Windows 10 erstaunlich einfach war. Dann installierte ich mithilfe eines USB-Flashspeichers Ubuntu in einer Dual-Boot-Konfiguration. Anleitungen hierzu gibt es im Web zuhauf. Alles schien glatt zu laufen, bis ich bemerkte, dass Ubuntu nicht den Treiber von Nvidia verwendete, sondern einen anderen Treiber. Das verfehlt jedoch den ganzen Sinn der 1070-Karte, da dieser andere Treiber nicht alle Funktionen der Karte nutzen kann. Und damit begannen die Probleme.

Ich installierte also den neuesten Nvidia-Treiber für Ubuntu mit den folgenden Befehlen (lassen Sie „sudo“ weg, wenn Sie als root eingeloggt sind):

 
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-384

384 ist die neueste Treiberversion zum Zeitpunkt der Abfassung dieses Beitrags. Nach dem Neustart, um den Treiber zu aktivieren, begann die Sache jedoch schief zu laufen. Ich konnte mich nicht einloggen und wurde immer wieder zum Login-Bildschirm zurückgeworfen, egal, was ich versuchte.

Die Ursache des Problems schien die sogenannte Secure-Boot-Einstellung im Asus UEFI BIOS zu sein, die so viel Sinn macht wie ein Sandkasten in der Sahara. Diese Einstellung soll verhindern, dass Nicht-Windows-Betriebssysteme bestimmte Firmware verwenden, die vom Systemhersteller nicht geprüft wurde, auch wenn diese Firmware von einem Hersteller einer der Systemkomponenten stammt — in meinem Fall vertraut also Asus Nvidia nicht. Nach einem weiteren Neustart gelangte ich mithilfe von F2 ins UEFI BIOS zu den Secure-Boot-Einstellungen. Ich konnte die Funktion nicht deaktivieren, da „Enabled“ grau unterlegt und fixiert war. Also wählte ich stattdessen die Option „Other OS“ statt „Windows OS“, siehe die Screenshots unten. Dadurch löste ich zumindest eines der Probleme.

Asus UEFI Bios boot settings

Boot-Einstellungen im Asus UEFI BIOS


Asus UEFI Bios boot settings detail

Detailansicht der Boot-Einstellungen im Asus UEFI BIOS

Nach einem weiteren Neustart wurde ich von einem Bildschirm voller Fehlermeldungen über einen PCIe-Busfehler, pcieport usw. begrüßt, der ununterbrochen scrollte. Dazu wurden die Dateien syslog und kern.log mit ebendiesen Fehlermeldungen so vollgeschrieben, dass sie meine gesamte TB-Festplatte füllten und das System einfror. Hier schaffte die Einfügung einer weiteren Option in das Grub-Boot-Menü Abhilfe:

  • Ich gelangte mit Strg + Alt + F1 zur Befehlszeile.
  • Dort leerte ich die Dateien syslog und kern.log, die meine gesamte Festplatte füllten, mit den folgenden Befehlen:

     
    sudo truncate -s0 syslog
    sudo truncate -s0 kern.log

  • Danach erstellte ich eine Sicherungskopie der grub-Datei und öffnete die Originaldatei folgendermaßen:

     
    sudo cp /etc/default/grub /etc/default/grub.bak
    sudo -H gedit /etc/default/grub

    In gedit ersetzte ich die Zeile

     
    GRUB_CMDLINE_LINUX_DEFAULT=“quiet splash“

    durch

     
    GRUB_CMDLINE_LINUX_DEFAULT=“quiet splash pci=nomsi“

    MSI bedeutet Message Signaled Interrupts, die das System vor Einfrierungen bei Interrupts schützen sollen. Es ist jedoch bekannt, dass bestimmte Hardwarekombinationen MSI nicht unterstützen und das System dabei einfriert, was MSI eigentlich verhindern sollen. Scheinbar ist mein PC mit Asus-Motherboard mit Intel-Chipset und einer Nvidia GeForce-GPU auf Ubuntu 16.04 ein Beispiel dafür.

  • Ich speicherte die bearbeitete grub-Konfiguration und verließ gedit. Danach aktualisierte ich grub und startete das System neu:

     
    sudo update-grub
    sudo reboot

Seither habe ich einige GPU-intensive Berechnungen (ohne künstliche neuronale Netze) durchgeführt und das System scheint stabil zu laufen. Keine überlaufenden Log-Dateien, keine PCIe-Fehler und keine Probleme beim Neustarten oder Einloggen. Die Windows-Seite scheint ebenfalls stabil zu sein.

Im nächsten Beitrag befasse ich mich mit der schwierigen Wahl des Toolkits — OpenNMT oder Tensorflow von Google?

Mein neuronales Maschinenübersetzungsprojekt – Übersicht

Vor kurzem habe ich mit dem ambitionierten Projekt begonnen, meine eigene neuronale Maschinenübersetzungsengine einzurichten. Dieser Beitrag dient als Übersicht über die mit der Zeit veröffentlichten Blog-Beiträge.