sahte-haberlerin-belirlenmesi

Sahte Haberlerin Belirlenmesi

“A lie gets halfway around the world before the truth has a chance to get its pants on.”

– Winston Churchill

Herkese merhabalar! Veri Bilimi Okulu için hazırladığım ilk yazı sahte haberlerin belirlenmesi üzerine olacak. Bu çalışma, “kodluyoruz” tarafından düzenlenen “Uygulamalı Veri Bilimi ve Makine Öğrenmesi Bootcamp” inde ortaya çıkmıştır. Bootcamp’in son gününde her grup kendi yaptıkları çalışmadan bahsetti. Ben ve ekip arkadaşım Nader Alfakesh tarafından hazırlanmış olan bu çalışmayı elimden geldiğince siz değerleri okurlara aktaracağım.

Sahte Haber Nedir?

Bilindiği üzere bilgi çağında yaşıyoruz. Tüm dünyada özelliklede internetin hayatımıza girmesiyle bilgiye ulaşım çok kolay bir hal aldı. Bu bilgi akışı genel olarak “haberler” aracılığıyla sağlanmaktadır. Peki ulaştığımız haberler hangi oranda doğru veya sahte? Sahte haber kavramı çok eskilere uzansa da özellikle 2016 yılında D. Trump’ın başkan seçilmesiyle daha farklı bir boyuta taşındı. Özellikle seçim döneminde yaşanan propaganda savaşlarında kitleleri manipüle etmek için bir çok sahte haberin servis edildiğini dünya üzerinde duymayan kalmadı. “Cambridge Analytica” skandalıyla bu tür dezenformasyonların ne kadar etkili olduğu ve kötü bir hal aldığı ortada (Netflix’de yayınlanan “The Great Hack” belgeselini izlemenizi tavsiye ederim).

Temel olarak sahte haberleri 3 genel başlık altında toplayabiliriz*:

  1. Zarar verme amaçlı: Manipülasyon amaçlı üretilip, kasıtlı olarak yayınlanan haberler.
  2. Bilinçsizce yayılan ve zarar verme imkanı bulunan haberler: Doğruluğu teyide muhtaç olan ve zarar verme imkanı yüksek olan haberler.
  3. Parodi haberler: Eğlence amaçlı yayınlanan haberler.

Fakat sahte haber terimi son yıllarda siyasal söylemler doğrultusunda tanımsal olarak değişime uğradı diyebiliriz. Günümüzde çoğu politikacı (özellikle Trump), kendi bakış açısı dışında olan haberleri sahte olarak belirtmektedir.

Sahte haber terimi, yapılan araştırmalar sonucunda 2017 yılında en çok kullanılan terimlerinden arasında yer aldı. Sahte haberlerin yayılma hızı, hayatımıza giren sosyal medya sayesinde daha da artmaktadır.

Sahte haberlerle mücadele aslında bir metin sınıflandırma projesidir. Bu çalışmanın kapsamında sadece ingilizce haberlerden yararlanıldı. Türkçe haberler için bu teknikler kullanılmadı. Amacımız, Gerçek ve Sahte haberler arasında ayrım yapabilen bir model oluşturabilir miyiz? sorusuna cevap verebilmekti.

Amaç

Bu çalışmanın amacı hem sahte haberlerin hem de kullanılan sınıflandırma algoritmalarının hangisinin daha iyi sonuç verdiğinin belirlenmesiydi. Başlangıçta performans ölçütlerimizin bu kadar iyi sonuçlar vereceğini beklememiştik. Çünkü sahte ve gerçek ayrımı için kelimeler arasındaki anlamsal yaklaşımı kullanmamış sadece kelimelerin metin içerisindeki ağırlıklarından yararlanmıştık (Terim sıklığı ve Ters Döküman Sıklığı – Term Frequency – Inverse Document Frequency – TF-IDF). Fakat aşağıda da göreceğiniz üzere güzel sonuçlar aldık diyebilirim. Aslında literatürde bu alanda bir çok çalışma mevcut. Özellikle de word2dec ve fast text gibi kütüphanelerin yardımıyla daha da anlamlı sonuçlar elde edilmektedir. Bu sebeple bu çalışmayı NLP (Doğal Dil İşleme – Natural Language Processing) için giriş seviyesi olarak da düşünebilirsiniz. Yukarıda her ne kadar iki temel amacımız olduğundan bahsetmiş olsam da gizli amacımız bu alanda kendimizi geliştirmek ve NLP yaklaşımlarını bir proje üzerinden kavramaktı.

Sınıflandırma işlemini nasıl gerçekleştirdik?

Metin madenciliğinde en büyük problem, kullanılan verinin yapısal olmamasıdır. Bu sebeple sınıflandırma işleminin yapılabilmesi için özniteliklerin belirlenmesi yani kullanılan metnin yapısal veriye dönüştürülmesi gerekmektedir. Fakat verinin sayısallaştırılmasından önce kullanılan metnin temizlenmesi gerekmektedir.

Bu çalışma kapsamında aşağıdaki akışı takıp ettik.

Şekil-1: Akış

1- Veri Seti (Haberler):

Çalışmayı öne sürdüğümüzde elimizde bir veri seti mevcut değildi. Yapılan araştırmalar sonucunda Katharine Jarmul tarafından hazırlanmış veri setine ulaştık. Katharine’nın veri seti toplam 6336 haberden oluşuyor. Bunların yarısı sahte yarısı gerçek olarak sınıflandırılmış. Yani dengeli bir veri setine sahibiz diyebilirim. Bunun sonucu olarak performans ölçütlerinden accuracy bilgisi iyi bir fikir verecek olsa da recall, precision ve F1 değerlerine de bakıldı.

2- Metin Ön İşleme:

6336 haber için metin ön işleme adımlarını takip ettik. Bu sayede elimizde temiz bir veri seti oldu.

Metin ön işleme adımları aşağıdaki gibidir:

  • Lower-case: Haber içerisindeki bütün kelimeler, küçük harflere dönüştürülerek farklılıklar ortadan kaldırıldı.
  • Noktalama işaretleri, özel karakterlerin ve sayıların silinmesi: Metin içerisindeki işaret, karakter ve sayılar, boşluk karakteri ile değiştirildi.
  • Tokenize işlemi: Haber metinleri kelimelere parçalandı.
  • Stop-words’lerin silinmesi: Tek başına anlam ifade etmeyen kelimeler çıkartıldı. Örneğin; “and”, “the” vs.
  • Stemming / Lemmatization: Morfolojik kökün elde edilmesi için kök bulma işlemi gerçekleştirildi.

Metinin Görselleştirilmesi

Metin ön işleme adımlarını bitirdikten sonra mevcut veri setimizin görselleştirilmesi yapıldı. Bu aşamada sınıf temelli inceleme yaptık. Yani sahte haberleri kendi içerisinde, gerçek haberleri kendi içerisinde inceledik. Hem Şekil-2 hem de Şekil-3 incelendiğinde benzer kelimelerin olduğunu görebiliriz. Hemen hepsi politika ve seçim üzerine. Unutulmaması gerekiyor ki kullandığımız veri setinin içeriği politika haberlerinden oluşuyordu.

Şekil-2: Sahte haberde en kullanılan ilk 15 kelimenin dağılımı
Şekil-3: Gerçek haberde en kullanılan ilk 15 kelimenin dağılımı

Haber içeriklerinde ağırlıklı olarak Trump ve Clinton kelimelerini görüyoruz. Her ne kadar belirgin bir fark olmasa da Clinton (Hillary Clinton) ismi sahte haberlerde daha fazla geçiyor. The Great Hack belgeselinden de biliyoruz ki seçim döneminde Hillary Clinton hakkında bir çok sahte haber servis edilmişti.

Metin görselleştirme aşamasında bir diğer popüler gösterim olan “Kelime Bulutu” (Word Cloud) gösteriminden yararlandık. En çok kullanılan kelimeleri belirlerken kullandığımız stratejinin aynısını kelime bulutu gösterimi içinde uyguladık. Yani iki sınıfı kendi içerisinde değerlendirdik. Şekil-4 ve Şekil-5’de en çok kullanılan terimlerin kelime bulutu gösterimlerini oluşturduk.

Şekil-4: Sahte haberlerin “Word Cloud” gösterimi.
Şekil-5: Sahte haberlerin “Word Cloud” gösterimi.

3- Metnin Sayısallaştırılması:

Bu aşamada vektör uzay modelinden yararlanılmıştır. Vektör uzayları, metinlerin yapısal olmayan formdan sayısal hale getirilmesini sağlayan en geniş kabul gören yöntemdir. Bu yaklaşım aslında her metnin vektör olarak temsil edildiği bir BoW (Bag of Word) sürümü olup, her boyut ayrı bir terime karşılık gelmektedir. Yani her metin, mevcut kelimelerden oluşan MxN büyüklüğünde bir vektördür. Kısacası vektörler üst üste eklenerek döküman-terim matrisi oluşturulur. Bu matris, M adet haber ve n adet terimden oluşmaktadır. İlgili terimler haber içerisinde geçiyorsa o terimin ağırlık değeri sıfırdan farklı olur. Terimin ağırlık değerinden kast edilen aslında ilgili terimin metin üzerindeki etkisidir denilebilir.

