Metin Temsillerini Karşılaştırmak: Sayımlar ve Embedding’ler

4. Bölüm · Uygulamalı Doğal Dil İşleme

Dr. Batuhan Bardak

Bu dersin sonunda

  • gerçek ve dengesiz bir veri kümesi için, önceki iki bölümün yöntemleriyle ham metinden değerlendirilmiş tahmine uzanan bir pipeline (işlem hattı) kurabilirsiniz
  • bu dengesiz görevde doğruluğun (accuracy) neden tek başına yeterli olmadığını açıklayabilir, macro-F1’i sınıf başına aritmetiğiyle hesaplayabilirsiniz
  • bir görevde sayım ve embedding temsilleri için başlangıç beklentisi oluşturabilir ve beklentinizi deneyle sınayabilirsiniz
  • Türkçe metinlerde out-of-vocabulary (OOV, sözlük dışı kelime) oranını ölçebilir; kapsamayı, vektörlerin niteliğini ve görev başarısını ayrı ayrı değerlendirebilirsiniz
  • unigram torbası ile kelime vektörü ortalamasının kaybettiği sıra bilgisini örnekle gösterebilirsiniz

İki bölüm, iki iddia

  • 2. bölüm: seyrek (sparse) sayım vektörleri güçlü, ucuz ve yorumlanabilir bir baseline (karşılaştırma modeli) olabilir
  • 3. bölüm: her kelime biçimine bağımsız bir öznitelik ayırmak, agglutinative (sondan eklemeli) bir dil olan Türkçenin çekimli biçimlerinde kapsama sorunu yaratabilir
  • Oradaki ölçüm: bir Türkçe Wikipedia örnekleminin %90’ı üzerinde sözlük kurulup kalan %10’u sınandığında test token’larının %7,33’ü eğitimde hiç görülmemiş çıkıyor — farklı kelime biçimlerinin ise %28,99’u
  • İki iddia mantıken çelişmiyor; belirli bir veri kümesinde hangisinin ağır bastığını ancak ölçerek öğrenirsiniz

Mühendislik anlamında bir bake-off: birkaç aday yöntem, tek görev, tek protokol ve hepsi için aynı metrik.

Ne sabit tutuldu, ne tutulmadı

Bütün satırlarda aynı

  • eğitim/test bölmesi
  • LogisticRegression sınıfı
  • sınıf ağırlıklandırması
  • rastgele tohum

Satırdan satıra değişen

  • vektörleştiricinin sözlük eşiği
  • tokenleştirme yolu
  • özniteliklerin ölçeği
  • yoğun (dense) temsillerin etiketsiz metin üzerindeki ayrı eğitimi
  • Bütün satırlar C = 1.0 kullanıyor: TF-IDF satırları 1,0 normuyla geliyor, ortalaması alınmış vektörler normalleştirilmiyor — aynı C aynı düzenlileştirmeye karşılık gelmeyebilir

Sonuçlar yöntemlerin bu somut kurulumlarını karşılaştırır; aradaki farkı tek başına “temsil ailesinin etkisi” diye yorumlamayacağız.

Problem: Türkçe ürün yorumları

İkili duygu sınıflandırması: olumlu ya da olumsuz etiketli 235.165 Türkçe ürün yorumu.

  • Metinler kısa ve gündelik: yazım hataları, eksik Türkçe karakterler, birbirine yapışmış kelimeler; dağıtılan metnin tamamı küçük harfe çevrilmiş durumda

Bu veri kümesini üç nedenle seçtik:

  1. Türkçe: biçimbilim (morphology) argümanı gerçek kullanıcı metninde sınanabiliyor
  2. Sınıfları dengesiz — olumlu sınıf 14,8 kat daha büyük — yani uygun metriği tartışmak zorundayız
  3. Altörnekleme yapacak kadar büyük: bu veride geçerli bir öğrenme eğrisi

Barmanbay 2020 — Türkçe ürün yorumları

Bölmeden önce veriyi denetleyin

### checks before de-duplication
missing text or label         0
empty texts                  21
texts with both labels       77
### the raw data
rows as downloaded      235,165
after de-duplication    233,508      (1,657 exact duplicates removed)
label 1 (positive)      218,747      93.7%
label 0 (negative)       14,761       6.3%
  • 77 metin iki etiketi birden taşıyor (toplam 297 satır); drop_duplicates ilk satırı tutuyor ve bu dosyada olumlu yorumlar önce geliyor: 77 metnin tamamı olumlu etiketiyle kaldı
  • Metne göre tekilleştirmeyi bölmeden önce yapın ve seçtiğiniz politikayı raporlayın: 1.657 tekrar dosyanın yalnızca %0,7’si; bu adım gerekli ama tek başına yeterli değil

Bölme ve onunla ilgili iki uyarı

### the split (stratified, seed 42)
train   40,000    37,471 positive    2,529 negative   rows 8205c2be5ebf
test    10,000     9,368 positive      632 negative   rows 634cdb3bb002
  • Tekilleştirilmiş 233.508 yorumdan tabakalı (stratified) 50.000 yorumluk bir altörneklem, sonra yine tabakalı 80/20 bölme
  • rows, seçilen satırların sıra numaralarından hesaplanan bir özettir: aynı 12 karakter aynı satırlar demektir; sınıf toplamları bunu göstermez
  • Bölmenin yeniden üretimi: “42 tohumuyla tabakalı” ifadesi bir prosedürü adlandırmaz; bir prosedür ailesini adlandırır
  • Test kümesi ve seçim: aşağıdaki her sayı aynı 10.000 test yorumundan okunuyor — bu sonuçları keşif amaçlı okuyun

En basit kural: her yoruma “olumlu” deyin

Her yoruma “olumlu” deyin. Metne hiç bakmayın.

### majority baseline, in full
                 predicted neg   predicted pos   total
   actual neg          0             632          632
   actual pos          0           9,368        9,368

precision (neg)   undefined — it never predicts negative
recall    (neg)   0.0%       — it finds none of the 632
F1        (neg)   0.00       — 2TP / (2TP + FP + FN) = 0 / 632
F1        (pos)   96.74
macro-F1          48.37

Bu kural yorum metnini hiç kullanmadan %93,68 doğruluk elde eder, çünkü test kümesinin %93,68’i olumludur — ve 632 olumsuz yorumun hiçbirini bulamaz.

Macro-F1, sınıf başına aritmetiğiyle

\[\text{precision} = \frac{TP}{TP + FP}, \qquad \text{recall} = \frac{TP}{TP + FN}, \qquad F_1 = \frac{2\,TP}{2\,TP + FP + FN}\]

\[\text{macro-}F_1 = \frac{1}{K}\sum_{k=1}^{K} F_1^{(k)}\]

  • \(F_1\), precision (kesinlik) ile recall’un (duyarlılık) harmonik ortalamasıdır: ikisinden biri sıfıra indiğinde \(F_1\) de sıfır olur
  • Çoğunluk kuralı, olumsuz sınıf: \(TP = 0\), \(FP = 0\), \(FN = 632\), yani \(F_1^{(\text{neg})} = 0/632 = 0\); \(F_1^{(\text{pos})} = 0{,}9674\) ile macro-F1 \(= (0 + 0{,}9674)/2 = 0{,}4837\)

Macro-F1, sınıf başına F1 skorlarının eşit ağırlıklı ortalamasıdır. Doğruluk örneklere, macro-F1 sınıflara eşit ağırlık verir.

Kütüphaneniz hangi F1’i bildiriyor?

average= ne hesaplar çoğunluk kuralının skoru
"binary" (iki sınıf için varsayılan) yalnızca 1 numaralı sınıfın F1’i — burada çoğunluk sınıfı olan olumlu sınıf 96,74
"micro" bölmeden önce bütün sayımları havuzda toplar; burada doğruluğa eşittir 93,68
"weighted" her sınıfın F1’ini o sınıfın örnek sayısıyla ağırlıklandırır 90,62
"macro" sınıflara eşit ağırlık verir 48,37
  • Macro-F1’i manşet metrik olarak seçmek ile eğitim kaybını sınıf frekansına göre ağırlıklandırmak (class_weight="balanced") iki ayrı tasarım kararıdır

Bu bölümde yöntemleri karşılaştırırken başlıca özet skor macro-F1; doğruluk da bağlam sağlaması için raporlanıyor. Macro-F1 evrensel bir çözüm değil: olumsuz sınıfın recall’u, belirli bir yanlış alarm bütçesindeki precision ya da beklenen iş maliyeti daha doğrudan karar metrikleri olabilir.

Türkçede küçük harf: varsayılan eşleme Türkçe değil

TR_LOWER = str.maketrans({"I": "ı", "İ": "i"})
def tr_lower(s):
    return s.translate(TR_LOWER).lower()
### the same string, two lowercasing rules
             str.lower()      tr_lower()
"IYI"        iyi              ıyı
"İYİ"        i̇yi̇             iyi
  • Python’ın str.lower() metodu Unicode’un varsayılan eşlemesini uygular ve yerel ayara göre değişmez: I için i, İ için ise i ile bir birleştirici nokta (U+0307) üretir
  • İkisi de hata vermeden çalışır ve tokenleştirmeyi, sözlük eşleşmesini bozabilir

Büyük-küçük harf dönüşümü dile bağlıdır; dile özgü küçük harf politikası da ön işleme ve tokenizer sözleşmesinin bir parçasıdır.

Tokenizer ve attıkları

TOKEN_RE = re.compile(r"[a-zçğıöşü]+")
def tokenize(s):
    return TOKEN_RE.findall(tr_lower(s))
  • Bu desen yalnızca listelenen harfleri tutuyor: noktalama, rakam ve emoji tümüyle düşüyor; â, î, û ve birleştirici işaretler token’ı bölüyor
  • !!!, 5/5 ya da bir emoji pekâlâ duygu taşıyabilir; bu deney onları modellemiyor ve skora etkisi ölçülmedi
  • tr_lower doğru yazımı varsayar: İngilizce klavyeyle yazılmış bir metinde IYI pekâlâ “İYİ” demek olabilir ve tr_lower onu ıyı yaparak yeni bir hata üretir

ASCII’leştirilmiş metin için gereken şey Türkçe karakter geri kazanımıdır (deasciification); ayrıntıları Türkçe NLP bölümünde.

Eğitim derlemi, sayılarla

### the training corpus, 40,000 reviews
tokens                        903,190
distinct word forms            74,317
hapax (seen exactly once)      43,579     58.6% of all forms
mean review length               22.6 tokens
median                             19
95th percentile                    56
longest                           296
  • Sözlüğün %58,6’sı tam olarak bir kez geçiyor. Önceki bölümün Türkçe Wikipedia örnekleminde bu oran %50,0’dı; farkı yalnızca yazım hatalarına bağlayamayız
  • 30.738 biçim en az iki kez görülmüş, ama min_df=2 sonrasında 30.195 sütun kalıyor: min_df derlem frekansını değil, belge frekansını sayar

Beş karakterlik tek bir ön ekin ardında 895 kelime biçimi

ön ek farklı biçim örnekler
kulla 895 kullanışlı, kullanıyorum, kullandım
bekle 285 beklediğimden, beklediğim, beklemiyordum
çalış 247 çalışıyor, çalışma, çalışan
çıkar 209 çıkarıyor, çıkar, çıkartıyor
düşün 195 düşünüyorum, düşünmeden, düşünenlere
  • Bag-of-words (kelime torbası) modelinde sözlüğe giren her biçim ayrı bir sütundur: kullanışlı için öğrenilen katsayı kendiliğinden kullanıyorum sütununa aktarılmaz

Tek bir kökün 895 çekimi değil: çekimler, türetimler ve yazım varyantları birlikte. Beş karakterlik ön ek, kök ya da biçimbirim çözümlemesi değildir.

1. raunt — 2. bölümün yöntemleri

satır vektörleştirici sözlük eşiği ve token’lar sütun
bag of words CountVectorizer min_df=2, kelime deseni 30.195
tf-idf TfidfVectorizer, sublinear_tf=True min_df=2, kelime deseni 30.195
tf-idf 1-2 gram aynısı, ngram_range=(1, 2) ile min_df=2, kelime deseni 101.659
tf-idf char_wb 3-5 analyzer="char_wb", ngram_range=(3, 5) min_df=3; desen kullanılmaz 94.939
  • Her vektörleştiriciye preprocessor=tr_lower, lowercase=False veriliyor: aksi hâlde scikit-learn Python’ın str.lower()’ını çağırır
  • Bütün satırlar için tek sınıflandırıcı: LogisticRegression; max_iter=2000, class_weight="balanced", random_state=42

1. raunt — sonuçlar

### round 1: counting
                      accuracy   macro-F1   F1(neg)   dims      fit
majority baseline        93.68      48.37      0.00      —        —
bag of words             92.14      73.51     51.30   30,195    0.7 s
tf-idf                   90.07      71.95     49.41   30,195    0.5 s
tf-idf 1-2 gram          92.57      76.21     56.47  101,659    1.0 s
tf-idf char_wb 3-5       88.63      70.39     47.14   94,939    3.3 s
  • Dört sayım yönteminin doğruluğu, çoğunluk kuralının %93,68’inin altında; buna karşılık macro-F1’de onun 22 ila 28 puan üstündeler
  • Bu kurulumda bir yöntemi yalnızca doğruluğa göre seçerseniz çoğunluk kuralı güçlü bir aday görünür
  • Bu bir yasa değil: başka eşikler ve eğitim ayarlarıyla hem doğruluğu hem olumsuz sınıf başarısını yükseltmek mümkündür; o seçenekler burada sınanmadı

