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)