Mai Programmierwettbewerb - Gewinner:in

  Ralf Hersel   Lesezeit: 7 Minuten  🗪 5 Kommentare

Wir ermitteln die beste Lösung für das Verschlagworten der GNU/Linux.ch-Artikel.

mai programmierwettbewerb - gewinner:in

Unser Programmierwettbewerb zum 2-jährigen Jubiläum von GNU/Linux.ch geht zu Ende. Die Aufgabe bestand darin, ein Python-Programm zu erstellen, mit dem sich über 2000 Artikel mit Stichwörter versehen lassen. Damit möchten wir den Wissensschatz der Beiträge leichter für die Community zugänglich machen, indem diese Stichwörter Teil der Suchfunktion werden. Dem Gewinner bzw. der Gewinnerin winkt ein attraktiver Preis, das Raspi 4 powered CutiePi Tablet:

Der Wettbewerb lief Anfang Mai gut an, als nach wenigen Tagen Lösungsvorschläge von Onli, Tux0r und Pauline eintrafen. Dann geschah eine lange Zeit gar nichts. Erst in den letzten Tagen wurden vier weitere Lösungen geschickt. Diese kamen von Johannes, Andreas, Robert und Beat. Auch die dabei verwendeten Algorithmen, sahen Anfang Mai anders aus, als am Ende des Monats.

Ich selbst habe es mir nicht nehmen lassen, eine eigene Lösung zu schreiben, die selbstverständlich ausser Konkurrenz läuft. Die drei Early-Birds (sowie meine Lösung) setzen alle auf NLP-Varianten. Zu Beginn des Monats gab es auch Gejammer, weil ich die Verwendung des proprietären Generative Pre-trained Transformer 3 (GPT-3) nicht erlaubt hatte. Freie NLPs waren jedoch möglich. Bei den frühen Lösungen kamen zwei verschiedene NLPs zum Einsatz: SpaCy und Yake. Ich habe mit beiden (in der Grundeinstellung) experimentiert und konnte mit Yake bessere Ergebnisse erzielen, ohne die speziellen Funktionen der beiden NLPs auszureizen.

Auch Onlis Lösung setzt auf Yake und erreicht damit gute Resultate. Tux0r verwendet SpaCy, ohne spezielle Sprachmodelle einzusetzen, was zu weniger guten Ergebnissen führte. Im Gegensatz dazu fährt Pauline das volle Geschütz auf. Ich zitiere sie gerne:

Es ist ein statistischer Ansatz mit TF-IDF mittels scikit-learn und Tokenization mit Spacy. Zuerst werden die Strings aus den HTML-Dateien extrahiert. Dann werden sie mit Spacys deutschen NLP-Modell in Tokens unterteilt. Es werden Punktuation und Stoppwörter und weiteres unwichtiges Zeug entfernt. Mit den verbleibenden Tokens wird ein TF-IDF Modell trainiert. Danach werden die Wörter der Artikel mit dem trainierten Modell statistisch auf ihre Relevanz bewertet und die besten als Tags ausgewählt. Als besonders relevant werden Wörter bewertet, die häufig im aktuellen Dokument, aber relativ selten im Gesamttext aller Dokumente vorkommen.

Zu diesem frühen Zeitpunkt dachte ich, die Gewinnerin steht fest. Pauline ist vermutlich eine Spezialistin im Bereich der Computerlinguistik. Doch dann kamen in den letzten Tagen des Mai, Johannes, Andreas, Robert und Beat mit ihren Lösungen um die Ecke. Alle vier verwenden keine NLP-Bibliothek, sondern setzen auf selbst entwickelte statistische Auswertungen und Wörterlisten zum Ausschluss von unpassenden Wörtern. Obwohl man es nicht vermutet, müssen sich ihre Lösungen nicht hinter den Ergebnissen von SpaCy und Yake verstecken; im Gegenteil.

