Neden yasaklandı? Depremle ilgili Ekşi Sözlük yorumlarına NLP gözüyle bakış

Ekşi Sözlük yazarları gerçekten hükümeti karalama kampanyası yürüttü mü? Depremle ortaya çıkan duyguların politik hararete dönmesiyle başlayan, sitenin yasaklanmasıyla biten yolun sayılarla incelenmesi.

Duygu ALTINOK
10 min readMar 1, 2023

Malumunuz kısa bir süre önce deprem sırasında ve sonrasında yazılan yorumlardan dolayı Ekşi Sözlük’ün başı derde girdi. BTK bu karara sebep olarak hükümeti ve kurumlarını küçük düşürme, yetersiz gösterme ve toplumda kaos ortamı yaratmayı göstermiş.

Bu yazıda gerçekten de hükümete karşı bir karalama/itibarsızlaştırma kampanyası var mıdır, yok mudur konusunu istatistiksel verilere dayandırarak bir sonuca ulaştırmaya çalışacağız. Önce yapacağımız çalışmayı kısaca tanıyacağız, sonra kullanacağımız veriyi toplama ve derlemeyi kısaca göreceğiz ve son olarak da verinin söylediklerini dinleyeceğiz.

Metinlere duygu analizi neden/nasıl yapılır?

Duygu analizi kavramı tanıdık gelmiyorsa, öncelikle metinlere neden duygu analizi yapmak isteriz ve nasıl yaparıza kısaca bakmakta fayda var 🙂
NLPnin en popüler konularından biri olan duygu analizi (orijinal ismiyle sentiment analysis) insanların duygularını, düşüncelerini, beğenilerini yazılı metinlerden çıkarmayı amaçlar.

Spoiler: Bu çalışmanın basamakları

Bu alanda en sık yapılan iş, müşterilerin ürünler/hizmetlerle ilgili fikirlerini ve beğenilerini sınıflandırmaktır diyebilirim. Bildiğim en ünlü verisetleri IMDB Filmler ve Yelp Restoranlar verisetleri, her iki veriseti de pekçok akademik çalışmada ve Kaggle yarışmasında defalarca kez işlendi. Bu tip verisetleri kullanıcı yorumlarını ve yorumların duygu değerlerini gösteren etiketleri içerir. Etiketler olumlu, olumsuz, tarafsız/nötr üçlüsü olabilir veya yıldız gösteren bir sayı olabilir (1, 2, 3, 4 veya 5 yıldız). Kafanızda canlanmadıysa, verisetinde geçen her yorum ve puan değerlerini böyle düşünebilirsiniz:

{
"yorum": "Yemekler fena değildi. Ana yemek olarak köfte söyledik, eti iyi pişmişti.
İkram boldu, yemeğin yanında salata, cacık, ezme ve başka salatalar da geliyor tatları da şahaneydi.
Sonuç olarak kesinlikle f/p mekanı puanım 4.",
"yıldız": "4"
},
....

Türkçe set var mıdır derseniz elbette var, yeni sezon kampanyam Duygu’yla Türkçe NLP için topladığım üç tane duygu dolu 😄 veriseti kullanmak isteyenleri bekliyor, ayrıntılar için lütfen yazının sonundaki notlara göz atın¹ 😉.

Gel gelelim bu iş nasıl yapılıra, metinden duygu tahmin eden model için çok sayıda etiketli örneği modelimize gösteriyoruz, modelimiz de metinden çıkabilecek duyguları öğreniyor. Gördüğünüz gibi burdaki kilit nokta tabii ki veriseti, aslına bakarsanız verisetinin doğru şekilde etiketlenmesi. Elimizde verisetinde sadece yorumlar varsa etiketlemeyi kısa sürede ve en doğru şekilde nasıl yapabiliriz? Önümüzdeki iki bölümde de bu konuyu göreceğiz.

Veri Toplama

