Praktikumsberichte · 2017-01-07 · Christophe Biwer

Christophe Biwer

Kontakt
Dauer 24.08.2016 - 11.10.2016
Firma Deutsches Forschungszentrum für Künstliche Intelligenz
Adresse Stuhlsatzenhausweg 3
66123 Saarbrücken
Deutschland

Wie kam ich zu dem Praktikum?

Ich arbeite bereits seit August 2015 als HiWi am Deutschen Forschungszentrum für Künstliche Intelligenz, genauer gesagt im Fachbereich MLT (Multilinguale Technologien), welcher von Prof. Dr. Hans Uszkoreit und Prof. Josef van Genabith geleitet wird. Mein Betreuer (sowohl im HiWi-Job als auch während des Praktikums) ist Dipl.-Inf. Bernd Kiefer, welcher, zusammen mit Dr. Hans-Ulrich Krieger, Dozent des Programmierkurses Java I war, an welchem ich im Sommersemester 2015 teilgenommen habe. Nach Ende des Kurses bot mir Herr Kiefer einen Job am DFKI an; ein Angebot, welches ich mit Freude annahm.

Im Rahmen meines HiWi-Jobs, bei dem ich u.a. am Projekt PAL arbeite, war ich bis zum Praktikumsbeginn schon mit einigen Projekten des MLTs in Berührung gekommen, weshalb es naheliegend war, meine Kenntnisse in diesen im Rahmen eines sechswöchigen Praktikums zu vertiefen.

Das Projekt PAL

PAL ist ein von der EU finanziertes Projekt, dessen Ziel es ist, Kindern, die an Diabetes Typ 1 erkrankt sind, einen intelligenten Roboter zur Verfügung zu stellen, der sie durch den Alltag begleitet. Er soll ein Spielkamerad sein, der ihnen gleichzeitig auch in medizinischen Fragen behilflich ist und sie zum Beispiel daran erinnert, ihren Glukosespiegel zu messen. Koordiniert wird das Projekt mithilfe von Slack, einem Messenger, der es einem erleichtert, im Team zu arbeiten und externe Tools, wie zum Beispiel Bots, einzubinden. Die Projektdateien sind auf einem DFKI-internen Gitlab gespeichert, auf welches man mit git (einem Versionsverwaltungstool) zugreift.

Praktikumsverlauf

Das Praktikum hat (ungewöhnlicherweise) am 24. August, einem Mittwoch, begonnen, da es sich ergeben hatte, dass ich aus privaten Gründen für drei Tage abwesend sein würde. Das war aber kein Problem, so dass ich diese Tage bereits „vorarbeiten“ konnte.

In den ersten drei Tagen habe ich mich mit dem Schreiben von JUnit-Tests beschäftigt, welche meinen bereits vor dem Praktikum geschriebenen Code überprüfen sollten. JUnit-Tests sind dazu da, Java-Code zu testen, indem man während des Tests eine Umgebung baut, die einem realen Anwendungsfall ähnelt, um so den Code zu kontrollieren und auf Fehler und Vollständigkeit zu kontrollieren. Bei der erwähnten Arbeit ging es um RdfProxy, einen Wrapper, welcher Daten, die vorher aus einer Ontologie (bestehend aus sogenannten RDF-Objekten (Resource Description Framework)) extrahiert wurden, in Java-Objekte umwandelt. Die eigentliche Herausforderung besteht darin, sicherzustellen, dass die Daten aus der Ontologie nur dann abgegriffen werden, wenn sie auch wirklich benötigt werden, und erst dann in ein Java-Objekt umgewandelt werden. Je nach Größe der Ontologie könnte diese Umwandlung nämlich ein sehr rechenintensiver Vorgang sein. Während dieser ersten Tage war mein Betreuer aus beruflichen Gründen unterwegs, aber ich konnte auf die Hilfe von Dr. Hans-Ulrich Krieger, zuständig für Ontologien im Projekt PAL, zählen.

Zum Ausführen der Tests muss auch ein hfc-Server gestartet werden, ein Vorgang, der mir etwas Probleme bereitete, da ich damit noch keine Erfahrung hatte. Bei hfc handelt es sich um einen bottom-up forward chainer sowie eine semantische Datenbank. Ohne jetzt allzu tief ins Detail zu gehen, sei an dieser Stelle folgendes erwähnt: Nur weil eine Funktion innerhalb von fremdem Code aufgerufen wird, heißt das noch lange nicht, dass sie bereits implementiert wurde. In jedem Test sollte nämlich ein Server gestartet werden, der dann auch wieder herunterfahren sollte. Zumindest wurde eine Funktion aufgerufen, die darauf hindeutete. Leider war diese Funktion noch nicht implementiert, so dass beim nächsten Test beim erneuten Hochfahren eines Servers eine Exception geworfen wurde. Nachdem ich den Grund für diesen Fehler zusammen mit Herrn Krieger gefunden hatte, hatte ich auch schnell eine Lösung parat.

Glücklicherweise konnte ich dann am zweiten Tag bereits den ersten funktionierenden Test vermelden. Nach diesem Meilenstein war es dann auch ein Leichtes, weitere Tests zu schreiben. Dazu musste ich allerdings auch eine eigene Beispielontologie schreiben, welche im Format .nt formuliert war. Da ich die Vorlesung Einführung in die KI noch nicht gehört habe, werden mir diese Kenntnisse gegen Ende dieser Veranstaltung bestimmt nützlich sein.

In den nächsten Tagen habe ich mich außerdem mit Netbeans und dem Jacoco-Plugin beschäftigt, welches die Testcoverage ermittelt, d.h., es stellt visuell die Teile des Codes dar, welche in den Tests durchlaufen werden und welche nicht. Außerdem gibt es diese Abdeckung in Prozent wieder, so dass man auf einen Blick sieht, wo noch die größten Baustellen sind, die noch nicht getestet wurden. Leider ist das Plugin etwas buggy, so dass es manchmal etwas frickelig wurde, es zum Laufen zu bringen.

Im Laufe der Woche musste ich dann auch noch größere Teile meiner Implementierung von RdfProxy ändern. Solche weitreichenden Überarbeitungen sind leider keine Seltenheit in großen Projekten, aber wenn man ein Feature erst einmal auf eine bestimmte Art und Weise implementiert hat, dann geht eine weitreichende Änderung trotzdem schneller von Hand als die erste Implementierung.

Gegen Ende der zweiten Woche habe ich mich dann auch mit rudimant beschäftigt, ein Projekt, das darauf abzielt, Regeln zur Dialogverarbeitung von einer einfachen Regelsprache in sofort funktionierenden Java-Code zu konvertieren zu können. Zudem habe ich mich über Design Principles informiert, also zum Beispiel das Singleton-Pattern (welches ich allerdings bereits aus Java I kannte).

In der dritten Woche habe ich weitere Tests für hfc geschrieben, beispielsweise sollte ich überprüfen, ob die in hfc definierten Operatoren die in der Datenbank vorkommenden Datentypen richtig verarbeiten können. In einer hfc-Datenbank gibt es zwei verschiedenen Typen an Daten: RDF-Objekte und XSD-Datentypen. Bei letzteren handelt es sich zum Beispiel um floats (Gleitkommazahlen). Ich habe neben anderem getestet, ob ein Operator namens FLessEqual bei zwei Argumenten (floats) richtig erkennt, ob das erste Argument kleiner oder gleich dem zweiten ist. Das klingt auf den ersten Blick nicht besonders spektakulär, allerdings habe ich u.a. einen Copy-Paste-Fehler aufgedeckt, welcher später zu großen Problemen hätte führen können. Neben kleineren Problemen mit Netbeans hat in dieser Woche das Schreiben von Tests die meiste Zeit in Anspruch genommen. Ich stelle hiermit auch fest: Keine IDE ist perfekt. Allerdings war ich in dieser Woche auch nur zwei Tage anwesend, da ich den Rest der Zeit, wie vorhin erwähnt, aus privaten Gründen unterwegs war.

Am Dienstag der vierten Woche hatte mein Betreuer am DFKI in Kaiserslautern eine Präsentation für eine größere Firma. Dazu musste er eine Demo nutzen, welche unter anderem Spracherkennung und -verarbeitung, einen Touchscreen, ein Tablet und einen Roboter namens NAO der Firma Aldebaran kombiniert und nutzt. Die Verarbeitung des Dialogs sowie die Steuerung des Touchscreens und des Roboters laufen über einen zusätzlichen Rechner. Damit diese vier Komponenten miteinander arbeiten können, müssen sie sich im gleichen Netzwerk befinden. Problematisch war allerdings, dass der NAO nicht den üblichen Sicherheitsstandard WPA2 Enterprise unterstützt, so dass ein eigenes Netzwerk aufgestellt werden musste. Die gleichzeitige Nutzung von lokalem WLAN und Internetzugang war eine technische Herausforderung, die wir mit unterschiedlichen Hardware-Setups zu lösen versuchten, etwa einem USB-WLAN Dongle, was sich als Sackgasse herausgestellt hat, und einem eigens dafür konfigurierten WLAN Router.

