--- license: apache-2.0 language: - grc library_name: transformers tags: - ancient-greek - classical-philology - character-level - masked-diffusion - macronization - metrical-scansion pipeline_tag: token-classification --- # Stoicheia -- macronization and metrical scansion (joint) **Stoicheia** is a 405M-parameter character-level masked-diffusion encoder for Ancient Greek (`d_model` 1024, depth 32, banded attention: three of every four blocks attend within a 256-character window, the fourth globally). Its input is factored into five aligned planes -- letters, word/sentence boundaries, diacritics, capitalization, punctuation -- each of which can be masked independently to an explicit *unknown* state at inference. That is what lets one model read an edited text, *scriptio continua*, and a lacuna of unknown length without changing anything but its input. Anonymous release accompanying a paper under review. Two per-letter heads on `Stoicheia-doc_clean`, trained jointly: **macronization** (long versus short at ambiguous bare α/ι/υ -- Greek orthography never marks vowel length) and **scansion** (none / heavy-end / light-end / verse-end). An optional Viterbi decoder constrains the scansion output to valid paths through a set of metre automata. Use this checkpoint when you want both tasks from one model; use `Stoicheia-macronizer` when you want vowel length alone, where a dedicated head does better. ## Usage ```python import torch from transformers import AutoModel from huggingface_hub import hf_hub_download REPO = "Ericu950/Stoicheia-meter" model = AutoModel.from_pretrained(REPO, trust_remote_code=True).eval() hf_hub_download(repo_id=REPO, filename="processing_char_bert_meter.py", local_dir=".") from processing_char_bert_meter import CharBertMeterProcessor proc = CharBertMeterProcessor() batch = proc("ἄνδρα μοι ἔννεπε, μοῦσα, πολύτροπον, ὃς μάλα πολλὰ") with torch.no_grad(): out = model(**{k: v for k, v in batch.items() if not k.startswith("_")}) print(proc.decode_macronization(out, batch)) # _ long, ^ short print(proc.decode_scansion(out, batch)) # [heavy] {light} ```