Bu çalışmayı yaparken kullandığım verisetini Ekşi Sözlük sitesindeki “6 Şubat Kahramanmaraş Depremi” başlığından topladım. 6 Şubat ve 24 Şubat tarihleri arasındaki tüm yorumları Github’dan bulduğum bir scraperı kullanarak indirdim. İndirdiğim yorumları tarih ve yorum içeriği ikilileri olarak düzenledim, sonra da tüm yorumları bir JSON haline getirdim. Siz de kendi setinizi toplamak isterseniz veya bu işin nasıl yaptıldığını daha ayrıntılı bir şekilde görmek istiyorsanız kanalımdaki bu yeni sezon videomu ziyaret edebilirsiniz.

Topladığım tüm yorumları hızlıca temizledim; HTML taglerini, düzensiz boşlukları, bazı noktalama işaretlerini, bazı linkleri temizledim. Tüm temizlikleri yaptıktan sonra elimde 19 güne ait 6227 yorum kaldı.

Veri Etiketleme

Bu çalışmanın en oyunlu koyunlu yeri burası diyebilirim, elimizde hiçbir ipucu olmadan her yorum için bir etiket üretmek. Etiket üretmeyi NLP’nin yepyeni buluşu olan LLM(büyük dil modelleri)ni kullanarak yaptım. Bu iş için Google FLAN-T5 XL kullandım, bu LLM multitask-multilingul kategorisinde, yani çok sayıda NLP göreviyle (classification, NER, question answering), çok sayıda dil üstünde eğitilmiş bir model. Hem Türkçe’yi tanıdığı için, hem multitask olduğu için, hem de kendisine duyduğum büyük sevgi yüzünden 😄 Google FLAN-T5 verisetimi otomatik etiketlemek için seçtiğim model oldu.

LLM’lerin NLP’de devrim yaratmasının sebebi zero-shot yetenekleri, bu kategorideki her model herhangi bir örnek veri görmeden istediğiniz sonucu sunabiliyor. Bu tip modellerden istediğiniz etiketi ve sonucu almak ise uygun promptu yaratmaktan geçiyor. Prompt dediğimiz, modele yapmak istediğimiz işi söylediğimiz bir metin parçası. Örnek olarak bu cümledeki entityleri bul, bu cümledeki duyguyu çıkar vb emir cümlelerini gösterebilirim. Her model için en uygun promptu bulmaya ise prompt engineering deniyor (evet, bu gerçekten bir iş ve hatta mühendislik çeşidi), bu konu hakkında daha fazla bilgi için seçtiğim bu güzel repoyu gezebilirsiniz.

FLAN-T5'le Ekşi Sözlük yorumlarını etiketleme

Verisetindeki her yorumu FLAN-T5'e gösterdim ve her yorum için iki kategoride etiket üretmek istedim “sentiment” ve “emotion”. Sentiment kategorisinde 3 etiket kullandım: olumlu, olumsuz ve nötr. “Emotion” kategorisinde ise daha ayrıntılı duygu isimlerini kullandım, burda pekçok araştırmacı tarafından kabul görmüş Plutchik duygu kategorilerini kullandım.

Plutchik Duygu Çarkı, kaynak: pavlovspartner.com

“Sentiment”in aksine, “emotion” kategorisi oldukça çeşitli, duygular ise sadece olumsuz, olumlu, nötr olarak ayrılmıyor. Plutchik’in modelinde 8 ana duygu kategorisi var , her kategorideki duygular şiddetlerine göre bir isim alıyor. Koyu yeşil tarafına bakarsanız endişe şiddetlenirse korku ve sonunda dehşete dönüşüyor.

