Python'da Yalan Haber Tespit Projesi [Kodlamalı]

Yayınlanan: 2020-12-14

Hiç sahte görünen bir haber okudunuz mu? Hepimiz bu tür haber makaleleriyle karşılaşıyoruz ve içgüdüsel olarak bir şeylerin doğru gelmediğini anlıyoruz. Çok fazla gönderi olduğu için, doğruyu yanlıştan ayırmak neredeyse imkansız. Burada sadece asılsız iddialardan ve olgusal noktalardan değil, dilin kendisinde karmaşık bir şekilde yanlış görünen şeylerden bahsediyoruz.

Sahte bir haber tespit projesinin nasıl geliştirileceğini hiç merak ettiniz mi? Ancak sosyal medyadaki haberlerin yayılma hızı ile özellikle bu günlerde hangi haberin yalan hangisinin yalan olduğunu bulmanın kolay bir yolu yok. Yine de, bazı çözümler bu yanlışları belirlemede yardımcı olabilir.

Bazı haberlerin yalan olup olmadığını iddia etmenin iki yolu vardır: Birincisi, olgusal noktalara yönelik bir saldırı. İkincisi, dil. İlki, yalnızca otomatik sorgulama sistemleriyle internete yapılan önemli aramalarla yapılabilir. Özellikle veri bilimine ve doğal dil işlemeye yeni başlayan biri için bunaltıcı bir görev olabilir.

İkincisi, doğal bir dil işleme hattı ve ardından bir makine öğrenme hattı aracılığıyla mümkündür. Sahte haber tespit projemizi Python'da bu şekilde uygulayacağız . Doğal dil işleme problemi olarak ortaya konan bir makine öğrenme problemi olarak kabul edilen problemlerden bir diğeridir. Yeni başlayan biriyseniz ve veri bilimi hakkında daha fazla bilgi edinmek istiyorsanız, en iyi üniversitelerden veri bilimi çevrimiçi kurslarımıza göz atın.

Okuyun: Python Proje Fikirleri ve Konuları

Bu tür bir uygulama için birçok veri seti var, ancak burada bahsedileni kullanıyor olacağız . Veriler, iki hedef etiketli yaklaşık 7500+ haber beslemesi içeriyor: sahte veya gerçek. Veri seti ayrıca ilgili haberin başlığını da içerir.

Doğal dil işleme için boru hattındaki adımlar aşağıdaki gibi olacaktır:

  1. Verilerin alınması ve yüklenmesi
  2. Veri kümesini temizleme
  3. Fazladan sembollerin kaldırılması
  4. Noktalama işaretlerini kaldırma
  5. Durdurulan kelimeleri kaldırmak
  6. kök salmak
  7. Tokenizasyon
  8. Özellik çıkarma
  9. TF-IDF vektörleştirici
  10. TF-IDF transformatörlü sayaç vektörleştirici
  11. Makine öğrenimi modeli eğitimi ve doğrulaması

Sahte haber tespit projesinin uygulama adımlarını tartışmaya başlamadan önce gerekli kütüphaneleri import edelim:

Kod:

pandaları pd olarak içe aktar
numpy'yi np olarak içe aktar
yeniden içe aktar
ithalat dizesi
nltk.corpus'tan stopwords içe aktarma
nltk.tokenize'den word_tokenize'yi içe aktarın

stop_words = set(stopwords.words( 'ingilizce' ))

İlk adım, verileri elde etmektir. CSV dosyasının bağlantısını zaten sağladık; ancak, verilerinizi oluşturmanın diğer yolunu tartışmak da çok önemlidir.

Yöntemlerden biri web kazımadır. Bunun için bir web tarayıcısı kodlamamız ve verileri almanız gereken siteleri belirtmemiz gerekiyor. Ancak dikkatli olun, bu yaklaşımla ilgili iki sorun var.

İlk olarak, birçok siteyi hurdaya çıkarmak yasa dışı olabilir, bu nedenle bununla ilgilenmeniz gerekir. İkincisi, veriler çok ham olacaktır. Tüm işlem hattına, bu ham verileri uygulanabilir bir CSV dosyasına veya veri kümesine dönüştürmek için bir adım listesi eklenir. Bu nedenle, önceden ayarlanmış CSV dosyasını organize verilerle kullanırız.

