Genre AI klasik: ML mencari dirinya dalam puisi

gambar Sekarang di pers sering ada berita seperti "AI belajar menulis dengan gaya penulis X", atau "ML menciptakan seni." Melihat ini, kami memutuskan - alangkah baiknya jika pernyataan profil tinggi ini dapat diverifikasi dalam praktiknya.

Apakah mungkin untuk mengatur pertarungan antara bot untuk menulis puisi? Bisakah cerita yang kompetitif dibuat jelas dan direproduksi dari ini? Sekarang kita dapat mengatakan dengan pasti bahwa ini mungkin. Dan bagaimana cara menulis algoritma pertama Anda untuk menghasilkan puisi, baca terus.



1. AI Klasik


Tugas para peserta


Menurut ketentuan kompetisi, peserta perlu membangun model yang menghasilkan puisi pada topik tertentu dengan gaya salah satu klasik Rusia. Subjek dan penulis disajikan dengan model untuk input, dan sebuah puisi diharapkan pada output. Deskripsi lengkap ada di repositori kontes.

Syaratnya lunak dengan topik: bisa berupa kalimat pendek, frasa atau beberapa kata. Satu-satunya batasan adalah pada ukuran: tidak lebih dari 1000 karakter. Topik di mana algoritma akan diuji akan dikompilasi oleh para ahli. Beberapa topik akan terbuka dan terbuka untuk umum, tetapi serangkaian topik tersembunyi akan digunakan untuk menentukan algoritma terbaik.

Gagasan global dari kompetisi adalah ini: anotasi singkat dari beberapa kata dapat dikompilasi untuk puisi apa pun. Mari kita tunjukkan sebuah contoh.

Jika Anda mengambil kutipan dari "Eugene Onegin" A.S. Pushkin :
"... Tahun itu, cuaca musim gugur
Saya berdiri lama di halaman
Musim dingin menunggu, alam menunggu.
Salju turun hanya pada bulan Januari
Di malam ketiga. Bangun lebih awal
Tatyana melihat melalui jendela
Di pagi hari halaman memutih
Tirai, atap dan pagar,
Pola cahaya pada kaca
Pohon berwarna perak musim dingin
Empat puluh kesenangan di halaman
Dan gunung-gunung berserakan dengan lembut
Musim dingin dengan karpet yang cemerlang.
Semuanya cerah, semuanya putih di sekitar ... "1823-1830
Itu adalah ringkasan singkat tentang itu yang bisa dimasukkan dalam "Tatyana melihat salju pertama melalui jendela." Dan kemudian model puitis yang ideal untuk input ini akan menghasilkan sesuatu yang sangat dekat dengan aslinya.

Untuk pelatihan dalam kompetisi ini, dataset lebih dari 3000 karya lima penyair Rusia terkenal diusulkan:

1. Pushkin
2. Yesenin
3. Mayakovsky
4. Blokir
5. Tyutchev

Algoritma harus ditulis sehingga menghasilkan cukup cepat dan memiliki antarmuka yang diperlukan. Dalam hal kecepatan, Anda dapat menyamai kekuatan PC modern berukuran sedang. Antarmuka dan pembatasan dijelaskan secara rinci di bagian "Format Solusi".

Agar dapat melacak kemajuan keputusan mereka, serta membandingkannya dengan keputusan peserta lainnya, markup keputusan melalui obrolan bot akan berlangsung di seluruh kompetisi. Hasil algoritma akan dievaluasi berdasarkan dua kriteria:

  • Kualitas versifikasi dan gaya penyair klasik yang diberikan
  • Kelengkapan pengungkapan topik yang diberikan dalam sebuah puisi

Skala 5 poin akan disediakan untuk setiap kriteria. Algoritma harus menyusun ayat untuk setiap topik dari test suite. Topik di mana algoritma akan diuji akan dikompilasi oleh para ahli. Beberapa topik akan terbuka dan dapat diakses, tetapi serangkaian topik tersembunyi akan digunakan untuk mengidentifikasi algoritma terbaik.

Puisi yang diperoleh sebagai hasil dari algoritma dapat ditolak karena alasan berikut:

  • teks yang dihasilkan bukan puisi dalam bahasa Rusia
  • teks yang dihasilkan berisi bahasa kotor
  • teks yang dihasilkan berisi frasa atau subteks ofensif yang sengaja dimasukkan

Program kompetisi


Tidak seperti banyak orang, dalam kompetisi ini hanya ada satu panggung online: dari 30,07 hingga 26,08.

Selama periode ini, Anda dapat mengirim solusi setiap hari dengan batasan berikut:

  • tidak lebih dari 200 keputusan selama kompetisi
  • tidak lebih dari 2 keputusan sukses per hari
  • jangan menghitung batas keputusan harian yang verifikasi gagal

Dana hadiah sesuai dengan kompleksitas tugas: tiga tempat pertama akan menerima 1 juta rubel!

2. Pendekatan untuk membuat generator ayat


Seperti yang sudah jelas, tugas itu tidak sepele, tetapi bukan hal baru. Mari kita coba mencari tahu bagaimana para peneliti mendekati masalah ini sebelumnya? Mari kita lihat pendekatan yang paling menarik untuk membuat generator puisi selama 30 tahun terakhir.

1989
Scientific American N08, 1989 menerbitkan sebuah artikel oleh A.K. Dyudney "Komputer sedang mencoba prosa dan puisi." Kami tidak akan menceritakan kembali artikel, ada tautan ke teks lengkap, kami hanya ingin menarik perhatian Anda pada deskripsi POETRY GENERATOR dari Rosemary West.

Generator ini sepenuhnya otomatis. Pendekatan ini didasarkan pada kamus besar, frasa yang dipilih secara acak, dan frasa dibentuk dari mereka sesuai dengan seperangkat aturan tata bahasa. Setiap baris dibagi menjadi beberapa bagian kalimat, dan kemudian diganti secara acak dengan kata lain.

1996
Lebih dari 20 tahun yang lalu, seorang lulusan dari sebuah universitas terkenal di Moskow membela sebuah diploma dengan topik “Pemodelan linguistik dan kecerdasan buatan”: penulis - Leonid Kaganov . Inilah tautan ke teks lengkap.
"Pemodelan linguistik dan kecerdasan buatan" - kedengarannya seperti ini
nama topik saya. “Program yang mengarang puisi” - ini yang saya jawab
pertanyaan dari teman. "Tapi apakah kamu sudah memiliki program seperti itu?" - mereka memberitahuku. "Ya," jawab saya, "tetapi milik saya berbeda karena tidak menggunakan templat asli."
(c) Kaganov L.A.

Pada tahun 1996, generator seperti:

  • BRED.COM membuat frase ilmiah semu
  • TREPLO.EXE, menghasilkan teks sastra yang menyenangkan
  • POET.EXE menyusun ayat-ayat dengan ritme yang diberikan
  • DUEL.EXE

"Misalnya, POET.EXE berisi kamus kata-kata dengan aksen dan beberapa informasi lain tentang mereka, dan juga mengatur ritme dan menunjukkan baris mana yang berima (misalnya, 1 dan 4). Dan semua program ini memiliki satu properti yang sama - mereka menggunakan template dan kamus yang sudah disiapkan. "

Sebagai keuntungan utama, kita dapat menyoroti fakta bahwa program ini:

  • menggunakan pengalaman asosiatif
  • melakukan berima secara mandiri
  • memiliki kemungkinan komposisi tematik
  • memungkinkan Anda untuk mengatur ritme dari ayat tersebut

Algoritma dan kode dapat ditemukan di sini.

2016

"Generasi Puisi Tiongkok dengan Jaringan Syaraf Berbasis Perencanaan"



Para ilmuwan dari Tiongkok menghasilkan puisi dalam bahasa mereka sendiri. Mereka memiliki repositori proyek langsung yang mungkin berguna dalam kompetisi saat ini.

Jika sangat singkat, maka berfungsi seperti ini ( tautan ke sumber gambar ):

gambar

Menghasilkan Puisi Topikal


Juga di tahun 2016, grup lain mempresentasikan pengembangan mereka Hafez (repositori di sini ).

Generator ini "menyusun" ayat-ayat tentang topik yang diberikan menggunakan:

  • Kamus beraksen
  • Kata-kata terkait
  • Berima kata-kata dari serangkaian kata pada suatu topik
  • Akseptor negara terbatas (FSA)
  • Memilih cara terbaik melalui FSA menggunakan RNN

Algoritma mereka ( tautan ke sumber gambar ):

gambar

Mereka mengajarkan algoritma tidak hanya dalam bahasa Inggris, tetapi juga dalam bahasa Spanyol. Mereka berjanji bahwa semuanya akan bekerja hampir di mana-mana. Pernyataan itu cukup keras, jadi kami sarankan Anda berhati-hati.

2017
Pada akhirnya, saya ingin menyebutkan artikel yang sangat rinci tentang Habr "Bagaimana cara mengajar jaringan saraf Anda untuk menghasilkan ayat . " Jika Anda belum pernah berurusan dengan model seperti itu, maka inilah Anda. Di sana, tentang generator puisi tentang neuronochki: tentang model bahasa, model bahasa N-gram, tentang mengevaluasi model bahasa, tentang cara membuat arsitektur dan memperbaiki input dan output layer.

Misalnya, ini adalah bagaimana markup morfologis ditambahkan ke kata ( tautan ke sumber gambar ):
gambar


Artikel itu ditulis bersama dengan Ilya Gusev, yang memiliki perpustakaan untuk menganalisis dan menghasilkan puisi dalam bahasa Rusia dan corpus puitis dari bahasa Rusia .


3. Memprogram seorang penyair buatan


Contoh generator puitis sederhana


Persaingan di satu sisi mungkin terlihat cukup rumit, tetapi baginya sangat mungkin untuk membuat garis dasar yang sederhana tetapi berfungsi.

Menurut kondisi tersebut, pengidentifikasi penulis (author_id) dan teks topik (seed) memasukkan input dari program ini, sebagai tanggapan terhadap hal ini model harus mengembalikan puisi itu.

Mari kita coba memformalkan topik sehingga dapat dioperasikan dengan aman dalam ruang semantik vektor tertentu. Cara termudah dari ini adalah untuk mendapatkan vektor semantik dari setiap kata (misalnya, Word2Vec) dan kemudian rata-rata.
Jadi, kita mendapatkan semacam “seed2vec”, yang memungkinkan kita untuk menerjemahkan tema menjadi vektor.

Bahkan, ini membuka topik luas untuk penelitian, seperti Masalah mengisolasi topik telah dihadapi para ilmuwan sejak lama, berikut adalah beberapa contohnya:

- Menyoroti topik melalui LDA
- lda2vec
- sent2vec
- WMD

Sekarang, Anda perlu memahami cara menggunakan author_id untuk menghasilkan puisi persis dengan gaya penulis ini.

Di sini idenya tidak kurang sederhana: mari kita ambil puisi acak penulis dari kumpulan ayat, setelah itu kita akan mengganti setiap kata dengan yang paling sesuai dengan aslinya (memiliki jumlah suku kata yang sama, tekanan yang sama dan tiga huruf terakhir sama mungkin dengan aslinya dalam hal jarak Levenshtein) dan ia memiliki vektor yang paling mirip dengan vektor tema. Misalnya, untuk topik "Sepak Bola" dan garis "Dan itu bersinar seperti kuning", garis keluaran bisa menjadi "Dan dimainkan seperti kiper". Dengan demikian, kami mendapatkan semacam styleisasi teks.

Sebagai dasar kata-kata untuk penggantian, dataset digunakan yang berisi paragraf kecil dari teks Wikipedia (deskripsi penggunaannya dapat ditemukan dalam kode dasar di GitHub).

Setelah pemrosesan ini, teks akan diperoleh yang akan terlihat seperti puisi oleh penulis, tetapi pada saat yang sama berisi topik yang tidak dituliskan penulis.

Hasil baseline:
Topik: Fisika
Style: Block

unit memimpin dan bismut
kerbau dari media nonlinear kuno
Saya di papan partikel kelvin
Fenomena Anda setelah ilmiah Anda
Faraday Seville Cockroach
tvernya sekarang inventing
gravitasi fonon sedang
asap sekolah hantu positron

Tema: Matematika
Style: Block

seperti gelas laboratorium di antara ide-ide
sekolah melengkung dan belajar
tetapi kawanan kawanan dalam studi kreativitas
kurva untuk contoh anak-anak otak
perenang tahu kurva
dan papan akan berlalu dan pengadilan akan pergi ke Senat
dari pada anak perempuan dari kebiasaan yang lebih kuno goba
dan Surya terancam punah
Perenang mempelajari semua bayangan tentang Euclidean
judul diterbitkan dan kuota
menguasainya dengan kerja keras
gurau gurau pendidikan

Jelas, garis dasar tidak sempurna, sehingga garis dasar.