Daha önce çalıştığım duygu analizi setleri genelde müşteri yorumlarına yönelikti, bu yüzden “emotion” etiketlerini pek kullanmadım. Doğal afetler insanlarda korku, şaşkınlık benzeri duygular oluştururken; bazı anlarda insanlar birbirlerine mutluluk, coşku ve umut gibi duygular da verebilir. İnsan çok sayıda duyguyu aynı anda yaşayabilen duygusal olarak karmaşık bir varlıktır, bu yüzden de bu çalışma için sadece “sentiment” asla yeterli olmazdı. Duyguları derinlemesine araştırmak maalesef benim için böyle üzücü ve yıkıcı bir afet sonrasına kısmetmiş, keşke bu çalışmayı daha iyi şartlar altında yapabilseydim.

Bu çalışmanın tamamında Teacher-Student yaklaşımını kullandım, bu yaklaşımda oldukça büyük bir modelle etiketleri üretiyoruz, sonra etiketlenmiş verisetiyle daha ufak ama odaklı bir model yapıyoruz² . Ben de etiketleri FLAN-T5'le ürettim, sonrasında etiketlemiş bulunduğum yorumlarla da daha ufak, multihead attention bazlı bir model yarattım. Ufak modelde de bir sentiment ve emotion üretmek istedim, bu yüzden iki adet LM head kullandım (Türkçesini bulamadım lütfen kusura bakmayın). Sonraki bölümlerde göreceğiniz -1 ve 1 arasındaki duygu değerlerini ufak modelle ürettim; 0 nötral duygulara, 0–1 arası olumlu duygulara ve eksi değerler negatif duygulara denk geliyor. Yazının sonraki bölümlerinde göreceğiniz duygu değerleri tamı tamına bu şekilde üretildi. Etiketleri de ürettikten sonra artık yorumların içerğine dalmaya hazırız.

Verisetine Bakış

Verisetinin toplamda 6227 yorumdan oluştuğunu söylemiştim, yorumların günlere göre dağılımı ise aşağıdaki gibidir:

Yorum sayılarının günlere göre dağılımı.

Yorum sayılarına bakarsak en çok sayıda yorumun ilk günde yapıldığını, 2. günde bile 1. güne oranla çok daha az sayıda yorum geldiğini görüyoruz. Daha önce gördüğüm doğal afetlerle ilgili NLP çalışmalarında da verisetleri genelde ilk 3 günde üretilen içeriklerden toplanmıştı, insanların depremin ilk şokuyla ürettikleri içeriğin sayıca daha fazla olması gayet normal.

En çok yorumu ve de duygu çeşidini barındırdığı için önce 6 Şubat gününe daha yakın bir bakış atacağız. 6 Şubat günü yorumları sabah 4 civarında deprem oldu haberleri olarak başlamış, sonra depremin merkez üssü ve şiddeti benzeri bilgiler paylaşılmış. Sabah 8 civarına kadar bilgi paylaşımı olan nötral yorumlar yapılmış, sonrası ise kaos. Enkaz altında kalan yakınları arayan yorumlar, malzeme arayan ve önerenlerin bilgi paylaşımı şeklindeki yorumlar, korkuyla yapılan duygusal yorumlar derken depremin ilk gününde pekçok duygu birbirine karışmış, saatler ilerledikçe nötr yorumlar olumsuza, şaşkınlık paniğe, endişe ve korku dehşete dönüşmüş:

6 Şubat günü yapılan yorumların duyguları

Şaşılacak şekilde ilk günde korku ve mutsuzluk belirten yorumlardan daha fazla sayıda nötral yorum yazılmış. Verisetine baktığım kadarıyla ilk günde barınacak yer, afet bölgesine ulaşım bilgileri, yolların açıklığı, yardım kuruluşlarının iletişim bilgileri benzeri pratik konularda çok sayıda yorum girilmiş. Yaptığım işe duygularımı karıştırmayı sevmem ama ilk günün grafiğine bakınca insanlarımızla gurur duydum, ahlanıp vahlanmak yerine hızlı düşünüp insanlara yardımı olacak bilgileri paylaşmışlar. Öfke duygusu ise depremin ilk gününde kendine çok az yer bulmuş.

