Sentiment Analysis of Twitter Dataset using Logistic Regression —Lojistik Regresyon ile Twitter Veri Setinin Duygu Analizi

Özge Kökyay
3 min readJul 14, 2021

Bu yazıyı DeepLearning.AI tarafından hazırlanan Natural Language Processing with Classification and Vector Spaces kursundan faydalanarak, öğrendiklerimin Türkçe ve kolay anlaşılır bir özetini hazırlamak amacıyla yazıyorum. Bu yazıda kullandığım repo’ya buradan erişilebilir.

Kursun ilk haftasında twitter veri setini kullanarak tweetleri pozitif negatif anlam içeriğine göre sınıflandırmak için aşağıdaki 4 aşamayı takip ediyoruz.

1. Preprocessing raw text for sentiment analysis (metni analize uygun hale getirmek için bazı ön hazırlıklar yapmak)

2. Building word frequency dictionary (veri setindeki her sözcüğün pozitif ve negatif tweetlerde karşılaşılma sıklığını içeren dictionary oluşturmak)

3. Implementation of logistic regression from scratch (logistic regression algoritmasını sıfırdan yazmak )

4. Applying and testing logistic regression on a natural language processing task (algoritmamızı kullanarak pozitif ve negatif şeklinde sınıflandırma yapan model oluşturmak)

Preprocessing raw text for sentiment analysis

Source: https://eng.ftech.ai/wp-content/uploads/2019/06/Screen-Shot-2019-06-14-at-11.28.23-1024x538.png

Ön hazırlık aşamasında metin aşağıdaki adımlardan geçiyor :

  • metni sözcüklere bölmek (tokenizing the text)
  • büyük harfleri küçük harfe dönüştürmek (normalizing)
  • noktalama işaretlerini ve etkisiz kelimeleri (remove stop words) çıkarmak
  • sözcük kökünü ön ve son eklerden ayırmak (stemming)

Python’ın açık kaynak kodlu kütüphanelerinden Natural Language Toolkit (NLTK) paketini kullanarak Twitter veri setini ve stop word ‘leri indiriyoruz ve stem ve tokenize modüllerini kullanıyoruz.

process_tweet fonksiyonunda tweetlerdeki hashtagh, link, RT gibi istenmeyen içerikleri ve sözcük sonuna gelen ekleri, noktalama işaretlerini ve stop word leri temizleyerek sadece kullanılabilir sözcükler içeren bir liste elde ediyoruz.

Building word frequency dictionary

Bu adımda amacımız her sözcüğün pozitif ve negatif tweetlerde ne kadar sık karşımıza çıktığını hesaplamak.

build_freqs fonksiyonuna tweet listesini ve bu tweetlerin 1– 0, pozitif negatif şeklindeki etiketlerini içeren array i argüman olarak veriyoruz. Sözcük ve etiketinin key, karşılaşılma sıklığının (frekans) value olduğu bir dictionary elde ediyoruz.

{(‘followfriday’, 1.0): 25, (‘top’, 1.0): 32, … }

Implementation of logistic regression from scratch

Logistic regression yaygın olarak sınıflandırmada kullanılan makine öğrenmesi algoritmalarından biridir. Modelin tahmin ettiği değeri 0 ve 1 aralığında olasılığa çevirmek için sigmoid fonksiyonu kullanılır.

Feature ve weight değerleri ve sigmoid fonksiyonuna ait grafik

Sigmoid Function

Sigmoid fonksiyonunun değişkeni z, x (features) ve θ (weights) değerlerinin skaler çarpımıdır. θ weight değerlerini içeren bir vektör, x ise tüm sözcükler için [bias, pos, neg] yani bias, pozitiflerde görülme sayısı, negatiflerde görülme sayısını içeren bir matris.

Log Loss Function

Log- loss fonksiyonu yukarıdaki gibi hesaplanır ve tüm değerler için ortalaması cost fonksiyonunu verir. Cost fonksiyonunun değeri arttıkça modelin hata yapma olasılığı artar, bu değeri minimize etmek için gradient descent algoritmasını kullanarak weight değerlerini güncelleyeceğiz.

Gradient Descent

Cost fonksiyonunun weight değerlerine göre kısmi türevinin alınmasıyla hesaplanan değerin learning rate değeri ile çarpılmasıyla weight değeri güncellenir. Gradyan azalması durana kadar yani global minimum noktasına ulaşana kadar yeni weight değerleri ile işlem tekrarlanır.

Gradient descent fonksiyonunun nasıl implement edildiğini yukarıdaki scriptte görebiliriz.

Applying and testing logistic regression on a natural language processing task

So this is the end of the beginning .

--

--