Karakter satırı aynı tokenizer’dan geçmiyor

Aynı girdi iki analyzer’dan geçince: "5/5 harika!! ürün çok i̇yi 👍"

analyzer öznitelikler ne oldu
analyzer="word", token_pattern=[a-zçğıöşü]+ ['harika', 'ürün', 'çok', 'i', 'yi'] 5/5, !!, emoji düştü; birleştirici nokta “i̇yi”yi ikiye böldü
analyzer="char_wb", ngram_range=(3, 5) [' 5/', '5/5', '/5 ', ' ha', 'har', 'ari', ...] rakam, eğik çizgi, ünlem ve boşluklar öznitelik olarak duruyor
  • scikit-learn’de token_pattern yalnızca analyzer="word" iken kullanılır; char_wb onu tümüyle yok sayar ve kendi karakter akışını işler
  • Karakter şeması min_df=3 kullanıyor; üç kelime şeması ise min_df=2: savunulabilir bir tercih, ama taranmadı

Karakter satırının skor farkı, karakter öznitelikleriyle birlikte bu ön işleme seçimini de yansıtıyor olabilir.

Bu derlemde fark etmedi — ve yine de böyle yazın

  • lowercase=False ile de onsuz da ilk rauntun tablosu bayt bayt aynı çıktı: tekilleştirilmiş 233.508 yorumun 37.076.865 karakteri içinde tek bir büyük harf yok
  • Bu, derlemin temiz olduğu anlamına gelmiyor: U+0307 (COMBINING DOT ABOVE) 50.000 yorumluk altörneklemin 4.194 belgesinde, yani %8,4’ünde duruyor; her seferinde bir i harfinin ardından
  • O belgelerde tavsiye, tavsi + ye diye bölünüyor; işareti silince 30.195 sütunluk sözlük 29.823’e iniyor: 595 sütun yalnızca bu parçalanma yüzünden var
sonuç [a-zçğıöşü]+ ile token’lar
'İYİ'.lower() 'i̇yi̇' ['i', 'yi'] ikiye bölünür
'IYI'.lower() 'iyi' ['iyi'] yanlış birleşir

Onarım, size verilen metinden bu işareti silmektir; küçük harfe farklı biçimde çevirmek değil. Kodu neden yine de düzelttik? Çünkü kodu kopyalayan okurun derlemi böyle olmayacak.

Ham sayımlar TF-IDF’in önünde mi? Her seferinde tek değişiklik

CountVectorizer ile TfidfVectorizer arasında aynı anda üç şey değişiyor: IDF ağırlıklandırması, altdoğrusal terim frekansı (log-TF) ve L2 satır normalleştirmesi. Aynı C = 1.0:

unigram kelime öznitelikleri, min_df=2 doğruluk macro-F1 F1(neg)
ham sayımlar (= “bag of words”) 92,14 73,51 51,30
sayım + L2 88,07 69,57 45,85
log-TF + L2 88,37 70,00 46,53
sayım + idf + L2 90,20 72,16 49,74
log-TF + idf, normalleştirme yok 92,67 71,83 47,61
log-TF + idf + L2 (= “tf-idf”) 90,07 71,95 49,41

Ham sayımlara L2 satır normalleştirmesi eklemek macro-F1’i 73,51’den 69,57’ye düşürüyor; IDF onun üstüne eklendiğinde skor 72,16’ya çıkıyor. “TF-IDF burada IDF yüzünden geride kaldı” cümlesi deneyin gösterdiği şey değil.

C doğrulamada seçilince sıralama tersine dönüyor

C, eğitimden ayrılan bir doğrulama diliminde seçildi (eğitim için 32.000, doğrulama için 8.000); sonra model 40.000 belgenin tamamında yeniden eğitildi:

                     best C on validation    test macro-F1
raw counts                  1.0                  73.51
tf-idf                     10.0                  74.71
  • TF-IDF 74,71, ham sayımlar 73,51: 10.000 eşleştirilmiş yeniden örneklemede (paired bootstrap) macro-F1 farkının %95 aralığı 0,42 ile 1,99 puan arasında
  • Yalnızca TF-IDF’in doğru bildiği 151, yalnızca ham sayımların doğru bildiği 80 yorum var

“Ham sayımlar TF-IDF’in önünde” sonucu eşit bir ayar bütçesine dayanamadı: temsilin değişmez bir özelliği değil, paylaşılan ve ayarlanmamış bir C’ye bağlıydı.

Bigram’lar: sayım ailesinin içindeki en büyük fark

  • Bu kurulumda kelime unigram + bigram TF-IDF’i, yalnız unigram TF-IDF’inden 4,26 macro-F1 puanı, ham sayımlardan 2,70 puan yüksek
  • Bigram’lar iyi değil, güzel değil gibi yerel dizileri ayrı öznitelik olarak tutar: ayrı bir kelimeyle kurulan olumsuzlama
  • Türkçede olumsuzluğun bir kısmı ise ektedir: beğendim ile beğenmedim unigram düzeyinde de ayrı özniteliklerdir

4,26 puanın ne kadarının hangi olumsuzlama türünden geldiğini bu bölüm ölçmedi; bunu söylemek için hedefli bir hata çözümlemesi ya da ablasyon gerekir.

Model ne öğrendi, kelimelerle

olumluya doğru olumsuza doğru
gayet +8,04 etmiyorum −8,16
ederim +6,94 değil −6,95
mükemmel +6,13 kötü −6,63
teşekkürler +6,09 etmem −6,35
harika +5,93 beğenmedim −6,21
memnunum +5,84 iade −5,85
güzel +5,48 fakat −5,52

Bu eğitim dağılımında öğrenilmiş genel (global) ilişkiler: kelimelerin evrensel duygu puanları değil, tek bir tahminin eksiksiz açıklaması da değil.

2. raunt — 3. bölümün yöntemleri

Word2vec, fastText ve doc2vec; 40.000 eğitim yorumunun metni üzerinde, etiketleri kullanmadan sıfırdan eğitildi. Ön eğitimli vektör ve test yorumları bu eğitimde kullanılmadı.

model eğitim ayarları belge vektörüne giden adım
word2vec vector_size=100, window=5, min_count=2, sg=1, negative=5, epochs=10 sözlükte bulunan token’larının vektörlerinin ortalaması; sözlükte hiç token’ı yoksa sıfır vektörü
fastText aynısı, min_n=3, max_n=6, bucket=500_000 ile ortalamaya belgenin bütün token’ları girer: sözlük dışı biçimlere de alt kelime vektörlerinden bir vektör kurulur
doc2vec vector_size=100, min_count=2, epochs=20, dm=0 eğitim belgeleri: doğrudan öğrenilir; test belgeleri: infer_vector ile, varsayılan ayarlarla

Üç matris de ilk rauntla aynı lojistik regresyona verilir.

İki raunt, macro-F1’e göre sıralı

### both rounds, sorted by macro-F1
tf-idf 1-2 gram          92.57      76.21     56.47  101,659
bag of words             92.14      73.51     51.30   30,195
tf-idf                   90.07      71.95     49.41   30,195
tf-idf char_wb 3-5       88.63      70.39     47.14   94,939
averaged word2vec        79.92      61.39     34.64      100
averaged fastText        79.64      61.36     34.79      100
doc2vec (PV-DBOW)        71.96      55.13     27.66      100
majority baseline        93.68      48.37      0.00        —
  • Yoğun satırlar, seyrek satırların aksine son hanesine kadar yeniden üretilemiyor: aynı tohumla yeniden koşuda word2vec 61,37, fastText 61,29, doc2vec 55,44 macro-F1 verdi
  • Beş embedding tohumunda word2vec 61,57 ile 62,06, fastText 60,86 ile 61,68 arasında kaldı: yoğun satırlardaki ondalık farkları bu yayılımla birlikte okuyun

Hangi farklar bu test kümesinin gürültüsünden büyük?

Eşleştirilmiş bootstrap, 10.000 test yorumu: macro-F1 farkı ve %95 aralığı.

tf-idf 1-2 gram     - bag of words         +2.69   [ +1.60,  +3.82]
bag of words        - tf-idf               +1.56   [ +0.53,  +2.55]
tf-idf              - tf-idf char_wb 3-5   +1.57   [ +0.59,  +2.54]
tf-idf char_wb 3-5  - averaged word2vec    +9.01   [ +7.97, +10.01]
averaged word2vec   - averaged fastText    +0.08   [ -0.60,  +0.77]
averaged fastText   - doc2vec (PV-DBOW)    +5.85   [ +5.02,  +6.69]
tf-idf 1-2 gram     - averaged word2vec   +14.83   [+13.65, +16.01]
  • Aileler arasındaki fark ve seyrek ailenin içindeki komşu farklar bu test kümesinin örnekleme gürültüsünden büyük; word2vec ile fastText arasındaki fark değil
  • Bu aralıklar yalnızca test örneklemesini kapsar: eğitim bölmesinin değişmesini ve eğitim tohumunun yayılımını kapsamaz

Farkın biçimi: daha çok olumsuz bulunuyor, daha çok yanlış alarm

bigram TF-IDF ortalaması alınmış word2vec
macro-F1 76,21 61,39
olumsuz sınıfta F1 56,47 34,64
olumsuz sınıfta recall %76,3 %84,2
olumsuz sınıfta precision %44,8 %21,8
  • En iyi seyrek yöntemle en iyi yoğun yöntem arasındaki fark 14,8 macro-F1 puanı; olumsuz sınıfta 21,83 F1 puanı
  • Ortalaması alınmış word2vec aslında daha çok olumsuz buluyor; ama olumsuz diye işaretlediği yorumların yalnızca %21,8’i gerçekten olumsuz

Bunlar test kümesi üzerindeki toplu oranlardır. Bu yanlış alarm örüntüsü, temsilin ayırt ediciliği kadar class_weight="balanced", karar eşiği ve C seçimiyle de ilişkili olabilir.

Bu sırayı genel bir başarı sıralaması olarak okumayın

  • Üç yoğun satır bu derlemin 0,9 milyon token’ı üzerinde sıfırdan eğitilmiş, ortalaması alınmış statik vektörler; ön eğitimli değil
  • Yoğun vektörlerin ölçeği eşitlenmedi ve C hiçbir satır için ayarlanmadı; her satır tek bir bölmeden ve tek bir koşudan geliyor
  • Ölçüm tam olarak şu: 0,9 milyon token üzerinde sıfırdan eğitilmiş statik embedding’ler, bu kurulumda aynı 40.000 belgeden çıkarılan sayımların gerisinde kaldı — “statik embedding’ler sayımların gerisinde kalır” değil
  • Büyük Türkçe derlemlerde önceden eğitilmiş vektörler farklı sonuç verebilir; farkın yönünü ve büyüklüğünü bu bölüm ölçmedi

Derlem boyutuna bağlı olmayan şey ortalama alma kusuru: o arıza vektörlerde değil, havuzlama adımındadır. Bu bölümün genellenebilir sonucu budur; sıralama ise yerel bir sonuç.

Boyut sayısını bellek diye okumayın

kelime TF-IDF matrisi yoğun belge matrisi
sütun 30.195 100
satır başına sıfır dışı değer ortalama 19,8 100
ölçülen eğitim matrisi belleği 9,7 MB 16,0 MB
  • Seyrek matris yalnızca sıfır dışı değerleri ve onların indekslerini saklar
  • 100 boyut, bigram TF-IDF’in 101.659 sütununa göre yaklaşık 1.017 kat, kelime TF-IDF’in 30.195 sütununa göre yaklaşık 302 kat daha az koordinat — tek başına bellek ya da gecikme oranı değil

Belge başına 100 sayı ile 61,39 macro-F1’e karşılık, 101.659 sütunla 76,21. Maliyetleri hedef kullanımınızda ayrı ayrı ölçün.

Sözlük dışı (out-of-vocabulary) sınavı

### coverage of the 10,000 test reviews
test tokens                     229,055
outside the word2vec vocabulary  16,660     7.27% of tokens
distinct test word forms         32,573
outside the vocabulary           15,098     46.4% of forms
test reviews with no usable token     7
  • Farklı test biçimlerinin %46,4’ü word2vec’in öğrendiği sözlükte yok; belge ortalaması böyle token’ları atlar
  • Yedi yorumun sözlükte hiç token’ı yok: sıfır vektörü alıyorlar ve yedisi de yanlış sınıflanıyor
  • Buradaki %7,27, önceki bölümdeki %7,33 değil: o tanımla — eğitimde hiç görülmemiş — sayıldığında oranlar token’larda %5,10, biçimlerde %33,5

fastText her biçim için bir vektör kuruyor

### nearest neighbours for unseen word forms
kargolanmamış
  word2vec   KeyError
  fastText   kargolanmış, kargolandı, kargolanma, kargolanıp, kargolu

tavsiyelerim
  word2vec   KeyError
  fastText   tavsiyeleri, tavsiyeler, tavsiyeederim, tavsiyedir

hızlıcana  (günlük konuşma dili)
  word2vec   KeyError
  fastText   hızlıca, hızlıda, hızlısı, hızlıydı, hızlı
  • Kapsama %100’e çıkıyor; vektörün niteliği ise garanti değil. Sözlük dışı 15.098 test biçiminin n-gram’larının ortalama %84,5’i sözlükteki en az bir kelimede de geçiyor

kargolanmamış’ın ilk komşusu, olumsuzluk eki taşımayan kargolanmış: biçim benzerliği olumsuzluk ayrımını gölgeleyebiliyor.

İki model, iki tür komşu

sorgu word2vec fastText
kargo teslimat, gönderim, gönderi, kargoda, kargoyla, kargolama — farklı kelimeler, aynı konu kargocu, kargolu, kargosu, kargonuz, kargom, kargomun — hepsi aynı kökün çekimleri
kalitesiz dandik, kullanışsız, dayanıksız, uyduruk, kırılacak — kötü demenin beş ayrı yolu, kökleri farklı kalitesizmiş, kalitesizliği, kalitel, kalitesi, kalitesindeki — hepsi aynı kökün biçimleri
  • Sözlükte bulunan, en az altı harfli ve eğitimde en az 20 kez geçen 2.806 kelimeden rastgele 500’ünde ölçüldü: ilk 5 komşu içinde, sorguyla ilk beş karakteri ortak olanların oranı word2vec’te %6,5, fastText’te %60,7

fastText’in listesinde kalitesi var — eşanlamlı değil: -siz ekinin taşıdığı olumsuzluğu taşımayan bir isim biçimi. Bu ölçüm yalnızca yazımsal örtüşmeyi sayar; komşuların anlamca ne kadar uygun olduğunu söylemez.

Kapsama %53,6 → %100. Macro-F1: 61,39 → 61,36

word2vec fastText
modelin vektör sunabildiği farklı test biçimleri %53,6 %100
bu koşudaki macro-F1 61,39 61,36
  • Fark −0,03 puan: eşleştirilmiş bootstrap aralığı (−0,60 ile +0,77) sıfırı içeriyor ve eğitim tohumu tek başına her iki modeli yaklaşık 0,5–0,8 puan oynatıyor
  • İki model kapsama dışında da farklı olduğu için bu sonucu yalnızca OOV kapsamasına bağlayamayız

Vektör üretmek doğru anlamı garanti etmez. İçsel (intrinsic) ölçümleri, kapsamayı ve görev başarısını ayrı ayrı ölçün.

İki modelin ayrıştığı yer

  • Düz kelime TF-IDF’i ile ortalaması alınmış fastText, test belgelerinin %84,1’inde aynı etiketi veriyor
  • Ayrıştıkları 1.587 belgede TF-IDF 1.315, fastText 272 kez doğru
  • McNemar testi: \(\chi^2 = (|1315 - 272| - 1)^2 / (1315 + 272) = 684{,}2\) — hata oranları, yani doğruluk hakkında bir ifade
  • Macro-F1 farkı için eşleştirilmiş bootstrap gerekir: fark 10,66 puan, %95 aralığı 9,52 ile 11,77

İki sonuç da yalnızca incelenen iki kurulum ve bu test verisi için geçerli. Asıl ilginç soru, o 272 örneğin neye benzediği.

Altı uyuşmazlık ve hepsinde sayılan iki özellik

yorum gerçek kim haklı
"en guvenli alısveriş sitesi" olumlu fastText — Türkçe karakterler kısmen düşmüş
"çok hizli ve temi̇z tesli̇mat" olumlu fastText — kelime ortasında bozuk karakter
"çok sessiz çalışıyor makina ." olumlu fastText — “makina”, “makine”nin konuşma dilindeki biçimi
"sıkıcı edebi yonu cok zayif" olumsuz TF-IDF — fastText olumlu diyor
"koku ne çok kötü ne çok iyi" olumsuz TF-IDF — “ne… ne…” yapısı
"cok guzel! kedi bayildi buna" olumlu TF-IDF — fastText olumsuz diyor
  • TF-IDF sözlüğünün dışında kalan token’ların payı: yalnızca fastText’in doğru bildiği yorumlarda %9,49, yalnızca TF-IDF’in doğru bildiklerinde %9,48 — hangi modelin haklı çıkacağını ayırmıyor
  • Ayrışan şey sınıf: yalnızca fastText’in doğru bildiği yorumların %31’i olumsuz (test kümesinin tamamında %6,3), yalnızca TF-IDF’in doğru bildiklerinin %98’i olumlu

Bir yorum ile olumsuz hâli arasındaki kosinüs

### cosine between a review and its negation
                                                  averaged     tf-idf
                                                   fastText
ürünü çok beğendim / ürünü hiç beğenmedim            0.776       0.193
kesinlikle tavsiye ederim / … tavsiye etmem          0.919       0.474
kargo çok hızlı geldi / kargo çok yavaş geldi        0.943       0.572
fiyatına göre gayet kaliteli / … hiç kaliteli değil  0.892       0.690
bu üründen memnun kaldım / … memnun kalmadım         0.962       0.582
  • Bu beş karşıt çiftte: ortalaması alınmış fastText 0,78–0,96, kelime TF-IDF’i 0,19–0,69. Aynı çiftlerde word2vec ortalaması da 0,72–0,96 veriyor; yüksek değerler fastText’in alt kelimelerine özgü değil

Ortalama alma, iki cümlenin paylaştığı kelimelerin katkısıyla, değişen tek kelimenin etkisini azaltabilir — ama farkın tamamını yalnızca ortalama işlemine bağlayamayız.

Ortalama alma olumsuzlamayı neden seyreltebilir

\[\mathbf{d}_+ - \mathbf{d}_- = \frac{1}{5}\left(\mathbf{v}_{\text{liked}} - \mathbf{v}_{\text{disliked}}\right)\]

  • Beş kelimelik bir yorum ile olumsuz hâli tek bir kelimede farklılaşıyor. Önemli olan oran: farklılaşan tek vektöre karşı ortak dört vektör — yirmi kelimede ortak vektör sayısı on dokuz
  • Garanti değil: ortak kelimelerin vektör toplamının farklılaşan kelimelere göre baskın olmasına bağlı
  • Alt kelime modeli ortak karakter n-gram’ları ekler: beğendim ile beğenmedim arasındaki kosinüs fastText’te 0,74, word2vec’te 0,53
  • Yüksek kosinüs, karar yönünde ayrım olmadığı anlamına gelmiyor: “ürünü çok beğendim” cümlesine olumlu olma olasılığı 0,82, olumsuz hâline 0,02 veriliyor — kosinüs 0,776 iken

Ortalama alma bazı sinyalleri zayıflatabilir; 14,82 puanlık toplam farktaki payını ise bu örnekler ölçmez.

Kesişim: daha az etiket, farklı bir sıralama

### macro-F1 by labelled training size (same test set of 10,000)
    n     negatives   tf-idf   tf-idf char   word2vec   fastText
   100        6        48.37       48.37       53.51      53.87
   250       16        48.53       48.84       61.59      63.10
   500       32        49.28       50.60       61.02      61.16
 1,000       63        55.40       58.55       59.52      59.93
 2,500      158        66.61       68.36       60.91      61.19
 5,000      316        71.16       70.47       61.52      60.80
10,000      632        72.55       71.29       61.80      61.56
20,000    1,264        72.42       71.26       60.94      60.96
40,000    2,529        71.95       70.39       61.39      61.36
  • İki temsil ailesi de 40.000 eğitim yorumunun metninden, etiketlere bakmadan yararlanıyor; değişen, sınıflandırıcıya verilen etiket sayısı
  • Tablonun her satırı tek bir altörneklemden geliyor: yeniden eğitilen vektörlerle word2vec 100 etikette 58,23, 250 etikette 65,21 veriyor

Her büyüklükte on etiket örneklemi: ortalama macro-F1

n tf-idf tf-idf 1-2 gram fastText tf-idf > fastText
250 48,98 48,70 60,96 0 / 10
1.000 56,57 51,68 61,96 0 / 10
1.250 59,59 53,43 62,00 2 / 10
1.500 61,87 55,63 61,90 4 / 10
1.750 63,95 57,81 61,64 10 / 10
2.500 67,52 63,42 61,55 10 / 10
5.000 70,97 71,49 61,18 10 / 10
  • Aynı büyüklükte, yalnızca hangi belgelerin etiketlendiği değişince skorlar birkaç puan oynuyor: 1.000 etikette TF-IDF 55,14 ile 59,80, fastText 61,01 ile 63,15 arasında

Bu kurulumda sıra 1.250 ile 1.750 etiket arasında değişiyor. Tek bir altörnekleme dayanan bir sıralamayı bu yayılımla birlikte okuyun.

Kesişim aralığını taşınabilir bir sayı olarak okumayın

  • Tek altörneklem dizisinde çizgilerin kesiştiği yer yaklaşık 1.500 etiket: iki ölçüm arasından okunan bir değer, ölçülmüş bir nokta değil
  • Bölümün en yüksek skorlu modeli olan kelime bigram TF-IDF’i için aralık daha sağda: fastText’i 2.000 etikette on örneklemin ikisinde, 2.500’de dokuzunda geçiyor
  • Bütün bu sayılar aynı test kümesinden okundu. Kendi göreviniz için kendi eğrinizi çıkarın

Taşınabilir olan şey eşik değil, biçim: az etiket rejiminde etiketsiz metinden öğrenilmiş bir temsilin önceliği olabilir; etiket arttıkça seyrek doğrusal model bu önceliği kapatır.

Sol kenar: 250 etiket, 16’sı olumsuz

  • Kelime TF-IDF’i 48,53, çoğunluk kuralı 48,37 macro-F1 alıyor: bu model 10.000 test yorumunun yalnızca birine olumsuz diyor
  • Ortalaması alınmış fastText aynı 250 etiketle 63,10 alıyor; on etiket örnekleminde aradaki fark ortalama 12,0 puan (8,2 ile 16,1 arasında)
  • Bu örüntüyle uyumlu bir açıklama: 16 olumsuz örnek, 30.195 sütunlu bir uzaydan çekilmiş 16 seyrek satırdır; embedding modeli ise etiketsiz metinden önceden öğrenilmiş ortak bir yapı sunar

Bu açıklamayı sınamak için az etiketli koşuldaki katsayılara, hatalara ve daha güçlü düzenlileştirme seçeneklerine bakmak gerekir; bu bölüm bunu yapmadı.

Sonra eğri düzleşiyor

  • Ortalaması alınmış fastText 500 etiketle 61,16, 40.000 etiketle 61,36 macro-F1 alıyor; on örneklemli ölçümde 500 ile 5.000 etiket arasındaki ortalamalar 61,2–62,0 bandında kalıyor
  • Kelime TF-IDF’i yaklaşık 10.000 etikete kadar yükseliyor, sonra tek koşuda hafifçe düşüyor
  • Ölçülen şey “yoğun temsiller” değil, bu kurulum: sıfırdan eğitilmiş 100 boyutlu statik vektörlerin ortalaması

Genelleşen kısım, sorunun kendisi: bu görevde beni sınırlayan etiket mi, temsil mi, yoksa ayarlar mı?

Bunun bedeli ne

Tek CPU çekirdeğinde, 40.000 eğitim belgesiyle; süreler tek koşudan.

                      build the        vectorise      training
                      representation   10,000 test    matrix
tf-idf                     0.5 s          0.11 s        9.7 MB
tf-idf 1-2 gram            0.9 s          0.17 s       15.4 MB
tf-idf char_wb 3-5         2.9 s          0.72 s      144.8 MB
word2vec + averaging      14.7 s          0.11 s       16.0 MB
fastText + averaging      31.6 s          0.27 s       16.0 MB
doc2vec                    8.5 s          1.73 s       16.0 MB
  • training matrix sütunu yalnızca eğitim matrisinin belleğidir; modeli, sözlüğü ya da embedding tablosunu ve tepe RAM kullanımını kapsamaz
  • Süreler tek koşudan geliyor; koşudan koşuya fark yüzde on dolayında kaldı, küçük süre farklarını bu yüzden karşılaştırmayın

Tablodaki iki satır ayrıca yorumlanmayı hak ediyor

  • Karakter n-gram’ları: tam eğitim koşulunda karakter TF-IDF’i 144,8 MB’lık bir matrisle (belge başına 301 sıfırdan farklı değer) 70,39 macro-F1 aldı; kelime TF-IDF’i 9,7 MB ile 71,95
  • 1.000 etiketli noktada ise karakter öznitelikleri kelime TF-IDF’inin 3,2 puan önündeydi: bellek–skor dengesini etiket miktarına ve metindeki yazım gürültüsüne göre yeniden değerlendirin
  • doc2vec, yeni bir belgeyi vektörleştirmek için gradyan inişi koşturmak zorunda: 10.000 yorum için 1,73 saniye; ortalama alma ise 0,11 — 16 kat fark ve eğitimin aksine bu maliyet her yeni belgede yeniden oluşuyor
  • Bu kurulumda doc2vec’in macro-F1’i 55,13 ile incelenen yoğun satırların en düşüğü

Bu kısa ve gürültülü yorum görevinde doc2vec’in varsayılan tercih olmasını destekleyen bir ölçüm yok. Mutlak sayıya da bakın: belge başına 0,17 milisaniye, çoğu servis için hâlâ küçük.

Melez yaklaşım ve bir olumsuz sonuç

kurulum macro-F1
tek başına ortalaması alınmış fastText 61,36
tek başına karakter TF-IDF’i 70,39
karakter TF-IDF’i ⊕ ortalaması alınmış fastText, düz birleştirme (95.039 boyut) 71,65
tek başına karakter TF-IDF’i, aynı ayar bütçesiyle (C = 30) 73,46
yoğun bloğu L2 ile normalleştirilip ölçeklenen melez (\(\alpha = 2\), C = 10) 74,69
kelime bigram TF-IDF’i, ayarlanmamış 76,21
  • Blok ölçeklerini ayarlamak melezi düz birleştirmenin 3,02 puan üstüne çıkarıyor (2,00 ile 4,06 arası) — ama ayarlanmamış bigram TF-IDF’i ayarlanmış melezin hâlâ 1,52 puan önünde (0,20 ile 2,80 arası)

Melezi yalnızca kendi parçalarıyla karşılaştırıp başarı diye bildirmek, tam da bu bölümün karşı çıktığı şey olurdu: işinize gelen baseline’ı seçmek.

Bilerek seçmek: seyrek adaylar

bu deneyde ölçülen ne zaman seçilir
Bag of words Sabit C = 1.0 ile kelime TF-IDF’inden yüksek skor aldı (73,51’e karşı 71,95). Belge uzunluğunu kendiliğinden normalleştirmez Kısa belge sınıflandırması için ilk baseline’lardan biri; ayarları doğrulama kümesinde seçin
TF-IDF (kelime) C doğrulamada ayarlanınca 74,71 macro-F1 aldı ve ham sayımların önüne geçti; paylaşılan ve ayarlanmamış C ile gerisinde kaldı Genel amaçlı ilk seyrek baseline; vektörleştirici ve C seçimini eğitim/doğrulama sınırı içinde yapın
TF-IDF (kelime unigram + bigram) Bu bölümdeki en yüksek macro-F1: 76,21. Az etikette unigram TF-IDF’in altında kaldı Birkaç bin etiketiniz varsa ve yerel kalıpların önemli olabileceği kısa metin görevlerinde — duygu, niyet, triyaj
TF-IDF (karakter n-gram’ları) 1.000 etikette kelime TF-IDF’inin 3,2 puan önündeydi; 144,8 MB eğitim matrisi; tam veride daha düşük macro-F1 (70,39) Yazım değişkense ve ölçtüğünüz bellek ile skor uygunsa

Bilerek seçmek: yoğun adaylar

bu deneyde ölçülen ne zaman seçilir
Ortalaması alınmış word2vec 100 boyutlu belge vektörüyle 61,39 macro-F1. 1.000 etikete kadar on etiket örnekleminin hepsinde kelime TF-IDF’inin önünde. Farklı test biçimlerinin %46,4’ü sözlükte yok Etiket kıtsa ya da yoğun vektör araması gerekiyorsa; hedef veride sınanacak bir aday olarak
Ortalaması alınmış fastText Bütün test biçimleri için vektör kurdu. Tek altörneklemli eğride 250 etikette en yüksek skor (63,10). Macro-F1’i word2vec’inkinden ayırt edilemedi Yazım ve biçim çeşitliliği yüksekse; görev başarısını ve belleği ölçerek
doc2vec (PV-DBOW) Bu koşudaki en düşük skor: 55,13. Yeni belge için vektör çıkarımı ek optimizasyon gerektirir (ortalamanın 16 katı) Belge vektörünü doğrudan öğrenmenin kendi verinizde ortalama almayı geçtiğini ayrı bir deneyle gösterebildiğinizde

Yöntem seçimi göreve ve veri bütçesine göre yapılmalı.

Temsil seçme sırası

  1. Görevi, yanlış alarm ve kaçırma maliyetlerini, ana metriği yazın
  2. Veri sürümünü, eğitim/doğrulama/test bölmelerini ve etiketsiz metni sabitleyin
  3. Ön işlemeyi, sözlüğü ve IDF’i test etiketlerinden uzak tutun
  4. Ucuz baseline’ları kurun: kelime sayımları / tf-idf, kelime n-gram’ları, karakter n-gram’ları
  5. Yeterli etiketsiz metniniz ya da uygun ön eğitimli vektörünüz varsa bir embedding adayı ekleyin
  6. Her adayın ayarlarını aynı doğrulama bütçesiyle seçin
  7. Kararı doğrulama kümesinde verin: skor + aralık · gecikme · bellek · açıklanabilirlik ihtiyacı
  8. Kilitli test kümesini, seçilmiş çözüm için bir kez kullanın

Bu bir eşik listesi değil, bir soru listesi. Bu bölümün gözlediği sayılar 5. adımda birer başlangıç beklentisi olarak işe yarar, 1. adımda birer kural olarak değil.

Ortak sınır: kelime sırası

### two reviews, same words, opposite meaning
a = "kalite iyi fiyat kötü"
b = "kalite kötü fiyat iyi"

cosine, averaged fastText   1.0000
cosine, tf-idf              1.0000
  • Unigram TF-IDF de kelime vektörlerinin basit ortalaması da iki yorum için aynı vektörü üretir: toplama, terimlerin sırasına duyarsızdır
  • Yalnızca bu vektörü girdi alan bir sınıflandırıcı iki yorumu ayıramaz — daha çok etiketle de, daha güçlü bir sınıflandırıcıyla da

Belge düzeyindeki duygu analizi bu kaybı, yön (aspect) düzeyindeki görevlere göre daha iyi tolere edebilir; “müşteri hangi bileşenden şikâyet ediyor” sorusunda ise aynı kayıp görevi doğrudan engelliyor.

Bigram’lar yerel sırayı tutar, uzak ilişkileri değil

  • İki yorumun bigram’ları tek bir bigram bile paylaşmıyor; altı bigram’ın dördü sözlükte ve iki yorumun kosinüsü 1,0000’den 0,3247’ye iniyor
  • Temsillerin ayrılması, sınıflandırıcının farklı ya da doğru etiket vereceği anlamına gelmez: bu model iki yoruma da olumsuz diyor (olumlu olma olasılıkları 0,26 ve 0,15)
  • Pompa, mühendisin geçen hafta değiştirmesine rağmen yine arızalandı cümlesinde pompa ile arızalandı arasında altı kelime var: bu bağı tek bir ardışık n-gram ile kapsamak için sekiz token’lık bir dizi gerekir

Daha uzun ilişkiler için temsilin kelime dizisinin bir fonksiyonu olması gerekir: kelime sırasını hesaba katan encoder’lar (kodlayıcılar); Kısım II bu sınırdan başlıyor.

Sezgi kontrolü 1 / 4

Müşterinizin Türkçe 400 etiketli destek talebi ve 2 milyon etiketsiz talebi var. Hangi temsil?

  • Tek bir model adı değil, bir karşılaştırma planı: önce talebin etiketini, iş metriğini ve test düzenini belirleyin
  • Etiketsiz talepler iki aile için de kaynaktır. TF-IDF sözlük ve belge frekansıyla sınırlı kalır; embedding modeli aynı metinden eş-oluşum yapısını da çıkarır
  • Bu bölümün deneyinde 500 etikette embedding ortalamaları kelime TF-IDF’inin yaklaşık 11 puan önündeydi (62,0’a karşı 50,7): bu bir beklenti, bu alan için bir eşik değil
  • Kelime n-gram, karakter n-gram ve embedding adaylarını aynı doğrulama bütçesiyle karşılaştırın; ek etiketleme kararını kendi öğrenme eğrinizle verin

Sezgi kontrolü 2 / 4

Bir meslektaşınız %93 doğruluk bildirip modeli yayına almak istiyor. Ne istersiniz?

  • Önce aynı test kümesindeki çoğunluk kuralının doğruluğunu ve karışıklık matrisini (confusion matrix)
  • %93, bu test kümesinde her girdiye çoğunluk sınıfını vererek elde edilen %93,68’in altında. Bu, modelin işe yaramadığını göstermez: bu bölümün bigram TF-IDF’i %92,57 doğrulukla olumsuzların %76,3’ünü buluyor
  • Bu yüzden olumsuz sınıfın recall ve precision’ını, seçilen karar eşiğinde yanlış alarmların yarattığı iş yükünü isteyin
  • Sorunun genel hâli: en basit baseline’ın skoru kaç? Bunu, bildirilen herhangi bir skora bakmadan önce sorun

Sezgi kontrolü 3 / 4

fastText biçim kapsamasını %100’e çıkardı. Skor neden yükselmedi?

  • word2vec 61,39, fastText 61,36 macro-F1 aldı; fark ayırt edilemiyor (eşleştirilmiş bootstrap aralığı −0,60 ile +0,77)
  • Farklı yöntemlerle eğitilmiş iki model var: bu kurgu kapsamayı yalıtmıyor
  • Olası açıklamalar: fastText’in komşuları yazılışça yakın biçimlere kayıyor; ortalaması alınmış vektörlerde bir cümle ile olumsuz hâli arasındaki kosinüs iki modelde de yüksek
  • Bir temsil özelliğindeki iyileşme, ancak görevi sınırlayan şey o özellikse görev skorunda görünür

Sezgi kontrolü 4 / 4

300 boyutlu ya da ön eğitimli vektörler kararı değiştirir miydi?

  • Bilmiyoruz; bu koşullar ölçülmedi
  • Daha büyük ya da ön eğitimli Türkçe vektörler komşulukları, olumsuzlama çiftlerinin kosinüsünü ve görev skorunu değiştirebilir; yönünü ve büyüklüğünü bu bölümden çıkaramayız
  • Değişmeyen tek şey matematiksel olan: aynı kelimeleri aynı sayıda içeren iki cümlenin basit ortalaması, hangi sabit kelime vektörleri kullanılırsa kullanılsın aynıdır — kelime sırası örneğindeki 1,0000 bu yüzden değişmez
  • Bunu karara bağlamanın yolu 13. alıştırma

Mülakat tarzı tartışma soruları

Bölümün altı sorusundan üçü. Cevapların neredeyse hepsi bu bölümün ölçtüğü bir şeye dayanıyor.

  1. Metin sınıflandırma için embedding mi, TF-IDF mi?
  2. Kelime vektörlerinin ortalaması neden sayımların gerisinde kalabilir?
  3. İki temsili manşet skorlarının ötesinde nasıl karşılaştırırsınız?

Önce görevde belirleyici olan ekseni adlandırın: etiket miktarı, biçim çeşitliliği, sıra gereksinimi ya da maliyet. Ardından ilgili ölçümü verin ve sonucu hangi yeni verinin ya da deneyin değiştireceğini söyleyin.

Akılda kalması gerekenler

  • Bildirilen herhangi bir skora bakmadan önce en basit baseline’ın skorunu sorun: burada çoğunluk kuralı %93,68 doğruluk ve 48,37 macro-F1 alıyor
  • Eşit ayar bütçesi verilmeden yapılan bir temsil karşılaştırması, ölçmek istediğiniz şeyi ölçmeyebilir: “ham sayımlar TF-IDF’in önünde” sonucu paylaşılan ve ayarlanmamış bir C’ye bağlıydı
  • Yerel sonuç: bu kurulumda 40.000 belgeden çıkarılan sayımlar, 0,9 milyon token üzerinde sıfırdan eğitilmiş statik embedding’lerin önündeydi
  • Kapsama ile görev skoru ayrı ölçümlerdir: fastText kapsamayı %100’e çıkardı, macro-F1 ise ayırt edilebilir biçimde değişmedi
  • Az etikette embedding ortalamaları öndeydi; bu kurulumda sıra 1.250 ile 1.750 etiket arasında değişiyor. Taşınabilir olan eşik değil, biçim
  • Genellenebilir sonuç: unigram torbası ve kelime vektörlerinin basit ortalaması, aynı kelimelerin farklı sırasına aynı vektörü verir

Laboratuvar ve alıştırmalar

  • Bölümde 13 alıştırma var: Temel, Uygulama, İleri ve Araştırma etiketli
  • Yapılacak tek alıştırma buysa 8. alıştırma: eşleştirilmiş bootstrap tablosunu yeniden üretin, sonra deneyi beş farklı eğitim/test bölmesiyle tekrarlayın
  • 2. alıştırma: class_weight="balanced" ayarını kaldırıp her modeli yeniden koşturun
  • 13. alıştırma: ikinci rauntun sıfırdan eğitilmiş vektörlerini 300 boyutlu ön eğitimli Türkçe vektörlerle değiştirin ve öğrenme eğrisini yeniden çıkarın

Bölüm: Metin Temsillerini Karşılaştırmak. Laboratuvar, notebooks deposundaki bölüm notebook’unu izliyor: tr/chapters/04-karsilastirma/04-karsilastirma.ipynb.