Python ile Duygu Analizi: VADER mı, Hugging Face mi?

Yayın tarihi:

12 dk okuma

Acar Diveroli
Yazar: Acar Diveroli
Yıldızlı ve puan çubuklu üç eğik yorum kartı; üstlerindeki mavi ışın yelpazesi NEG, NEU ve POS rozetlerine uzanıyor.

Ekibiniz üç ürün satıyor ve her biri için birkaç bin yorum birikmiş. Yıldız ortalaması aydan aya neredeyse hiç değişmiyor, ama destek ekibi ürünlerden birine gelen şikâyetlerin iki katına çıktığını söylüyor. Hepsini tek tek okumak mümkün değil; bu yüzden her yorumu olumlu, nötr ya da olumsuz diye etiketleyen ve genel havanın hangi üründe, ne zaman değiştiğini gösteren bir betik istiyorsunuz. Bulduğunuz ilk rehber VADER kullanıyor, ikincisi bir transformer modeli; ikisi aynı cümleye farklı cevap veriyor.

Bu rehberde iki yöntemi aynı küçük ürün yorumu setinde çalıştırıyoruz. Her birinin nasıl işlediğini, test edilmiş kodun tamamını (NLTK ile sözlük tabanlı bir tur, Hugging Face pipeline ile bir model turu ve sonuçları ürüne ve aya göre gruplayan bir rapor), iki yöntemin yıldız puanlarıyla ne ölçüde örtüştüğünü ve onları yanıltan yorumları ele alıyoruz. Betiklerin hepsi 28 Eylül 2026'da Python 3.13, nltk 3.10.3, pandas 3.0.6, transformers 5.17.0 ve torch 2.14'ün CPU sürümüyle çalıştırıldı.

Duygu analizi nedir?

Duygu analizi (fikir madenciliği olarak da bilinir), bir metnin nasıl bir tutum yansıttığını belirleme işidir. Ürün yorumlarında çıktı genellikle üç etiketten biri (olumlu, nötr, olumsuz) ya da bir yıldız puanıdır ve çoğu zaman yanında bir güven skoru bulunur. Özellik düzeyinde çalışan araçlar bir adım öteye gidip "ses harika, pil zayıf" cümlesini iki ayrı görüşe ayırır; bu farklı türde bir model gerektirir ve bu rehberin kapsamı dışındadır.

Veri madenciliği yöntemlerinde olduğu gibi duygu analizi de yapılandırılmamış metni sayabileceğiniz ve grafiğe dökebileceğiniz bir sütuna çevirir. Değeri tek bir skordan değil, eğilimden gelir; örneğin tedarikçi değiştikten sonra bir ürünün olumsuz yorum payının artması.

Python'da duygu analizi nasıl çalışır?

Araçlar iki aileye ayrılır ve ikisi çok farklı biçimde çalışır.

Sözlük tabanlı (lexicon) yöntem: VADER. VADER (Valence Aware Dictionary and sEntiment Reasoner), insan değerlendiricilerin çok olumsuzdan çok olumluya kadar puanladığı yaklaşık 7.500 İngilizce kelime, ifade simgesi ve argo terimlik bir listeyle bir dizi kuraldan ibarettir. Kurallar !!! gibi ünlemlerde ve tamamı büyük harfle yazılan kelimelerde (ALL CAPS) skoru yükseltir, "but" (ama) kelimesinden sonraki kelimelere öncekilerden daha fazla ağırlık verir ve bir duygu kelimesinden önceki üç kelime içinde "not" ya da "never" gibi bir olumsuzluk geçtiğinde skoru tersine çevirir. vaderSentiment README dosyası bu kuralları ve eşikleri anlatır. NLTK aynı çözümleyiciyi nltk.sentiment.vader adıyla sunar; belgeleri NLTK sentiment how-to sayfasındadır.

Model tabanlı yöntem: transformer'lar. BERT gibi bir transformer önce büyük miktarda metinle eğitilir, ardından duygu etiketi taşıyan örneklerle ince ayardan geçirilir. Cümlenin tamamını sayılara dönüştürür ve her kelimeyi diğerlerinin ışığında okur; böylece "not bad" (fena değil) ya da "killer" (harika anlamında) gibi ifadeler sabit bir değere göre değil, bağlama göre değerlendirilebilir. Hugging Face bu türden binlerce model barındırır ve pipeline fonksiyonu bunlardan birini tek satırla yükler.

Her iki durumda da puanlama beş adımda ilerler:

  1. Metni yükleyin. Her yorum için bir satır; yanında ürün, tarih ve varsa yıldız puanı.
  2. Bölün ya da token'lara ayırın. VADER kelimeler ve noktalama işaretleriyle çalışır. Transformer ise kelimeleri alt kelime (sub-word) parçalarına bölen kendi tokenizer'ını kullanır ve metni belirli bir üst uzunlukta keser (BERT tabanlı modellerde 512 token).
  3. Puanlayın. VADER kelime değerlerini toplayıp kurallarını uygular, ardından toplamı -1 ile +1 arasındaki bir compound değerine sıkıştırır. Model ise her etiket için bir olasılık döndürür.
  4. Etikete çevirin. VADER'da eşikleri siz seçersiniz. Modelde en yüksek olasılıklı etiketi alır, skoru da güven değeri olarak saklarsınız.
  5. Toplayın. Etiketleri ürüne, haftaya ya da aya göre sayın ve sonuçları zaten izlediğiniz göstergelerin yanına koyun.

VADER ile transformer modeli karşılaştırması

VADER (NLTK)Transformer (Hugging Face)
Nasıl karar verirPuanlanmış kelime listesi ve kurallarEtiketli metinle ince ayar yapılmış sinir ağı
Kurulum boyutunltk ve 90 KB'lık bir sözlüktransformers, torch (CPU sürümü yaklaşık 500 MB) ve bir model (aşağıdaki için 670 MB)
Testimizdeki hız (dizüstü CPU, kısa yorumlar)Saniyede yaklaşık 14.000 yorumSaniyede yaklaşık 90 yorum, GPU'da daha fazla
DillerİngilizceModele bağlı; aşağıdaki model altı dili kapsıyor
Bağlam ve olumsuzlukKural tabanlı, üç kelimelik pencereÖrneklerden öğrenilmiş
Çıktıneg / neu / pos payları ve bir bileşik skorEtiket ve olasılık ya da yıldız puanı
Sonucu açıklamakKolay: kelimelere bakmak yeterliZor: ek araç gerekir
24 yorumluk testimiz24 yorumun 14'ü yıldızlarla örtüştü (%58)24 yorumun 19'u örtüştü (%79)

Son satır küçük, elle yazılmış bir veri setinden geliyor. Her yöntemin ne tür hatalar yaptığını gösterir; sizin verinizde nasıl sonuç vereceklerini göstermez.

Ürün yorumları için Hugging Face modeli seçmek

Hugging Face hub'daki duygu modellerinin çoğu tweet'lerle ya da film yorumlarıyla eğitilmiştir. Ürün yorumlarında üç şey önemlidir:

  • Eğitim verisi. Tweet'lerle eğitilmiş bir model argoyu bilir; ürün yorumlarıyla eğitilmiş bir model ise ürünlere özgü kelimeleri.
  • Etiketler. Üç etiket, beş etiket ya da yıldız puanı. Bunları tek bir yerde kendi etiketlerinize eşleyin.
  • Lisans. Bazı popüler modeller ticari olmayan kullanım lisansı taşır. Model kartını okuyun.

Aynı 24 yorum üzerinde üç küçük çok dilli model denedik ve aşağıdaki kodda nlptown/bert-base-multilingual-uncased-sentiment modelini kullandık. Bu model İngilizce, Felemenkçe, Almanca, Fransızca, İspanyolca ve İtalyanca ürün yorumlarıyla ince ayardan geçirildi, bir ile beş arasında yıldız tahmin ediyor ve MIT lisanslı. Model kartı, İngilizce için yıldızı tam isabetle bilme oranını %67, en fazla bir yıldız sapmayla bilme oranını %95 olarak veriyor. Türkçe bu diller arasında yok; dolayısıyla model Türkçe bir yorumu öğrendiği bir dil gibi değerlendirmez, yalnızca tahminde bulunur.

Diğer iki model şunlardı: 24 yorumun 13'ünde yıldızlarla örtüşen lxyuan/distilbert-base-multilingual-cased-sentiments-student (üç etiket, Apache 2.0) ve 24'ten 16'sında örtüşen tabularisai/multilingual-sentiment-analysis (beş etiket). İkincisi CC BY-NC 4.0 lisanslı olduğundan ticari kullanımda serbest değil.

Test verisi: 24 ürün yorumu

Kazınan yorum kullanmadık. Aşağıdaki dosyada, uydurma üç ürün için kendi yazdığımız 24 yorum var. Her yorumun bir tarihi ve yıldız puanı bulunduğundan iki yöntemin sonucu da bu puanla karşılaştırılabiliyor. Gerçek verilerde sorun çıkaran durumları bilerek ekledik: iğneleme, argo, olumsuzluk, karışık duygular, ayrıca Almanca, İspanyolca ve Türkçe birer yorum. Dosyayı reviews.csv adıyla kaydedin:

text
review_id,product,date,rating,lang,text
1,kettle,2026-07-02,5,en,"Boils a full litre in under three minutes and the lid never drips. Love it."
2,kettle,2026-07-05,4,en,"Solid kettle, a bit loud but it does the job."
3,kettle,2026-07-11,1,en,"Stopped working after two weeks. Support never answered my emails."
4,kettle,2026-07-19,2,en,"The handle gets hot. Not great, not terrible."
5,kettle,2026-08-03,5,en,"Best purchase this year!!! Fast, quiet and it looks good on the counter :)"
6,kettle,2026-08-14,1,en,"Oh great, another kettle that leaks all over the counter. Just what I needed."
7,kettle,2026-08-21,3,en,"It is a kettle. It boils water."
8,kettle,2026-08-30,4,de,"Kocht schnell und ist leise. Gutes Preis-Leistungs-Verhältnis."
9,headphones,2026-07-03,5,en,"The noise cancelling is superb and the battery lasts all week."
10,headphones,2026-07-09,2,en,"Sound is fine but the ear cushions started peeling after a month."
11,headphones,2026-07-15,4,en,"Comfortable for long flights. The app is clunky though."
12,headphones,2026-07-28,1,en,"Right ear cut out on day three. Returned them."
13,headphones,2026-08-06,5,es,"Suenan de maravilla y la batería dura muchísimo."
14,headphones,2026-08-12,3,en,"Bass is heavy. Some people will like it, I am not sure I do."
15,headphones,2026-08-24,2,en,"I wanted to love these, but the Bluetooth keeps dropping."
16,headphones,2026-08-29,4,en,"Not bad at all for the price."
17,backpack,2026-07-01,5,en,"Survived a rainy week in the mountains and everything inside stayed dry."
18,backpack,2026-07-13,4,en,"Lots of pockets. The laptop sleeve is a little tight for a 16 inch model."
19,backpack,2026-07-22,1,en,"The zipper broke on the first trip. Cheap material."
20,backpack,2026-08-02,3,tr,"Fiyatına göre idare eder ama askılar biraz ince."
21,backpack,2026-08-09,5,en,"Killer design, this bag is sick!"
22,backpack,2026-08-17,2,en,"Looks nice in the photos, feels flimsy in real life."
23,backpack,2026-08-26,4,en,"Carries my camera gear without any back pain."
24,backpack,2026-08-31,1,en,"Terrible stitching. The strap tore off after a week."

Gerçek yorum verisi puanlanmadan önce bir temizlik turundan geçmelidir: yinelenen kayıtlar, metinde kalmış HTML, bozuk karakterler. Bu adımı kazınan veriyi pandas ile temizleme rehberinde anlattık.

1. adım: yorumları VADER ile puanlayın

İki kütüphaneyi bir sanal ortama kurun:

bash
python -m venv .venv
.venv\Scripts\activate          # macOS/Linux: source .venv/bin/activate
pip install nltk pandas

Betik her cümleyi ayrı puanlar ve sonuçların ortalamasını alır. Bunu ilk çalıştırmadan sonra ekledik: Tek bir metin olarak puanlandığında 1 numaralı yorum ("…the lid never drips. Love it.") -0,52 çıktı; çünkü VADER'ın üç kelimelik olumsuzluk penceresi noktayı aşıp "love" kelimesini tersine çevirdi. Cümle cümle puanlandığında sonuç +0,32 oldu.

python
import re

import nltk
import pandas as pd
from nltk.sentiment.vader import SentimentIntensityAnalyzer

nltk.download("vader_lexicon", quiet=True)  # 90 KB'lık sözlük, bir kez indirilir

analyzer = SentimentIntensityAnalyzer()
SENTENCE_END = re.compile(r"(?<=[.!?])\s+")


def vader_compound(text: str) -> float:
    """Her cümleyi ayrı puanla ve compound skorlarının ortalamasını al."""
    sentences = [s for s in SENTENCE_END.split(text) if s.strip()]
    scores = [analyzer.polarity_scores(s)["compound"] for s in sentences]
    return round(sum(scores) / len(scores), 4)


def vader_label(compound: float) -> str:
    # VADER'ın yazarlarının önerdiği eşikler
    if compound >= 0.05:
        return "positive"
    if compound <= -0.05:
        return "negative"
    return "neutral"


df = pd.read_csv("reviews.csv", parse_dates=["date"])
df["compound"] = df["text"].apply(vader_compound)
df["vader"] = df["compound"].apply(vader_label)

print(df[["review_id", "lang", "compound", "vader"]].to_string(index=False))
df.to_csv("reviews_vader.csv", index=False)

Çıktının bir bölümü:

text
 review_id lang  compound    vader
         1   en    0.3185 positive
         3   en    0.0878 positive
         6   en    0.3125 positive
         8   de    0.0000  neutral
        17   en    0.4588 positive
        21   en   -0.8356 negative

3 numaralı yorum tek yıldızlı bir şikâyet, ama "support" sözlükte olumlu bir kelime ve onu dengeleyecek olumsuz bir kelime yok. 6 numaralı yorum iğneleme içeriyor ("Oh great … Just what I needed", yani "Ah ne güzel … Tam da ihtiyacım olan buydu") ve VADER "great" kelimesini düz anlamıyla alıyor. Almanca yorumun skoru tam sıfır; çünkü kelimelerinin hiçbiri İngilizce sözlükte yok. 21 numaralı yorum "killer" ve "sick" kelimelerini övgü olarak kullanıyor; VADER ise iki kelimeyi yalnızca olumsuz anlamlarıyla tanıyor.

2. adım: aynı yorumları bir Hugging Face modeliyle puanlayın

Model turu için transformers ve bir derin öğrenme altyapısı gerekir. GPU'nuz yoksa önce torch'un CPU sürümünü kurun; CUDA içeren varsayılan sürümden çok daha küçüktür:

bash
pip install torch --index-url https://download.pytorch.org/whl/cpu
pip install transformers

İlk çalıştırmada model (yaklaşık 670 MB) Hugging Face önbelleğine indirilir. Bu önbelleğin başka bir diskte durmasını istiyorsanız HF_HOME ortam değişkenini ayarlayın. sentiment-analysis görev adı, text-classification görevinin takma adıdır; batch_size, truncation ve device parametreleri Transformers pipelines belgelerinde açıklanıyor.

python
import pandas as pd
from transformers import pipeline

MODEL = "nlptown/bert-base-multilingual-uncased-sentiment"

classifier = pipeline(
    "sentiment-analysis",  # "text-classification" görevinin takma adı
    model=MODEL,
    device="cpu",          # ilk GPU için device=0
)

df = pd.read_csv("reviews_vader.csv", parse_dates=["date"])
results = classifier(
    df["text"].tolist(),
    batch_size=8,
    truncation=True,       # 512 token'dan uzun yorumlar reddedilmez, kesilir
)


def stars_to_label(stars: int) -> str:
    if stars >= 4:
        return "positive"
    if stars == 3:
        return "neutral"
    return "negative"


df["hf_stars"] = [int(r["label"][0]) for r in results]  # "4 stars" -> 4
df["hf_score"] = [round(r["score"], 3) for r in results]
df["hf"] = df["hf_stars"].apply(stars_to_label)

print(df[["review_id", "rating", "hf_stars", "hf_score", "vader", "hf"]].to_string(index=False))
df.to_csv("reviews_scored.csv", index=False)

Model önbellekte olduğunda betik, modelin yüklenmesi dahil, bir dizüstü bilgisayarın CPU'sunda yaklaşık yedi saniyede tamamlandı. Çıktının bir bölümü:

text
 review_id  rating  hf_stars  hf_score    vader       hf
         3       1         1     0.736 positive negative
         6       1         1     0.230 positive negative
         8       4         5     0.526  neutral positive
        17       5         1     0.562 positive negative
        20       3         3     0.622  neutral  neutral
        21       5         1     0.816 negative negative

Model 3 numaralı yorumdaki şikâyeti, 6 numaralı yorumdaki iğnelemeyi (0,23 gibi düşük bir güvenle) ve Almanca yorumu doğru yakaladı. "Survived a rainy week" (yağmurlu bir haftayı atlattı) diye anlatılan sırt çantasıyla ilgili 17 numaralı yorumda yanıldı ve 21 numaralı yorumdaki argoyu yüksek bir güvenle tek yıldız olarak okudu. 20 numaralı yorum Türkçe ve model bu dille eğitilmedi; verdiği üç yıldız gerçek puanla örtüştü, ama bu sonuca güvenmeyiz.

3. adım: ürün ve aya göre toplayın

Rapor iki yöntemi yıldız puanlarıyla karşılaştırır, her ürün ve ay için bir net duygu skoru (olumlu payı eksi olumsuz payı) hesaplar ve iki yöntemin ayrıştığı yorumları bir kişinin okuması için ayrı bir dosyaya yazar.

python
import pandas as pd

df = pd.read_csv("reviews_scored.csv", parse_dates=["date"])


def stars_to_label(rating: int) -> str:
    if rating >= 4:
        return "positive"
    if rating == 3:
        return "neutral"
    return "negative"


df["truth"] = df["rating"].apply(stars_to_label)
for method in ("vader", "hf"):
    hit = (df[method] == df["truth"]).mean()
    print(f"{method}: {hit:.0%} agree with the star rating")
off_by_one = ((df["hf_stars"] - df["rating"]).abs() <= 1).mean()
print(f"model stars within one star of the rating: {off_by_one:.0%}")

# Net duygu: olumlu payı eksi olumsuz payı, -1 ile +1 arasında
NET = {"positive": 1, "neutral": 0, "negative": -1}
df["net"] = df["hf"].map(NET)
df["month"] = df["date"].dt.to_period("M")

by_product = (
    df.groupby("product")
    .agg(reviews=("review_id", "count"),
         net=("net", "mean"),
         negative_share=("hf", lambda s: (s == "negative").mean()),
         avg_rating=("rating", "mean"))
    .round(2)
    .sort_values("net")
)
print(by_product.to_string())

by_month = df.pivot_table(index="month", columns="product", values="net", aggfunc="mean").round(2)
print(by_month.to_string())

# İki yöntemin ayrıştığı satırlar incelenmek üzere bir insana gider
disagree = df[df["vader"] != df["hf"]]
print(f"{len(disagree)} of {len(df)} reviews need a human look")
disagree[["review_id", "rating", "vader", "hf", "text"]].to_csv("review_queue.csv", index=False)
text
vader: 58% agree with the star rating
hf: 79% agree with the star rating
model stars within one star of the rating: 92%
            reviews   net  negative_share  avg_rating
product
backpack          8 -0.25            0.50        3.12
headphones        8  0.12            0.25        3.25
kettle            8  0.12            0.38        3.12
product  backpack  headphones  kettle
month
2026-07     -0.33       -0.25    0.00
2026-08     -0.20        0.50    0.25
11 of 24 reviews need a human look

Sırt çantasıyla su ısıtıcısının ortalama puanı aynı: 3,12. Buna karşın sırt çantası yorumlarının yarısı olumsuz okunurken su ısıtıcısında bu oran %38; yıldız ortalaması bu farkı gizliyor. Ürün başına sekiz yorumla tek bir yorum net skoru 0,25 kaydırır; bu yüzden grafiğe dökmeden önce her grup için en az kaç yorum gerektiğini belirleyin. Puanlanmış satırları bir sonraki çalıştırma için nasıl saklayacağınızı kazınan veriyi CSV, JSON ve SQLite'a kaydetme rehberinde bulabilirsiniz.

Yorumlar nereden gelir?

Kod, metnin nereden geldiğiyle ilgilenmez; ama onunla ne yapabileceğinizi kaynak belirler:

  • Kendi mağazanız, uygulama mağazası konsolunuz ya da destek sisteminiz. En temiz kaynaktır ve modeli sınamak için gereken yıldız puanını da içerir.
  • Yorum platformları ve pazaryerleri. Çoğu resmî bir API ya da satıcılar için dışa aktarma sunar. Kazımayı düşünmeden önce bunu kullanın.
  • Herkese açık sayfalar. robots.txt dosyasına ve kullanım koşullarına uyun, istek hızını düşük tutun, yorumcu adlarını ve profil bağlantılarını almayın. Kurallar için web kazımanın yasallığı ve kazınan verilerde kişisel veri yazılarımıza bakın.

Bir pazaryeri ülkeye göre farklı yorumlar ya da fiyatlar gösteriyorsa ülke hedeflemeli bir Residential Proxy, o ülkedeki bir müşterinin gördüğü sayfayı görmenizi sağlar.

Kullanım alanları

  • Ürün ve kategori araştırması: pazar araştırmasının bir parçası olarak alıcıların sizin ürünlerinizden ve bir rakibinkinden nasıl söz ettiğini karşılaştırmak.
  • E-ticaret izleme: pazaryerlerinde yorumlardaki duyguyu fiyat ve stok verisiyle yan yana izlemek; bkz. e-ticaret proxy'leri ve rakip fiyat takibi.
  • Marka koruma: sahte ürünlerden ya da yetkisiz satıcılardan söz eden olumsuz yorumlardaki ani artışı fark etmek; bkz. marka koruma.
  • Yatırım araştırması: yorumlardaki ve sosyal medyadaki duygu, alternatif veri setlerindeki girdilerden biridir.
  • Destek önceliklendirmesi: tek yıldızlı ve güven skoru düşük yorumları önce bir insana yönlendirmek.

Sık yapılan hatalar ve tuzaklar

  • Bir paragrafın tamamını VADER ile tek seferde puanlamak. 1 numaralı yorumda görüldüğü gibi olumsuzluk ve "but" kuralları cümle sınırını aşabilir. Cümleleri ayrı puanlayıp birleştirin.
  • VADER'ı başka dillerde çalıştırmak. Tanımadığı kelimelere sıfır verir; bu yüzden Almanca ve İspanyolca yorumlar nötr çıkar. Çok dilli bir model kullanın ya da yorumları dile göre gruplayıp her dil için bir model seçin.
  • İğnelemeyi ve argoyu iki yöntemden birine emanet etmek. İkisi de "Killer design, this bag is sick!" yorumunu tek yıldız olarak okudu.
  • Alanı göz ardı etmek. "Unpredictable" (öngörülemez) bir film senaryosu için iyi, araba frenleri için kötüdür. Kendi kategorinizden bir örneklemi kontrol edin.
  • İki yöntem aynı sonucu verdi diye onu doğru saymak. 21 numaralı yorum ayrışma kuyruğuna girmedi; çünkü iki yöntem de aynı şekilde yanıldı. Elle etiketlenmiş küçük bir örneklem tutun ve ölçümü ona göre yapın.
  • Güven skorunu atmak. 6 numaralı yorumun aldığı gibi 0,23 skorlu bir etiket, rastgele bir tahminden pek farklı değildir. Düşük skorları bir insana gönderin.
  • Kırpmayı (truncation) unutmak. truncation=True olmadan model sınırından uzun bir yorum hata verir ve toplu işi durdurur.
  • Çok küçük grupları grafiğe dökmek. Beş yorumdan çıkan bir net skor çok sert dalgalanır. Grup büyüklüğü için bir alt sınır belirleyin.
  • Bozuk karakter kodlaması. é yerine é içeren yorumlar iki yöntemin de kafasını karıştırır; bkz. Python'da karakter kodlama hataları.

Karar rehberi

İhtiyaçÖneri
İngilizce yorumlara hızlı bir ilk bakışCümle cümle puanlanan VADER
Birden çok dilde yorumlarKartında sizin dillerinizi listeleyen çok dilli bir model
Üç etiket yerine yıldız puanınlptown modeli gibi yıldız puanlarıyla eğitilmiş bir model
GPU yok, milyonlarca satır varVADER ya da toplu işlemeyle çalışan küçük bir model ve örneklem üzerinden kontrol
Ticari kullanımModel lisansını kontrol edin; ticari olmayan modelleri atlayın
Yönetime sunulacak rakamlarÖnce kendi yorumlarınızdan 200-500 tanesini elle etiketleyip doğruluğu ölçün
İğneleme ve argo ağırlıklı metinSosyal medya metniyle eğitilmiş bir model ve düşük skorlar için insan incelemesi

Sıkça sorulan sorular

VADER hâlâ kullanmaya değer mi?

Evet; hıza ve kelime kelime açıklanabilen sonuçlara ihtiyaç duyduğunuz kısa İngilizce metinlerde bir karşılaştırma tabanı (baseline) olarak. Bağlamın ya da başka dillerin önemli olduğu yerlerde testimizde transformer modeli açıkça daha iyi sonuç verdi.

VADER'ın compound eşikleri ne anlama gelir?

Compound (bileşik) skor -1 ile +1 arasında değişir. VADER'ın yazarları 0,05 ve üstünü olumlu, -0,05 ve altını olumsuz, aradaki değerleri nötr saymayı önerir. Eşikleri değiştirebilirsiniz, ama bunu sezgiyle değil, etiketlenmiş örneklere bakarak yapın.

Hugging Face pipeline için GPU gerekir mi?

Hayır. torch'un CPU sürümü 24 yorumumuzu birkaç saniyede puanladı. Yüz binlerce yorumda GPU saatler kazandırır; kullanmak için device=0 verin.

Türkçe yorumlar için hangi model uygun?

Burada kullanılan nlptown modeli Türkçeyle eğitilmedi. Hugging Face hub'da kartında Türkçe ile ürün ya da yorum verisi geçen modelleri arayın, ardından en iyi adayları etiketlenmiş bir Türkçe örneklem üzerinde test edin.

Kendi verimde doğruluğu nasıl ölçerim?

Rastgele seçtiğiniz birkaç yüz yorumu kendiniz etiketleyin ve karşılaştırın. Bu rehberde olduğu gibi yıldız puanları kaba etiket olarak iş görür, ama üç yıldızlı bir yorum çoğu zaman olumsuz okunur.

Kazınan yorumlarda duygu skorlarını kullanabilir miyim?

Hukuki soru puanlamayla ilgili değil, toplamayla ilgilidir. Resmî bir API'yi tercih edin, sitenin kullanım koşullarını ve robots.txt dosyasını kontrol edin, kişisel verileri dışarıda bırakın.

Özet

Python ile duygu analizinde temelde iki seçenek var. NLTK'deki VADER küçük, hızlı ve açıklaması kolaydır; ama iğnelemeyi, argoyu, alana özgü kelimeleri ve İngilizce dışındaki her dili yanlış okur. Bir Hugging Face modeli bağlamı okur ve birden çok dili işler; bedeli büyük bir indirme ve daha fazla işlem gücüdür. Test ettiğimiz 24 yorumda model 19, VADER 14 yorumda yıldız puanıyla örtüştü. Hangisini seçerseniz seçin, puanlamayı tutarlı biçimde cümle ya da yorum başına yapın, güven skorunu saklayın, ayrışan sonuçları bir insana gönderin ve ölçümü kendi etiketlediğiniz örnekleme göre yapın. Yorumlarınız birkaç ülkedeki herkese açık sayfalardan geliyorsa bunları ölçülü bir hızla toplamak için Proxynet proxy'lerine göz atın.

ChatGPT'ye sorClaude'a sor