Herkese merhaba. Bir süredir aklımda olan ancak istediğim kadar vakit ayırıp ilerletemediğim bir projeyi nihayet tamamladım. Tamamen kendi merakım sebebiyle üzerinde çalıştığım bu proje, blogumda yayınladığım ilk orijinal içerik olması sebebi ile de benim için ayrıca önemli.
Oluşturduğum grafikleri bu linkten inceleyebilirsiniz. Yazının sonunda kaynak kodun bulunduğu reponun linkini de vereceğim.
Projenin ortaya çıkış hikayesini ve detaylarını merak ediyorsanız; bu blog yazısının devamı bunlar hakkında olacak.
Öncelikle şunu belirterek başlayayım; dinlediğim müzik türlerinin skalası geniş olsa da, çok sıkı bir rap dinleyicisi değilim. Yine de türkçe rap ile yıllardır devam eden “düzeyli bir ilişkim” var. Tanışma hikayemizi oldukça iyi hatırlıyorum. 11-12 yaşlarımdayken, bir arkadaşım doğum günümde, bence hala türkçe rapte yapılmış en iyi albümlerden biri olan, Ceza’nın Rapstar albümünü hediye etmişti. Arkadaşlarımla daha önce adını hiç duymadığımız bu kişinin kasetini kasetçalara takıp play tuşuna bastığımız an hala aklımda. Herkes şaşkınlık içinde birbirine bakıyordu. Çalan melodi ve üzerine birinin çok hızlı şekilde okuduğu lirikler, daha önce duyduğumuz hiçbir şeye benzemiyordu. Ceza’nın okuma hızından dolayı sözler neden bahsediyor pek anlayamasak da, bu yeni müzik türü hepimizi etkisi altına almıştı. Uzun yıllar devam edecek türkçe rap hikayesi bizim için bu şekilde başlamış oldu.
Albüm 22 şarkıdan oluşuyor ve 150.000 civarında satış başarısı göstermiş. Bence bu, 2004 yılında çıkmış bir türkçe rap albümü için inanılmaz bir rakam. İçindeki şarkıların çoğu bugün türkçe rapin klasikleri arasında sayılıyor.
Bizim jenerasyondaki çoğu kişide olduğu gibi, ortaokul zamanlarımda ben de bir hayli fazla türkçe rap dinledim. Ve yine jenerasyonumuzun başka bir klasiği olarak, lise zamanlarımda rock ve metal janrına kaydığım için, o günlerden beri türkçe rapi sıkı sıkıya takip etmiyorum. Yine de çevremde her zaman sıkı türkçe rap dinleyicisi arkadaşlarım vardı ve sayelerinde birçok farklı MC’yi dinleme şansı buldum. Bu sebeple Mode XL, Ağaçkakan, Saian gibi farklı tarzlarda; müzikal ve lirikal kalitelerinin yüksek olduğunu düşündüğüm müzisyenlerin işlerini uzaktan da olsa yıllardır takip ediyorum ve dinlemekten oldukça keyif alıyorum.
Türkçe rapin; uzun yıllardır bulunduğu yer altından çıkıp ana akım bir müzik janrı haline geldiği bu günlerde, rap müziği tartışmak da en az dinlemek kadar popüler olmuş durumda. Aslında rap müzikteki farklılaşma ve alternatif hareketler başta ABD olmak üzere birçok yerde yıllar önce başlamıştı ve devam etmekteydi. Bu değişimin türkçe rapteki yansımaları başlarda silik kalsa da, kaçınılmaz olarak türkçe rap de evrilmek zorundaydı. Birilerinin bu fitili doğru zamanda ateşlemesi gerekiyordu ve yeni nesil müzisyenler bunu başarmış gibi görünüyor. Bununla birlikte, ana akıma dönüşen herşeyde olduğu gibi, nicelik artarken nitelik azalıyor mu? minvalindeki tartışmaları, bu günlerde müziği icra edenlerin kendileri dahil her ağızdan duymak mümkün.
Şahsen ben müziğin edebi yönünün oldukça önemli olduğunu düşünenlerdenim. Tür fark etmeksizin, sırf liriklerini sevdiğim için dinlediğim şarkılar olduğu gibi, sırf liriklerini sevmediğim için dinlemediğim şarkılar da olmuştur. Nobel jürisi de benimle benzer görüşte olmalı ki, 2016 yılında şarkılarında Bob Dylan’a “Amerikan şarkı geleneğinde yarattığı yeni şiirsel ifadeler”den dolayı, nobel edebiyat ödülünü layık görmüşlerdi :) Şiirsel ve edebi taraf, bazı müzik türlerinde diğerlerinden daha fazla öne çıkıyor veya önem arz ediyor. Tartışmasız, rap müzik de bunlardan biri. Tabiki şarkı kalitesini belirleyen tek faktör sözleri veya ne kadar karmaşık bir kafiye örgüsü kullanıldığı değil. Müzikal altyapı, harmoni, prodüksiyon vs. hepsi bir bütünün önemli parçaları, lirikler de bu parçalardan kritik bir tanesi.
Bu projeyi yapma fikrinin nerden çıktığına gelecek olursak; aslında fikir orijinal olarak bana ait değil. Bir iki yıl kadar önce reddit’te şu posta denk geldim. Amerikadaki en ünlü rap müzisyenlerinin vocabulary karşılaştırması yapılmış ve liriklerinde kullandıkları eşsiz kelime (unique word) sayılarına göre sıralanmışlar. Hazırlanan infografiği ve unique word istatistiğini görme fikrini çok beğendim. Benzerini türkçe rap için yapma fikri ise çok daha sonraları, etraftaki herkesin türkçe rap konuşup tartıştığı bir dönemde, bu grafik tekrar aklıma geldiğinde oluştu. Ben de benzer bir görselleştirmenin türkçe rapteki yansımasını nasıl olacağını merak edip görmek istedim ve sonuç olarak bu projeyi ortaya çıkarttım.
Grafikleri bu linkten inceleyebilirsiniz.
Yukarıda linkini verdiğim orijinal amerikan versiyonda, eşsiz kelime sayısının, müzisyenlerin “ilk 35.000 liriği” kullanılarak oluşturulduğu yazıyor. Benim incelediğim 89 adet müzisyen arasında ise; analize katılan toplam lirik sayısı 35.000’i geçebilen sayısı sadece 3. Özellikle yeni nesil MC’lerde, gerek rap müzik sahnesinde geçen zamanlarının kısa olmasından, gerek albüm çıkarma geleneğinin son yıllarda yerini single çıkarmaya bırakmasından dolayı, toplamdaki şarkı sayısı, dolayısıyla lirik sayısı daha da azalıyor. İncelediğim 89 MC’nin, analize katılan lirik ortalaması 11.629. Peki analize katılan lirik ne demek?
Tüm lirikleri webdeki 2 farklı kaynaktan topladım. Öncelikli kaynağım Genius’tu. Bilmeyenler için Genius, müzisyenler ve şarkılar hakkında birçok bilgiye (şarkı sözlerinin ne anlam ifade ettiği gibi) ulaşabileceğiniz çok sevdiğim bir müzik platformu. Müzisyenler tarafından verilen official bilgiler de bulunabiliyor. Ancak Genius her ne kadar ingilizce müzik için çok geniş bir kütüphane görevi görse de, türkçe müzik için aynı şeyi söylemek zor. Bu sebeple Genius’ta bulamadığım MC veya şarkılar için ikinci bir kaynak daha kullanmaya karar verdim ve türkçe şarkı sözleri için görünen en büyük arşiv olan Şarkı Alternatifim‘i seçtim. Bu iki kaynaktan da, düet olmayan, eşlik eden başka bir şarkıcı bulunmayan, MClerin sadece kendilerinin seslendirdiği şarkıların liriklerini aldım. Çünkü diğer türlü şarkının hangi kısmını kimin yazdığını dolayısıyla sözcüklerin kimin kelime dağarcığına katılması gerektiğini anlayabilmek çok olası değil. Tüm bunlar sonucunda haliyle belirtmek gerekir ki, bu kaynaklarda yer almayan müzisyenleri veya şarkıları analize katmadım.
Toplam lirik sayısındaki farklılıklardan dolayı, verileri 3 farklı grafik kullanarak görselleştirmeye karar verdim. Bunlardan ilki olan tüm kelimeler, herhangi bir alt sınır olmadan, incelediğim tüm müzisyenlerin analize dahil ettiğim tüm kelimelerini hesaba katarak eşsiz (unique) kelime sayısı karşılaştırması yapıyor.
Görülebileceği üzere tüm kelimeler grafiğinde analiz edilen toplam kelime sayısı arttıkça eşsiz kelime sayısı da artma eğiliminde olsa da, sonuç her zaman için öyle değil. Sagopa Kajmer 75.818 adet toplam analiz edilen sözcükle ve 6565 adet eşsiz kelime ile en yakınındeki müzisyenden farklı birinciliğe otururken, hemen arkasından, analiz edilen 28.720 kelimesinde 5000 eşsiz kelime bulunan Şanışer ve 50.227 kelimesinin 4862 tanesi eşsiz olan Ceza takip ediyor. Yukarıda da bahsettiğim gibi, toplam lirik sayılarının az olmasının da etkisiyle, bu grafikte yeni nesil müzisyenler daha gerilerde kalmış durumda.
İkinci grafik ise ilk 10.000 kelime grafiği. Toplamda incelenen 89 MC’nin, analiz edilen lirik ortalaması 11.629 olduğu için, 10.000‘in makul bir alt limit olduğuna karar verdim. Bu alt limiti geçebilen 39 adet MC grafikte yer alıyor ve bu MClerin sadece ilk 10.000 liriğinin analiz sonucu gösteriliyor. Bu ilk 10.000 lirik, kaynaklardan lirikleri alıp kaydeden koda bağımlı olarak, önceliği ismi alfabetik sırada önde olan şarkıya veriyor. Bu sebeple belki çok da iyi bir metrik sayılmasa da (kronolojik olarak öncelik verebilirdim, ancak her şarkının kaç yılında yayınlandığı bilgisini bulmak pek kolay değil), analiz edilen lirik sayısını 10.000‘de eşitlemesi ve alt limit koyması açısından ilgi çekici.
Önceki grafikten farklı olarak Ağaçkakan 3191 adet eşsiz kelime ile birinci olurken, onu 3066 eşsiz kelimeile Karaçalı ve 2931 eşsiz kelime ile Şehinşah takip ediyor.
Üçüncü ve son grafik ise eşsiz kelime oranı. Bu grafikte diğerlerinden farklı olarak, doğrudan eşsiz kelime sayısını karşılaştırmak yerine, eşsiz kelime sayısının analiz edilen toplam lirik sayısına oranını karşılaştırdım. Ancak toplam lirik sayısı az olan MCler için oran çok yüksek çıkacağından, alt limit olarak 5000 kelimeyi belirledim. Analiz edilen kelime sayısı 5000 kelimeyi geçen MClerin, tüm liriklerindeki eşsiz kelime sayılarını toplam kelime sayısına oranlayarak yüzdesel olarak karşılaştırma yaptım.
Bu üç grafiğe ilave olarak, müzisyenlerin fotoğraflarının üzerine tıklayarak, açılan grafikte her birinin liriklerinde kullandığı 10 kelimeyi ve bunları kaç kez kullandığını da görmek mümkün.
Teknik detaylara gelecek olursak; projenin aslında çok karmaşık bir yapısı yok. Temelde web scraping ve nlp kullanarak sonuca ulaştım. Python’da yazılmış olan taraf bir konsol uygulaması olarak çalışıp sonuçları kaydediyor ve daha sonra bu sonuçlar Javascript’te bir veri görselleştirme kütüphanesi kullanarak grafiğe dönüştürülüyor.
Öncelikle “Müzisyenlerin şarkılarında geçen tüm lirikleri nasıl elde ederim?” diye sorarak başladım. En basit ve işe yarayacak yolun webde şarkı sözlerini bulup scrape etmek olacağına karar verdim. Şarkı sözleri kaynağı olarak önce Genius’u kullanmaya karar verdim. Genius’u son kullanıcı olarak kullanmayı her ne kadar sevsem de, public API’si için aynı şeyi söyleyemeyeceğim. API, sözleri hariç şarkılarla ilgili her bilgiyi sunduğu için, şarkı sayfalarının urllerini bulup sayfadan scrape yaparak ilerledim. Genius’ta bulamadığım MC veya şarkılar için ikinci bir kaynak olarak da Şarkı Alternatifim‘i kullandım. Buradan da benzer şekilde sayfaları scrape yaparak lirikleri elde ettim.
İkinci aşama ise topladığım tüm bu liriklerin analizini yapmaktı. Liriklerde geçen eşsiz (unique) kelime sayısını bulmak istediğim için, türkçe bir NLP kütüphanesi olan Zemberek‘i kullanmaya karar verdim. Zemberek, birçok farklı NLP modülünden oluşuyor. Ben temelde Morphology modülünü kullandım. Bu modül ile kelime analizi yaparak herbir kelimenin kökünü, eklerini, türünü (isim, sıfat, zarf vs.) bulmak mümkün. Unique kelime sayısını bulmak için kelime köklerini baz almak gerekiyor. Örneğin “gidiyorum”, “gideceğim”, “gittim”, “giderim” şeklindeki 4 kelimenin de kökü aynı: “gitmek” fiili. Bu 4 kelime, ve gitmek fiilinden türeyen diğer kelimeleri sadece 1 unique kelime olarak sayıp kaydettim. Zemberek’te Normalization gibi noisy textleri tespit edip düzeltmek için kullanılabilecek modüller de mevcut ama türkçe rap şarkılarında ingilizce-türkçe karışık kelimeler ve bazen imla kurallarının dışına çıkan kullanımlar mevcut olduğu için bu modülün varsayım yaparak düzelttiği bazı kelimeler söz dağarcığına girmiş oluyordu. Bunun yerine Morphology modülünün tanımlayamadığı bu tarz kelimeleri hesaba katmadım. Unique kelime sayısı dışında, MClerin en çok kullandığı 10 kelimeyi de aynı yöntem ile kaydettim.
Buraya kadar olan tüm kısmı python ve kütüphaneleri ile implement ettim. Scrape yaparken Requests, BeautifulSoup kütüphanelerini kullandım. Zemberek bir Java applicationı olduğu için, python application’ı ile GRPC üzerinden iletişim kuruyor. Zemberek’in içerisindeki GRPC modülünde server zaten mevcut. Client (python) tarafı için de grpcio ve googleapis-common-protos kütüphanelerini kullanarak protobufferlar üzerinden iletişimi yönetmek oldukça kolay. Gerekli call ları yaparak Zemberek’teki tüm modüllere ve metodlarına ulaşmak mümkün.
Başta tüm persistence işlemleri için light weight bir database kullanmayı düşünsem de, daha sonra şarkıları ve lirikleri doğrudan görüp inceleyebilme motivasyonuyla tüm verileri json olarak kaydetmeye karar verdim. Şarkıcı isimleri için kullandığım input dosyası da, lirikleri ve en sonunda lirik analizini kaydetmek için kullandığım output dosyaları da tümüyle json formatında.
Son aşama; kaydettiğim tüm bu verileri görselleştirme işlemi. Bu iş için de Chart.js kütüphanesini kullandım. Chart.js, grafikleri HTML’de canvas üzerine çizerek oluşturuyor. Kullanması basit ve konfigürasyonları esnek. En azından ben kendi ihtiyacım kadar esnetebildim :)
Bir hayli uzattım sanırım, özetleyecek olursam benim kendi merakımı gideren eğlenceli bir proje oldu. Son olarak şunu da ekleyeyim ki, sonuçlar bilimsel/istatistiksel çalışmalarla oluşturulmamıştır ve gerçeği yansıtmayabilir.
Ayrıca unutmadan geçmeyeyim; eğer listede olmayan, unuttuğum veya atladığım müzisyenler varsa mutlaka haber verin. Yada haber vermek yerine direk PR açabilirsiniz :)
Projenin kaynak koduna bu linkten ulaşabilirsiniz.
Başka bir yazıda görüşmek üzere!