Klassisches KI-Genre: ML sucht sich in der Poesie

Bild In der Presse gibt es häufig Nachrichten wie „KI hat gelernt, im Stil des Autors X zu schreiben“ oder „ML schafft Kunst“. In Anbetracht dessen haben wir uns entschieden - es wäre großartig, wenn diese hochkarätigen Aussagen in der Praxis überprüft werden könnten.

Ist es möglich, einen Kampf zwischen Bots zu arrangieren, um Gedichte zu schreiben? Kann daraus eine Wettbewerbsgeschichte klar und reproduzierbar gemacht werden? Jetzt können wir sicher sagen, dass dies möglich ist. Und wie Sie Ihren ersten Algorithmus zum Generieren von Gedichten schreiben, lesen Sie weiter.



1. Klassische KI


Die Aufgabe der Teilnehmer


Gemäß den Bedingungen des Wettbewerbs müssen die Teilnehmer ein Modell erstellen, das Gedichte zu einem bestimmten Thema im Stil eines der russischen Klassiker generiert. Das Thema und der Autor erhalten Modelle für die Eingabe, und am Ausgang wird ein Gedicht erwartet. Die vollständige Beschreibung befindet sich im Wettbewerbs- Repository .

Die Bedingungen für das Thema sind weich: Es kann sich um einen kurzen Satz, eine Phrase oder einige Wörter handeln. Die einzige Einschränkung betrifft die Größe: nicht mehr als 1000 Zeichen. Die Themen, zu denen Algorithmen getestet werden, werden von Experten zusammengestellt. Einige Themen sind offen und öffentlich, aber eine versteckte Reihe von Themen wird verwendet, um den besten Algorithmus zu bestimmen.

Die globale Idee des Wettbewerbs lautet: Für jedes Gedicht kann eine kurze Anmerkung mit mehreren Wörtern zusammengestellt werden. Lassen Sie uns ein Beispiel zeigen.

Wenn Sie einen Auszug aus "Eugene Onegin" A.S. Puschkin :
„... In diesem Jahr Herbstwetter
Ich stand lange im Hof
Der Winter wartete, die Natur wartete.
Schnee fiel erst im Januar
In der dritten Nacht. Früh aufstehen
Tatyana sah durch das Fenster
Am Morgen der weiß gewordene Hof
Vorhänge, Dächer und Zaun,
Lichtmuster auf dem Glas
Bäume in Wintersilber
Vierzig Spaß im Hof
Und sanft verstreute Berge
Winter mit einem brillanten Teppich.
Alles ist hell, alles ist rundum weiß ... "1823-1830
Das ist eine kurze Zusammenfassung davon kann in "Tatyana sieht den ersten Schnee durch das Fenster." Und dann wird das ideale poetische Modell für diese Eingabe etwas produzieren, das dem Original sehr nahe kommt.

Für das Training in diesem Wettbewerb wird ein Datensatz von mehr als 3000 Werken von fünf berühmten russischen Dichtern vorgeschlagen:

1. Puschkin
2. Yesenin
3. Mayakovsky
4. Blockieren
5. Tyutchev

Der Algorithmus muss so geschrieben sein, dass er schnell genug generiert wird und über die erforderliche Schnittstelle verfügt. In Bezug auf die Geschwindigkeit können Sie die Leistung mittelgroßer moderner PCs erreichen. Die Benutzeroberfläche und die Einschränkungen werden im Abschnitt „Lösungsformat“ ausführlich beschrieben.

Um den Fortschritt ihrer Entscheidungen verfolgen und mit anderen Entscheidungen der Teilnehmer vergleichen zu können, werden während des gesamten Wettbewerbs Markups von Entscheidungen über den Chat-Bot erstellt. Die Ergebnisse der Algorithmen werden nach zwei Kriterien bewertet:

  • Die Qualität der Versifikation und der Stil eines bestimmten klassischen Dichters
  • Die Vollständigkeit der Offenlegung eines bestimmten Themas in einem Gedicht

Für jedes Kriterium wird eine 5-Punkte-Skala bereitgestellt. Der Algorithmus muss Verse für jedes Thema aus der Testsuite verfassen. Die Themen, zu denen Algorithmen getestet werden, werden von Experten zusammengestellt. Einige Themen sind offen und zugänglich, aber eine versteckte Reihe von Themen wird verwendet, um den besten Algorithmus zu identifizieren.

Das als Ergebnis des Algorithmus erhaltene Gedicht kann aus folgenden Gründen abgelehnt werden:

  • Der generierte Text ist kein Gedicht in russischer Sprache
  • generierter Text enthält Schimpfwörter
  • Der generierte Text enthält absichtlich enthaltene anstößige Phrasen oder Untertexte

Wettbewerbsprogramm


Im Gegensatz zu vielen anderen gibt es in diesem Wettbewerb nur eine Online-Phase: vom 30.07 bis 26.08.

Während dieses Zeitraums können Sie täglich Lösungen mit den folgenden Einschränkungen senden:

  • nicht mehr als 200 Entscheidungen während des Wettbewerbs
  • nicht mehr als 2 erfolgreiche Entscheidungen pro Tag
  • Zählen Sie nicht zum täglichen Limit von Entscheidungen, deren Überprüfung fehlgeschlagen ist

Der Preisfonds entspricht der Komplexität der Aufgabe: Die ersten drei Plätze erhalten 1 Million Rubel!

2. Ansätze zur Erstellung von Versgeneratoren


Wie bereits klar geworden ist, ist die Aufgabe nicht trivial, aber nicht neu. Versuchen wir herauszufinden, wie die Forscher dieses Problem zuvor angegangen sind. Schauen wir uns die interessantesten Ansätze zur Schaffung von Poesiegeneratoren der letzten 30 Jahre an.

1989
Scientific American N08, 1989 veröffentlichte einen Artikel von A.K. Dyudney "Der Computer versucht sich an Prosa und Poesie." Wir werden den Artikel nicht nacherzählen, es gibt einen Link zum vollständigen Text, wir möchten Ihre Aufmerksamkeit nur auf die Beschreibung des POESIE-GENERATORS von Rosemary West lenken.

Dieser Generator war vollautomatisch. Dieser Ansatz basiert auf einem großen Wörterbuch, aus dem Phrasen zufällig ausgewählt werden und aus denen Phrasen nach einer Reihe von grammatikalischen Regeln gebildet werden. Jede Zeile wird in Teile des Satzes unterteilt und dann zufällig durch andere Wörter ersetzt.

1996
Vor mehr als 20 Jahren verteidigte ein Absolvent einer bekannten Moskauer Universität ein Diplom zum Thema „ Sprachmodellierung und künstliche Intelligenz“: Autor - Leonid Kaganov . Hier ist der Link zum Volltext.
"Sprachmodellierung und künstliche Intelligenz" - das klingt so
der Name meines Themas. „Ein Programm, das Poesie komponiert“ - so antworte ich
Fragen von Freunden. "Aber haben Sie schon solche Programme?" - Sie sagen es mir. "Ja", erwidere ich, "aber meine unterscheidet sich darin, dass sie nicht die Originalvorlagen verwendet."
(c) Kaganov L.A.

Bis 1996 wurden solche Generatoren wie:

  • BRED.COM erstellt eine pseudowissenschaftliche Phrase
  • TREPLO.EXE generiert lustigen literarischen Text
  • POET.EXE Verse mit einem bestimmten Rhythmus komponieren
  • DUEL.EXE

„Zum Beispiel enthält POET.EXE ein Wörterbuch mit Wörtern mit Akzenten und einigen anderen Informationen darüber, legt den Rhythmus fest und gibt an, welche Zeilen gereimt werden sollen (z. B. 1 und 4). Und all diese Programme haben eine gemeinsame Eigenschaft: Sie verwenden Vorlagen und vorbereitete Wörterbücher. “

Als Hauptvorteile können wir die Tatsache hervorheben, dass das Programm:

  • nutzt assoziative Erfahrung
  • führt das Reimen unabhängig durch
  • hat die Möglichkeit einer thematischen Komposition
  • ermöglicht es Ihnen, einen beliebigen Rhythmus des Verses einzustellen

Den Algorithmus und Code finden Sie hier.

2016

"Chinesische Poesiegeneration mit planungsbasiertem neuronalen Netz"



Wissenschaftler aus China schreiben Gedichte in ihrer eigenen Sprache. Sie haben ein Live-Projekt- Repository , das im aktuellen Wettbewerb nützlich sein kann.

Wenn sehr kurz, dann funktioniert es so ( Link zur Quelle des Bildes ):

Bild

Aktuelle Poesie generieren


Ebenfalls im Jahr 2016 präsentierte eine andere Gruppe ihre Entwicklung Hafez (Repository hier ).

Dieser Generator „komponiert“ Verse zu einem bestimmten Thema mit:

  • Akzentuiertes Wörterbuch
  • Verwandte Wörter
  • Reime Wörter aus einer Reihe von Wörtern zu einem Thema
  • Finite-State-Akzeptor (FSA)
  • Mit RNN den besten Weg durch die FSA wählen

Ihr Algorithmus ( Link zur Bildquelle ):

Bild

Sie unterrichteten den Algorithmus nicht nur auf Englisch, sondern auch auf Spanisch. Sie versprechen, dass fast überall alles funktionieren sollte. Die Aussage ist ziemlich laut, daher empfehlen wir Ihnen, vorsichtig zu sein.

2017
Am Ende möchte ich einen sehr detaillierten Artikel über Habr erwähnen: "Wie Sie Ihrem neuronalen Netzwerk beibringen, Verse zu generieren . " Wenn Sie sich noch nie mit solchen Modellen befasst haben, dann sind Sie hier. Dort über einen Generator von Gedichten über Neuronochki: über Sprachmodelle, N-Gramm-Sprachmodelle, über die Bewertung von Sprachmodellen, darüber, wie man Architektur archiviert und die Eingabe- und Ausgabeschicht verfeinert.

So wird dem Wort beispielsweise ein morphologisches Markup hinzugefügt ( Link zur Bildquelle ):
Bild


Dieser Artikel wurde gemeinsam mit Ilya Gusev verfasst, die über eine Bibliothek zur Analyse und Erzeugung von Gedichten in russischer Sprache und ein poetisches Korpus der russischen Sprache verfügt .


3. Programmieren eines künstlichen Dichters


Ein Beispiel für einen einfachen poetischen Generator


Die Konkurrenz mag einerseits ziemlich kompliziert erscheinen, aber für ihn ist es durchaus möglich, eine einfache, aber funktionierende Basislinie zu erstellen .

Je nach Bedingung werden die Kennung des Autors (author_id) und der Text des Themas (seed) in die Eingabe dieses Programms eingegeben. Als Reaktion darauf sollte das Modell das Gedicht zurückgeben.

Versuchen wir, das Thema so zu formalisieren, dass es innerhalb eines bestimmten vektorsemantischen Raums sicher bearbeitet werden kann. Der einfachste Ausweg besteht darin, den semantischen Vektor jedes Wortes (z. B. Word2Vec) abzurufen und dann zu mitteln.
So erhalten wir eine Art „seed2vec“, mit dem wir das Thema in einen Vektor übersetzen können.

In der Tat eröffnet dies ein breites Thema für die Forschung, wie Das Problem der Isolierung des Themas besteht seit langem bei Wissenschaftlern. Hier nur einige Beispiele:

- Hervorheben von Themen durch LDA
- lda2vec
- sent2vec
- Massenvernichtungswaffen

Jetzt müssen Sie verstehen, wie Sie mit author_id ein Gedicht genau im Stil dieses Autors erstellen.

Hier ist die Idee nicht weniger einfach: Nehmen wir das zufällige Gedicht eines Autors aus dem Gedichtkörper, wonach wir jedes Wort durch ein anderes ersetzen, das dem Original am besten entspricht (die gleiche Anzahl von Silben, die gleiche Betonung und die letzten drei Buchstaben sind dem Original in Levenshtein-Entfernung so ähnlich wie möglich) und Es hat den ähnlichsten Vektor wie der Themenvektor. Für das Thema „Fußball“ und die Zeile „Und es leuchtete wie Bernstein“ könnte die Ausgabezeile beispielsweise „Und wie ein Torhüter gespielt“ lauten. So erhalten wir eine Art Stilisierung des Textes.

Als Wortbasis für den Ersatz wurde ein Datensatz verwendet, der kleine Absätze von Texten aus Wikipedia enthält (eine Beschreibung seiner Verwendung finden Sie im Basiscode auf GitHub).

Nach dieser Verarbeitung werden Texte erhalten, die wie Gedichte des Autors aussehen, aber gleichzeitig ein Thema enthalten, das der Autor nicht festgelegt hat.

Das Ergebnis der Basislinie:
Thema: Physik
Stil: Block

Blei und Wismut-Einheiten
Büffel der alten nichtlinearen Medien
Ich bin auf einer Kelvin-Spanplatte
Ihre Phänomene Ihr wissenschaftliches Nach
Faraday Sevilla Kakerlake
sein tver erfindet jetzt
mittlere Phononengravitation
Positron Ghost School Rauch

Thema: Mathematik
Stil: Block

wie eine Tasse Labore unter Ideen
gebogen und Schule lernen
aber eine Herde eine Herde im Kreativitätsstudium
Kurve für Beispiele Gehirnkinder
Der Schwimmer kennt die Kurven
und die Planke wird passieren und das Gericht wird zum Senat gehen
die Tochter einer Brunft, je älter die Goba
und Surya gefährdet
Schwimmer studiert alle Schatten über Euklidisch
Titel wird veröffentlicht und Quoten
es mit Arbeit zu meistern
Professor pädagogischer Witz

Offensichtlich ist die Basislinie nicht perfekt, und so ist es die Basislinie.

Sie können ganz einfach einige Funktionen hinzufügen, die dazu beitragen, die Generierung gut zu verbessern und Sie an die Spitze zu bringen:

  • Sie müssen doppelte Wörter entfernen, da es für einen guten Dichter nicht gut ist, ein Wort auf sich selbst zu reimen
  • Jetzt sind die Wörter in keiner Weise miteinander konsistent, weil Wir verwenden keine Informationen über Wortarten und Wortfälle
  • Sie können eine umfangreichere Wortgruppe verwenden, z. B. einen Wikipedia-Speicherauszug
  • Die Verwendung anderer Einbettungen kann ebenfalls verbessert werden. FastText funktioniert beispielsweise nicht auf der Ebene von Wörtern, sondern auf der Ebene von n-Gramm, wodurch unbekannte Wörter eingebettet werden können
  • Verwenden Sie IDF als Gewicht beim Wiegen von Wörtern, um den Themenvektor zu berechnen

Hier können Sie nach eigenem Ermessen viele weitere Punkte hinzufügen.

Vorbereitung einer Versandlösung


Nach dem Training des Modells muss der in das ZIP-Archiv gepackte Algorithmuscode an das Testsystem gesendet werden.

Lösungen, die in einer isolierten Umgebung mit Docker ausgeführt werden, Zeit und Ressourcen zum Testen sind begrenzt. Die Lösung muss die folgenden technischen Anforderungen erfüllen:

Es sollte in Form eines HTTP-Servers vorliegen, der an Port 8000 verfügbar ist und auf zwei Arten von Anforderungen reagiert:

GET /ready 

Die Anfrage muss mit dem Code 200 OK beantwortet werden, wenn die Lösung einsatzbereit ist. Jeder andere Code bedeutet, dass die Lösung noch nicht fertig ist. Der Algorithmus hat eine begrenzte Zeit für die Vorbereitung der Arbeit, für die Sie Daten von der Festplatte lesen und die erforderlichen Datenstrukturen im RAM erstellen können.

 POST /generate/<poet_id> 

Bitte um ein Gedicht. Die Kennung des Dichters, in dessen Stil er komponieren muss, ist in der URL angegeben. Der Inhalt der Anfrage ist JSON mit einem einzelnen Startfeld, das das Thema des Aufsatzes enthält:

 {"seed": "   "} 

Als Antwort müssen Sie JSON die generierte Komposition im Gedichtfeld in der vorgegebenen Zeit geben:

 {"poem": "   \n   \n..."} 

Die Anforderung und Antwort muss den Inhaltstyp: application / json haben. Eine UTF-8-Codierung wird empfohlen.

Der Behälter mit der Lösung startet unter folgenden Bedingungen:
- Ressourcen, die der Lösung zur Verfügung stehen:
- 16 GB RAM
- 4 vCPU
- GPU Nvidia K80
- Die Lösung hat keinen Zugriff auf Internetressourcen
- Eine Lösung im Verzeichnis / data / verfügt über gemeinsam genutzte Datensätze
- Vorbereitungszeit für die Arbeit: 120 Sekunden (danach müssen 200 mit der Anfrage / ready beantwortet werden)
- Zeit pro Anfrage / generieren /: 5 Sekunden
- Die Lösung sollte HTTP-Anforderungen von externen Computern akzeptieren (nicht nur localhost / 127.0.0.1).
- Während des Tests werden Anfragen nacheinander gestellt (nicht mehr als eine Anfrage gleichzeitig).
- Die maximale Größe eines gepackten und entpackten Archivs mit einer Lösung: 10 GB

Das erzeugte Gedicht muss dem Format entsprechen:

- Versgröße - von 3 bis 8 Zeilen
- Jede Zeile enthält nicht mehr als 120 Zeichen
- Zeilen werden durch \ n getrennt
- Leerzeilen werden ignoriert

Die Länge des Betreffs (Startwert) darf 1000 Zeichen nicht überschreiten.

Während des Testens werden nur die Stile der 5 oben aufgeführten ausgewählten Dichter verwendet.

Detaillierte Informationen zum Senden der Lösung an das System mit Analyse der häufigsten Fehler finden Sie hier .

4. Hackathon-Plattform


Eine Plattform mit allen notwendigen Informationen zu diesem Wettbewerb finden Sie unter classic.sberbank.ai . Detaillierte Regeln finden Sie hier . Im Forum erhalten Sie eine Antwort sowohl auf die Aufgabe als auch auf technische Fragen, falls etwas schief geht.

Bild

Kreative Wettbewerbe für ML-Modelle sind nicht einfach. Viele Menschen haben sich der Aufgabe gestellt, Poesie zu generieren, aber es gibt noch keinen signifikanten Durchbruch. Bereits jetzt nehmen Teilnehmer aus ganz Russland auf unserer classic.sberbank.ai-Plattform an dieser schwierigen Aufgabe teil. Wir hoffen, dass die Entscheidungen der Gewinner alle zuvor getroffenen Entscheidungen übertreffen werden!

5. Referenzen


Source: https://habr.com/ru/post/de419745/


All Articles