#DescribeMyArt – KI-Twitter-Bot beschreibt eure imaginären Kunstwerke

25. September 2020 | Holger Kurtz

Wie stellt sich eine künstliche Intelligenz ein Kunstwerk vor? Wer den Titel eines imaginären Kunstwerkes, sagen wir mal, „Portrait of a Man” mit dem Hashtag #DescribeMyArt twittert, findet es heraus. Derjenige bekommt von meinem Twitter-Bot @DescribeMyArt einen Tweet gesendet, in dem das imaginäre Kunstwerk einem Künstler zugeordnet & beschrieben wird. Ihr erhaltet also (metaphorisch) einen Einblick in die künstlerische Vorstellungskraft einer KI!

Ein Beispiel:

Danach dauert es etwa 15 Minuten und voilà:

  1. Twittert den englischen Titel eures imaginären Kunstwerkes
  2. Fügt den Hashtag #DescribeMyArt an
  3. Wartet 15-20 Min, bis ihr in einem Tweet von @DescribeMyArt markiert werdet
  4. Dieser Tweet enthält die künstlich generierte Beschreibung

Ihr müsst nur streng sein: Der Tweet darf nichts anderes enthalten, als einen englischen Titel und den Hashtag #DescribeMyArt. Dann dauert es etwa 15 Minuten, bis ihr in einem Tweet erwähnt wird. Ihr werdet also von Twitter benachrichtigt, wenn es fertig ist. Falls der Inhalt euch nicht gefällt, könnt ihr auch einfach nochmal den gleichen Titel twittern. Der Bot nimmt immer nur den letzten Tweet zum Hashtag #DescribeMyArt. Ihr müsst es also vielleicht mehrmals probieren, wenn gerade viel los ist.

Ihr findet die Titel und Beschreibungen aller Teilnehmer*Innen auf dem Kanal @DescribeMyArt.

Wie funktioniert das?

Derzeit ist der Code nicht auf Github verfügbar, da er noch sehr chaotisch und nur wenig kommentiert ist. Ich werde ihn noch überarbeiten und dann dort veröffentlichen.

Das Projekt besteht aus 3 Teilen:

  1. Datengrundlage
  2. Twitter-Daten
  3. Künstliches neuronales Netzwerk

Die Datengrundlage:

Das Rijksmuseum bietet eine öffentliche API an, die nach einer Anmeldung verwenden werden darf. Mit dieser Schnittstelle in die Metadaten der Kunstsammlung konnte ich mit einem Python-Script die Titel & Beschreibungen aller Gemälde herunterladen. Leider gab es eher zu wenige englische Beschreibungen, um eine große Datengrundlage zu erhalten. Gesamt waren es nur knapp 4.000 Wörter. Daher war ich mir nicht sicher, ob das künstliche neuronale Netz darin genügend Strukturen erkennen könnte. Für eine Beta-Version war es jedoch genug, ich plane aber, die Datengrundlage mit Titel & Beschreibungen anderer Museen zu erweitern.

Die fertige Datengrundlage ist nun eine Text-Datei, mit solchen Inhalten:

In a quiet, private moment, a young woman stands, engrossed in reading a letter. It is morning, and she is still wearing her blue nightrobe. All the other colours are subordinate to its radiant lapis lazuli; yellow and red hardly make an appearance. Vermeer rendered the different effects of the cool light precisely. For example, he was the first artist to try soft grey for flesh, and to paint the shadows on the wall light blue.

=== Woman Reading a Letter === by Johannes Vermeer

Der Titel ist mit ===, der Künstler mit „by“ eingegrenzt, um eine Struktur zu erzeugen, die sich von der Beschreibung unterscheidet. Man sieht hier bereits das spätere Problem: Die Beschreibungen sind länger als 280 Zeichen. Ich muss später also die künstlich generierten Ergebnisse kürzen. Das mache ich, in dem ich so lange Sätze verkette, bis die Anzahl der Zeichen 280 überschreiten würde. Getwittert wird also meistens nur der Anfang.

Twitter-Daten