Obwohl ich mir die Source Codes von allen Teilnehmenden angesehen habe, wurde der Gewinner bzw. die Gewinnerin ausschliesslich aufgrund der gefundenen Stichwörter ermittelt. Dazu habe ich eine Tabelle erstellt, in der man die 19 Artikel und die dazu gefundenen Stichwörter miteinander vergleichen kann. Ich habe dann pro Artikel die Qualität der Stichwörter der einzelnen Lösungen verglichen und mit Punkten bewertet. Die Frage dabei war, welche Stichwörter geben den Inhalt des Artikels am besten wieder. Das ist zwar subjektiv, aber mir fiel kein besseres Verfahren ein. Die Teilnehmenden erreichten dabei folgende Punktzahlen:

  • Onli: 48 Punkte
  • Tux0r: 49 Punkte
  • Pauline: 93 Punkte
  • Johannes: 67 Punkte
  • Andreas: 97 Punkte
  • Robert: 81 Punkte
  • Beat: 66 Punkte

Da die beiden Top-Scorer sehr nahe beieinander liegen, haben wir uns dazu entschlossen, sowohl Andreas als auch Pauline als Sieger:in zu ernennen. Diese Entscheidung hat ihren Charme, weil die beiden Lösungen sehr unterschiedlich sind. Paulines Variante ist sehr wissenschaftlich, während Andreas eine äusserst pragmatische Lösung abgeliefert hat. Erstaunlich ist, dass beide Ansätze zu den besten Ergebnissen geführt haben.

Obwohl wir nur einen Preis zu vergeben haben, gibt es kein Problem, weil Andreas beim Einreichen seiner Lösung bereits auf den Preis verzichtet hat, falls er gewinnen sollte. Er schreibt:

"Für den Fall, dass ich gewinnen sollte (was ich nicht glaube, aber man weiß ja nie), würde ich auf den Preis verzichten, da ich keine sinnvolle Verwendung für den CutiePi habe."

Somit geht das CutiePi an Pauline. Herzlichen Glückwunsch an euch beide. Selbstverständlich bedanken wir uns ganz herzlich bei allen Teilnehmern. Die Lösungen haben durchwegs gute Ergebnisse erbracht; es war schwer für mich, die abschliessende Bewertung zu machen. Fun Fact, meine eigene Lösung war die Schlechteste.

Wir stellen gerne alle Lösungsvorschläge zur Verfügung. Dies können wir jedoch nur auf Anfrage leisten, weil die Lösungen nicht aus einer Datei bestehen, sondern einiges an Kontextinformationen benötigen, um sie installieren und ausführen zu können. Schreibt uns an kontakt@gnulinux.ch, falls ihr bestimmte Lösungen erhalten möchtet.

Obwohl wir nun die Gewinner kennen, ist der Drops noch nicht gelutscht:

  • Die Zusendung des Preises verzögert sich, weil wir das CutiePi bestellt, aber noch nicht erhalten haben.
  • Die beiden Programme müssen nun auf die 2000+ Artikel angewandt werden; dafür rechnen wir stark mit der Unterstützung der beiden Gewinner.
  • Wir würden es sehr begrüssen, wenn Andreas und Pauline einen ausführlichen Artikel über die Funktionsweise ihrer Lösung bei GNU/Linux.ch veröffentlichen.

Herzlichen Dank für eure Teilnahme und die Unterstützung bei der Verschlagwortung der GNU/Linux.ch-Artikel. Damit erhaltet ihr das Wissen und macht das Suchen nach Beiträgen viel einfacher. Wir werden berichten, sobald die Schlagwörter aktiv sind.

Tags

Schlagwort, Tags, Wettbewerb, Stichwort, Gewinner, Lösungen, Pauline, Andreas, Lösung, Stichwörter, Yake, NLP

Marcus
Geschrieben von Marcus am 2. Juni 2022 um 14:51

Hut ab, vor allem auch für den (Gewinn-)Verzicht.

Gratulation an beide Gewinner!

kaligule
Geschrieben von kaligule am 2. Juni 2022 um 20:28

Meganice, das war wirklich ein schwieriges Problem.

tux.
Geschrieben von tux. am 2. Juni 2022 um 21:09

Na gut... ich gratuliere. ;)

joerg
Geschrieben von joerg am 2. Juni 2022 um 21:13

uff... echt schöne Lösungen!

Ralf Hersel
Geschrieben von Ralf Hersel am 5. Juni 2022 um 22:35

Die letzte Messe ist noch nicht gelesen. Zurzeit bin ich mit Andreas und Pauline in Kontakt, um die Lösungen zu verbessern. Die beiden werden ihre Ansätze in Artikeln bei uns veröffentlichen und in Interviews erklären, wie sie es gemacht haben. Stay tuned, da kommt noch was.