Duygu Analizi Nedir?

Günümüzde internetin yaygın kullanımı insanlara duygularını ve fikirlerini paylaşabildikleri sosyal medya, forum, blog gibi ortamlar sunmaktadır. Bu sanal ortamlarda  kullanıcıların görüşlerini içeren çok  büyük miktarda veri bulunmaktadır. Sürekli kendini yenileyen kullanılabilir veri akışı söz konusudur. Bu  veriler, bu ürünleri üreten ve satan firmalar olmak üzere birçok kişinin ve araştırmacının ilgisini çekmektedir. Bu durum son günlerde önemli araştırma konularından biri olan duygu analizini popüler hale getirmiştir.

Duygu Analizi temel olarak bir metin işlemedir. Bir yazarın veya bir yazının duygusal olarak ifade etmek istediği sınıfı (örneğin; olumlu, olumsuz, tarafsız) belirlemeyi amaçlar. Duygu analizi metinlerde saklı olan görüşleri çeşitli algoritmalar aracılığı ile hesaplayıp, tanımlama ve sınıflandırma sürecini içerir. Finans, tıp, medya, politika gibi bir çok alanda kullanılmaktadır. Ürün incelemelerinde, tüketicilerin bir ürün ile alakalı memnuniyet ölçümü yapılabilmesi ve firmaların kendi ürünleri hakkında gerekli düzeltmeleri yapması adına yaygın olarak kullanılan bir tekniktir.

Günümüzde e-ticaretin yaygınlaşmasıyla ürün değerlendirmeleri önemli hale gelmiştir. Örneğin internet üzerinden bir ürünü satın almak istediğimizde önce ürün yorumlarını inceleriz eğer yorumlar olumluysa bu durum ürünü alma konusunda bizi ikna edebilir veya bir filmi izlemeden önce IMDb puanı kaç, çoğu kişi tarafından beğenilmiş mi, yorumlar güzel mi? diye bakıp filmi izleyip izlemeyeceğimize karar verebiliriz. Bu durumlar duygu analizinin en basit örneklerindendir.

Şimdi Python ile duygu analizine örnek olabilecek bir uygulama yapalım.

Derin Öğrenme ile İMDb Film İncelemelerinde Duygu Tahmini

Bu çalışmada Keras kütüphanesinin sağladığı IMDb duyarlılık sınıflandırma veri seti kullanılmıştır. Veri seti İMDb kullanıcılarının 50.000 film incelemesinden oluşur. Olumlu yorumlar (1) ve olumsuz yorumlar (0) olarak etiketlenmiştir. Kelimeler, veri kümesi içindeki genel sıklıklarına göre dizine eklenmiştir. Örneğin, “3” , veride en sık kullanılan üçüncü sözcüğü ifade eder. IMDb, kullanıcıların filmleri 1’den 10’a kadar bir ölçekte derecelendirmesine olanak tanır. Veri setinde yorumlayıcıların verdiği 4 yıldız ve aşağısı negatif, 7 yıldız ve fazlası pozitif olarak etiketlenmiştir. 5 ve 6 yıldızlı incelemeler dışarıda bırakılmıştır.

Kullanılan Kütüphaneler

Veri Seti

Veri seti yüklenmiştir. Metinler önceden işlenmiş ve her yorum (içindeki kelime sayısı kadar) tam sayı biçiminde kodlanmıştır.

Yukarıda, pozitif olarak etiketlenen veri ve her yorumun karşılık geldiği sayısal değerler görülmektedir.

Keşifçi Veri Analizi

Veri setini incelediğimizde olumlu(1) ve olumsuz(0) olmak üzere ikili bir sınıflandırma problemi olduğu görülmektedir. Toplam kelime sayısı 88585’tir. Ortalama kelime sayısının 235 olduğunu ve standart sapmanın 200 kelimenin biraz altında olduğunu görebiliriz.

Film incelemelerine ait yorumların uzunlukları için yukarıdaki kutu grafiğine baktığımızda uzunlukların değiştiği görülmektedir, Örneğin bir film incelemesi 1000 kelime, ikincisi ise 500 kelime içerebilir. Kutu grafiğinden yola çıkarak uzunlukları standartlaştırmak için her yorumu 400 ile 500 kelimelik bir uzunluğa eşitleyip işlem yapabiliriz.

Eğitim ve Test Verisinin Ayrılması

Veride toplamda 88584 tane kelime vardı bu çok fazla olduğu için veri kümesinde yalnızca en çok kullanılan 10.000 kelimeyle ilgilendiğimizi varsayalım. Bu nedenle kelime dağarcığımız 10.000 olacaktır. Ayrıca veri kümesinin yarısı eğitim, yarısı test için kullanılmıştır.