Um die Titel der Kunstwerke in euren Tweets dem Netz als Input geben zu können, nutze ich die Twitter API (und Tweepy). Über sie kann ich die Tweets zu #DescribeMyArt auslesen und den Twitterer vom Tweet unterscheiden und auch den Hashtag löschen, da er nicht zum Titel gehört. Das ganze passiert alle 15 Minuten und in einer winzigen Datenbank gleiche ich den letzten Tweet mit dem vorletzten ab, um zu wissen, ob es einen neuen Tweet von euch gibt. Wenn ja, startet das neuronale Netz, wenn nicht bricht das Script einfach ab und wartet 15min auf einen nächsten Versuch.

Künstliches neuronales Netzwerk

Das GPT2 Netzwerk von Open AI ist eines der besten neuronalen Netzwerke zum Natural Language Processing, also der Verarbeitung von nicht-strukturierten Daten, wie Wörtern. Ich arbeite mit einer kleinen Version und dem Modul des Chief Data Scientist von Buzzfeed, Max Woolf, namens gpt2_simple, mit dem es „ganz einfach“ ist, eine Tensorflow Session zu starten und das neuronale Netz mit der neuen Datengrundlage feinzutunen. Da es so wenige Wörter sind, habe ich es einmal mit 8 Sessions (quasi Durchlaufen) versucht, aber die generierten Texte waren nicht gut genug. Jetzt nutze ich 50 Sessions und finde die Ergebnisse ganz gut – möchte aber die Datengrundlage und die Anzahl an Sessions später noch erweitern.

Das Training habe ich direkt in einer virtuellen Machine in der Google Cloud stattfinden lassen, da auch das fertige Script dort laufen muss. Das hat auch gut funktioniert, da ich bereits ähnliche Projekte dort aufsetzen konnte und die Kinderkrankheiten ausgemerzt habe.

Das fertig trainierte Netz lagert nun in der Cloud und wird alle 15min mit euren Tweets dazu gebracht, neue Beschreibungen – passend zu euren Titeln – zu generieren, von denen ich aber nur einen Bruchteil twittern kann (wegen des 280 Zeichen Limits von Twitter).

Die Beschreibungen wirken daher häufig halbfertig – das lässt sich jedoch bei Twitter nicht ändern – und viele der »kurzen« Ergebnisse funktionieren auch ganz gut. Man darf aber natürlich keine perfekten Beschreibungen erwarten! Einmal kam eine Beschreibung sogar auf koreanisch heraus – KEINE AHNUNG WIESO. Aber ohne solche Zufälle wäre es auch nur halb so spannend.

FAQ

Was passiert, wenn ich etwas anderes zu dem Hashtag #DescribeMyArt tweete als einen Titel, der verarbeitet werden soll?

Der Twitter-Bot kann es nicht unterscheiden und wird den Tweet als Grundlage für eine neue Beschreibung nutzen. Bitte nutzt daher nicht den Hashtag, sondern markiert @DescribeMyBot, wenn ihr ÜBER die Aktion twittern möchtet.

Was passiert, wenn ich einen Tweet mit dem Hashtag #DescribeMyArt retweete?

Das ist kein Problem, sondern würde mich sehr freuen! Retweets sind von der Weiterverarbeitung für Beschreibungen ausgenommen.

Kann ich auch einen deutschen Titel twittern?

Nein, deutsche Titel wird der Bot zwar als Input nehmen und eine Beschreibung erzeugen, aber diese wird vermutlich keinen Sinn ergeben.

Mein Tweet wurde nie verwendet, woran liegt das?

Das tut mir erstmal leid. In der jetzigen Version schaut das Script alle 15 Minuten, welcher Tweet mit dem Hashtag #DescribeMyArt der neueste ist. Wenn also jemand, in diesem 15 Minuten Slot, nach dir twittert, wird stattdessen sein Tweet verwendet.

Lösung: Du kannst einfach erneut deinen Titel twittern, ich hoffe, du hast dann mehr Glück! (Falls das Bot häufiger verwendet wird, werde ich mir eine bessere Lösung ausdenken, versprochen!)

Autor des Beitrags:
Holger Kurtz
KulturData | Digitale Transformation im Kulturmanagement