Python NLP – Duygu Analizi (Sentiment Analysis)

NLP veya Doğal Dil İşleme, bilgisayarların insan dilini anlamasını, yorumlamasını ve üretmesini sağlayan yapay zeka ve bilgi mühendisliği alanıdır. Metin ve konuşma verilerini analiz etmek, dilbilgisel yapıları çözmek, anlamı çıkarmak ve hatta insanlarla etkileşim kurmak için kullanılır. Bu teknoloji, çeviri sistemlerinden metin madenciliğine, duygusal analizden metin üretimine kadar birçok alanda uygulanmaktadır. Örneğin, dijital asistanlar, otomatik metin çevirisi, sosyal medya analizi ve daha birçok alanda NLP’nin kullanımı yaygındır.

Duygu analizi, metinlerin duygusal tonunu belirleme sürecidir. Bu tür bir uygulama için genellikle bir makine öğrenimi modeli kullanılır. Duygu analizi, genellikle metin veya konuşma gibi veri setlerindeki duygusal içerikleri tanımlama ve analiz etme sürecidir. Bu, metinlerin, yorumların veya diğer içeriklerin duygusal tonunu (örneğin; mutluluk, üzüntü, öfke vb.) belirlemeyi içerir. Duygu analiiz genellikle doğal dil işleme (NLP) teknikleri kullanılarak gerçekleştirilir.

Bu yazıda, birkaç farklı yöntem kullanarak duygu analizi gerçekleştireceğiz.

  • Duygu Analizi için NLTK Kullanımı: Doğal Dil İşleme için NLTK kütüphanesini kullanarak duygu analizi.
  • Hugging Face Transformers ile Duygusal Analiz: Hugging Face’in transformers kütüphanesini kullanarak önceden eğitilmiş bir model üzerinden duygu analizi.
  • Özelleştirilmiş Duygu Analizi Kütüphanesi Oluşturma: Kullanıcıların kendi duygu analizi araçlarını geliştirmek için Python kullanarak temel bir kütüphane oluşturmak.

Duygu Analizi için NLTK Kullanımı

NLTK (Natural Language Toolkit), doğal dil işleme (NLP) için kullanılan bir Python kütüphanesidir. Metin verileri üzerinde çeşitli NLP görevlerini gerçekleştirmek için kullanılır. Metin analizi, metin sınıflandırma, dil tespiti, kelime dağarcığı oluşturma gibi işlemleri yapmak için kullanılabilir.

  • İlk adım olarak, NLTK (Natural Language Toolkit) kütüphanesini kullanarak metin verilerini işlemek için gerekli araçları yükleyebiliriz.
  • Duygu etiketlenmiş bir veri setine ihtiyacımız olacak. Bu veri seti, metinleri duygusal kategorilere (örneğin: olumlu, olumsuz, nötr) ayırır.
  • Önceden eğitilmiş bir makine öğrenimi modeli kullanarak, metin verilerinde duygusal tonu belirleyebiliriz.
import nltk
from nltk.sentiment.vader import SentimentIntensityAnalyzer

# NLTK'nin VADER duygu analizi modülünü yükleyin
nltk.download('vader_lexicon')

# Duygu analizi yapmak için SentimentIntensityAnalyzer'ı başlatın
analyzer = SentimentIntensityAnalyzer()

# Örnek bir metin
text = "movie is great"
#text = "movie is no great"

# Metin üzerinde duygu analizi yapın
scores = analyzer.polarity_scores(text)

# Sonuçları görüntüleyin
print("Duygusal Skorlar:", scores)

Bu kod, VADER kullanarak “movie is great” metninin duygusal skorlarını hesaplar. Burada “great” kelimesi olumlu bir duyguyu temsil ettiği için genel skorlar olumlu olacaktır. Kodun çıktısı şu şekilde olacaktır:

Duygusal Skorlar: {'neg': 0.0, 'neu': 0.417, 'pos': 0.583, 'compound': 0.6249}
  • neg: Negatif duyguların yüzdesi (0.0)
  • neu: Nötr duyguların yüzdesi (41.7%)
  • pos: Pozitif duyguların yüzdesi (58.3%)
  • compound: Genel duygusal yoğunluk (0.6249)

Hugging Face Transformers ile Duygu Analizi

Hugging Face, açık kaynaklı yapay zeka ve doğal dil işleme (NLP) projeleri için bir platform ve topluluktur. Şirket, araştırmacıların, geliştiricilerin ve yapay zeka meraklılarının NLP modellerini keşfetmelerine, geliştirmelerine ve paylaşmalarına olanak tanır. Ayrıca, arayüzler ve kütüphaneler aracılığıyla bu modellerin kullanımını kolaylaştırır.

Hugging Face, Transformer adlı önde gelen derin öğrenme mimarisini temel alan bir dizi NLP modeli geliştirmiştir. Bu modeller, metin sınıflandırma, duygusal analiz, metin üretimi ve benzeri görevlerde kullanılabilir. Hugging Face’in sunduğu platform, bu modellerin eğitimini, ayarlanmasını ve paylaşılmasını kolaylaştırırken, aynı zamanda geliştiricilere bu modelleri uygulamak için araçlar sağlar.

Transformer modeli kullanarak duygu analizi yapmak için Hugging Face tarafından sağlanan transformers kütüphanesini kullanabiliriz. Bu kütüphane, önceden eğitilmiş birçok dil modelini içerir, bu da duygu analizi gibi NLP görevleri için oldukça kullanışlıdır. Örneğin, BERT, GPT, RoBERTa gibi modelleri kullanabiliriz.

Aşağıda, Hugging Face’in transformers kütüphanesini ve BERT modelini kullanarak duygu analizi yapmak için bir örnek verilmiştir:

Dikkat! Kütüphanelerin yüklenmesi uzun zaman alabilir.

from transformers import BertTokenizer, BertForSequenceClassification

# BertForSequenceClassification modelini ve tokenizer'ı yükleme
model_name = "nlptown/bert-base-multilingual-uncased-sentiment"
model = BertForSequenceClassification.from_pretrained(model_name)
tokenizer = BertTokenizer.from_pretrained(model_name)

# Örnek metin
text = "Movie is great!"

# Metni BERT için uygun formata dönüştürme
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)

# Modeli kullanarak duygu analizi yapma
outputs = model(**inputs)

# Sonuçları görüntüleme
predicted_class = outputs.logits.argmax().item()
sentiment_label = model.config.id2label[predicted_class]
print(f"Metin: {text}, Duygu: {sentiment_label}")
Metin: Movie is great!, Duygu: 5 stars

Özelleştirilmiş Duygu Analizi

Kendi özelleştirilmiş duygu analizi kütüphanenizi Python ile oluşturmak için aşağıdaki adımları izleyebilirsiniz:

  • Duygu Sözlüğü Oluşturma: İlk adım, duygu analizi için bir duygu sözlüğü oluşturmaktır. Bu sözlük, kelimelerin duygusal yoğunluklarını içerir. Her kelimenin pozitif, negatif veya nötr bir duygu yoğunluğu olabilir.
  • Metin Ön İşleme: Kullanıcı tarafından sağlanan metin verilerini temizlemek ve ön işleme yapmak için bir metin işleme işlevi oluşturun. Bu işlev, metni küçük harfe çevirme, noktalama işaretlerini kaldırma, stop-words’leri çıkarma gibi adımları içerebilir.
  • Duygu Skorlama Fonksiyonu: Metin içindeki kelimelerin duygu yoğunluklarını kullanarak bir metin için bir duygu skoru hesaplayan bir fonksiyon oluşturun. Örneğin, pozitif kelimelerin sayısını negatif kelimelerin sayısından çıkararak bir duygu skoru elde edebilirsiniz.
  • Test ve Doğrulama: Oluşturduğunuz kütüphaneyi test edin ve doğrulayın. Farklı metinler üzerinde testler yaparak sonuçların beklendiği gibi olup olmadığını kontrol edin.
class DuyguAnalizAraclari:
    def __init__(self, duygu_sozlugu):
        self.duygu_sozlugu = duygu_sozlugu

    def metni_on_isle(self, metin):
        # Ön işleme: Küçük harfe çevirme ve noktalama işaretlerini kaldırma
        metin = metin.lower()
        metin = ''.join([harf for harf in metin if harf.isalnum() or harf.isspace()])
        return metin

    def duygu_analizi_yap(self, metin):
        # Metin için duygu skoru hesaplama
        metin = self.metni_on_isle(metin)
        kelimeler = metin.split()
        pozitif_skor = 0
        negatif_skor = 0
        for i, kelime in enumerate(kelimeler):
            if kelime in self.duygu_sozlugu:
                # Duygu sözlüğündeki kelimelerin duygu yoğunluğunu dikkate al
                if self.duygu_sozlugu[kelime] == 'pozitif':
                    pozitif_skor += self.duygu_intensitesi_al(kelime)
                elif self.duygu_sozlugu[kelime] == 'negatif':
                    negatif_skor += self.duygu_intensitesi_al(kelime)
                # Kelimenin bağlamını göz önünde bulundurarak duygu yoğunluğunu ayarla
                if i > 0:
                    onceki_kelime = kelimeler[i - 1]
                    if onceki_kelime in ["değil", "asla"]:  # Olumsuz kelimelerin etkisini dikkate al
                        negatif_skor += self.duygu_intensitesi_al(kelime) * 1.5  # Olumsuzluk etkisini artır
                    elif onceki_kelime in ["çok", "son derece"]:  # Kuvvetlendirici kelimelerin etkisini dikkate al
                        pozitif_skor += self.duygu_intensitesi_al(kelime) * 1.5  # Olumlu etkisini artır

        duygu_skoru = pozitif_skor - negatif_skor
        return duygu_skoru

    def duygu_intensitesi_al(self, kelime):
        # Kelimenin duygu yoğunluğunu döndür
        # Burada kendi yönteminizi veya bir duygu ifadeleri listesini kullanabilirsiniz
        # Örneğin, duygu ifadeleri listesindeki bir kelimenin puanını alabilirsiniz
        if kelime in self.duygu_sozlugu:
            if self.duygu_sozlugu[kelime] == 'pozitif':
                return 1
            elif self.duygu_sozlugu[kelime] == 'negatif':
                return -1
        return 0  # Kelime duygu sözlüğünde bulunamazsa nötr olarak kabul edilir

# Örnek bir duygu sözlüğü
duygu_sozlugu = {
    'iyi': 'pozitif',
    'kötü': 'negatif',
    'mutlu': 'pozitif',
    'üzgün': 'negatif'
}

# Örnek bir metin
metin = "Çok mutluyum, ama çok iyi değil."

# Örnek duygu analizini gerçekleştirme
analizci = DuyguAnalizAraclari(duygu_sozlugu)
duygu_skoru = analizci.duygu_analizi_yap(metin)
print("Duygu Skoru:", duygu_skoru)

Ads Blocker Image Powered by Code Help Pro

Reklam Engelleyici Algılandı!

Reklamları engellemek için uzantı kullandığınızı tespit ettik.

Lütfen bu reklam engelleyiciyi devre dışı bırakarak ya da sitemize izin vererek bize destek olun.

Dikkat: VPN eklentiniz üzerinde de reklam engelleyici olabilir.