Daha da devam edip yorumlarda ne yazdığına bakarsak, aşağıdaki iki sözcük bulutunda 6 Şubat’ı en iyi anlatan sözcükleri görebiliriz. Soldaki bulutta en çok geçen isim köklerini gösterdim. Her sözcük kendisini çevreleyen diğer sözcüklerle anlamlıdır, bu yüzden yorumlarda geçen ikili sözcük dizilerini de sağda gösterdim. Sağdaki resme bakınca sözcüklerin kullanıldıkları bağlama göre ne kadar anlam kazandıklarına eminim ikna olmuşsunuzdur, “çok” sözcüğü tek başına bir zarfken ve pek de anlam taşımazken; “çok kötü”, “çok büyük” ve “çok üzgünüm” sözcük dizilerinden akan umutsuzluğu ve mutsuzluğu tarif etmek mümkün değil. NLP yapma sebeplerimden biri de tam burda yatıyor; bazen, tek başına ufak görünen kısa sözcükler bile, başka sözcüklerle bir araya gelince dünyayı devirecek güce sahip oluyor. İnsan dili karmaşık, anlaması ve işlemesi güç; aynı zamanda her zaman sürpizlerle dolu ve keşfe açık.

6 Şubat yorumlarında en çok geçen isim kökleri ve ikili sözcük dizileri

Her metinde anlamı en çok isimler, sıfatlar ve fiiller sırtlar, o yüzden yorumlardaki bu türlere ait sözcükleri avlamak istedim. Türkçe gibi eklemeli dillerde sözcük kökünü bulmak büyük önem taşır, sözcük türünü ve kökünü yeni yaptığım spaCy Türkçe paketinin yardımıyla buldum³. 6 Şubat yorumlarında en çok geçen isim, sıfat ve fiil kökleri şu şekildedir:

kategori| sözcükler
---------------------------------
isim | deprem, yardım, bina, insan, enkaz, yer, durum, herkes, haber, bölge, arkadaş, merkez, ülke, ev, can, mahalle
---------------------------------
sıfat | büyük, alt, geçmiş, kötü, acil, zor, uzun, ilk, tek, yakın, soğuk, korkunç, şiddetli, acı, ölü, üzücü
---------------------------------
fiil | ol, et, yap, gel, yık, yaşa, bil, kal, ulaş, salla, gör, çalış, hisset, bekle, çık, gerek, iste, söyle, yaz, ara, kurtar, geç

Metinlerde anlamı oluşturan bir başka önemli bileşen de entitylerdir (Türkçesini sormayın ben entity demeyi seviyorum), metinde geçen entitylerin türleri bize metin hakkında çok şey söyleyebilir. Yaptığım Türkçe spaCy modelleri 19 çeşit etiket üretiyor³, bu etiketler sayı, tarih, olay, yer, dil, ünlü yasa ismi, para miktarı, ırk/din ismi, sıra sayı, şirket/kurum ismi, yüzdeli sayılar, kişi isimleri, ürün isimleri, miktar, zaman, ünvan ve sanat eseri. Bu verisetinde çokça telefon numarası ve adrese rastladım, o yüzden telefon numaralarını ve adresleri ayrıca avladım. 6 Şubat günü için yorumlarda geçen entity tiplerinin dağılımı şu şekilde olmuş:

Aslan payıni GPE, LOC, CARDINAL, PERSON ve ORG paylaşmış; her verisetinde çok sayıda sayı bulunduğu için CARDINAL tipinin her zaman çok da anlamı olmuyor o yüzden bu tipe çok da takılmayın. Bir numaralı entitiy türü GPE, coğrafi yerler demek; şehir, ilçe ve kasaba isimleri bu kategoriye düşüyor, bu yüzden bu entity türü beklendiği üzere ilk sırayı alıyor. İkinci en yaygın entity türü LOC, LOC GPE türüne düşmeyen, ama yine de yer bildiren bir entity türü, GMK Bulvarı, Balgat Mahallesi, 4. sokak vb entityler bu gruba düşer. Bir diğer yer tipi entity grubu da FAC, FAC ünlü binalar ve yapılar demek; bu gruba örnek olarak da Maçka Parkı, Ankara Şehir Hastanesi, Sabiha Gökçen, Berlin Havaalanı, Şeker Fabrikası, 3M Migros vb gösterebiliriz. ADDRESSi ise açık adresleri göstermede kullandım. FAC, daha çok adres tariflerinde kullanılmış, önce adres gösterilmiş sonra da yakınlardaki bilindik bir yerin ismi kullanılmış, Karanfil Sok. Çiçek Apt. no:3 Balgat/Ankara, 3M Migrosun yanı’nda olduğu gibi.

Adı en çok geçen GPEler ise şu şekilde olmuş:

GPE ile etiketlenmiş entityler ve verisetinde geçme sayıları

Bir başka sıkça kullanılan entity tipi PERSON olmuş, bu entity tipi ne yazık ki enkaz altında kalan ve yakınlarının yardım için adreslerini yazdığı insanlarımızın isimleri olmuş. PHONE_NUMa ait entitiylerin azınlığı arama kurtarma yardımı alınacak kişi ve kurumların telefonları, çoğunluğu ise enkaz altındaki insanların telefonları olmuş. Bir başka aslan paylı entity ORG, bu entity tipi şirketleri, kurum ve kuruluşları gösterir. Bu verisetinde de AFAD, Ahbap gibi kuruluşların yanı sıra bakanlıkların adları da geçmiş.

Şimdi gel gelelim hükümete yönelen öfkeye. Öncelikle entityler arasında siyasi parti isimlerini, iktidar partisi AKP ve lideri Cumhurbaşkanı R. Tayyip Erdoğan’ın isimlerini aradım. Ayrıca öfkeye hedef olduğu söylenen iki kurum, Kızılay ve AFAD’ı da aradım. Sayıları karşılaştırmamız için, bu entitylerin sayılarını, verisetinde geçen bazı başka sözcüklerin sayılarıyla gösteren bir grafik yaptım:

6 Şubat günü yorumlarında geçen bazı siyasi entitiyler ve diğer bazı sık geçen sözcüklerle karşılaştırması

Grafikten anlaşıldığı üzere depremin ilk günü siyaset kimsenin derdi olmamış, yorumlar enkaz altındaki akraba/arkadaş/tanıdıkları aramaya, bölgedeki ihtiyaçlara ve yapılacak yardımlara yoğunlaşmış.

İlerleyen günlerde ise durum değişmiş. 7 Şubat’ta yardım-arama kurtarma-enkaz altında tanıdık arama içerikli yorumlar çoğunluk olmuş, ayrıca mutsuzluk, umutsuzluk, üzüntü duyguları da fazlalaşmış, öfke de bir miktar artmış. 8 ve 9 Şubat çok özel iki gün olarak yer almış, bu iki günde umut-umutsuzluk, sevinç-mutsuzluk ve heyecan birbirine karışmış (bu günde çok sayıda kurtarma haberi geldiğini düşünüyorum). 10 Şubat’ta ise sadece mutsuzluk ve tükenmişlik var, 11–12–13–14 Şubat ise sadece mutsuzluktan oluşmuş. 14 Şubat’tan sonra işlerin rengi değişmeye başlamış, mutsuzluğun dozu azalmış, yerine memnuniyetsizlik ve öfke gelmiş. 16–24 Şubat’ta ise öfkenin hem yüzdesi, hem de dozu gittikçe artmış.

Günlere göre öfkenin diğer duygulara yüzdesi
Öfke polarite değerlerinin günlere göre dağılımı

