smartcore-v1 / code /kod /faz0_01_corpus.py
kdirgul's picture
kod (data hariç) Colab için
9aed7c4 verified
Raw
History Blame Contribute Delete
2.95 kB
"""
Faz 0 / Adım 1 — Tokenizer korpusu hazırla (EN + TR, TR ağırlıklı).
EN: HuggingFaceFW/fineweb-edu (sample-10BT) — streaming
TR: HuggingFaceFW/fineweb-2 (tur_Latn) — streaming
TR ağırlığı yüksek (~%45) tutulur ki tokenizer TR fertility'sini düşürsün
(kılavuz Bölüm 3.2). Çıktı: satır-başı-bir-parça düz metin (SentencePiece girdisi).
Uzun dokümanlar paragraf/parçalara bölünür (SP max_sentence_length limiti için).
Kullanım:
python kod/faz0_01_corpus.py --total_mb 150 --tr_frac 0.45
"""
import os, argparse, time
os.environ["HF_HUB_DISABLE_SYMLINKS_WARNING"] = "1"
from datasets import load_dataset
CHUNK_MAX = 2000 # bir satırın max karakteri (SP max_sentence_length güvenli)
MIN_LINE = 24 # çok kısa parçaları atla
def doc_to_lines(text):
for para in text.split("\n"):
para = para.strip()
if len(para) < MIN_LINE:
continue
if len(para) <= CHUNK_MAX:
yield para
else:
for i in range(0, len(para), CHUNK_MAX):
seg = para[i:i + CHUNK_MAX].strip()
if len(seg) >= MIN_LINE:
yield seg
def pull(name, cfg, target_bytes, fout, tag):
ds = load_dataset(name, name=cfg, split="train", streaming=True)
written, ndocs, t0 = 0, 0, time.perf_counter()
for rec in ds:
ndocs += 1
for line in doc_to_lines(rec.get("text", "")):
b = (line + "\n").encode("utf-8")
fout.write(line + "\n")
written += len(b)
if written >= target_bytes:
break
if ndocs % 2000 == 0:
print(f" [{tag}] {written/1e6:6.1f} MB | {ndocs} doc | "
f"{written/1e6/max(1e-9,(time.perf_counter()-t0)):.1f} MB/s", flush=True)
print(f" [{tag}] BİTTİ: {written/1e6:.1f} MB, {ndocs} doc "
f"({time.perf_counter()-t0:.0f}s)", flush=True)
return written
def main():
ap = argparse.ArgumentParser()
ap.add_argument("--total_mb", type=float, default=150)
ap.add_argument("--tr_frac", type=float, default=0.45)
ap.add_argument("--out", default="kod/data/tokenizer_corpus.txt")
args = ap.parse_args()
os.makedirs(os.path.dirname(args.out), exist_ok=True)
tr_bytes = int(args.total_mb * 1e6 * args.tr_frac)
en_bytes = int(args.total_mb * 1e6 * (1 - args.tr_frac))
print(f"Hedef: {args.total_mb} MB toplam | TR {tr_bytes/1e6:.0f} MB ({args.tr_frac:.0%}) "
f"+ EN {en_bytes/1e6:.0f} MB")
with open(args.out, "w", encoding="utf-8", newline="\n") as f:
en = pull("HuggingFaceFW/fineweb-edu", "sample-10BT", en_bytes, f, "EN")
tr = pull("HuggingFaceFW/fineweb-2", "tur_Latn", tr_bytes, f, "TR")
total = (en + tr) / 1e6
print(f"\nKORPUS HAZIR: {args.out} | {total:.1f} MB "
f"(EN {en/1e6:.1f} + TR {tr/1e6:.1f}, TR payı {tr/(en+tr):.0%})")
if __name__ == "__main__":
main()