Peki terim ağırlığı nasıl hesaplanır? Yaygın olarak iki yöntem kullanılmaktadır. Bunlardan ilki terim sayma (Count Vectorizer) ikincisi ise TF-IDF yaklaşımıdır. Terim sayma işlemi, ilgili terimin haber içerisinde ne kadar geçtini belirler. TF-IDF yaklaşımında ise hem ilgili terimin haber içerisindeki sıklığına (Term Frequency – TF) hem de bütün haberler içerisindeki önemine bakılır (Inverse Document Frequency – IDF).

TF-IDF (t, d) = TF(t, d) x log(N/DF(t))

t = Terim
d = Metin – Haber
TF = Terim sıklığı (haber içerisinde t’inci terimin kaç kez geçtiği)
DF = t’inci terimi içeren haber sayısı
N = Toplam haber sayısı

Bu çalışma kapsamında metin sayısallaştırılması TF-IDF yaklaşımıyla yapılmıştır.

Şekil-6: TF-IDF Matrisi

4 – Sınıflandırma Algoritmalarının Karşılaştırılması:

Bu çalışmadaki amaçlarımızdan biri yukarıda da belirttiğim üzere hangi sınıflandırma algoritmasının sahte haberleri yüksek doğrulukla belirleyecek sorusuna cevap bulmaktı. Bu sebeple 7 sınıflandırma algoritmasından yararlandık. Bu algoritmalar Şekil-7’de gösterilmektedir. Başlangıçta 4 favori algoritmamız vardı. Bunlar multinomialNB, XGBoost, Random Forest ve Logistic Regression du. Sebeplerleri kısaca şöyle sıralayabilirim. Multinomial Naive Bayes algoritması birçok metin sınıflandırma probleminde kullanılmakta ve kendini ispatlamış algoritmalardan. Random Forest (Rastgele Orman) birden fazla karar ağacını kullanarak aşırı öğrenmeye karşı dirençli bir algoritmadır. Ayrıca çok geniş bir uygulama alanına sahip olup günümüzde en çok kullanılan makine öğrenimi algoritmaları arasında yer almaktadır. XGBoost algoritması, hem gradyan hızlandırıcıları hem de karar ağaçlarını kullanan bir makine öğrenmesi algoritmasıdır. 2016 yılında ortaya çıkmasıyla beraber makine öğrenimi dünyasını ele geçirdi diyebiliriz. XGBoost, Kaggle yarışmalarının yıldızı durumundadır. Lojistik Regresyon ise ikili sınıflandırma problemlerini doğası gereği iyi çözmektedir. Bizim verimizde de sahte ve gerçek haber diye iki sınıf bulunduğu için tercih ettik. Bununla beraber üç farklı algoritmayı daha test ettik. Bunlar sırasıyla: k-En Yakın Komşuluk (kNN, k-nearest Neighbors), Stokastik Gradyan İnişi (SGD, Stochastic Gradient Sescent), Destek Vektör Makineleri (SVC, Support Vector Classifier).

Şekil-7: Kullanılan sınıflandırma algoritmaları

Confusion Matrix

Çalışma kapsamında kullanılan modellerin değerlendirmesini yapmak için sadece doğruluk (accuracy) parametresinden yararlanmadık. Bununla beraber karmaşıklık matrisileride (Confusion matrix) incelendi. Karmaşıklık matrisi her bir model için hem tahmin hem de gerçek değerlerimizin nasıl dağıldığını görememizi sağlayan bir matristir. Bu matrisi kullanarak diğer başarı parametreleri olan precision, recall ve f1 skor değerleride hesaplanabilmektedir.

Aşağıda herbir model için üretilmiş olan karmaşıklık matrisleri görülmektedir.

Şekil-8: Lojistik Regresyon için Karmaşıklık Matrisi
Şekil-9: XGBoost için Karmaşıklık Matrisi

Şekil-10: Random Forest için Karmaşıklık Matrisi

Şekil-11: SGD için Karmaşıklık Matrisi

Şekil-12: kNN için Karmaşıklık Matrisi

Şekil-13: Multinomial NB için Karmaşıklık Matrisi

Şekil-14: SVC için Karmaşıklık Matrisi

Elde edilen doğruluk oranları ise aşağıdaki gibi elde edilmiştir:

Şekil-14: Elde edilen doğruluk (accuracy) değerleri

Bununla birlikte “eğitim” ve “test” verisini seçerken herhangi bir yanlılık yapmadığımızdan emin olmak için k-katmanlı çapraz sorgulama (k-fold cross validation) yaptık. k değerimizi 10 olarak belirledik. Yani veri setimizi 10 eş parçaya ayırarak 10 kez farklı verilerle doğruluk (accuracy) oranını hesaplamış olduk.