Anda dapat dengan mudah menambahkan beberapa fitur yang akan membantu meningkatkan generasi dengan baik dan meningkatkan Anda di puncak:

  • Anda perlu menghapus kata-kata rangkap, karena menyanyikan kata sendiri tidak bagus untuk penyair yang baik
  • Sekarang kata-kata itu tidak konsisten satu sama lain, karena kami tidak menggunakan informasi tentang bagian-bagian pidato dan kasus kata-kata
  • Anda dapat menggunakan kata-kata yang lebih kaya, misalnya, sebuah dump Wikipedia
  • Menggunakan embeddings lain juga dapat meningkatkan, misalnya, FastText tidak berfungsi pada level kata, tetapi pada level n-gram, yang memungkinkan embed untuk kata-kata yang tidak dikenal
  • Gunakan IDF sebagai bobot saat menimbang kata untuk menghitung vektor topik

Di sini Anda dapat menambahkan lebih banyak poin, sesuai kebijakan Anda.

Mempersiapkan solusi untuk pengiriman


Setelah model dilatih, perlu untuk mengirim kode algoritma yang dikemas ke dalam arsip ZIP ke sistem pengujian.

Solusi berjalan di lingkungan yang terisolasi menggunakan Docker, waktu dan sumber daya untuk pengujian terbatas. Solusinya harus memenuhi persyaratan teknis berikut:

Itu harus dalam bentuk server HTTP yang tersedia di port 8000, yang merespons dua jenis permintaan:

GET /ready 

Permintaan harus dijawab dengan kode 200 OK jika solusi siap digunakan. Kode lain berarti bahwa solusinya belum siap. Algoritme memiliki waktu terbatas untuk persiapan bekerja, di mana Anda dapat membaca data dari disk, membuat struktur data yang diperlukan dalam RAM.

 POST /generate/<poet_id> 

Permintaan untuk menghasilkan puisi. Identifikasi penyair yang gaya penulisannya perlu ditunjukkan dalam URL. Isi dari permintaan adalah JSON dengan bidang benih tunggal yang berisi subjek esai:

 {"seed": "   "} 

Sebagai jawaban, Anda harus memberikan JSON dengan komposisi yang dihasilkan di bidang puisi dalam waktu yang ditentukan:

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

Permintaan dan respons harus memiliki Tipe-Konten: aplikasi / json. Pengkodean UTF-8 direkomendasikan.

Wadah dengan solusi dimulai pada kondisi berikut:
- sumber daya yang tersedia untuk solusi:
- 16 GB RAM
- 4 vCPU
- GPU Nvidia K80
- solusinya tidak memiliki akses ke sumber daya Internet
- solusi dalam direktori / data / telah berbagi dataset
- waktu persiapan untuk bekerja: 120 detik (setelah itu perlu dijawab 200 dengan permintaan / ready)
- waktu per permintaan / hasil /: 5 detik
- solusinya harus menerima permintaan HTTP dari mesin eksternal (tidak hanya localhost / 127.0.0.1)
- selama pengujian, permintaan dilakukan secara berurutan (tidak lebih dari 1 permintaan sekaligus)
- ukuran maksimum arsip yang dikemas dan dibongkar dengan solusi: 10 GB

Puisi yang dihasilkan harus sesuai dengan format:

- ukuran ayat - dari 3 hingga 8 baris
- setiap baris berisi tidak lebih dari 120 karakter
- garis dipisahkan oleh \ n
- baris kosong diabaikan

Panjang tema (seed) tidak lebih dari 1000 karakter.

Selama pengujian, hanya gaya dari 5 penyair terpilih yang tercantum di atas yang digunakan.

Informasi terperinci tentang pengiriman solusi ke sistem dengan analisis kesalahan paling umum tersedia di sini .

4. Platform Hackathon


Platform dengan semua informasi yang diperlukan tentang kontes ini terletak di classic.sberbank.ai . Aturan terperinci dapat ditemukan di sini . Di forum, Anda bisa mendapatkan jawaban tentang tugas dan masalah teknis, jika terjadi kesalahan.

gambar

Kompetisi kreatif untuk model ML tidak mudah. Banyak orang telah mendekati tugas menghasilkan puisi, tetapi belum ada terobosan yang signifikan. Sekarang, pada platform classic.sberbank.ai kami, peserta dari seluruh Rusia bersaing dalam tugas yang sulit ini. Kami berharap bahwa keputusan para pemenang akan melampaui semua keputusan yang dibuat sebelumnya!

5. Referensi


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


All Articles