Şiir yazma robotu oluşturmak için sadece LSTM'yi kullanın

Lei Feng.com Yapay Zeka Teknolojisi Yorumu: İnsanlar, resim yapmak ve şiir yazmak gibi sinir ağları için yapacak daha çok şey buldu.Microsoft'tan Xiaobing bir şiir koleksiyonu yayınladı. Aslında şiir yazabilen bir sinir ağı yetiştirmek hiç de zor değil.Otomattic'te veri bilimci Carly Stambaugh, hızlı ve kolay bir şekilde şiir yazabilen bir yapay zekanın nasıl oluşturulacağı üzerine bir makale yazdı. Leifeng.com tarafından hazırlanan AI Teknoloji İncelemesinin tam metni aşağıdaki gibidir.

"Kod bir şiirdir", bu WordPress topluluğunun felsefesidir.

Bir kodlayıcı ve bir şair olarak bu cümleyi her zaman sevmişimdir. Ancak, bu cümleyi tersine çevirirsem, şunu sormadan edemem: "Kod aracılığıyla şiir yazabilir miyim? Orijinal şiir yazabilen bir makine yaratabilir miyim?" Bu yüzden keşfetmek için bir dizi deney yaptım Bu sorunun cevabı.

Her şeyden önce hepimiz biliyoruz ki bir makinenin şiir yazmayı öğrenmesini istiyorsak, o zaman önce şiir okumayı öğrenmesi gerekir. 2017 yılı boyunca, WordPress sistemi (https://wordpress.com/tag/poetry) kullanılarak şiir olarak işaretlenmiş 500.000'den fazla gönderi yayınlanmıştır. Eserlerini WordPress aracılığıyla paylaşan bazı üretken şairlerle temasa geçtim ve onlara ilginç bir deneyi tamamlamak için benimle işbirliği yapmak isteyip istemediklerini sordum: makinem çalışmalarını okuyabilir mi, böylece makinem şiirin biçimini ve yapısını öğrenebilir ve sonunda Makine şiir yaratımını kendi başına tamamlasın mı?

  • O, Kenarlar - Robert Okaji (https://robertokaji.com)

  • Wolff Poetry - Linda J. Wolff (

  • Şiir, Kısa Düzyazı ve Yürüyüş - Frank Hubeny (https://frankhubeny.blog)

  • Yaşam, Evren ve Her Şey Üzerine Perspektifler - Aurangzeb Bozdar (https://abozdar.wordpress.com)

LSTM nedir ve nasıl metin oluşturur?

Şiir robotumu oluşturmak için LSTM (Uzun Kısa Süreli Bellek ağı) adlı bir sinir ağı kullandım.

Sinir ağı, bir sorunu hiyerarşik bir yapı aracılığıyla birden çok küçük soruna böler. Örneğin, kareleri tanımak için bir sinir ağını eğitmek istiyorsanız, bir katman dik açıları tanımaktan sorumlu olabilir ve başka bir katman paralel çizgileri tanımaktan sorumlu olabilir. Resmi kare olarak tanımlayabilmek için tüm bu özellikler makine tarafından sunulacaktır. Sinir ağı, bu gerekli özelliklerin parametrelerini öğrenmek için girdi olarak milyonlarca kare resim alarak modeli eğitecek. Makine aynı zamanda resmin hangi özelliklerinin kareleri tanımak için önemli olduğunu ve hangilerinin olmadığını öğrenecektir.

Şimdi, bu iki harfin sonraki harfini tahmin etmek için bir sinir ağı kullanmak istediğinizi varsayalım:

Th_

Bir kişi için bu görev çok basit. Büyük olasılıkla, bir sonraki harfin e olması gerektiğini tahmin edersiniz. Ancak, bahse girerim, eğer İngilizce konuşursanız, bir sonraki harfin q olduğunu tahmin edemezsiniz. Bunun nedeni, çalışarak zaten biliyor olmanızdır: İngilizcede q, th'yi takip etmez. Bir kelimede, önceki harfler, daha sonra hangi harflerin görüneceğini tahmin etmek için son derece önemlidir. Bir LSTM, önceki durumunu "hatırlayabilir" ve ona mevcut karar verme sürecini anlatabilir. LSTM'nin nasıl çalıştığına dair daha derinlemesine bir açıklama için, Google Brain'den Chris Olah'ın bu harika makalesine bakabilirsiniz.

Birçok LSTM tabanlı metin oluşturma vakası gibi, şiir robotum da her seferinde bir karakter oluşturarak metin oluşturur. Bu nedenle, kelimeleri herhangi bir anlamlı üslupla birleştirmek için, şiir robotlarının önce kelimelerin nasıl yapıldığını öğrenmesi gerekir. Bunu başarmak için geçerli kelimelere sahip milyonlarca örnek cümleye ihtiyacı var. Neyse ki, WordPress.com'da tonlarca şiir var.

Veri seti hazırlığı

İlk olarak, yukarıda listelenen tüm web sitelerinden şiirleri Elasticsearch indeksinden taradım. Şiirin metni dışındaki her şeyi temizlemek için çok basit bir kural kullandım (her karşılaştığımda "\ n" karakteri ile önceki "\ n" arasındaki kelime sayısına dayalı). Bir metin parçası çok sayıda kelime içeriyorsa ancak birkaç "\ n" karakter içeriyorsa, bir veya daha fazla paragraftan oluşan bir koleksiyon olabilir. Bununla birlikte, birden çok satıra yayılan bir metin parçasının şiir olma olasılığı daha yüksektir. Bu basit bir yöntem, tabi ki bu kurala uymayan pek çok mükemmel şiir aklıma gelebilir! Bununla birlikte, bu deneyin amacı için, LSTM'nin satır sonları, şiir bölümleri ve diğer kafiye, kafiye, yardımcı kafiye ve aliterasyon gibi şiir yapısını öğrenip öğrenemeyeceğiyle çok ilgileniyorum. Bu nedenle, eğitim verilerini oldukça yapılandırılmış şiirlerle sınırlamak mantıklıdır.

Bir metin parçası bir şiir olarak tanındığında, onu bir metin dosyasına çıkarırım ve yeni bir şiirin başlangıcını belirtmek için "++++ \ n" önekini koyarım. Bunu yapmak yaklaşık 500 KB eğitim verisi oluşturabilir. Genellikle, en az 1MB metin içeren bir LSTM ağını eğitmeye çalışırım, bu yüzden daha fazla şiir bulmam gerekiyor! Daha farklı şairlerin eserlerini desteklemek için geçen yıl yayınlanan şiir olarak işaretlenmiş kamuya açık yayınlardan rastgele örnekler kullandım. Bu, WordPress.com okuyucusundaki şiir etiketi (https://en.wordpress.com/tag/poetry/) ile göz attıktan sonra elde ettiğiniz sonuç gibidir. Rastgele taranan şiirlerin boyutunu şair başına bir gönderi ile sınırlıyorum.

LSTM ağını eğitin

1MB'den fazla şiirim olduğunda, bir LSTM ağı kurmaya başladım. Sinir ağlarına yönelik tüm ihtiyaçlarımı karşılamak için Python derin öğrenme kitaplığı kesalarını kullanıyorum. Github'daki keras'ın (https://github.com/keras-team/keras) depo kodu deposu, metin oluşturmak için LSTM kullanımı da dahil olmak üzere bir dizi farklı sinir ağını öğrenmeye yardımcı olabilecek birçok örnek dosyaya sahiptir (https: // github.com/keras-team/keras/blob/master/examples/lstm_text_generation.py). Modelimin kodunu bu örneğe dayanarak yazdım ve farklı model konfigürasyonları ile denemeye başladım. Bu modelin amacı özgün şiir üretmektir. Bu durumda aşırı uydurma, başka bir deyişle, modelin iyi bir şekilde genelleyememesi için eğitim verilerini çok detaylı öğrenmek, üretilen metnin girdi metnine çok benzemesine neden olacaktır. (Bu intihal gibi, hiçbir şair bunu yapmak istemez!) Aşırı uyumu önlemenin bir yolu ağda bırakmayı kullanmaktır. Bu, bir düğüm alt kümesinin ağırlığını, her eğitim grubunda rastgele olarak 0'a düşürmeye zorlar. Bu biraz, ağı yeni öğrendiği bilgilerin bir kısmını "unutmaya" zorlamak gibidir. (Şairin çalışmasının şiir robotu tarafından kopyalanmasını önlemek için ek son işlem de ekledim)

Sinir ağımın yoğun eğitimini tamamlamak için FloydHub GPU'sunu (https://www.floydhub.com/) kullanıyorum. Bu, sinir ağımı dizüstü bilgisayarımdan neredeyse on kat daha hızlı eğitmemi sağlıyor. İlk sinir ağımın bir LSTM katmanı ve ardından bir bırakma katmanı var. Bu ağ, şiire çok benzeyen bir metin üretti. Satır sonları ve şiirler için bölümleri vardır ve hemen hemen tüm karakter kombinasyonları gerçek kelimelerdir. Bazen tüm satır daha akıcıdır. Aslında, ilk yinelemesi çok güzel bir cümle üretti:

Bazı LSTM katmanları ekledim ve aşağıdaki kodda gösterildiği gibi nihayet bir son modele yerleşene kadar her katmandaki bırakma derecesini değiştirmeye çalıştım. Sonunda üç katmanlı bir LSTM kullanmayı seçtim çünkü bu sırada eğitim süresi çok uzamaya başladı ve eğitim sonuçları oldukça iyiydi. (Aşağıdaki program kodudur)

1. model = Sıralı

2. model.add (LSTM (300, input_shape = (maxlen, len (chars)), return_sequences = True, dropout = .20, recurrent_dropout = .20))

3. model.add (LSTM (300, return_sequences = True, dropout = .20, recurrent_dropout = .20))

4. model.add (LSTM (300, bırakma = .20, recurrent_dropout = .20))

5. model.add (Bırakma (.20))

6. model.add (Yoğun (uzunluk (karakter)))

7. model.add (Etkinleştirme ('softmax'))

8. model.compile (kayıp = 'categorical_crossentropy', optimizer = 'adam')

İşte LSTM katmanlarının sayısı arttıkça modelin kayıp fonksiyonu eğrisini karşılaştıran bir grafik.

Modeldeki LSTM katmanlarının sayısı arttıkça, doğrulama kaybı hızla düşüyor

Oh! Burada neler oluyor? (Https://stats.stackexchange.com/questions/303857/explanation-of-spikes-in-training-loss-vs-iterations-with-adam-optimizer) Aslında, modeli adam optimizer ile eğittiğimizde, Bu çok yaygındır. Ağa LSTM katmanları ekledikçe, genel model doğrulama kaybının çok hızlı bir oranda azalmaya devam ettiğini unutmayın. Bu, uygulanabilir deneysel sonuçların az sayıda yinelemeyle elde edilebileceğini, ancak ek LSTM katmanının her yineleme için eğitim süresini artıracağını gösterir. Tek katmanlı bir LSTM'yi eğitirken, her yineleme yaklaşık 600 saniye sürer ve deney bir gecede tamamlanabilir. Bununla birlikte, üç katmanlı bir LSTM'yi eğitirken, her bir yineleme 7000 saniye sürer ve eğitimi tamamlamak toplamda birkaç gün sürer. Bu nedenle, doğrulama kaybında daha hızlı bir azalma, aslında daha hızlı sonuçlar anlamına gelmez. Öznel bakış açıma göre, eğitmek daha fazla zaman alsa da, şiir üretmek için üç katmanlı bir LSTM ağı kullanmak daha iyidir.

Şiir üret

Tamamen orijinal metin üretmek için metnin oluşturulma şeklini de değiştirmem gerekiyor. Keras kitaplığındaki örnekte, komut dosyası, sinir ağını eğitmek için tohum olan eğitim verilerinden girdi olarak rastgele bir karakter dizisi seçer. Diğer şairlerin şiirlerini yazmaktansa özgün şiirler yazabilen bir şiir robotu yapmak istiyorum! Dolayısıyla metin üretme adımlarında farklı tohumlar denedim. Eğitim setindeki her şiire "++++ \ n" başlığını eklediğim için, tamamen orijinal şiirler yaratmaya özen gösterdiğini düşünüyorum. Ancak sonuç, anlamsız "\ n", ".", "_" Ve "" kombinasyonlarıdır. Tekrarlanan denemelere ve hatalara rağmen, tohum dizisinin eğitim dizisi ile aynı sayıda karaktere sahip olması gerektiğini buldum. Geriye dönüp bakıldığında, bu açıktır. Sonunda, 300 karakterlik bir dizi kullandım. Metin oluşturmak için tam olarak 300 karakterlik bir tohum oluşturmak için "++++ \ n" ifadesini tekrarladım. Bu şiir robotu tur başına birkaç şiir üretebilir ve ara sıra bu şiirleri ayırmak için "++++ \ n" kullanabilir.

Senaryo yeni bir şiir serisi oluşturduktan sonra, intihal için son bir kontrol yaptım. Bunu başarmak için, önce eğitim setinde 4 gramlık bir dizi (4 kelime içeren cümleler) oluşturdum ve aynısını şiir robotum tarafından yazılan şiirlerde de yaptım. Bundan sonra, bu iki setin kesişimini hesapladım. Bu deneyin amacı için, 4 gramlık iki sette görünen cümlelerin anlamsız olduğundan emin olmak için 4 gramları manuel olarak kontrol ettim. Çoğu zaman bu kesişimdeki ifadeler şu şekildedir:

istemiyorum

olamam

olmak istiyorum

sesi

Daha iyi test sonuçları almak için bu adımı 5 gram ve 6 gram üzerinde tekrarladım. Bu süreci otomatikleştirecek olsaydım, frekansa dayalı bir yaklaşım benimseyebilir ve intihal olarak kabul edilen birden fazla yazarın şiirleri arasındaki ortak n-gramları hariç tutabilirdim.

Büyülü şiir!

Her yinelemeden sonra modelin ağırlığının çıktısını almak, eğitim sırasında bazı düğümlere modelin anlık görüntüsünü yükleyebileceğimiz anlamına gelir. Son modelin önceki yinelemelerini gözlemlediğimizde, şiir robotunun satır sarma tekniğini hemen anlayacağı açıktır. Bunu bekliyordum çünkü tasarıma göre eğitim tasarımının en önemli özelliği satır başına az sayıda karakter olması. Aşağıdaki, bir tur yinelemeli eğitimden sonra üretilen bir şiirdir:

Şiir robotları bazı gerçek kelime dağarcığını öğrendi ve satırlar arasında boşluk bırakmaya yönelik yaygın uygulamayı taklit ettiler. İlk bakışta, dikkatlice keşfetmezseniz, bu bir şiire benziyor. Tek katmanlı LSTM modelinin kayıp işlevi birleştikten sonra, satır kesmelerine ek olarak, model şiirlerin alt bölümlerini de öğrenir ve hatta bazı yaygın tekrarlanan şiir retorik tekniklerini gösterir.

LSTM'nin gücü tek satırlık dizede çok açıktır. Bu yazının başlığındaki satıra ek olarak en sevdiğim şiirin bir başka mısrası:

Şimdiye kadarki en ilginç slogan robotu Inspirobot'un yardımıyla Demet, en sevdiği şiir dizelerinden öğrendi ve bu güzel dizeyi yarattı:

Tek bir LSTM modeli bir şiirdeki temayı tam olarak kavramasa da, yapıtın yaratılışında ortak bir ipliğe sahip gibi görünüyor. Aşağıda, tek katmanlı LSTM modeli tarafından üretilen tüm şiirlerden oluşturulan bir kelime bulutu verilmiştir:

Ne kadar sarhoş edici! Bu şiir robotu güneş ve yıldızlar tarafından büyülendi

Eğitim verilerinde en yaygın konu güneş ise şaşırtıcı değil ama değil! Aşağıda eğitim verilerinden oluşturulan bir kelime bulutu verilmiştir:

Şairler aşk söylemeye heveslidir

Emily Dickinson bir keresinde doğa ve ölüm hakkında şiirler anlatmıştı. Şiir robotum gök cisimleriyle ilgili şiirleri anlatıyor. Her birinin kendi yararı vardır!

LSTM ağının ikinci katmanını ekledikten sonra, aliterasyon ve kafiyeye benzer diğer şiirsel retorik teknikleri görmeye başladım:

Aynı zamanda çok şiirsel sözler yazmaya başladı. Bu sözler, önceki modeller tarafından ara sıra üretilen mükemmel dizelere biraz benzer, ancak bazen birden fazla satıra yayılırlar. Örneğin:

AMAN TANRIM! Bu çok derin!

Bu noktada, satır kesmeleri, ritim, kafiye (ortada ve sonda dahil), tekrar ve aliterasyon gördük. Bu fena değil! Ancak ara sıra ortaya çıkan güzel dizeler dışında, şiir robotu tarafından bu dönemde yazılan şiirlerin çoğu rahatsız edici kelimelerin koleksiyonlarıdır. Çoğu durumda, anlamsız cümleleri dilbilgisel yapı spesifikasyonuna bile uymaz.

Ancak LSTM'nin üçüncü katmanının eklenmesiyle bu durum değişti. Hala anlamsız olsa bile, model tarafından üretilen ayetlerin gramer normlarına uyma olasılığı daha yüksektir. Örneğin:

Bu cümle mantıklı görünmüyor, ancak dilin bileşenlerini uygun bir şekilde düzenliyor. Aynı zamanda aliterasyon retoriği içerir ve nominal cümlelerin de şiirsel bir havası vardır. Üç katmanlı LSTM ağ modeli ayrıca çok güçlü ve şiirle dolu olduğunu düşündüğüm üç mısra üretti:

Bununla birlikte, aşağıdaki tam şiir, bu üç katmanlı LSTM modelinin en yüksek başarısı olarak adlandırılabilir!

Bu şiir, metnin geniş bir bölümünden bir alıntı değildir. Bu şiir dizeleri iki "++++ \ n" arasında kesin bir şekilde ayrılmıştır!

Bak, insan doğası ne kadar ilginç! O kadar eşsiziz ki, sınırsız imkanlarımız var!

Bu ilginç deneyi tamamlamak için benimle işbirliği yapan şairlere özel teşekkürler! Başyapıtlarının tadını çıkarmak için lütfen web sitelerini ziyaret ettiğinizden emin olun!

O at the Edge - Robert Okaji

Wolff Şiir - Linda J. Wolff

Şiir, Kısa Düzyazı ve Yürüyüş - Frank Hubeny

Hayata, Evrene ve Her Şeye Bakış Açıları - Aurangzeb Bozdar

Data for Breakfast, Lei Feng.com AI Technology Review Compilation aracılığıyla

Qin Shuo: Luban neden 5 yıl içinde "dünya ünlüsü" haline gelsin?
önceki
Doğruyu söyle İyi bir cilt için en önemli şey temizlemedir
Sonraki
Jiangsu Qidongchun Club'ın özel sinemayı üst düzey sağlık kulübüyle nasıl mükemmel bir şekilde bütünleştirdiğini görün!
Yerli piksel bulmaca oyunu "Twins of Fantasy" artık Steam'de mevcut
PE'de görkemli bir şekilde tanıtılan vivo X21 ekran parmak izi versiyonu zekayı hayata geçirin
Alçakgönüllü ya da zorba değil, acele etme, belki hayat böyle olmalı
"Beş büyük kız kardeşim varsa bekar kalacağım" ayarlandı. Genç hanımlar küçük erkek kardeşlerini taciz etmeye deli oluyor
AI Girişimcilik: Yapay zekayı elektriğe dönüştürmek ne kadar sürer?
Ebeveynlerimin ve erkek arkadaşlarımın giymesine izin verilmeyen file kıyafeti ne giymeliyim?
Dünya Kupası sona erdi, gerçek "kazanan" Vantage
ThinkPad mobil iş istasyonu ilk kez "üretkenlik" araçlarının güçlü performansını deneyimleyin
Kıskanılacak "düşük arzu toplumu"
Birçok araç sahibi neden yıllık araç muayenelerini sevmiyor, siz ne düşünüyorsunuz?
"Dao Gao Yi Zhang" yeniden basılmış afiş Nie Yuan, Tan Kai ve Xu Lu derin bir duygusal bataklık içindeler
To Top