Film incelemelerinin (girdilerin) uzunluklarını standartlaştırmak için sequence.pad_sequences () işlevi kullanılmıştır. Veri kümesini her gözlem için 400 kelime uzunluğuna kesmek veya doldurmak için Keras kullanılmıştır. 400 kelimeden  daha kısa olan diziler, 0 ile doldurulur. 400’den uzun diziler de istenen uzunluğa sığmaları için kesilmiştir.

Örneğin eğitim setindeki 8. yorum, 400 kelimeye tamamlanmak amacıyla  0 değerleri ile doldurulmuştur.

Basit Çok Katmanlı Algılayıcı Model (Simple Multi-Layer Perceptron Model) Oluşturma ve Eğitme

Tek bir gizli katmana sahip basit çok katmanlı algılayıcı model (Simple Multi-Layer Perceptron Model) geliştireceğiz.

  • Modelimizin ilk katmanı(girdi katmanı), Keras’ın metin verilerindeki sinir ağları için sunduğu Embedding() sınıfı kullanılarak oluşturulan, kelime gömme katmanıdır. Kelime dağarcığı 10.000, her bir kelimeyi temsil etmek için kelime vektörü 32 boyut olarak ve input_length değeri de 400 olarak ayarlanmıştır. Bu ilk katmanın çıktısı, 32 × 400 boyutunda bir matris olacaktır.
  • Gömülü katmanların çıktısı Flatten() komutu yardımıyla bir boyuta düzleştirilmiş, ardından aktivasyon fonksiyonu ile 250 birimlik yoğun bir gizli katman kullanılmıştır.
  • Çıktı katmanı ise bir nörona sahiptir ve tahmin değeri olarak 0 ve 1 değerlerini çıkarmak için sigmoid aktivasyonu kullanılmıştır.
  • Modelde, Keras’ta ikili sınıflandırma problemlerinde “binary_crossentropy” olarak tanımlanan logaritmik kayıp fonksiyonunu kullanılmış ve verimli dereceli iniş algoritmasına sahip olan “Adam” algoritması ile optimize edilmiştir.

Model tanımlanmış ve derlenmiştir. Veriyle eğitmemiz için de fit() fonksiyonu bize yardımcı olur. Epoch kaç tur eğitim olacağını belirler. Bu problemde az sayıda iterasyon yapacağımız için epoch 2 olarak belirlenmiştir. Başka epoch değerleri de denenebilir.

Batch sayısı modelin eğitilmesi aşamasında aynı anda kaç adet verinin işleneceği anlamına gelir. Modelde batch_size değeri 128 olarak ayarlanmıştır yani 128 adet veri aynı anda eğitime girecek daha sonra optimizasyon fonksiyonu ile hata oranı hesaplanacak ve sonraki 128 adet veriye geçecektir.

Modelin Son Değerlendirmesi

Son olarak eğitilen modelin tahmin değerini %87.18 doğruluk oranı ile görüyoruz. Bu doğruluk oranını değerlendirdiğimizde film yorumlarını sınıflandırmada başarılı bir model elde ettik diyebiliriz.

Bir sonraki yazımda görüşmek dileğiyle 😊

KAYNAKLAR:

https://github.com/enespolat25/IMDB-Veri-Seti-ve-Duygu-Analizi/blob/master/imdb_.ipynb

Python ile Makine Öğrenmesi(ML) & Yapay Zeka (AI) ProjeleriUdemy

https://www.bugraayan.com/tag/binary_crossentropy/

https://mc.ai/keras-ile-derin-ogrenme-modeli-olusturma/

https://keras.io/api/datasets/imdb/

https://medium.com/@ardabatuhandemir/duygu-analizi-sentiment-anaylsis-nedir-68a59a8b0142

https://towardsdatascience.com/sentiment-analysis-with-python-part-1-5ce197074184

https://github.com/aaronkub/machine-learning-examples/blob/master/imdb-sentiment-analysis/Sentiment%20Analysis%20Walkthrough%20Part%201.ipynb

https://github.com/SudharshanShanmugasundaram/Sentiment-Analysis-on-IMDB-Dataset/blob/master/Sentiment%20Analysis.ipynb

https://towardsdatascience.com/sentiment-analysis-with-python-part-1-5ce197074184

https://www.researchgate.net/publication/329345260_FIKIR_MADENCILIGI_VE_DUYGU_ANALIZI_YAKLASIMLAR_YONTEMLER_UZERINE_BIR_ARASTIRMA

Leave a Reply

Your email address will not be published. Required fields are marked *