Şekil-15: k-fold cv kullanılarak elde edilen doğruluk (accuracy) değerleri

Yukarıdaki tablodan da görüldüğü üzere doğruluk değerlerimiz k-katmanlı çapraz sorgulama yapmadan hesapladığımız doğruluk değerleriyle hemen hemen aynı. Ayrıca doğruluk değerlerinin hata oranlarıda çok küçük. Bu durum, yaptığımız işin güvenilirliği hakkında bizlere daha güvenilir sonuçlar vermektedir.

ROC Eğrisi

7 farklı modelin karşılaştırılmasıyla en iyi modelin lojistik regresyon olduğunu belirledik. Fakat son bir inceleme yapmak için herbir modele ait ROC (Receiver Operating Characteristic) grafiğini ürettik. ROC eğrisi, ikili sınıflandırma sistemlerinde yaygın olarak tercih edilen yöntemlerdendir. Bir ROC eğrisi, iki boyutlu bir grafiktir. y-ekseninde doğru pozitif oranı, x-ekseninde ise yanlış pozitif oranı mevcuttur. Bu sayede hangi modelin diğerlerinden daha iyi olduğu karşılaştırılmaktadır. ROC eğrisinde bizim için önemli olan metrik AUC (Area Under the Curve) dir. AUC, eğri altındaki alan anlamına gelir ve modelin kalitesini ve performansını temsil etmek için kullanılan bir metriktir. AUC değeri 0 ile 1 arasında değişmektedir. Değerimiz 1’e ne kadar yakın ise modelimiz o kadar başarılıdır diyebiliriz. Aşağıdaki grafikte farklı modellere ait ROC eğrisi mevcuttur. Grafikte de görüldüğü üzere en yüksek AUC değerine sahip model lojistik regresyondur.

Şekil-16:ROC eğrisi

SONUÇ

Sonuç olarak, bu çalışma kapsamında 7 farklı sınıflandırma algoritmasını karşılaştırdık. Sahte ve gerçek haber ayrımı için en yüksek doğruluğu (accuracy) Lojistik Regresyon’un vermiş olduğunu belirledik.

Bu yazı kapsamında sizlere aktaracaklarım bu kadar. Umarım faydalı olabilmişimdir.

Bilimin mihraplarında bilginin peşinde koşmanız dileğiyle. Sağlıcakla Kalın 🙂

Referanslar:

1- BBC – https://www.youtube.com/watch?v=XFGpNBhuNeE

2- https://nycdatascience.com/blog/student-works/identifying-fake-news-nlp/

3- Uygulamalarla Veri Bilimi (Doç. Dr. Deniz Kılınç-Nezahat Başeğmez – Abaküs Yayınları)

4- Makine Öğrenmesi (Dr. Metin Bilgin – Papatya Bilim)

5- https://www.datacamp.com/community/tutorials/scikit-learn-fake-news

6- Deep Learning with Keras (Francois Chollet – Manning)

7- https://www.kaggle.com/mrisdal/fake-news

Yazar Hakkında
Toplam 6 yazı
Eyüp Kaan Ülgen
Eyüp Kaan Ülgen
İstanbul Üniversitesi, Astronomi ve Uzay Bilimleri Bölümünde Doktora Öğrencisi. Doktora çalışma konusu: Galaksi kümelerindeki parlak galaksilerin çevreyle olan ilişkisi. İlgi alanları; Galaksi Evrimi, Veri Bilimi, Makine Öğrenimi, Derin Öğrenme ...
Yorumlar (1 Yorum)
ahmet bayram
ahmet bayram Yanıtla
- 18:19

Eyüp Kaan bey gerçekten çok güzel bir çalışma va bütün aşamalarının bir arada olması harika.
Ancak bu tür konularda neler var neler yok diye araştırırken genelde yaşadığım sıkıntı bu tür uygulamaların bir parçasının anlatılması,neden bu yöntemin seçildiğine ilişkin bilginin olmaması ve genelde veri seti olarak yabancı kaynakların olmasıdır.
Örneğin şu anlatmış olduğunuz konuyu bize ait yani türkçe kaynak kullanılarak anlatılmış olsa inanın daha çok akılda kalacak ve daha çok ip ucu yakalanacak diye düşünüyorum. Örneğin türkçedeki stop words çalışmasına katkı sunulacak.

Türkçede morfoşojik köklerin bulunması için zemberek nasıl kullanılcak pythonda.

Sizlerden bir ricam da bu konu ile yazmış olduğunuz python kaynak kodlarına nereden ve nasıl ulaşacağız.
Umarım kodlarınız açıklamalıdır.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara