İçeriğe geç
academia.sh

Ders 08 / 14

Doğal Dil İşleme Ölçütleri

Tek bir çıktının dört ölçütte okunması ve dört ölçütün dört ayrı sıralama vermesi: aynı dört sistem belirteç düzeyinde B > A > C > D, varlık düzeyinde A > B > C > D, belge düzeyinde C > B > A > D, örtüşme duyarlılık yönünde D > B > A > C sıralanıyor ve her ölçütün birincisi başka bir sistem. Her ölçüt kendi tabanına karşı okunur: belirteç düzeyinde en sık etiket 0,3970, belge düzeyinde en sık sınıf 0,4420, varlık düzeyinde hiç aralık işaretlememek 0,0000, örtüşmenin duyarlılık yönünde bütün girdiyi işaretlemek 1,0000. Son satırda taban ile en iyi sistem arasındaki fark tam olarak 0,0000'dır.

İçindekiler

Önceki derste üç ölçüt üç ayrı sıralama verdi ve girdiyi kopyalayan yordam duyarlılık yönünde 1,0000 aldı. O bulgu tek bir görevin özelliği değildir. Bu konunun sekiz dersinde ölçütler dört ayrı düzeyde okundu: belirteç düzeyinde, varlık düzeyinde, belge düzeyinde ve örtüşme üzerinden. Aynı sistem bu dört düzeyde dört ayrı sayı verir, ve sayılar birbirinin sıralamasını korumaz.

Bu ders konunun kapanışıdır ve tek bir kurulumla bitirir: dört sistem, tek bir çıktı biçimi, dört ölçüt. Çıktı her not için belirteç başına bir etikettir; dört ölçütün dördü de aynı etiketlemeden okunur. Kesinlik, duyarlılık ve dengeli biçimin tanımları M27/K03 model-degerlendirme’de kuruldu ve burada tekrarlanmaz; buradaki soru tanım değil, karar biriminin ve tabanın ölçütü nasıl değiştirdiğidir.

  • NL64. Metin kurgusu önceki derslerinkiyle aynıdır ve kurgudur; tohum 20260218.
  • NL65. Altın etiketleme kurgudur: notun kendi olay türünden gelen öbeklerin bütün belirteçleri o türle, geri kalan bütün belirteçler yok ile etiketlenir. Ödünç alınan yan kayıt yok sayılır — notun bildirdiği olay o değildir.
  • NL66. Çıktı biçimi tektir: her sistem her belirteç için bir etiket üretir. Dört ölçüt de bu tek çıktıdan hesaplanır; hiçbir sistem ölçüte göre ayrı bir çıktı vermez.
  • NL67. Aralık ardışık ve aynı etiketli belirteçlerin en uzun dizisidir. Varlık düzeyinde bir aralık ancak başlangıcı, bitişi ve etiketi birlikte tutarsa doğru sayılır.
  • NL68. Belge düzeyi karar çıktıdan türetilir: işaretli belirteçlerin en sık etiketi notun türü sayılır; hiç işaret yoksa en sık sınıf yazılır.
  • NL69. Örtüşme ölçütü önceki dersin duyarlılık yönüdür: altın etiketlemede işaretli olan belirteçlerin kaçı çıktıda da işaretli. Tekrarlı belirteçler kırpılarak sayılır.
  • NL70. Dört ölçütün dört ayrı tabanı vardır ve her taban o ölçütün en aptal yordamıdır: en sık etiketi her belirtece yazmak, hiç aralık işaretlememek, en sık sınıfı yazmak, bütün girdiyi işaretlemek.
  • NL71. Sistemlerin öğrendiği tablolar yalnız eğitim kümesinden kurulur; ayrılmış küme son 500 nottur.
  • NL72. Dört sistemin hiçbiri ötekinden türetilmemiştir; dördü de aynı ayrılmış kümede, aynı çıktı biçimiyle koşar.

Tek Çıktı, Dört Okuma

Altın etiketleme kurulduğunda iki taban doğrudan okunabilir: belirteç düzeyinde en sık etiketi her belirtece yazan yordam ve belge düzeyinde en sık sınıfı yazan yordam.

# KURGU saha notlari — M27/K02'nin not alaninin genisletilmis hali. Tohum 20260218.

