smartcore-v1 / code /kod /faz0_03_metrics.py
kdirgul's picture
kod (data hariç) Colab için
9aed7c4 verified
Raw
History Blame Contribute Delete
2.4 kB
"""
Faz 0 / Adım 3 — Tokenizer sağlık metrikleri (EN vs TR ayrı).
Ölçülenler (kılavuz Bölüm 3.3):
- fertility = token / kelime (EN ve TR ayrı) → hedef: TR/EN < 1.5
- chars/token, bytes/token
- byte_fallback oranı (bilinmeyen bayt kullanımı)
Held-out: eğitimde kullanılan ilk dokümanları atlayıp taze örnek çeker.
"""
import os, re
os.environ["HF_HUB_DISABLE_SYMLINKS_WARNING"] = "1"
import sentencepiece as spm
from datasets import load_dataset
MODEL = "kod/data/smartcore_v1_tok.model"
N_DOCS = 300
BYTE_RE = re.compile(r"^<0x[0-9A-Fa-f]{2}>$")
def measure(sp, name, cfg, skip, tag):
ds = load_dataset(name, name=cfg, split="train", streaming=True)
it = iter(ds)
for _ in range(skip): # eğitim bölgesini atla (held-out)
next(it)
tok = words = chars = bytefb = n = 0
for rec in it:
t = rec.get("text", "").strip()
if len(t) < 100:
continue
ids = sp.encode(t, out_type=int)
pieces = sp.encode(t, out_type=str)
tok += len(ids)
words += len(t.split())
chars += len(t)
bytefb += sum(1 for p in pieces if BYTE_RE.match(p))
n += 1
if n >= N_DOCS:
break
fert = tok / max(1, words)
print(f" [{tag}] {n} doc | fertility(tok/kelime)={fert:.3f} | "
f"char/token={chars/max(1,tok):.2f} | byte_fallback={100*bytefb/max(1,tok):.2f}% "
f"| {words} kelime / {tok} token")
return fert
def main():
sp = spm.SentencePieceProcessor(model_file=MODEL)
print(f"vocab={sp.get_piece_size()} | unk={sp.unk_id()} bos={sp.bos_id()} "
f"eos={sp.eos_id()} pad={sp.pad_id()}\n")
en = measure(sp, "HuggingFaceFW/fineweb-edu", "sample-10BT", 20000, "EN")
tr = measure(sp, "HuggingFaceFW/fineweb-2", "tur_Latn", 16000, "TR")
ratio = tr / en
print(f"\n TR/EN fertility oranı = {ratio:.3f} "
f"(hedef <1.5; çok-dilli tokenizer'lar genelde ~1.4)")
print(" YARGI:", "OK — TR dengeli" if ratio < 1.5 else
"UYARI — TR fertility yüksek, tokenizer korpusunda TR payını artır")
print("\n Örnek tokenizasyon (TR):")
s = "Yapay zeka, dilbilgisel açıdan zengin Türkçe metinleri işleyebilmeli."
print(" ", sp.encode(s, out_type=str))
if __name__ == "__main__":
main()