import os import random from tokenizers import Tokenizer from transformers import AutoTokenizer SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) SAMPLE_DIR = os.path.join(SCRIPT_DIR, "sample") GUTENBERG = os.path.join(SAMPLE_DIR, "gutenberg_sample.txt") RU_BOOKS = os.path.join(SAMPLE_DIR, "ru_books_sample.txt") TOKENIZER_PATH = os.path.join(SCRIPT_DIR, "tokenizer.json") N = 500 MIN_LEN = 100 MAX_LEN = 2000 arm = Tokenizer.from_file(TOKENIZER_PATH) gemma = AutoTokenizer.from_pretrained("google/gemma-2-2b", trust_remote_code=True) def read(path, n): if not os.path.exists(path): print(f"missing: {path}") return [] s = [] with open(path, "r", encoding="utf-8") as f: for line in f: line = line.strip() if MIN_LEN <= len(line) <= MAX_LEN: s.append(line) random.shuffle(s) return s[:n] random.seed(42) en = read(GUTENBERG, N) ru = read(RU_BOOKS, N) samples = [(t, "en") for t in en] + [(t, "ru") for t in ru] print(f"en: {len(en)}") print(f"ru: {len(ru)}") print(f"total: {len(samples)}") total_arm = 0 total_gemma = 0 arm_wins = 0 gemma_wins = 0 ties = 0 by_lang = { "en": {"arm": 0, "gemma": 0, "chars": 0, "n": 0}, "ru": {"arm": 0, "gemma": 0, "chars": 0, "n": 0}, } for text, lang in samples: a = len(arm.encode(text).ids) g = len(gemma.encode(text)) total_arm += a total_gemma += g by_lang[lang]["arm"] += a by_lang[lang]["gemma"] += g by_lang[lang]["chars"] += len(text) by_lang[lang]["n"] += 1 if a < g: arm_wins += 1 elif a > g: gemma_wins += 1 else: ties += 1 print("=" * 60) print(f"ARM: {total_arm:,}") print(f"Gemma: {total_gemma:,}") print("=" * 60) for lang, d in by_lang.items(): if d["n"] == 0: continue ar = d["arm"] / d["chars"] gr = d["gemma"] / d["chars"] diff = d["arm"] - d["gemma"] print(f"{lang}: ARM={d['arm']:,} Gemma={d['gemma']:,} tok/char ARM={ar:.4f} Gemma={gr:.4f} delta={diff:+,}") print("=" * 60) print(f"ARM wins: {arm_wins}") print(f"Gemma wins: {gemma_wins}") print(f"ties: {ties}") diff = total_arm - total_gemma pct = abs(diff) / max(total_arm, total_gemma) * 100 print("=" * 60) if diff < 0: print(f"WINNER: ARM by {pct:.2f}%") elif diff > 0: print(f"WINNER: Gemma by {pct:.2f}%") else: print("WINNER: TIE")