Bu iki grafikten ne çıkarabiliriz peki? Yukarda söylediğimiz gibi yazarlar afeti korku, mutsuzluk, umutsuzluk duygularıyla karşılamışlar; sonra da bu duygular sönmeye yüz tutmuş yerini ise öfkeye bırakmış. Pekçoğumuzun (özellikle ikili ilişkilerden) deneyimlediği üzere öfkenin kaynağı genelde mutsuzluk ve hayalkırıklığıdır, beklentilerimiz karşılanmadığında önce mutsuz hissederiz, daha sonra da beklentilerimizi karşılamamış olan insan(lar)a öfkeleniriz, sonunda da nefret ederiz. Hiçbir duygu topraklanıp öylece yok olup gitmez, her duygu sonunda başka bir duyguya dönüşür, olumsuz duyguların sonu da genelde kırgınlık, mutsuzluk, tükenmişlik veya öfkeye dönüşmek olur. Bu incelediğimiz 19 günde olumlu olumsuz her tür duygu karışmış, akmış gitmiş; sonunda ise buldukları yataksa öfke olmuş. Ruh sağlığı uzmanı değilim ama açığa çıkmış bunca duygunun sonunda olumsuz bir duyguya — öfkeye evrilmesi bana olağandışı gelmedi.

Elimizdeki verisetine bakarak da burda bir karalama kampanyası olduğunu söyleyemem, karalama kampanyalarını bulmak aslında gayet kolaydır. Karalama kampanyaları planlı şekilde yapılır ve uzunca bir zamana yayılır, olumsuz duygular hem süreklidir, hem de şiddetlidir; aralarda dalgalanmalar yoktur. Bu grafiklere baktığımda ise, ben bir doğal afetin tetiklediği bir duygu patlaması görüyorum. Patlamalar spontan ve tahmin edilemez olaylardır, duygu yoğunluğu ise olayların gidişatına göre dağılım gösterir (yukardaki öfke polaritesi grafiğinde olduğu gibi). Bu çıkarımları sadece bu başlığa/verisetine dayanarak yaptık, en doğru değerlendirme için tabi ki adı geçen kurumlara (AFAD, Kızılay) ait başlıkları da incelemek gerekir.

Sevgili okuyucular, bu yazının da sonuna geldik. Umarım sonraki yazılarımı daha mutlu olaylar ve olumlu duygular üstüne yazarım. O zamana kadar daha çok Türkçe NLP içeriği için websitemi ziyaret edebilirsiniz, Youtube kanalıma gelebilirsiniz veya Linkedin’de arkadaş olabiliriz. Sonraki görüşmemize kadar mutlu kalın🙋‍♀️🙋‍♀️🙋‍♀️

Notlar

  1. Bu sezonda üç adet duygu analizi veriseti hazırladım, isimleri ve linkleri şu şekilde:
    Vitaminler ve Takviye İlaçlar Veriseti
    Beyazperde Tüm Filmler Veriseti
    Beyazperde En İyi Filmler Veriseti
    Genel olarak derlediğim Türkçe verisetlerini Türkçe NLP Github repomda bulabilirsiniz. Kendi verisetinizi derlemek isterseniz de, Youtube kanalımdaki Veriseti Nasıl Derlenir video serisini tavsiye edebilirim 😊
  2. Teacher-student modellerini açıklayan şahane bir blog yazısı: https://www.amazon.science/blog/using-large-language-models-llms-to-synthesize-training-data
  3. spaCy Türkçe modelleri için birden fazla kaynak yarattım:
    Öncelikle modelleri indirmek için HF linki
    Modellerin nasıl yaratıldığını görmek için bu repo
    Modelleri kullanarak neler yapabilirsiniz görmek için de bu video serisi

--

--

Duygu ALTINOK

Senior NLP Engineer from Berlin. Deepgram member, spaCy contributor. Enjoys quality code, in love with grep. Youtube: https://www.youtube.com/c/NLPwithDuygu