Doğal Dil İşleme Serisi 1: Lojistik Regresyon ile Duygu Analizi

Psikologçum
novaresearchlab
Published in
6 min readAug 27, 2020

Merhaba arkadaşlar, Yusuf Anı ile birlikte sizlere çok faydalı olacağına inandığımız bir yazı serisi hazırladık. Yazı serimizde Deep Learning AI ekibinin “ Natural Language Processing with Classification and Vector Spaces” adlı NLP kursunun geniş özetini bulacaksınız. 4 haftadan oluşan bu kursun ana başlıkları şu şekilde:

1- Sentiment Analysis with Logistic Regression - Lojistik regresyon ile duygu analizi

2- Sentiment Analysis with Naïve Bayes - Naïve Bayes ile duygu analizi

3- Vector Space Models - Vektör Uzayı Modelleri

4- Machine Translation - Makine Çevirisi

Bu yazıda kursun ilk başlığı olan Lojistik Regresyon ile Duygu Analizi konusunu özetleyeceğiz. Yazımızın sonunda Github kodumuzu bulabileceksiniz. Keyifli okumalar :)

Lojistik Regresyon ile Duygu Analizi

Duygu Analizi Nedir?

Duygu Analizi (Görüş Madenciliği olarak da bilinir), birinin duygularını veya hislerini değerlendirmeyi hedefleyen bir yöntemdir.

Kamuoyuna genel bir bakış elde etmemizi sağladığı için sosyal medya izlemede son derece yararlıdır. Ayrıca şirketlerin sosyal medya hesaplarında alınan yorumlardan, tweetlerden, satış sitelerinin ürün geri bildirimlerinden toplanan veri ile duygu analizi yapabiliriz.

Biz duygu analizi modelimizi gözetimli makine öğrenmesi algoritmalarından lojistik regresyon ile yapacağız.

Lojistik Regresyon Nedir?

Lojistik Regresyonda Aktivasyon Fonksiyonu(F) olarak Sigmoid Fonksiyonu Kullanılır

Lojistik regresyon, verileri sınıflandırmada kullanılan bir gözetimli makine öğrenmesi(Supervised ML) algoritmasıdır.

Bu algoritmayla lojistik regresyon sınıflandırıcısı oluşturulur. Bu sınıflandırıcı, tahmin yapacak bir modelde kullanılır. Örneğin duygu analizi modelimizde lojistik regresyon sınıflandırıcısı kullanarak bir model oluşturacak ve tweetleri olumlu veya olumsuz olarak ayıracağız.

Gözetimli makine öğrenmesi kullanan model, etiketli verileri kullanarak nasıl sınıflandırma yapılacağını öğrenir. Ardından herhangi bir etiketsiz veriyi bu modele verdiğimizde, önceden edindiği bilgilere dayanarak bu veriyi etiketler.

Bu bölümde öncelikle, elimizdeki metni ön işleme sürecinden geçirecek ardından vektör haline getireceğiz -Bilgi Çekme(Informatıon Retrieval) sistemlerinde vektör hazırlamanın çok büyük önem arz ettiğini burada belirtelim- .Ardından Gözetimli Makine Öğrenmesi algoritmalarından olan lojistik regresyon sınıflandırıcısını kullanarak model oluşturacak ve tweetleri “olumlu” veya “olumsuz” olarak sınıflandıracağız.

Ön İşleme(Preprocessing) Aşaması

Ön işleme aşamasında öncelikle gereksiz kelimeler ve noktalama işaretleri silinir. Noktalama işaretlerinin bazı durumlarda silinmemesi gerekebilir, bunu doğru tespit etmeliyiz.

Ardından tweetlerde bulunan nickleri ve urlleri de silebiliriz çünkü tweetin duygu analizi için önemsizdirler.

Devamında kelimelerin kendilerini yazmak yerine köklerini(stems) yazıyoruz ve bu işleme kök bulma(stemming) deniyor. Örneğin ‘kiminle’ kelimesi ‘kim’ olarak alınıyor. Ön işleme aşamasında son olarak tüm kelimeleri küçük harfe çeviriyoruz ve bu aşamayı tamamlıyoruz.

Özellik Çıkarımı(Feature Extraction) Aşaması

Bu aşamada ilk olarak ön işlemden geçmiş tweetlerin kelimelerini çekerek kelime hazinesi(vocabulary) oluşturuyoruz. Ardından her tweetinin cümle vektörünü oluşturuyoruz.

Bir tweetin cümle vektörü. Kelime hazinesindeki kelimeler özelliklerdir. Kelimeler, cümlede bulunuyorsa hücreye 1, bulunmuyorsa 0 yazılır. Cümlenin vektör uzunluğu özellik sayısındadır. Cümle vektöründe devasa sayıda 0 bulunmaktadır.

Kelime hazinesindeki her kelimeyi özellik olarak kabul edersek cümle vektörleri yüzlerce 0 içerecektir. Böyle fazla sayıda 0 içeren vektörlere sparse vektör diyoruz ve bu vektörle yapılacak eğitimler ve tahminler vakit ve yer kaybına sebep olur.

Peki bu vakit ve yer kaybını önlemek için bir alternatif var mı?

Evet var, vektörlerimizi böyle klasik şekilde oluşturmayacağız. Negatif ve pozitif frekansları kullanarak oldukça küçük boyutlu vektörler oluşturacağız.

Pozitif ve Negatif Frekanslar

Eğitim veri setinde negatif ve pozitif olarak etiketli cümleler bulunuyor. Yapmamız gereken kelime hazinesindeki her bir kelimenin negatif ve pozitif frekanslarını belirlemektir.

Bir kelime x adet pozitif cümlede yer alıyorsa, pozitif frekansı x olur. Ve aynı kelime y adet negatif cümlede bulunuyorsa, negatif frekansı da y olur. Her bir cümlenin içerisindeki kelimelerin pozitif frekansları toplanarak cümlenin pozitifliği hesaplanır. Aynı şekilde negatifliği de hesaplanır. Pozitiflik, negatiflikten fazla ise cümle pozitiftir diyoruz.

Kelimelerin Pozitif Frekansları
Kelimelerin Negatif Frekansları

Pozitif ve Negatif Frekanslar ile Özellik Çıkarımı Aşaması

Bu aşamada her cümle bir satır olmak üzere 3 sütundan oluşan bir liste oluşturuyoruz. İlk sütunda sabit bias değeri bulunuyor. Bir ‘ y = mx + a’ fonksiyonu düşünelim, buradaki a sabitini bias olarak düşünebiliriz. Bu bias değeri 1 kabul edilir.

İkinci sütunda cümlenin pozitiflik değeri ve üçüncü sütunda negatiflik değeri bulunuyor. Bu şekilde her tweet için bir vektör oluşturuyoruz.

İlk Satırdaki Cümle Vektörü: [sabit bias değeri, cümlenin pozitifliği, cümlenin negatifliği]

Örneğin “I am sad, I am not learning NLP” cümlesinin pozitifliğini kelimelerinin pozitif frekanslarını toplayarak 8 olarak hesaplıyoruz. Negatifliğini hesapladığımızda 11 çıkıyor ve bu cümle negatiftir diyoruz.

Bir Cümledeki Kelimelerin Toplam Pozitif Frekansları Toplamı, Negatif Frekansları Toplamından Yüksekse O Cümle Pozitiftir Diyoruz

Eğitim Aşaması

Bu zamana kadar metne ön işleme yaptık ve metinde önemli olan özellikleri belirledik. Şimdi ise bu önemli özellikleri ve bias sabitini kullanarak bir model oluşturacağız. Bu model ile herhangi bir tweetin olumlu mu yoksa olumsuz mu olduğunu tahmin edebileceğiz.

Eğitim aşamasında cost function kullanılarak özelliklerin theta değerlerini belirleyeceğiz(extract features). Cost function, gerçek değerlerle tahmini değerler arasındaki farkların toplamını gösterir ve biz bu değerin minimum olmasını isteriz.

Cost Function Minimize Edilirken İterasyonların Gösterimi

Başlangıçta özelliklere parametreler vereceğiz ve ardından döngüye gireceğiz. Bu döngüde dereceli alçalma(gradient descent) yöntemi uygulanacak: cost function minimize edilene dek ufak adımlarla -adımlar çok ufacık olmamalı çünkü bu yavaşlamamıza sebep olur- gerileyecek ve bu sırada parametreler yani theta değerleri de yenilenerek en elverişli değere(optimuma) yaklaşacak. Cost function’ın minimum değeri bulununca theta değerlerinin optimal değerleri bulunmuş olacak.

Dereceli Alçalma(Gradient Descent) Algoritması

Ardından lojistik regresyon sınıflandırıcısı oluşturacağız. Daha önce lojistik regresyon sınıflandırıcısında tahmin fonksiyonu olarak sigmoid fonksiyonu kullanıldığını belirtmiştik.

Sigmoid Fonksiyonu

Her bir tweet vektörü için sigmoid fonksiyonunu çalıştırırız. Ve her tweet vektörünün theta vektöründen türetilen bir sigmoid değeri elde ederiz. Bu değer 0.5 üzerinde ise tweet pozitiftir, altında ise negatiftir. Aşağıdaki şekilde lojistik regresyon algoritmasının nasıl sınıflandırma yaptığını görüyoruz.

Lojistik Regresyon ile Sınıflandırma

Özetle, tüm bu aşamaların ardından lojistik regresyon modelimiz en elverişli parametrelere yani theta değerlerine sahip olacaktır. Bu iyi eğitilmiş modelin yapacağı tahminlerin yanılma oranı çok düşük olacaktır.

Şunu da belirtelim ki modeli, tweetlerin duygu durumunu değerlendirmek üzere kullanmadan önce doğruluk testinden geçirmeliyiz. Bu testte model, çok sayıda test verisiyle sınanacaktır. Modelin genellemeyi düzgün yapıp yapmadığı anlaşılacaktır. Modelimiz genelleme yapmada başarılı olursa herhangi bir tweeti modele vererek duygu durumunu doğru bir şekilde analiz etmesini bekleyebiliriz :)

Ve yazımızın sonuna yaklaşırken buraya kadar neler yaptığımızı özetleyelim:

1. Metne ön işleme yaptık

2. Metinden özellik çıkarımı yaptık

3. Bu özellikleri ve lojistik regresyon sınıflandırıcısını kullanarak model eğittik

4. Modeli test ettik

~ Modelimizin tweetlerdeki duyguyu başarıyla analiz ettiğini gördük .

Bu yazımızın sonuna geldik, umarım keyif almışsınızdır. Elimizden geldiğince anlatmaya çalıştığımız Lojistik Regresyonla Duygu Analizi konusunun github kodlarına buradan ulaşabilirsiniz.

Bir sonraki konu olan Naïve Bayes ile duygu analizi konulu devam yazımıza buradan ulaşabilirsiniz, sağlıcakla kalın :)

Kaynaklar

  1. Coursera Natural Language Processing with Classification and Vector Spaces -Deep Learning AI
  2. Coursera Machine Learning -Andrew Ng

--

--