
Maintenant, dans la presse, il y a souvent des nouvelles comme «AI a appris à écrire dans le style de l'auteur X» ou «ML crée de l'art». En regardant cela, nous avons décidé - ce serait formidable si ces déclarations de grande envergure pouvaient être vérifiées dans la pratique.
Est-il possible d'organiser un combat entre robots pour écrire des poèmes? Une histoire compétitive peut-elle être rendue claire et reproductible à partir de cela? Maintenant, nous pouvons dire avec certitude que cela est possible. Et comment écrire votre premier algorithme pour générer des poèmes, lisez la suite.
1. AI classique
La tâche des participants
Selon les termes du concours, les participants doivent construire un modèle qui génère des poèmes sur un sujet donné dans le style de l'un des classiques russes. Le sujet et l'auteur sont présentés avec des modèles d'entrée, et un poème est attendu à la sortie. La description complète se trouve dans
le référentiel du concours.
Les conditions sont souples avec le sujet: il peut s'agir d'une courte phrase, d'une phrase ou de quelques mots. La seule restriction concerne la taille: pas plus de 1000 caractères. Les sujets sur lesquels les algorithmes seront testés seront compilés par des experts. Certains sujets seront ouverts et publics, mais un ensemble caché de sujets sera utilisé pour déterminer le meilleur algorithme.
L'idée globale du concours est la suivante: une courte annotation de plusieurs mots peut être compilée pour n'importe quel poème. Montrons un exemple.
Si vous prenez un extrait de
"Eugene Onegin" A.S. Pouchkine :
"... Cette année-là, le temps d'automne
Je suis resté longtemps dans la cour
L'hiver attendait, la nature attendait.
La neige n'est tombée qu'en janvier
La troisième nuit. Se réveiller tôt
Tatiana a vu par la fenêtre
Le matin, la cour blanchie
Rideaux, toits et clôture,
Motifs lumineux sur le verre
Arbres en argent d'hiver
Quarante amusements dans la cour
Et des montagnes doucement parsemées
Hiver avec un tapis brillant.
Tout est clair, tout est blanc tout autour ... "1823-1830
Voilà un bref résumé de celui-ci peut être adapté dans "Tatiana voit la première neige à travers la fenêtre." Et puis le modèle poétique idéal pour cette entrée produira quelque chose de très proche de l'original.
Pour la formation à ce concours, un
ensemble de
données de plus de 3000 œuvres de cinq poètes russes célèbres est proposé:
1. Pouchkine
2. Yesenin
3. Mayakovsky
4. Bloquer
5. Tyutchev
L'algorithme doit être écrit de manière à générer suffisamment rapidement et à avoir l'interface nécessaire. En termes de vitesse, vous pouvez égaler la puissance des PC modernes de taille moyenne. L'interface et les restrictions sont décrites en détail dans la section «Format de la solution».
Afin de pouvoir suivre l'avancement de leurs décisions, ainsi que de les comparer avec d'autres décisions des participants, le balisage des décisions via le chat bot aura lieu tout au long de la compétition. Les résultats des algorithmes seront évalués selon deux critères:
- La qualité de la versification et le style d'un poète classique donné
- L'intégralité de la divulgation d'un sujet donné dans un poème
Une échelle de 5 points sera fournie pour chaque critère. L'algorithme devra composer des versets pour chaque sujet de la suite de tests. Les sujets sur lesquels les algorithmes seront testés seront compilés par des experts. Certains sujets seront ouverts et accessibles, mais un ensemble caché de sujets sera utilisé pour identifier le meilleur algorithme.
Le poème obtenu à la suite de l'algorithme peut être rejeté pour les raisons suivantes:
- le texte généré n'est pas un poème en russe
- le texte généré contient un langage grossier
- le texte généré contient des phrases ou des sous-textes offensants inclus intentionnellement
Programme de compétition
Contrairement à beaucoup, dans cette compétition, il n'y a qu'une seule étape en ligne: du 30.07 au 26.08.
Pendant cette période, vous pouvez envoyer des solutions quotidiennement avec les restrictions suivantes:
- pas plus de 200 décisions pendant la compétition
- pas plus de 2 décisions réussies par jour
- ne compte pas dans la limite quotidienne des décisions dont la vérification a échoué
La dotation correspond à la complexité de la tâche: les trois premières places recevront 1 million de roubles!
2. Approches pour créer des générateurs de vers
Comme il est déjà devenu clair, la tâche n'est pas anodine, mais pas nouvelle. Essayons de comprendre comment les chercheurs ont abordé ce problème auparavant? Examinons les approches les plus intéressantes pour créer des générateurs de poésie au cours des 30 dernières années.
1989Scientific American N08, 1989 a publié un article de A.K. Dyudney "L'ordinateur s'essaye à la prose et à la poésie." Nous ne reviendrons pas sur l'article, il y a un lien vers le texte intégral, nous voulons juste attirer votre attention sur la description de POETRY GENERATOR de Rosemary West.
Ce générateur était entièrement automatisé. Cette approche est basée sur un grand dictionnaire, dont les phrases sont sélectionnées au hasard, et les phrases sont formées à partir de celles-ci selon un ensemble de règles grammaticales. Chaque ligne est divisée en parties de la phrase, puis remplacée aléatoirement par d'autres mots.
1996Il y a plus de 20 ans, un diplômé d'une université bien connue de Moscou a soutenu un diplôme sur le thème "Modélisation linguistique et intelligence artificielle": auteur -
Leonid Kaganov . Voici le
lien vers le texte intégral.
«Modélisation linguistique et intelligence artificielle» - cela ressemble à ceci
le nom de mon sujet. «Un programme qui compose de la poésie» - c'est ainsi que je réponds
questions d'amis. "Mais avez-vous déjà de tels programmes?" - ils me disent. "Oui," je réponds, "mais le mien est différent en ce qu'il n'utilise pas les modèles originaux."
c) Kaganov L.A.
En 1996, des générateurs tels que:
- BRED.COM créant une phrase pseudoscientifique
- TREPLO.EXE, générant du texte littéraire amusant
- POET.EXE composer des vers avec un rythme donné
- DUEL.EXE
«Par exemple, POET.EXE contient un dictionnaire de mots avec des accents et d'autres informations les concernant, et définit également le rythme et indique les lignes à rimer (par exemple, 1 et 4). Et tous ces programmes ont une propriété commune: ils utilisent des modèles et des dictionnaires pré-préparés. »
Comme principaux avantages, nous pouvons souligner le fait que le programme:
- utilise l'expérience associative
- effectue des rimes indépendamment
- a la possibilité d'une composition thématique
- vous permet de définir n'importe quel rythme du couplet
L'algorithme et le code peuvent être trouvés ici. 2016Les scientifiques chinois produisent des poèmes dans leur propre langue. Ils ont un
référentiel de projets en direct qui peut être utile dans la compétition actuelle.
Si très brièvement, alors cela fonctionne comme ceci (
lien vers la source de l'image ):
Toujours en 2016, un autre groupe a présenté son développement
Hafez (référentiel
ici ).
Ce générateur «compose» des versets sur un sujet donné en utilisant:
- Dictionnaire accentué
- Mots associés
- Rimer des mots à partir d'un ensemble de mots sur un sujet
- Accepteur à états finis (FSA)
- Choisir le meilleur chemin à travers la FSA en utilisant RNN
Leur algorithme (
lien vers la source de l'image ):
Ils ont enseigné l'algorithme non seulement en anglais, mais aussi en espagnol. Ils promettent que tout devrait fonctionner presque partout. La déclaration est assez forte, nous vous recommandons donc de faire attention.
3. Programmation d'un poète artificiel
Un exemple de générateur poétique simple
La compétition d'une part peut sembler assez compliquée, mais pour lui il est tout à fait possible de faire une
ligne de base simple mais fonctionnelle.
Selon la condition, l'identifiant de l'auteur (author_id) et le texte du sujet (seed) entrent dans l'entrée de ce programme, en réponse à cela le modèle devrait retourner le poème.
Essayons de formaliser le sujet afin qu'il puisse être exploité en toute sécurité dans un certain espace sémantique vectoriel. Le moyen le plus simple est d'obtenir le vecteur sémantique de chaque mot (par exemple, Word2Vec), puis de les faire la moyenne.
Ainsi, nous obtenons une sorte de «seed2vec», qui nous permet de traduire le thème en vecteur.
En fait, cela ouvre un vaste sujet de recherche, comme Le problème de l'isolement du sujet est confronté depuis longtemps aux scientifiques, en voici quelques exemples:
-
Mise en évidence des sujets via LDA-
lda2vec-
sent2vec-
WMDMaintenant, vous devez comprendre comment utiliser author_id pour générer un poème exactement dans le style de cet auteur.
Ici, l'idée n'est pas moins simple: prenons un poème aléatoire d'un auteur du corpus de poèmes, après quoi nous remplacerons chaque mot par un autre qui correspond le mieux à l'original (a le même nombre de syllabes, le même accent et les trois dernières lettres sont aussi similaires que possible à l'original en termes de distance de Levenshtein) et il a le vecteur le plus similaire au vecteur de thème. Par exemple, pour le sujet «Football» et la ligne «Et ça brillait comme de l'ambre», la ligne de sortie pourrait être «Et joué comme un gardien de but». On obtient ainsi une sorte de stylisation du texte.
Comme base de mots pour le remplacement, un ensemble de données a été utilisé qui contient de petits paragraphes de textes Wikipédia (une description de son utilisation peut être trouvée dans le code de base sur GitHub).
Après ce traitement, on obtiendra des textes qui ressembleront à de la poésie de l'auteur, mais qui contiennent en même temps un sujet que l'auteur n'a pas défini.
Le résultat de la ligne de base:
Sujet: Physique
Style: Bloc
unités de plomb et de bismuth
buffle des anciens médias non linéaires
je suis sur un panneau de particules kelvin
vos phénomènes votre scientifique après
Faraday Seville Cockroach
son tver invente maintenant
gravité moyenne des phonons
fumée de l'école fantôme positron
Thème: Mathématiques
Style: Bloc
comme une tasse de laboratoires parmi les idées
courbe et apprendre à l'école
mais un troupeau un troupeau dans l'étude de la créativité
courbe pour les exemples des enfants du cerveau
le nageur connaît les courbes
et la planche passera et la cour ira au Sénat
que la fille d'une ornière le plus ancien du goba
et Surya en danger
nageur étudie toute l'ombre euclidienne
le titre est publié et les quotas
la maîtriser avec le travail
blague éducative professeur
De toute évidence, la ligne de base n'est pas parfaite, et c'est donc la ligne de base.
Vous pouvez facilement ajouter quelques fonctionnalités qui aideront à bien améliorer la génération et à vous hisser au sommet:
- Vous devez supprimer les mots en double, car rimer un mot sur lui-même n'est pas idéal pour un bon poète
- Maintenant, les mots ne sont en aucun cas cohérents les uns avec les autres, car nous n'utilisons pas d'informations sur les parties du discours et les cas de mots
- Vous pouvez utiliser un corps de mots plus riche, par exemple, un vidage Wikipedia
- L'utilisation d'autres intégrations peut également s'améliorer, par exemple, FastText ne fonctionne pas au niveau des mots, mais au niveau des n-grammes, ce qui lui permet d'incorporer des mots inconnus
- Utilisez IDF comme poids lors de la pesée des mots pour calculer le vecteur du sujet
Ici, vous pouvez ajouter beaucoup plus de points, à votre discrétion.
Préparer une solution pour l'expédition
Une fois le modèle formé, il est nécessaire d'envoyer le code de l'algorithme compressé dans l'archive ZIP au système de test.
Les solutions s'exécutent dans un environnement isolé à l'aide de Docker, le temps et les ressources pour les tests sont limités. La solution doit répondre aux exigences techniques suivantes:
Il doit se présenter sous la forme d'un serveur HTTP disponible sur le port 8000, qui répond à deux types de requêtes:
GET /ready
Il faut répondre à la demande avec le code 200 OK si la solution est prête à l'emploi. Tout autre code signifie que la solution n'est pas encore prête. L'algorithme a un temps limité pour la préparation au travail, pour lequel vous pouvez lire les données du disque, créer les structures de données nécessaires dans la RAM.
POST /generate/<poet_id>
Demande de générer un poème. L'identifiant du poète dans le style duquel il faut composer est indiqué dans l'URL. Le contenu de la demande est JSON avec un seul champ de départ contenant le sujet de l'essai:
{"seed": " "}
En réponse, vous devez donner JSON avec la composition générée dans le champ poème dans le temps imparti:
{"poem": " \n \n..."}
La demande et la réponse doivent avoir Content-Type: application / json. Le codage UTF-8 est recommandé.
Le récipient contenant la solution démarre dans les conditions suivantes:- ressources disponibles pour la solution:
- 16 Go de RAM
- 4 processeurs virtuels
- GPU Nvidia K80
- la solution n'a pas accès aux ressources Internet
- une solution dans le répertoire / data / a des ensembles de données partagés
- temps de préparation au travail: 120 secondes (après quoi il faut répondre 200 avec la demande / ready)
- temps par requête / générer /: 5 secondes
- la solution doit accepter les requêtes HTTP provenant de machines externes (non seulement localhost / 127.0.0.1)
- pendant les tests, les demandes sont faites séquentiellement (pas plus d'une demande à la fois)
- la taille maximale d'une archive compressée et décompressée avec une solution: 10 Go
Le poème généré doit respecter le format:
- taille du verset - de 3 à 8 lignes
- chaque ligne ne contient pas plus de 120 caractères
- les lignes sont séparées par \ n
- les lignes vides sont ignorées
La longueur du thème du sujet (graine) ne dépasse pas 1 000 caractères.
Pendant les tests, seuls les styles des 5 poètes sélectionnés répertoriés ci-dessus sont utilisés.
Des informations détaillées sur l'envoi de la solution au système avec analyse des erreurs les plus courantes sont disponibles
ici .
4. Plateforme Hackathon
Une plate-forme contenant toutes les informations nécessaires sur ce concours se trouve sur
classic.sberbank.ai . Les règles détaillées peuvent être trouvées
ici . Sur le forum, vous pouvez obtenir une réponse à la fois sur la tâche et sur les problèmes techniques, en cas de problème.
Les compétitions créatives pour les modèles ML ne sont pas faciles. Beaucoup de gens ont abordé la tâche de générer de la poésie, mais il n'y a pas encore de percée significative. Déjà maintenant, sur notre plate-forme classic.sberbank.ai, les participants de toute la Russie sont en compétition dans cette tâche difficile. Nous espérons que les décisions des gagnants dépasseront toutes les décisions créées plus tôt!
5. Références