TOHUM, M32 = 20260218, 0xFFFFFFFF
TUR = ("olagan", "erisilemedi", "sayac arizasi", "kacak suphesi")
PAY = (0.46, 0.22, 0.19, 0.13)
OBEK = {t: s.split("|") for t, s in zip(TUR, (
    "okuma normal|okuma normaldi|sayac erisimi saglandi|sayaca erisildi|olcum tekrarlandi|"
    "olcumu yineledik|vana kontrol edildi|vanada sorun yok|kapak temiz|kapakta iz yok|"
    "gosterge okunakli|gostergede rakam net",
    "abone evde degildi|abone bulunamadi|erisim saglanamadi|erisim yok|kapi zili calismiyor|"
    "zil calismadi|bahce kapisi kilitli|bahce kapisi kapali|bodrum katina inilemedi|"
    "bodrum kilitli|adres bulunamadi|adres eksik",
    "gosterge donmuyor|gostergede hareket yok|sayac cami kirik|sayacin cami catlak|"
    "rakam okunmuyor|rakamlar silik|ibre sabit kalmis|ibre kilitli|mekanizma takilmis|"
    "mekanizmada takilma|sayac durmus|sayac calismiyor",
    "muhur izi var|muhurde iz goruldu|muhur kopmus|muhurler kopuk|baglanti degistirilmis|"
    "baglantida degisiklik|kelepce gevsek|kelepcede gevseme|boru ek yeri yeni|boruda yeni ek|"
    "sayac ters takilmis|sayaci ters takmislar"))}
GURULTU = ("arac park halinde|kapak kirli|hava yagisli|adres teyit edildi|not kisa tutuldu|"
           "ikinci ziyaret|bahce icinde|kaldirim uzerinde").split("|")
BOLGE = "kuzey hatti|guney hatti|dogu hatti|bati hatti|merkez hatti".split("|")
KLM = {c: t for t in TUR for c in OBEK[t]}


def uretec(t):
    x = ((t ^ (t >> 16)) * 2246822507) & M32
    x = ((x ^ (x >> 13)) * 3266489909) & M32
    s = [(x ^ (x >> 16)) & M32]

    def sonraki():
        s[0] = (s[0] * 1664525 + 1013904223) & M32
        return s[0] / 4294967296
    return sonraki


def not_ozet(no):
    r = uretec(TOHUM + 41000 + no)
    u, k = r(), 0.0
    for i, p in enumerate(PAY):
        k += p
        if u < k:
            t = TUR[i]
            break
    p = [OBEK[t][int(r() * 12)]]
    if r() < 0.55:
        p.append(OBEK[t][int(r() * 12)])
    if r() < 0.34:
        p.append(OBEK[TUR[int(r() * 4)]][int(r() * 12)])
    if r() < 0.62:
        p.append(GURULTU[int(r() * 8)])
    if r() < 0.30:
        p.append(BOLGE[int(r() * 5)])
    return {"metin": ", ".join(p), "tur": t, "obek": p,
            "ozet": ", ".join(c for c in p if KLM.get(c) == t)}
YOK = "yok"


def blr(m):
    return [w.strip(",").lower() for w in m.split() if w.strip(",")]


VERI = []
for i in range(1600):
    x = not_ozet(i)
    z, e = [], []
    for c in x["obek"]:                      # ALTIN etiket: kendi turunden obekler
        w = blr(c)
        z += w
        e += [x["tur"] if KLM.get(c) == x["tur"] else YOK] * len(w)
    x["z"], x["e"] = z, e
    VERI.append(x)
EGT, SIN = VERI[:1100], VERI[1100:]
et = {}
for x in EGT:
    for u in x["e"]:
        et[u] = et.get(u, 0) + 1
EN_SIK_ET = max(et, key=et.get)
EN_SIK_TUR = max(TUR, key=lambda t: sum(y["tur"] == t for y in EGT))
n = len(SIN)
T_BEL = sum(u == EN_SIK_ET for x in SIN for u in x["e"]) / sum(len(x["e"]) for x in SIN)
T_BLG = sum(x["tur"] == EN_SIK_TUR for x in SIN) / n
print(f"ayrilmis {n} not, {sum(len(x['z']) for x in SIN)} belirtec, "
      f"isaretli belirtec {sum(u != YOK for x in SIN for u in x['e'])}")
tp = sum(et.values())
print("altin etiket dagilimi (egitim):  " + "  ".join(
    f"{u}={et[u] / tp:.3f}" for u in sorted(et, key=lambda u: -et[u])[:3]))
print("                                 " + "  ".join(
    f"{u}={et[u] / tp:.3f}" for u in sorted(et, key=lambda u: -et[u])[3:]))
print(f"belirtec duzeyi taban ('{EN_SIK_ET}' her belirtece) {T_BEL:.4f}, "
      f"belge duzeyi taban ('{EN_SIK_TUR}') {T_BLG:.4f}")
ayrilmis 500 not, 3305 belirtec, isaretli belirtec 1993
altin etiket dagilimi (egitim):  yok=0.413  olagan=0.267  erisilemedi=0.125
                                 sayac arizasi=0.111  kacak suphesi=0.084
belirtec duzeyi taban ('yok' her belirtece) 0.3970, belge duzeyi taban ('olagan') 0.4420

Etiket dağılımı belirteç düzeyi tabanının niçin 0,3970 olduğunu söylüyor: belirteçlerin yaklaşık beşte ikisi hiçbir olaya ait değil ve yok tek başına en sık etiket. M27/K03 dengesiz sınıf kümesinde genel doğruluğun ne kadar aldatıcı olduğunu ölçmüştü; burada aynı dengesizlik ölçütün karar birimi seçildiği anda ortaya çıkıyor. 3.305 belirtecin 1.993’ü işaretli, 1.312’si değil.

Dört Sistem, Dört Sıralama

Dört sistem dört ayrı tasarım kararını temsil eder. A — öbek düzeyi seçici kararı öbek üzerinden verir: bir öbeğin eğitim kümesinde altın etiketlemeye girme oranı 0,75’in üstündeyse öbeğin bütün belirteçleri işaretlenir, etiket belge kestiriminden gelir. B — belirteç düzeyi seçici kararı tek tek belirteçler üzerinden verir: bir sözcüğün işaretlenme oranı 0,40’ın üstündeyse işaretlenir. C — dar işaretleyici yalnız ilk öbeği işaretler ve etiketi o öbeğin kendi türünden alır. D — hepsini işaretle her belirtece en sık türü yazar; hiçbir şey öğrenmez.

AGIR, BAGIR, PUAN = {}, {}, {}
for x in EGT:
    for c in x["obek"]:
        a = AGIR.setdefault(c, [0, 0])
        a[0] += 1
        a[1] += KLM.get(c) == x["tur"]
        if c in KLM:
            PUAN.setdefault(c, {})
            PUAN[c][x["tur"]] = PUAN[c].get(x["tur"], 0) + 1
    for w, u in zip(x["z"], x["e"]):
        a = BAGIR.setdefault(w, [0, 0])
        a[0] += 1
        a[1] += u != YOK
SEC = {c: a[1] / a[0] for c, a in AGIR.items()}
BSEC = {w: a[1] / a[0] for w, a in BAGIR.items()}


def kestir_tur(x):
    s = {}
    for c in x["obek"]:
        for t, v in PUAN.get(c, {}).items():
            s[t] = s.get(t, 0) + v
    return max(s, key=s.get) if s else EN_SIK_TUR


def s_obek(x):
    t, e = kestir_tur(x), []
    for c in x["obek"]:
        e += [(t if SEC.get(c, 0.0) > 0.75 else YOK)] * len(blr(c))
    return e


def s_belirtec(x):
    t = kestir_tur(x)
    return [(t if BSEC.get(w, 0.0) > 0.40 else YOK) for w in x["z"]]


def s_dar(x):
    e = []
    for i, c in enumerate(x["obek"]):
        e += [(KLM.get(c, YOK) if i == 0 else YOK)] * len(blr(c))
    return e


def s_hepsi(x):
    return [EN_SIK_TUR] * len(x["z"])


def araliklar(e):
    a, i = [], 0
    while i < len(e):
        if e[i] == YOK:
            i += 1
            continue
        j = i
        while j + 1 < len(e) and e[j + 1] == e[i]:
            j += 1
        a.append((i, j, e[i]))
        i = j + 1
    return a


def olc(f):
    bd = bt = ad = ak = at = be = 0
    du = 0.0
    for x in SIN:
        e = f(x)
        bd += sum(u == v for u, v in zip(e, x["e"]))
        bt += len(e)
        g, p = araliklar(x["e"]), araliklar(e)
        ad += sum(u in g for u in p)
        ak += len(p)
        at += len(g)
        s = {}
        for u in e:
            if u != YOK:
                s[u] = s.get(u, 0) + 1
        be += (max(s, key=s.get) if s else EN_SIK_TUR) == x["tur"]
        kal = [w for w, u in zip(x["z"], x["e"]) if u != YOK]
        o = 0
        for w in [w for w, u in zip(x["z"], e) if u != YOK]:
            if w in kal:
                kal.remove(w)
                o += 1
        du += o / max(1, sum(u != YOK for u in x["e"]))
    k, d = ad / max(1, ak), ad / max(1, at)
    return (bd / bt, 2 * k * d / (k + d) if k + d else 0.0, be / len(SIN),
            du / len(SIN))


SIS = (("A", "obek duzeyi secici", s_obek), ("B", "belirtec duzeyi secici", s_belirtec),
       ("C", "dar isaretleyici", s_dar), ("D", "hepsini isaretle", s_hepsi))
S = {k: olc(f) for k, _, f in SIS}
OLCUT = ("belirtec", "varlik", "belge", "ortusme")
print(f"{'':<3}{'sistem':<24}" + "".join(f"{o:>11}" for o in OLCUT))
for k, ad, _ in SIS:
    print(f"{k:<3}{ad:<24}" + "".join(f"{v:>11.4f}" for v in S[k]))
for j, o in enumerate(OLCUT):
    print(f"{o:<9} siralamasi: " + " > ".join(
        sorted(S, key=lambda a: -S[a][j])))
   sistem                     belirtec     varlik      belge    ortusme
A  obek duzeyi secici           0.8136     0.6779     0.8320     0.8423
B  belirtec duzeyi secici       0.8378     0.6036     0.9320     0.9693
C  dar isaretleyici             0.7619     0.4000     1.0000     0.6901
D  hepsini isaretle             0.2732     0.0920     0.4420     1.0000
belirtec  siralamasi: B > A > C > D
varlik    siralamasi: A > B > C > D
belge     siralamasi: C > B > A > D
ortusme   siralamasi: D > B > A > C

Dört sıralama satırı bu dersin cevabıdır. Dört ölçütün dördü de aynı dört çıktıyı okuyor ve dördünde de sıralama başka: B > A > C > D, A > B > C > D, C > B > A > D, D > B > A > C. Dört ölçütün birincisi de dört ayrı sistem. “Hangi sistem daha iyi” sorusunun bu kurulumda cevabı yoktur; cevabı olan soru “hangi ölçütte” sorusudur.

Farkların nereden geldiği tek tek okunabilir. A ile B arasındaki ayrım karar birimindedir: B belirteç başına karar verdiği için belirteç düzeyinde 0,8378 ile öndedir, ama kararını komşusundan bağımsız verdiği için bir öbeğin ortasındaki bir sözcüğü atlar ve aralığı ikiye böler; varlık düzeyinde 0,6036’ya, A’nın 0,0743 altına düşer. Aynı çıktı, aynı sayıda doğru belirteç, iki ayrı sıralama.

C bütün sistemler içinde en az belirteç işaretleyen sistemdir ve belge düzeyinde 1,0000 alır. Bu sayı kurgunun bir sonucudur — kararı bildiren öbek notun başında yazılır — ve bir yöntem üstünlüğü olarak okunamaz. Aynı sistem varlık düzeyinde 0,4000’de kalır, çünkü notların bir bölümünde altın aralık iki öbeği kapsar ve C ikincisini hiç işaretlemez.

D satırı kursun ikinci iddiasının bu konudaki üçüncü ödemesidir. D hiçbir şey öğrenmez: her belirtece eğitim kümesinin en sık türünü yazar. Belirteç düzeyinde 0,2732 ile tabanın bile altına düşer, varlık düzeyinde 0,0920 alır — ve örtüşme ölçütünün duyarlılık yönünde 1,0000 ile dört sistemin birincisi olur. Bir ölçüt, hiçbir şey öğrenmemiş bir yordamı birinci sıraya koyabiliyorsa, o ölçütün tek başına basılması bir ölçüm değil bir seçimdir.

Her Ölçütün Kendi Tabanı

Dört ölçütün dört ayrı tabanı vardır ve tabanlar aynı ölçekte değildir. Bir sayının büyüklüğü kendi başına hiçbir şey söylemez; söyleyen şey o sayının kendi tabanından ne kadar uzakta durduğudur.

TB = (("belirtec duzeyi dogruluk", "en sik etiketi her belirtece yaz", T_BEL),
      ("varlik duzeyi dengeli bicim", "hic aralik isaretleme", 0.0),
      ("belge duzeyi dogruluk", "en sik sinifi yaz", T_BLG),
      ("ortusme duyarlilik yonu", "butun girdiyi isaretle", 1.0))
print(f"{'olcut':<28}{'taban yordami':<34}{'taban':>7}{'en iyi':>8}{'fark':>8}")
for j, (o, ty, tv) in enumerate(TB):
    en = max(S, key=lambda a: S[a][j])
    print(f"{o:<28}{ty:<34}{tv:>7.4f}{S[en][j]:>8.4f}{S[en][j] - tv:>+8.4f}")
olcut                       taban yordami                       taban  en iyi    fark
belirtec duzeyi dogruluk    en sik etiketi her belirtece yaz   0.3970  0.8378 +0.4408
varlik duzeyi dengeli bicim hic aralik isaretleme              0.0000  0.6779 +0.6779
belge duzeyi dogruluk       en sik sinifi yaz                  0.4420  1.0000 +0.5580
ortusme duyarlilik yonu     butun girdiyi isaretle             1.0000  1.0000 +0.0000

Tablo dört satırda dört ayrı mesafe veriyor. Varlık düzeyinde en iyi sistem tabanın 0,6779 üstünde, belge düzeyinde 0,5580, belirteç düzeyinde 0,4408. Bu üç satır sıralanabilir ama karşılaştırılamaz: üç ayrı karar birimi, üç ayrı taban, üç ayrı ölçek.

Son satır konunun kapanış cümlesidir. Örtüşme ölçütünün duyarlılık yönünde taban 1,0000’dir, çünkü bütün girdiyi işaretleyen yordam altın etiketlemenin her belirtecini zorunlu olarak kapsar. En iyi sistem de 1,0000 alır ve fark tam olarak 0,0000’dır. Bu ölçüt, üstüne hiçbir şey konulamayacak bir tabana sahiptir: hiçbir öğrenme onu geçemez, yalnız eşitleyebilir. Bir ölçüt seçilirken sorulacak ilk soru, o ölçütün en aptal yordamının aynı ölçütte kaç aldığıdır; ikinci soru, o sayının üstünde geçilecek bir yer kalıp kalmadığıdır.

Varlık düzeyindeki 0,0000’lık taban ise ters uçtadır ve o da yanıltır: hiç aralık işaretlemeyen bir yordam sıfır alır, yani bu ölçütte tabanı geçmek bedavadır. Daha dürüst taban aynı tablodaki D sistemidir: bütün notu tek aralık sayan yordam 0,0920 alır ve en iyi sistemin farkı 0,6779’dan 0,5859’a iner.

Özet

  • Tek bir belirteç etiketlemesi dört ayrı düzeyde okunabilir ve dört ölçüt aynı çıktıdan dört ayrı sayı üretir.
  • Dört ölçüt dört ayrı sıralama verir ve dördünün birincisi dört ayrı sistemdir: belirteç düzeyinde B, varlık düzeyinde A, belge düzeyinde C, örtüşmede D.
  • Karar birimi ölçütü belirler: belirteç başına karar veren sistem belirteç düzeyinde önde, aralığı bölmesi yüzünden varlık düzeyinde 0,0743 geride kalır.
  • Hiçbir şey öğrenmeyen sistem belirteç düzeyinde tabanın altına düşer ama örtüşmenin duyarlılık yönünde 1,0000 ile birinci olur.
  • Her ölçütün kendi tabanı vardır ve tabanlar aynı ölçekte değildir: 0,3970, 0,0000, 0,4420 ve 1,0000; sonuncusunda tabanla en iyi sistemin farkı 0,0000’dır.

Sonraki Adım

Sekiz derste girdi hep bir diziydi. Belirteçler soldan sağa sıralıydı, bir sözcüğün komşusu tek bir eksende bulunuyordu, aralık başlangıç ve bitiş indisiyle tanımlanıyordu ve sıranın kendisi bilgi taşıyordu: “muhur izi var” ile “var izi muhur” aynı sözcük torbasına sahiptir ama aynı şey değildir. Örtüşme ölçütünün iki’li dizilerde tekil sözcüklerden ayrılması da bu tek eksenin sonucuydu.

Girdinin iki boyutlu olduğu ve komşuluğun sağa sola değil her yöne açıldığı bir alanda bu kurulumun her parçası yeniden sorulur. Bir aralık artık bir başlangıç ve bitiş değil, bir dikdörtgendir; örtüşme bir sayaç değil, bir alan oranıdır; sözlük diye bir şey yoktur, çünkü girdinin birimi bir sözcük değil bir sayıdır ve o sayının kendi başına anlamı yoktur. Sonraki konu görüntüyle başlar ve aynı soruyla açılır: bu alanın en aptal yordamı nedir, ve o yordam kendi ölçütünde kaç alıyor.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat