
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.
1989Scientific 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.
1996Vor 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. 2016Wissenschaftler 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 ):
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 ):
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.
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-
MassenvernichtungswaffenJetzt 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.
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