Bununla birlikte, ilgileniyorsanız, Veri mühendisliği ve web kazıma hakkında uygun açıklamalarla birlikte yeterli kaynağın bulunduğu upGrad'ın Veri bilimi hakkındaki kursuna göz atabilirsiniz. Buradakileri kontrol ettiğinizden emin olun .

Veri kümemizi bu şekilde içe aktarır ve etiketleri ekleriz. Gereksiz sütunları veri kümesinden nasıl çıkardığımıza dikkat edin. Gerekirse daha yüksek bir değerde bu sütunları yukarıda tutabilirsiniz. Ancak şu anda sahte haber tespit projemiz yalnızca metin ve hedef etiket sütunlarında sorunsuz çalışacaktı.

Kod:

df_text = pd.read_csv( 'fake_or_real_news.csv' , encoding= 'latin-1' )
df_text.columns = [ 'id' , 'title' , 'text' , 'label' ] df_text.drop(['id', 'title'], axis=1)

Devam ederken, bir sonraki adım mevcut verileri temizlemektir. Bu adım neden gerekli? Bir makineyle çalıştığımızı anlamak ve ona sahte ile gerçeği ayırmayı öğretmek çok önemlidir. Şu anda elimizde metinsel veri var ama bilgisayarlar sayılar üzerinde çalışıyor. Bu yüzden önce onları sayılara dönüştürmek gerekir ve bundan önceki adım, yalnızca anlama için gerekli olan metinleri dönüştürdüğümüzden emin olmaktır.

Temizleme hattındaki ilk adım, veri kümesinin silinecek fazladan sembol içerip içermediğini kontrol etmektir. Web adresleri veya at(@) veya hashtag'ler gibi diğer referans sembollerinden herhangi biri olabilir. İşte kod:

Kod:

# URL'leri kaldır
metin = re.sub( r”http\S+|www\S+|https\S+” , , metin, flags=re.MULTILINE)
# Kullanıcı @ referanslarını ve '#' metinden kaldırın
metin = re.sub( r'\@\w+|\#' , , metin)

Bunu kaldırdığımızda, sonraki adım diğer sembolleri, noktalama işaretlerini temizlemektir. Bunu düşünürsek, noktalama işaretlerinin belirli bir haberin gerçekliğini anlamada net bir girdisi yoktur. Bazen, çok fazla noktalama işareti varsa, örneğin aşırı ünlem kullanımı gibi haberlerin gerçek olmaması mümkün olabilir.

Ancak bunlar nadir görülen durumlardır ve belirli kural tabanlı analiz gerektirir. Yani, bu sahte haber tespit projesi için noktalama işaretlerini kaldırıyor olacağız. Bunu nasıl yapacağınız aşağıda açıklanmıştır:

Kod:

metin = text.translate(str.maketrans( , , string.noktalama))

Bir sonraki adım, kelimeyi özüne bağlamak ve kelimeleri tokenize etmektir. Belirteçleştirme, her cümleyi bir sözcük veya belirteç listesine dönüştürmek anlamına gelir. İşte eklenmesi gereken iki satırlık bir kod:

Kod:

belirteçler = word_tokenize(metin)
kelimeler = [ stop_words'de w değilse belirteçlerde w için w ]

Bir sonraki adım çok önemli. Belirteçlerin anlamlı sayılara dönüştürülmesi. Bu adım aynı zamanda özellik çıkarma olarak da bilinir. Uygulamamız için, makine öğrenimi ardışık düzenimizin özelliklerini çıkarmak ve oluşturmak için TF-IDF yöntemiyle gidiyoruz.

TF-IDF esasen terim frekansı-ters belge frekansı anlamına gelir. Adından da anlaşılacağı gibi, veri kümesi hakkındaki bilgileri, terimlerin sıklığı ve tüm veri kümesindeki terimlerin sıklığı veya belgelerin toplanması yoluyla alırız.

TF-IDF, hem TF hem de IDF değerleri karıştırılarak kolayca hesaplanabilir. Her iki formül de basit oranlar içerir.

TF = hayır. terimin belgede görünme sayısı / toplam terim sayısı.

IDF = günlük (toplam belge sayısı / terimin geçtiği belge sayısı)

Şimdi Python'un TF-IDF dönüşümü için iki uygulaması var. Birincisi bir TF-IDF vektörleştiricisi ve ikincisi TF-IDF transformatörüdür. Aradaki fark, transformatörün dönüşümden önce bir kelime çantası uygulaması gerektirmesi, vektörleyicinin ise her iki adımı bir araya getirmesidir. Ayrıca, basit bir kelime çantası uygulaması olan sayım vektörleştiricisini de kullanabiliriz. Ancak TF-IDF, belirli veri kümesi üzerinde daha iyi çalışır.

TF-IDF'nin nasıl uygulanabileceği aşağıda açıklanmıştır.

Kod:

sklearn.feature_extraction.text dosyasından TfidfVectorizer içe aktarın

tf_vector = TfidfVectorizer(sublinear_tf= True )
tf_vector.fit(df_text[ 'metin' ])

Bir sonraki adım, Makine öğrenimi ardışık düzenidir. Tıpkı tipik ML ardışık düzeninde olduğu gibi, verileri X ve y'ye almamız gerekiyor. Bunu yapmak için, düzleştirilmesi gereken TF-IDF vektörleştiricisi tarafından çıktı olarak sağlanan matris olarak X'i kullanırız.

Matrisi bir diziye dönüştürmek için Python'daki travel fonksiyonunu kullanabiliriz. Y değerleri, sayı değil, etiket oldukları için doğrudan eklenemez. Onları 0'lara ve 1'lere dönüştürmek için sklearn'in etiket kodlayıcısını kullanıyoruz.

Bu kodlayıcı, etiket metinlerini numaralandırılmış hedeflere dönüştürür. Örneğin, şöyle bir etiket listemiz olduğunu varsayalım: ['gerçek', 'sahte', 'sahte', 'sahte']

Esasen ihtiyacımız olan şey şöyle bir liste: [1, 0, 0, 0]. Etiket kodlayıcının yaptığı, tüm farklı etiketleri alıp bir liste yapmaktır. Örneğimiz için liste ['sahte', 'gerçek'] olacaktır.

İşte aynı uygulanması:

Kod:

X_text = tf_vector.transform(df_text[ 'metin' ].ravel())
y_values ​​= np.array(df_text[ 'etiket' ].ravel())

sklearn içe aktarma ön işlemesinden
le = önişleme.LabelEncoder()
le.fit(y_değerleri) le.transform(y_değerleri)

Tamamlandığında, eğitim ve test bölmeleri yapılır. Bu, sklearn'in ön işleme paketini kullanarak ve tren testi bölme işlevini içe aktararak elde edilebilir.

Kod:

sklearn.model_selection'dan train_test_split'i içe aktarın

X_train, X_test, y_train, y_test = train_test_split(X_text, y_values, test_size= 0.15 , random_state= 120 )

Son adım, modelleri kullanmaktır. Kullanılabilir birçok iyi makine öğrenimi modeli vardır, ancak basit temel modeller bile sahte haber algılama projelerini uygulamamızda iyi sonuç verir . Önce bir lojistik regresyon modeli uyguluyoruz. İşte sklearn kullanarak nasıl uygulanacağı.

Kod:

sklearn.metrics'den doğruluk_score'u içe aktarın

sklearn.linear_model'den LogisticRegression'ı içe aktarın

model = LogisticRegression(çözücü= 'lbfgs' )
model.fit(X_tren, y_tren)
y_predict = model.predict(X_test)
print(doğruluk_skoru(y_test, y_tahmin))

Model oldukça iyi performans gösteriyor. Bir regresyon modelinde yüzde 92 doğruluk oldukça iyi. Ayrıca mevcut diğer modelleri de uygulayabilir ve doğruluklarını kontrol edebilirsiniz.

Python kullanarak sahte bir haber tespit projesini bu şekilde uygulayabilirsiniz.

Burada yapılacak çok şey olduğunu unutmayın. NLP boru hattı henüz tam olarak tamamlanmadı. Daha da iyi özellik çıkarımları elde etmek için uygulanabilecek birçok başka işlev vardır.

Ayrıca Okuyun: Python Açık Kaynak Proje Fikirleri

Sahte haberlerin teknolojiyi uyarlama şekli, daha iyi ve daha iyi işleme modelleri gerekli olacaktır. Ve bu modeller daha çok doğal dil anlayışına yönelik olacak ve bir makine öğrenimi modelinin kendisi olarak daha az ortaya çıkacaktı. Modeller ayrıca kullanılan özelliklere göre ince ayar yapılabilmektedir. Veri seti, mevcut veriler üzerinde çalışmasını sağlamak için dinamik olarak uyarlanabilir hale getirilebilir. Ancak bu, güncel haber makaleleri üzerinde kapsamlı bir şekilde eğitilmiş bir model gerektirecektir.

Dolayısıyla, daha fazla veri mevcutsa, daha iyi modeller yapılabilir ve sahte haber tespit projelerinin uygulanabilirliği geliştirilebilir. Ancak iç şema ve çekirdek boru hatları aynı kalacaktı. Açıklanan boru hatları, yapmak isteyebileceğiniz herhangi bir deneye son derece uyarlanabilir. Farklı işlevleri denemekten ve oynamaktan çekinmeyin.

Hızlı teknolojik gelişmelerin önünde olmak için veri bilimi öğrenmeyi merak ediyorsanız, upGrad & IIIT-B'nin Veri Biliminde Yönetici PG Programına göz atın ve gelecek için kendinizi geliştirin.

Python'da sahte haber tespit projesi geliştirmek için gerekli beceriler nelerdir?

Python, dinamik yazımı, yerleşik veri yapıları, güçlü kitaplıkları, çerçeveleri ve topluluk desteği nedeniyle sahte haber algılama projeleri oluşturmak için kullanılır. Python'da sahte haber tespit projesi geliştirmek için gereken diğer gerekli beceriler Makine Öğrenimi, Doğal Dil İşleme ve Yapay Zekadır. Bu becerilerin bilgisi, bu projeyi yapmayı planlayan öğrenciler için bir zorunluluktur. Öğrenciler bu becerileri çevrimiçi olarak kolayca öğrenebilirler.

Şirketler Python'un Sahte Haber Tespit Projelerini nasıl kullanıyor?

Yalan haberlerin çoğu sosyal medya platformlarında bulunduğundan, gerçek ve yalan haberleri ayırmak zor olabilir. Sosyal medya platformları ve çoğu medya firması, dolaşan haberlerin uydurma olup olmadığını otomatik olarak belirlemek için Sahte Haber Tespit Projesi'ni kullanır. Çoğu şirket, sıkıcı görevi yerine getirmek için insanlara güvenmek yerine, bu sahte haber bulma sürecini otomatikleştirmek için projeye ek olarak makine öğrenimini kullanır.

Python'un diğer gerçek hayattaki uygulamaları nelerdir?

Python, çok çeşitli gerçek dünya uygulamalarına sahiptir. Python, platformlar arası işletim sistemlerini destekler ve bu da onu kullanan uygulama geliştirmeyi çok daha kolay yönetilebilir hale getirir. Python, YouTube, BitTorrent ve DropBox dahil olmak üzere dünyanın en iyi bilinen uygulamalarından bazılarına güç sağlamak için kullanılır. Python genellikle yenilikçi oyunların üretiminde kullanılır. Python, depolanan verilere dayalı tekrar eden algoritmaların oluşturulmasına yardımcı olduğu için makine öğrenimi, veri bilimi ve yapay zekada da kullanılır. Python, kullanıcıların daha sonra fiyat karşılaştırması, iş ilanları, araştırma ve geliştirme vb. gibi çeşitli gerçek dünya operasyonlarında kullanabilecekleri web sitelerinden büyük miktarda veri ayıklamak söz konusu olduğunda bir cankurtarandır.