---
title: 'Kelime Gömmeleri'
source: 'https://academia.sh/tr/kurslar/nlp-ve-goru/kelime-gommeleri'
course: 'Doğal Dil İşleme ve Bilgisayarla Görme'
language: tr
updated: '2026-08-17T18:10:15+00:00'
license: 'CC BY-SA 4.0'
---

# Kelime Gömmeleri

Sözlüğün her öğesine bağlamdan öğrenilen bir vektör verilmesi ve komşuluğun kurgunun kendi öbek havuzlarına karşı sayılması: rastgele komşunun beklenen oranı 0,2543 iken ham birlikte geçme vektörü 0,4938, sekiz boyutlu öğrenilen gömme 0,6049 veriyor. Toplam sayı yanıltıyor — 81 biçimin 49'u tek bir kalıpta geçen seyrek adlardır ve orada ham sayım bile 0,7755 veriyor, sık biçimlerde ise rastgele 0,0462, ham sayım 0,0625, öğrenilen gömme 0,2500. Oran benzeşimi 72 sınamanın 0,0972'sinde tutuyor ve tutmayanlar en sık sözcüğe değil, bağlamı en dar biçimlere düşüyor.

Sözcük torbası bir notu 96 sütuna çevirdi, ama sütunlar birbirine yabancıydı: `muhur` sütunu ile
`kelepce` sütunu, `muhur` ile `<sayi>` sütunu kadar uzaktı. Oysa notlarda bu ikisi aynı öbeklerde,
aynı sözcüklerin yanında geçiyor. Bu derste her sözlük öğesine bir vektör verilir ve vektör
etiketten değil **bağlamdan** öğrenilir. İddia dağılımsal anlamdır: benzer bağlamda geçen
sözcükler benzer vektör alır.

Gömme tablosunun kendisi M27/K05'te ölçüldü ve yordamı tekrarlanmaz. Buradaki ekleme ölçünün
yerini değiştirmektir: sayı bir sınıflandırıcının doğruluğu değil, **vektörlerin kendi düzenidir**.
İki sınama yapılır ve ikisi de kendi tabanına karşı okunur.

- **NL17.** Belirteçleme burada `nlp/01`'in **ikinci** kararıdır: noktalama atma, küçük harfe
  inme, sayı katlama. Gövdeleme uygulanmaz, çünkü ölçülecek şeylerden biri çekim eklerinin
  vektörlerde iz bırakıp bırakmadığıdır. Sözlük 124 öğedir.
- **NL18.** Gömme tablosu M27/K05 `mimariler/08`'de ölçüldü; katman yordamı tekrarlanmaz.
- **NL19.** Model ders içinde yazılır ve **modeldir**: her öğe için bir merkez ve bir bağlam
  vektörü, sekiz boyut, toplam 1.984 parametre.
- **NL20.** Eğitim: bağlam penceresi iki, her ayrı çift için iki karşıt örnek, çift sayısına
  $\log(1+n)$ ağırlığı, 40 tur, adım 0,08. Karşıt örnek sözlükten kendi sıklığıyla çekilir.
- **NL21.** Vektörler yalnız **eğitim payından** öğrenilir; çiftler 1.200 nottan çıkarılır.
- **NL22.** Ölçüt **açı benzerliğidir**: vektörler birim uzunluğa getirilir, iç çarpım okunur.
- **NL23.** Komşuluk sınamasının doğrusu kurgudan gelir: bir biçim, kökü tek bir öbek havuzunda
  geçiyorsa o havuzun grubuna aittir. 124 öğenin 81'i böyledir.
- **NL24.** Alanın tabanı **ham birlikte geçme vektörüdür**: hiçbir şey öğrenmez, yalnız sayar.
  Mutlak taban rastgele komşudur ve beklenen oranı grup büyüklüklerinden hesaplanır.

## Bağlamdan Öğrenilen Vektörler

Notlar `nlp/01`'in kurgusuyla aynı tohumdan yeniden üretilir.

```python
# ORTAK — KURGUDUR. Saha notlari ders icinde uretilir, tohum 20260218; kaynak
# sistemden gelmez. Sozluk 45 cekimli kok ve 40 seyrek addan olusur.
TOHUM, NOT_SAYISI, M32 = 20260218, 1800, 0xFFFFFFFF

AD = {  # 0 yalin, 1 ilgi, 2 bulunma, 3 iyelik, 4 cogul
    "sayac": "sayac sayacin sayacta sayaci sayaclar",
    "kapak": "kapak kapagin kapakta kapagi kapaklar",
    "muhur": "muhur muhurun muhurde muhuru muhurler",
    "vana": "vana vananin vanada vanasi vanalar",
    "kelepce": "kelepce kelepcenin kelepcede kelepcesi kelepceler",
    "boru": "boru borunun boruda borusu borular",
    "pano": "pano panonun panoda panosu panolar",
    "kapi": "kapi kapinin kapida kapisi kapilar",
    "zil": "zil zilin zilde zili ziller",
    "bahce": "bahce bahcenin bahcede bahcesi bahceler",
    "apartman": "apartman apartmanin apartmanda apartmani apartmanlar",
    "bodrum": "bodrum bodrumun bodrumda bodrumu bodrumlar",
    "giris": "giris girisin giriste girisi girisler",
    "adres": "adres adresin adreste adresi adresler",
    "okuma": "okuma okumanin okumada okumasi okumalar",
    "olcum": "olcum olcumun olcumde olcumu olcumler",
    "erisim": "erisim erisimin erisimde erisimi erisimler",
    "ziyaret": "ziyaret ziyaretin ziyarette ziyareti ziyaretler",
    "abone": "abone abonenin abonede abonesi aboneler",
    "arac": "arac aracin aracta araci araclar",
    "kir": "kir kirin kirde kiri kirler",
    "iz": "iz izin izde izi izler",
    "sokak": "sokak sokagin sokakta sokagi sokaklar",
    "ev": "ev evin evde evi evler",
}
NITELIK = "kirik gevsek kirli normal bozuk acik kapali eksik temiz yeni yok".split()
EYLEM = {  # 0 edilgen gecmis, 1 olumsuz
    "calis": "calisiyor calismiyor", "don": "donuyor donmuyor", "oku": "okundu okunmadi",
    "ac": "acildi acilmadi", "gir": "girildi girilemedi", "ulas": "ulasildi ulasilamadi",
    "tekrarla": "tekrarlandi tekrarlanmadi", "bul": "bulundu bulunmadi",
    "sagla": "saglandi saglanamadi", "degil": "degil degildi",
}
NADIR = """kablo kablosu kabloda|cam cami camda|tel teli telde|mandal mandali mandalda
merdiven merdiveni merdivende|tahta tahtasi tahtada|cukur cukuru cukurda|kar kari karda
buz buzu buzda|cop copu copta|duvar duvari duvarda|kutu kutusu kutuda|vida vidasi vidada
conta contasi contada|filtre filtresi filtrede|bant banti bantta|etiket etiketi etikette
kilit kiliti kilitte|asansor asansoru asansorde|zemin zemini zeminde|tavan tavani tavanda
kuyu kuyusu kuyuda|depo deposu depoda|ocak ocagi ocakta|direk diregi direkte
kanal kanali kanalda|numara numarasi numarada|cati catisi catida|baca bacasi bacada
kova kovasi kovada|levha levhasi levhada|somun somunu somunda|tapa tapasi tapada
izolasyon izolasyonu izolasyonda|supap supabi supapta|menfez menfezi menfezde
kayit kaydi kayitta|temel temeli temelde|kose kosesi kosede|koruma korumasi korumada"""
OBEK = {
    "olagan": ["{sayac.0} {calis.0}", "{okuma.0} normal", "{olcum.0} {tekrarla.0}",
               "{sayac.1} {erisim.3} {sagla.0}", "{kapak.0} temiz", "{vana.0} acik",
               "{sayac.2} {iz.0} {bul.1}", "{olcum.0} icin {erisim.0} {sagla.0}",
               "{sayac.1} {kapak.3} yeni", "{muhur.0} ile {kapak.0} temiz"],
    "ariza": ["{sayac.0} {don.1}", "{kapak.0} kirik", "{pano.0} bozuk",
              "{sayac.1} {kapak.3} kirik", "{olcum.0} {oku.1}", "{vana.0} bozuk",
              "{sayac.2} {kir.0} {bul.0}", "{sayac.4} {calis.1}",
              "{sayac.0} {calis.0} ama {okuma.0} yok",
              "{pano.1} {kapak.3} eksik"],
    "erisilemedi": ["{kapi.0} {ac.1}", "{zil.0} {calis.1}", "{abone.0} {ev.2} {degil.1}",
                    "{erisim.0} {sagla.1}", "{bodrum.0} {kapi.3} kapali",
                    "{apartman.1} {giris.3} kapali", "{adres.2} {ulas.1}",
                    "{bahce.1} {kapi.3} kapali", "{apartman.2} {zil.0} {calis.1}",
                    "{sayac.2} {erisim.0} yok"],
    "kacak": ["{muhur.0} kirik", "{kelepce.0} gevsek", "{muhur.2} {iz.0} {bul.0}",
              "{sayac.1} {muhur.3} kirik", "{kelepce.2} {iz.0} {bul.0}",
              "{muhur.0} eksik", "{vana.1} {kelepce.3} gevsek",
              "{muhur.1} {iz.3} {bul.0}", "{boru.2} {kelepce.0} eksik",
              "{kapak.2} bir {iz.0} {bul.0}"],
}
EK_OBEK = ["{ziyaret.0} {tekrarla.0}", "{sokak.2} {arac.0} {bul.0}", "{adres.0} yeni",
           "{bahce.1} {kapi.3} acik", "{apartman.2} {gir.0}", "{ev.1} {kapi.3} acik",
           "{kapak.0} kirli", "{olcum.0} {tekrarla.1}", "{arac.0} {sokak.2}",
           "bu {ziyaret.2} {olcum.0} {tekrarla.0}"]
TUR = [("olagan", 0.36, 0.04), ("ariza", 0.26, 0.28),
       ("erisilemedi", 0.16, 0.15), ("kacak", 0.22, 0.82)]
BICIM = {k: v.split() for d in (AD, EYLEM) for k, v in d.items()}
SEYREK = [s.split() for s in NADIR.replace("\n", "|").split("|")]
AGIRLIK = [1 / (i + 1) ** 1.6 for i in range(len(SEYREK))]
AGIRLIK = [w / sum(AGIRLIK) for w in AGIRLIK]
KOKU = {f: k for k, fs in BICIM.items() for f in fs}
KOKU.update({f: fs[0] for fs in SEYREK for f in fs})
KOKU.update({w: w for w in NITELIK})
TASIYICI = ["ve", "ile", "bir", "bu", "ama", "icin"]
KOKU.update({w: w for w in TASIYICI})


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 ayrik(u, w):
    t = 0.0
    for i, x in enumerate(w):
        t += x
        if u < t:
            return i
    return len(w) - 1


def obek_yaz(sablon):
    p = []
    for s in sablon.split():
        if s.startswith("{"):
            kok, _, i = s[1:-1].partition(".")
            p.append(BICIM[kok][int(i)])
        else:
            p.append(s)
    return " ".join(p)


VERI = []
for i in range(NOT_SAYISI):
    r = uretec(TOHUM + i)
    t = TUR[ayrik(r(), [x[1] for x in TUR])]
    c = [obek_yaz(OBEK[t[0]][int(r() * 10)])]
    if r() < 0.55:
        c.append(obek_yaz(EK_OBEK[int(r() * 10)]))
    if r() < 0.30:
        c.append(obek_yaz(OBEK[t[0]][int(r() * 10)]))
    if r() < 0.22:
        f, nit = SEYREK[ayrik(r(), AGIRLIK)], NITELIK[int(r() * len(NITELIK))]
        c.append(f[2] + " kir bulundu" if r() < 0.34 else f[int(r() * 2)] + " " + nit)
    n = c[0]
    for x in c[1:]:
        n += (" ve " if r() < 0.22 else ", ") + x
    if r() < 0.52:
        n += ", okuma " + str(240 + int(r() * 1760))
    VERI.append({"no": 10001 + i, "not": n[0].upper() + n[1:] + ".",
                 "tur": t[0], "supheli": int(r() < t[2])})

EGT, AYR = VERI[:1200], VERI[1200:]
print(f"{len(VERI)} kurgu not, {len(BICIM) + len(SEYREK) + len(NITELIK)} kok, "
      f"supheli orani {sum(x['supheli'] for x in VERI) / len(VERI):.4f}")
print(VERI[3]["not"])
```

```
1800 kurgu not, 85 kok, supheli orani 0.2956
Olcum icin erisim saglandi, sayacin kapagi yeni, mandalda kir bulundu.
```

Eğitim her ayrı bağlam çiftini bir kez görür: merkez sözcüğün vektörü ile gerçek komşunun bağlam
vektörü birbirine yaklaştırılır, sözlükten çekilen iki karşıt örneğinki uzaklaştırılır.

```python
import math
from collections import Counter

BOYUT, PENCERE, KARSIT, TUR_SAYI, ADIM = 8, 2, 2, 40, 0.08

for x in VERI:  # nlp/01'in ikinci karari: noktalama atma, kucuk harf, sayi katlama
    x["bel"] = [("<sayi>" if b.isdigit() else b)
                for b in (s.strip(",.").lower() for s in x["not"].split()) if b]

SIK = Counter(b for x in EGT for b in x["bel"])
SOZ = sorted(SIK, key=lambda b: (-SIK[b], b))
YER = {b: i for i, b in enumerate(SOZ)}
CIFT = Counter()
for x in EGT:
    d = [YER[b] for b in x["bel"]]
    for i, a in enumerate(d):
        for j in range(max(0, i - PENCERE), min(len(d), i + PENCERE + 1)):
            if j != i:
                CIFT[(a, d[j])] += 1

T = sum(SIK.values())
GURULTU = [SIK[b] / T for b in SOZ]  # karsit ornek sozcugun kendi sikligiyla cekilir
r = uretec(TOHUM + 31000)
U = [[(r() - 0.5) * 0.6 for _ in range(BOYUT)] for _ in SOZ]
C = [[0.0] * BOYUT for _ in SOZ]
for _ in range(TUR_SAYI):
    for (a, b), n in CIFT.items():
        w = math.log(1 + n)
        for k, hedef in [(b, 1.0)] + [(ayrik(r(), GURULTU), 0.0) for _ in range(KARSIT)]:
            z = sum(U[a][i] * C[k][i] for i in range(BOYUT))
            d = ADIM * w * (1 / (1 + math.exp(-max(-30.0, min(30.0, z)))) - hedef)
            for i in range(BOYUT):
                U[a][i], C[k][i] = U[a][i] - d * C[k][i], C[k][i] - d * U[a][i]

print(f"{len(SOZ)} sozluk ogesi, {len(CIFT)} ayri baglam cifti, "
      f"{2 * len(SOZ) * BOYUT} parametre, {TUR_SAYI} tur")


def birim(v):
    u = math.sqrt(sum(x * x for x in v)) or 1.0
    return [x / u for x in v]


BIRIM = [birim(v) for v in U]


def aci(i, j):
    return sum(BIRIM[i][k] * BIRIM[j][k] for k in range(BOYUT))


GRUP = {}
for tur, kalip in OBEK.items():
    for k in kalip:
        for s in k.split():
            a = s[1:-1].partition(".")[0] if s.startswith("{") else s
            GRUP.setdefault(a, set()).add(tur)
for k in EK_OBEK:
    for s in k.split():
        a = s[1:-1].partition(".")[0] if s.startswith("{") else s
        GRUP.setdefault(a, set()).add("ek")
for f in SEYREK:
    GRUP[f[0]] = {"seyrek"}
TEK = {a for a, v in GRUP.items() if len(v) == 1}
BICIM_GRUP = {b: list(GRUP[KOKU[b]])[0] for b in SOZ
              if b in KOKU and KOKU[b] in TEK}
SAY = Counter(BICIM_GRUP.values())
print(f"{len(BICIM_GRUP)} bicim tek bir obek havuzuna ait: "
      + ", ".join(f"{g} {n}" for g, n in sorted(SAY.items())))
```

```
124 sozluk ogesi, 3216 ayri baglam cifti, 1984 parametre, 40 tur
81 bicim tek bir obek havuzuna ait: ariza 7, ek 7, erisilemedi 8, kacak 6, olagan 4, seyrek 49
```

## Komşuluk Kime Düşüyor

Her biçim için en yakın komşu bulunur ve komşunun grubu biçimin grubuyla karşılaştırılır. Aynı
sınama üç temsile uygulanır: rastgele komşunun beklenen oranı, ham birlikte geçme vektörü ve
öğrenilen gömme.

```python
SAYIM_V = [[0.0] * len(SOZ) for _ in SOZ]
for (a, b), n in CIFT.items():
    SAYIM_V[a][b] = float(n)
SAYIM_B = [birim(v) for v in SAYIM_V]


def komsu(vek, i):
    en, ey = -2.0, i
    for j in range(len(SOZ)):
        if j != i:
            d = sum(vek[i][k] * vek[j][k] for k in range(len(vek[i])))
            if d > en:
                en, ey = d, j
    return SOZ[ey]


def oran(vek, bicim):
    return sum(BICIM_GRUP.get(komsu(vek, YER[b])) == BICIM_GRUP[b] for b in bicim) / len(bicim)


def satir(ad, bicim):
    bek = sum(SAY[BICIM_GRUP[b]] - 1 for b in bicim) / (len(bicim) * (len(SOZ) - 1))
    print(f"{ad:<24} {len(bicim):>5} {bek:>9.4f} {oran(SAYIM_B, bicim):>10.4f}"
          f" {oran(BIRIM, bicim):>10.4f}")


TUMU = list(BICIM_GRUP)
print(f"\n{'komsuluk sinamasi':<24} {'bicim':>5} {'rastgele':>9} {'ham sayim':>10}"
      f" {'ogrenilen':>10}")
satir("tumu", TUMU)
satir("yalniz sik bicimler", [b for b in TUMU if BICIM_GRUP[b] != "seyrek"])
satir("yalniz seyrek adlar", [b for b in TUMU if BICIM_GRUP[b] == "seyrek"])
```

```
komsuluk sinamasi        bicim  rastgele  ham sayim  ogrenilen
tumu                        81    0.2543     0.4938     0.6049
yalniz sik bicimler         32    0.0462     0.0625     0.2500
yalniz seyrek adlar         49    0.3902     0.7755     0.8367
```

Toplam satır beklenen sırayı veriyor: rastgele 0,2543, ham sayım 0,4938, öğrenilen gömme 0,6049.
Öğrenilen temsil, hiçbir şey öğrenmeyen sayıma 0,1111 katıyor. Alt satırlar okunmadan bu sayı
yanıltıcıdır: sınanan 81 biçimin 49'u seyrek addır ve hepsi **tek bir öbek kalıbında** geçer, yani
birbirinin bağlamıdır. Orada rastgele beklenti 0,3902, ham sayım 0,7755 verir.

Sık biçimlerde tablo tersine döner. Otuz iki sık biçimde rastgele beklenti 0,0462'dir, ham sayım
0,0625 ile bunun ancak 0,0163 üstündedir — hiçbir şey öğrenmeyen taban burada gerçekten hiçbir şey
bilmiyor. Öğrenilen gömme 0,2500 veriyor, yani rastgelenin beş katı ve ham sayımın dört katı.
Öğrenmenin kattığı yer burasıdır ve toplam satırda görünmez. Kursun ikinci iddiası tam olarak
budur: bir alan ölçütü tek bir sayıya indirildiğinde, sayının hangi alt gruptan geldiği kaybolur.

## Vektör Aritmetiği Tutuyor Mu

İkinci sınama daha serttir. Aynı çekim ekini alan iki kök seçilir ve şu soru vektörlerle sorulur:
`sayac` biçiminden `sayacin` biçimine giden fark `muhur` biçimine eklenirse hangi biçim çıkar.
İkinci vektörden birincisi çıkarılır, üçüncü eklenir, sonuca en yakın biçim aranır ve doğru cevap
`muhurun`'dur.

```python
BENZESIM = []
for k in range(1, 5):
    ks = [AD[a].split() for a in AD if AD[a].split()[0] in SOZ and AD[a].split()[k] in SOZ]
    for a in ks:
        for b in ks:
            if a[0] != b[0]:
                BENZESIM.append((a[0], a[k], b[0], b[k]))


def coz(vek, a, b, c):
    v = [vek[YER[b]][i] - vek[YER[a]][i] + vek[YER[c]][i] for i in range(len(vek[0]))]
    en, ey = -2.0, 0
    for j in range(len(SOZ)):
        if SOZ[j] not in (a, b, c):
            d = sum(v[i] * vek[j][i] for i in range(len(v)))
            if d > en:
                en, ey = d, j
    return SOZ[ey]


print(f"\n{'oran benzesimi':<18} {'sinama':>6} {'tutan':>7} {'ayni kok':>9}"
      f"  en cok verilen cevap")
for ad, vek in (("ham sayim", SAYIM_B), ("ogrenilen gomme", BIRIM)):
    d = k = 0
    c = Counter()
    for a, b, y3, y in BENZESIM:
        t = coz(vek, a, b, y3)
        d, k = d + (t == y), k + (t != y and KOKU.get(t) == KOKU.get(y3))
        c[t] += 1
    n, (ec, en) = len(BENZESIM), c.most_common(1)[0]
    print(f"{ad:<18} {n:>6} {d / n:>7.4f} {k / n:>9.4f}  {ec} {en / n:.4f}")
```

```
oran benzesimi     sinama   tutan  ayni kok  en cok verilen cevap
ham sayim              72  0.1250    0.0000  kelepcede 0.1111
ogrenilen gomme        72  0.0972    0.0556  kelepcesi 0.0694
```

Yetmiş iki sınamanın ham sayımda 0,1250'si, öğrenilen gömmede 0,0972'si tutuyor. İkisi de düşüktür
ve bu sonuç saklanmaz: bu ölçekte oran benzeşimi **tutmuyor**. Bir ekin vektörlerde ortak bir
kaydırma bırakması için aynı ekin çok sayıda kök üstünde ve birbirinden ayrı bağlamlarda görülmesi
gerekir. Bu kurguda her kök ile ek çifti bir ya da iki kalıpta geçer; vektör kökün bağlamını taşır,
ekin bağlamını taşımaz. Tutmayanların 0,0556'sı aynı kökün başka bir biçimine düşüyor, yani kök
yakalanıyor, ek yakalanamıyor.

Beklenen kusur görünmüyor. En sık üç biçim `okuma`, `<sayi>` ve `olcum`'dur ve hiçbiri cevap
olmuyor; cevaplar bağlamı en dar biçimlerde toplanıyor — ham sayımda `kelepcede` 0,1111, gömmede
`kelepcesi` 0,0694 payla. Aynı temsil komşuluk sınamasında tabanı geçerken benzeşimde geçemiyor;
iki ölçüt aynı vektörleri iki ayrı sırayla okuyor.

## Özet

- Sekiz boyutlu, 1.984 parametreli bir gömme 1.200 nottan çıkan 3.216 ayrı bağlam çiftiyle 40 tur
  eğitildi; vektörler etiketten değil bağlamdan öğrenildi.
- Komşuluk sınamasında rastgele beklenti 0,2543, ham birlikte geçme 0,4938, öğrenilen gömme
  0,6049 verdi; öğrenilen temsilin sayıma kattığı 0,1111'dir.
- Toplam sayı yanıltır: 81 biçimin 49'u tek bir kalıpta geçen seyrek addır ve orada ham sayım bile
  0,7755 verir. Otuz iki sık biçimde rastgele 0,0462, ham sayım 0,0625, öğrenilen gömme 0,2500'dür
  — öğrenmenin kattığı yer budur ve toplam satırda görünmez.
- Oran benzeşimi tutmuyor: 72 sınamanın ham sayımda 0,1250'si, gömmede 0,0972'si doğru. Ekin
  vektörde iz bırakması için aynı ekin çok sayıda ayrı bağlamda görülmesi gerekir.
- Tutmayanların 0,0556'sı aynı kökün başka bir biçimine düşüyor; cevaplar en sık sözcüğe değil,
  bağlamı en dar biçimlere toplanıyor (`kelepcesi` 0,0694).

## Sonraki Adım

Üç derste bir not tek bir satıra indirgendi: önce belirteç listesi, sonra 96 sütunluk torba, sonra
sözcük başına bir vektör. Verilen karar her seferinde **belgenin tamamına** aitti — bu not şüpheli
mi. Oysa notun içinde hangi belirtecin neyi bildirdiği hiç sorulmadı: `sayacin kapagi kirik`
notunda hangi belirteç donanımı, hangisi konumu, hangisi durumu adlandırıyor. Sonraki ders etiketi
belgeden alıp **her belirtece ayrı ayrı** verir. O zaman doğruluğun neyi saydığı da değişir:
belirteç başına mı, yoksa birden çok belirteci kaplayan varlık başına mı.