An diesem Tag habe ich deutlich mehr Zeit als sonst auf der Arbeit verbracht, aber natürlich war ich mir der Dringlichkeit der Sache bewusst und hatte mich mit Leidenschaft in dem Problem festgebissen. Ich bin deshalb der Meinung, dass diese Erfahrung eine der wichtigsten des Praktikums war: Auch als Computerlinguist beschäftigt man sich nicht nur mit den Fragestellungen des Studienfachs, sondern auch mit praktischen Problemen der Technik sowie den Herausforderungen der Wirtschaft, nämlich, wie hier etwa, ein Produkt überzeugend zu präsentieren und potentielle Geldgeber für eben dieses einzunehmen.

Gut ausgeruht habe ich mich am nächsten Tag dann mit der Veränderung einer GUI beschäftigt. Ein Unterprojekt von hfc ist hfc-db (db steht für Datenbank), in dem u.a. RdfProxy zu finden ist. Weiterer Bestandteil davon ist ein Suchfenster, in welchem man mit Suchanfragen basierend auf der Tripeldarstellung von RDF-Objekten eine angegebene Datenbank durchsuchen kann. Zum Beispiel zeigt der Befehl select ?s ?o where ?s <rdf:type> ?o das Subjekt und das Objekt eines jeden RDF-Objektes (in Form von Tripeln), dessen Prädikat <rdf:type> lautet. Implementiert wird diese GUI mithilfe von Swing, einer API und Grafikbibliothek zum Erstellen von Bedienelementen in Java. IDEs können einem die unfertige GUI visuell darstellen und so die Arbeit ein gutes Stück vereinfachen, allerdings nur dann, wenn man komplett bei null anfängt, was bei einer bereits bestehenden GUI natürlich nicht möglich war. Also habe ich mich Schritt für Schritt in den existierenden Code eingearbeitet und einige kleine Veränderungen gemacht, um die Auswirkungen zu verstehen. Nach und nach konnte ich dann die Bedienung erweitern und das visuelle Feedback verstärken. Von diesen Kenntnissen habe ich dann während meines Softwareprojekts profitieren können.

Gegen Ende der Woche habe ich mich dann mit Anna Welker, einer Kommilitonin, die das Praktikum zeitgleich mit mir gemacht hat, auf die Studentenmesse Abi - was dann? vorbereitet, auf welcher wir interessierte Schüller zum Thema Computerlinguistik beraten haben. Netterweise hat uns das MLT den NAO sowie die ganze dazugehörige Demo zur Verfügung gestellt. Auch hier haben wir wieder ein eigenes Netzwerk aufgebaut, indem wir die Internetverbindung eines Rechners über einen WLAN-Router geteilt haben.

Da der NAO ein ziemlich teurer Roboter ist, was auch leicht umfallen kann, mussten wir auch sicherstellen, dass er nicht beschädigt werden konnte, während wir die Besucher auf der Messe damit interagieren ließen. Dazu hatten wir intensiv recherchiert und dann eine adäquate Unterlage erworben. (Wir haben Spielzeug-Gummimatten in Form von Puzzleteilen gekauft und dann zusammengesteckt.) Funktioniert hat im Endeffekt alles wie gewünscht, nur die Spracherkennung wurde mit zunehmender Besucheranzahl zu unzuverlässig, da der Geräuschpegel zu hoch war.

Am 20. und 21. September 2016 fand in der Congresshalle Saarbrücken die alljährliche "Abi - was dann?" Messe statt. Auch die Studienberatung der Universität des Saarlandes war dort mit einem Infostand vertreten, wo sich angehende Abiturienten über Studienmöglichkeiten informieren konnten. Mit dabei war ein kleines Team bestehend aus Computerlinguistik-Studierenden (Anastasija Amann, Christophe Biwer, Matthias Lindemann und Anna Welker) sowie Lucia Hornung (M.Sc. Koordinatorin), die den an Computerlinguistik interessierten Jugendlichen Frage und Antwort standen. Im Gepäck hatten sie eine Demo des Projektes PAL (Personal Assistant for Healthy Lifestyle), welches freundlicherweise vom DFKI, genauer von der Forschungsgruppe Multilinguale Technologien unter Leitung von Prof. Dr. Josef van Genabith, zur Verfügung gestellt wurde. Die Demo beinhaltete unter anderem automatische Spracherkennung (ASR und VAD), Sprachsynthese (TTS) sowie Sprach- und Dialogverarbeitung und bot somit einen guten Einblick in das Feld der Computerlinguistik.

(Quelle: Newsseite der CoLi, Oktober 2016)

Nach der Messe haben wir uns dann einen Vormittag Zeit genommen, um endlich mal unseren Arbeitsraum aufzuräumen. In diesem Raum, das so genannte CoSyLab (von Cognitive Systems) arbeiten mehrere HiWis des MLTs, welche ab und zu auch wechseln, so dass sich manches Material dort ansammelt und niemand mehr den Überblick hat. Darüber hinaus haben wir den Raum umgestaltet, um ein angenehmeres Arbeitsklima zu ermöglichen.

Die nächsten Tage habe ich mich wieder mit RdfProxy beschäftigt und mich über YAML informiert, eine Auszeichnungssprache (markup language), mit Hilfe derer man auf einfache Art und Weise Konfigurationsdateien schreiben kann. Zum Beispiel würde

Bibliothek:
  Info1: DFKI
  Info2: COLI

eine Map erzeugen, in welcher man mit dem Schlüssel Bibliothek auf eine weitere Map zugreifen kann, wo man wiederum die Schlüssel Info1 und Info2 nutzen kann, um die dahinter liegenden Werte abzugreifen. Das Java-Pendant wäre um einiges komplexer und unübersichtlicher.

Außerdem habe ich mich ein klein wenig mit TECS (Thrift Eventbased Communication Service) beschäftigt. TECS möchte die Kommunikation zwischen verschiedenen Komponenten einer cyber-physischen Umgebung erleichtern. Während des Praktikums habe ich mich allerdings nur damit beschäftigt, TECS aus einem Projekt zu entfernen, damit dieses einfacher getestet werden konnte.

Nachdem ich ein kleines Beispielprojekt geschrieben hatte, in dem ich YAML ausprobiert und gleichzeitig mit Maven dieses Projekt verwaltet und kompiliert hatte, habe ich die so gewonnenen Erkenntnisse genutzt, um eine Konfigurationsdatei für rudimant zu schreiben, welche zum Zeitpunkt des Verfassens dieses Berichts noch genutzt wird.

In der zweitletzten Woche habe ich nur wenig neue Sachen kennengelernt, sondern mich eher mit der Erweiterung von RdfProxy und der GUI von hfc-db beschäftigt. Auch habe ich mich etwas intensiver im Code von rudimant umgesehen.

Da ich in dieser Woche krank war, habe ich das Praktikum noch zwei Tage verlängert. In den letzten zwei Tagen hatte ich die Aufgabe, Literaturrecherche für das Softwareprojekt des kommenden Semesters zu betreiben. Dieses wird von Bernd Kiefer angeboten und nutzt einen großen Teil der Programme, die ich bereits kenne. Deshalb nehme ich im Rahmen des Projektes auch zum Teil organisatorische Aufgaben wahr.

Fazit

Rückblickend stelle ich fest, dass ich in meiner kurzen Zeit als HiWi am DFKI bereits eine unglaubliche Vielzahl an Tools kennengelernt habe, von einer sehr guten Arbeitsatmosphäre profitieren konnte und mich auch weiterhin auf eine sehr lehrreiche Zeit freuen kann.

Ich kann ein Praktikum im Allgemeinen grundsätzlich empfehlen (im Hinblick auf die neue Studienordnung der Computerlinguistik, die keine Pflichtpraktika mehr vorsieht). Auch erlebt man während eines solchen Praktikums, wie es ist, 40 Stunden pro Woche in einer Firma zu arbeiten.

Effizientes Arbeiten geht deutlich einfacherer, wenn man sich voll und ganz einem Problem widmen kann. Im Allgemeinen habe ich viel selbstständig arbeiten können, aber durch meinen Betreuer und andere Mitarbeiter des DFKIs (inkl. HiWis) hatte ich bei Fragen immer einen Ansprechpartner.