GPT-2 dil modelini George R. R. Martin’in “Buz ve Ateşin Şarkısı” kitap serisine göre eğittim ve HBO dizisinin senaryosunu bitirmesini bekledim. HBO’nun felaket 8. sezonundan daha iyisini yapabilir mi?
Game of Thrones’un (GoT) 8. sezonu milyonlarca sevenini (ben dahil) aceleye getirilmiş ve tatmin etmeyen sonuyla hüsrana uğrattı. Birçok insan son sezonun tekrar yazılmasını istemekle beraber birçoğu da kendileri tatmin edici son yazdı. Geri kalanlar ise George R. R. Martin’in kitaplarını bitirerek karakterlerin inandırıcı olmayan davranışlarına düzgün bir gelişim yazıp düzeltmesini umuyor ancak bu yıllar sürebilir. Dolayısıyla bende Martin’in yazım biçimini yapay zekaya öğreterek, diziye son üretmeye çalışmak istedim.
Bu makalede, anlattığım sonuca OpenAI araştırmacılarının 2019 yılında geliştirdiği yazı geliştirme dili Generative Pre-Trained Transformer 2 (GPT-2) ile nasıl ulaşabileceğimizi açıklayacağım. Daha sonra bu modelin sezonun üç büyük kötü kahramanı Gece Kralı, Cercei Lannister ve Daenerys Targaryen için ürettiği sonuçları paylaşacağım.
GPT-2 son teknoloji yapay zeka metin üretme modelidir. GPT-2 insansı kolayca anlaşılan cümleler üretme becerisine sahiptir. Ayrıca bir konu üzerine odaklanarak uzun süreli üretim yapabilir. Bu çalışma için diğer dil modellerinden daha etkileyici olan özelliklerini iki ana başlığa indirebiliriz:
1. Veri fazlalığı: Üzerinde güdümsüz çalışılacak olan, 8 milyon internet sitesinden 40GB metin verisi oluşturuldu. Veri çok fazla konu içerdiğinden eğitilmiş bir model türü olan GPT-2 spesifik konularda ‘transfer learning’ yönteminde gayet başarılı, bizim Game of Thrones çalışmamız gibi.
2. Hesaplama fazlalığı: GPT-2 dönüştürücü tabanlı ağ mimarisinde 1.5 milyar parametre kullanıyor. Ancak, güvenlik riskleri sebebiyle 345 milyon parametre kullanan daha küçük bir versiyonunu yakın zamanda çıkardılar. Game of Thrones çalışmamız için bu versiyonun eğitilmiş bir modelini kullanacağız.
GPT-2 geleneksel olarak sıralama modellemesinde kullanılan RNN/LSTM/GRU ağları yerine dönüştürücü ağ mimarisi kullanır. Dönüştürücü, timestep ve memory gate ile oluşturulan tekrar eden üniteler yerine kodlayıcı/kodçözücü ikilisine sahip ilgi odaklı (attention based) bir sistem kullanmaktadır.
Girdi metin, kodlayıcı tarafından ikili yapılar (byte-pair) ve girdi içindeki konum belirten (ne, nerede vb.) ifadeler yardımıyla işlenmektedir. Aynı kodlayıcı, konum belirten ifadeler ile ikili yapıları vektörelleşitirir. Daha sonra bu vektör, görevi şifrelenmiş vektörü yazı metnine çevirmek olan kod çözücü tarafından işlenir. Oluşan bu çıktı öğrenme döngüsünü tekrar besleyerek bir sonraki metnin oluşmasında yardımcı olur ve bu işlem birçok kez devam eder. Başlangıçtaki makalede burada ifade edilen model mimarisi detaylı bir şekilde açıklanmaktadır.
Not etmek gerekirse, GPT-2 girdi olarak verilen cümleden sonra gelecek kelimeyi en doğru şekilde tahmin etmek üzere eğitildi. Tasarlanan model, sıradaki kelime tahmini en iyi şekilde yapabilmek için işlediği tüm kelimelerin metindeki anlamını öğrenmeye zorlandı. Metnin anlamını öğrenmeden, bir dil modeli ancak gramer olarak uygun fakat anlamsal olarak bir şey ifade etmeyen kelimeyi tahmin edebilir. GPT-2’nin verilen metni derinsel olarak anlamasından ötürü, oluşturulan bu mantıksal ağ, sıradaki en yeterli/anlamlı kelimeyi tahmin edecektir. Burada tasarlanan modelin Ilya Sutskever tarafından yazabilmişsem bir açıklamasını bulabilirsiniz.
GPT-2, bire bir çeviri yapan dil çeviriciler gibi olmadığından bir sonraki metni oluştururken kodlayıcıya ihtiyaç duymazlar. Dolayısıyla öğrenme bir kere tamamlandığında, kodlayıcıya artık ihtiyaç kalmaz. GPT-2 kod çözücüyü kullanarak önceden öğretilmiş dönüştürücülerden sıradaki metinleri oluşturur.
George R. R. Martin’in “Buz ve Ateşin Şarkısı” (A Song of Ice and Fire) serisinden 5 kitabın tamamından metinler aldım ve art arda sıralanmış bir veri seti halinde eğitim metnini hazırladım. Eğitilmiş 345 milyon parametreli GPT-2 modeli bu metinler üzerinde aktarma eğitimi (transfer learning) yaptı.
Şaşırtıcı bir şekilde, eğitilmiş modelin Game of Thrones karakterleri hakkında yazmakta da gayet iyi olduğunu keşfettim. Bu durum modelin 8 milyon internet sayfasıyla yapılan ilk eğitimi sebebiyle oluşmuştur. Genelleşmiş modelin kapsamını azaltarak sadece Martin’in stilinde yazmasına karar verdim ve bu şekilde modeli Game of Thrones veri setiyle eğitmeye devam ettim. Model 12 saatliğine Google Colab’ın K80 Gpu’su ile eğitildi.
GPT-2 modeli kullanarak hikayedeki hayal kırıklığına uğratan bazı sonlar ve süpriz gelişmelere alternatif sonuçlar üretmeyi deneyelim.
1. hayal kırıklığı: Gece Kralı’nın saçma sonu
Girdi: Gece Kralı yavaşça üç gözlü kuzguna doğru yürür. Jon Snow’u buz ejderhası meşgul ederken, Daenerys ise ak gezenler tarafından sarılmıştır. Gece Kralı buzdan kılıcıyla Bran’ı öldürmek üzeredir…
Çıktı: Hodor onu durdurur, büyük elleriyle ulu kurdu tutmaktadır. Kuzgun “Hodor!” diye bağırdı. “Hodor! Hodor!” kara lordun yüzünde kaybetmiş bir ifade vardı. Kesik kolunu Bran’ın sırtından içeri geçirdi ve dönerek takla atarak savaşmaya başladı. Ak gezenler, devler, buçukluklar, korkuluk adamlar. Bran, yazla, kartalla, köpekle ve yabancıyla savaştı. Ancak Işığın Lordu kılıca karşı asla ak gezeni savunmazdı. Kuzgun Hodor’un kar beyazı bacaklarına söylendi.
GPT-2’ye göre Hodor hala yaşıyor ve Bran’ı kurtarıyor, ne şaşırtma ama! Ya da belki de Hodor ölmüş ve Bran içine girmiş! Bundan sonraki kısımda model ne diyor ben de anlamadım. Haha!
Girdi: Gece Kralı yavaşça 3 gözlü kuzguna doğru yürür. Jon Snow’u buz ejderhası meşgul ederken, Daenerys ise ak gezenler tarafından sarılmıştır. Gece Kralı buzdan kılıcıyla Bran’ı öldürmek üzeredir… Birden beklenmedik bir şeyler olur…
Çıktı: Kılıç kızıl ateşler saçıyordu. Kılıç Gece’nin gözüne çarptığında, etrafını saran yeşil cam parçalandı ve ışık söndü ve kılıç ölü bir buz gibi yanıyordu. Sonra kuzgun çığlık atmaya başladı, Ejderin sağındaki ve solundaki uzak baykuşlar ve bir şeyler savaşarak karşılık veriyordu, kapıları kırıyor ve bebek yüzlü soytarıları katlediyorlardı. Osha’nın Rickon’a silahın nasıl doldurulacağını gösterdiğini hayal ediyorum. Belki savaştan sonra hepsi uzun uzun konuşulacak adamlar olurlar.
Dizinin yazarları unutsa da, GPT-2 Azor Ahai kehanetini hatırlıyor ve Işık-getiren (Lightbringer) kılıcından bahsediyor, o kılıç Gece Kralı’nı öldürüyor! Gece Kralı’nın buzdan kılıcı kehanetin Işık-getiren kılıcı olsaydı ve sonunda Gece Kralı’nın ölümüne neden olsaydı çok şahane olmaz mıydı gerçekten?!
Girdi: “Theon sen iyi birisin, teşekkürler” der Bran, sonra Theon kendini affettirmiş olarak, Gece Kralı’na son bir saldırı için koşar. Tam Gece Kralı’na mızrağını saplayacakken…
Çıktı: Gece Kralı sakince izlerken, Ejderha -ya da belki de ak gezendi- yüzüne ateş püskürttü Theon’un. Dünya sanki sadece omuz omuza yaslanmış, üç adama kalmıştı: Kızıl rahip ve mızrağı, kafasında tacı, maviler giymiş kral. Soğuk bir rüzgar Theon’un kafasından geçti ve o kardeşlerinin ona bağırmasını duyabiliyordu. “Keşke biraz daha güçlü olabilseydim” diye düşündü, “öldür onu” diye bağırmak istedi ama cesaretini kaybetmişti artık, sessiz kalmaya zorlanmış bir parçasına benzetti bunu. Sonuçta sakat elini gevşetti ve kırık mızrağının sapını atıverdi. “Zarar görmemeye çalış” dedi kendine “ve kaçabildiğin kadar kaç”.
Buna bayıldım, müthiş bir eser olduğu için değil (değil zaten) ama modelin ejderhanın aynı zamanda ak gezen olduğunu bilmesi aklımı aldı. Nasıl oldu da Viserion’un Gece Kralı tarafından kontrol edilen bir ölü ejderha olduğunu anlayabildi hayretler içindeyim! Viserion ateş püskürtür ve Theon’un mızrağını kırar. Theon ise bu durumda dizide daha önce yaptığı gibi kaçmaya karar verir. Bütün bu ayrıntıların bir araya gelmesi gerçekten rastlantı olamayacak kadar fazla. Modelin karakter hakkında bu kadar fazla detay öğrenmesi hayret edilesi bir şey.
2. hayal kırıklığı: Cercei Lannister kolayca, düzgünce savaşmadan ve neredeyse plansız öldü.
Girdi: Ejderha Lannister ordusunu, demir donanmayı ve paralı asker birliği Altın Takımı (Golden Company) yakar. Ancak Cercei Kızıl Kale’nin düşmeyeceğinden emindir. Ejderha, Kızıl Kale’nin kulelerini yakmak üzereyken Jamie Cersei’yi kurtarmaya gelir. Bu sırada;
Çıktı: Kalbi boğazının içinde, elleri ise boğazının üstündeydi…. “nasıl nefes alacağını bilmiyor” dedi Arya. Tyrion dedi ki “Lannisterların bıçakları var” O dedi ki “onların kılıçları var” Jamie kabullenerek söylendi. “Jamie Tommen’in bekaretini kurtarmak için onu öldürmedi” dedi Arya, sonra hikayenin kendi bildiği tarafını yanındaki yüzü kızarmış çocuğa, Tyrion Lannister’a anlattı. Küçük kardeşi gülümsedi. “Hayır, ben yapmadım” Jamie Arya’ya sert bir bakış attı. “Yalan söylüyorsun. Doğru, sen o öpücük hakkında da yalan söylemiştin. Sen yalan veya sözle değil ağzınla öldürdün Tommen’i. Ama onu ikiye iyi ayırdın küçük adam. Her neyse verdiğin hediyeyi sevdiği sürece, kız kardeşin o kirli oğlanı yatağı için saklayacak.”
Hmm, tamam bu bütünüyle saçmalık. Yine de atmadım bunu çünkü o kadar aptalca ki komik geliyor insana. Her neyse hadi bir daha deneyelim.
Girdi: Ejderha Lannister ordusunu, Demir donanmayı ve paralı asker birliği Altın Takımı (Golden Company) yakar. Ancak Cercei Kızıl Kale’nin düşmeyeceğinden emindir. Ejderha Kızıl Kale’nin kulelerini yakmak üzereyken Jamie Cersei’yi kurtarmaya gelir. Bu sırada;
Çıktı: Kehanete göre deli kral şehre saldıracaktı… Cercei “Jamie” dedi tekrardan, sesini sert ve uzaktan geliyormuş gibi yapmaya çalışıyordu. Sessizce “tatlım” diye yazdı Trotter’a, “Cercei, Casterly Kayası’nın kralı olduğunu unutma. Kim olduğunu unutma, ne olduğunu unutma. Deli kralı nasıl öldürdüğünü hatırla. Affet beni eğer seni duraksatıyorsam” Cercei cevap vermedi. “Affet beni” dedi tekrardan ateşle, “asla sahip olmadığım annemin hatrı için, asla senin sahip olmadığın annenin hatrı için, herkesin sevdiği ama bilmediği anne için.” Kılıç kınına sokulurken, kartal bir parça yağ üzerinde parıldadı. Kelimeler tavanda ışıldadı canlı ve karanlık.
Bu sefer biraz daha iyi! Ancak model bazı detayları karıştırmış, özellikle Deli Kral ile ilgili olanları. Jamie’nin Cercei’ye güç vermeye çalışmasını sevdim. Belki de biraz çılgın ateş kullanılması Cercei’nin hikayesini biraz düzeltirdi. İki deli kraliçe, ateşe ateşle karşılık vererek savaşıyor, bütün şehri yakıyorlar. Bu son, Demir Taht için savaşmanın neden kötü bir şey olduğunu göstermesi açısından iyi olurdu.
3.hayal kırıklığı: Daenerys beklenmedik bir dönüş yaptı.
Girdi: Daenerys Essos’ta hem sevildi hem korkuldu. Ama Westeros’ta, o sadece korkuyu gördü. Demir Taht için açtığı savaşı kazandığı anda, yöneteceği insanların akıllarına korku salmaktan başka bir şey düşünemiyordu. Ejderhasının üstünde King’s Landing şehrine bakarken Daenerys şunu yapmaya karar verdi;
Çıktı: Yemek yemek. “Dişleri olan gıda” dedi Ser Jorah”Tadına bakmak istiyorum”, “Kavurma yemek ve bira içmek Dothrakilere yakışmaz” diyerek karşı çıktı Daenerys, eski günlerini, Khalasar’ının King’s Quarters şehrinde olduğu Uzun Mızraklar zamanını anımsıyordu. Dothrakilerin bardaklarını şaraplarla ve balık yemeğiyle ve turp çevirme ile doldurup diğer Dothrakiler ile savaşmaya gittiği zamanlardı. “Bunlar sadece fikirler, ben yiyeceğim içeceğim ve dinleniyormuş gibi yapacağım, sonra ejderhalar tekrar gelecek ve hepimizi öldürecek.”
Yemek ve içmek her zaman iyidir di mi? Duyduğuma göre King’s Landing’te iyi bir kahveci de varmış, Dany belki orayı kullanabilir (Tabi çoktan yakmadıysa). Neyse bu kötü oldu, hadi bir daha deneyelim.
Girdi: Daenerys Essos’ta hem sevildi hem korkuldu. Ama Westeros’ta, o sadece korkuyu gördü. Demir Taht için açtığı savaşı kazandığı anda, yöneteceği insanların akıllarına korku salmaktan başka bir şey düşünemiyordu. Ejderhasının üstünde King’s Landing şehrine bakarken Daenerys şunu yapmaya karar verdi;
Çıktı: Şehri savun ve kaçmaya çalışan herkese, insanlar dahil, Targaryen tarzı cezalandırma ve dehşetler hazırla. Bazıları Daenerys’e onu bir devin öldürebileceğini söyler, ama Daenerys kafasını sallar ve “hiçbir dev, dev boyutuna gelemez sonra kimse ormanda yalnız ölmek istemez” der. Mektubundan şunları okur:
“Prens Quentyn, benim sadık hizmetçilerim, sizlerin ne kadar aptalca aptallar olduğunuzu gördüm ama asla sizin ne kadar aptalca aptal olduğunuzu görmedim. Hepimizin gözleri önünde hayatınız alındı. Daenerys ise sizi kurtarabilecek tek kişidir”
Bundan da pek bir şey anlaşılmıyor. Ancak Dany’nin King’s Landing şehrinin insanlarını ona diz çöker ve kaçmaya çalışmazlarsa ancak o zaman onları kurtaracağı anlatısına takılmış gibi gözüküyor model.
Hikayeler için daha fazla örnek oluşturmaya çalıştım ancak hiçbiri dizinin konusu ile ilgili bir şey ifade etmedi. Modelin hikayenin akışını pek kavrayamadığını söylesek bile, model dizinin karakterleri ve onların farklı özelliklerinini öğrenebildiğini göstermiş oldu. Ayrıca bu karakterler arasında bağ bile kurabildi çıktı içerisinde. Örnek olarak Daenerys ile ilgili konuda Ser Jorah çıktı da beliriverdi, Hodor ise Bran’ın hikayesinde belirdi. Daha ilginci ise bu karakterler arasındaki ilişkileri çoğunlukla doğru tutturmasıydı, gerçekten etkileyici bir olay!
Bence bu çalışma NLP araştırmasının OpenAI’nin GPT-2 ile ne kadar ileriye gittiğini göstermiş oldu. GPT-2’nin en büyük modelinin bu çalışmada ne kadar başarılı olacağını merak ediyorum. Eğer büyük model bir gün kullanıma açılırsa bir gün bu çalışmaya dönerek yazıyı güncelleyebilirim.
Tatmin edici ve mantıklı bir Game of Thrones sonu isteyenler içinse kötü haberim var, yapay zekanın şuan ki hali bize yardım edemiyor ne yazık ki. George R. R. Martin’in kitapları bitirmesini beklemek zorundayız artık. Çok yaşa George R. R. Martin!
[towardsdatascience.com’daki İngilizce orjinalinden Zeynel Fırat Aydın tarafından bilgisayar mühendisi Ümit Ateş’in katkılarıyla politeknik.org.tr için çevrilmiştir.]
Sendika.Org, yayın hayatına başladığından bu yana işçi sınıfı hareketinin, solun ve genel olarak toplumsal muhalefetin gündemine ilişkin, farklı politik perspektiflerden düşünsel katkılara açık bir tartışma platformu olagelmiştir. Sitemizde yayımlanan yazılar yayın kurulunun politik perspektifiyle uyumluluk göstermeyebilir. Amacımız, mücadelenin gereksinim duyduğu bilimsel ve politik bilginin üretimini zenginleştirecek tüm katkılara, yayın ilkelerimiz çerçevesinde, olabildiğince yer verebilmektir.