Akash-Sakala's picture
Distilled Flan-T5-Large transcript formatter + model card
8664291 verified
|
Raw
History Blame Contribute Delete
2.63 kB
metadata
license: apache-2.0
language:
  - en
base_model: google/flan-t5-large
pipeline_tag: text2text-generation
library_name: transformers
tags:
  - speech-to-text
  - transcript-formatting
  - asr-post-processing
  - dictation
  - knowledge-distillation

Flan-T5-Large Transcript Formatter (distilled, < 1 GB target)

Raw speech-to-text transcript in → clean, formatted transcript out (punctuation, casing, filler/disfluency removal, ITN, homophones, proper nouns, URLs/emails, and layout). The model takes the raw transcript as its only input (no system prompt) and emits the formatted transcript.

Distillation

  • Teacher: GPT-OSS-120B → Phase-1 distilled GPT-OSS-20B formatter, which reproduces the L0–L5 + RL curriculum behaviour at ~99.5% adjusted accuracy.
  • Student: google/flan-t5-large (783M, encoder–decoder).
  • Method: off-policy / sequence-level knowledge distillation (prompt distillation). Trained on (raw → formatted) pairs using the curriculum gold targets (cleaner than propagating the teacher's residual errors).

Data

Sampled from the layered curriculum (L0–L5 + RL), de-duplicated latest-layer-wins, with the per-layer val splits held out and made disjoint from train: 18,129 train / 2,713 validation pairs, 21 formatting categories.

Training

Hardware 1× RTX 5090 (32 GB), bf16
Optimizer Adafactor, lr 1e-4, warmup_ratio 0.03
Batch 8 × grad-accum 2 = effective 16
Seq length max 640 tokens (covers the longest pair, 552 tok; zero truncation)
Regularization gradient checkpointing; early stopping (patience 3), best-checkpoint by val loss
Result best val loss 0.005784 @ step 2250 (~epoch 2.0); early-stopped at step 3000

loss curves

Usage

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
tok = AutoTokenizer.from_pretrained("Akash-Sakala/flan-t5-large-transcript-formatter")
model = AutoModelForSeq2SeqLM.from_pretrained("Akash-Sakala/flan-t5-large-transcript-formatter")
raw = "i went to the the store yesterday it was closed so i couldnt get the milk"
ids = tok(raw, return_tensors="pt")
print(tok.decode(model.generate(**ids, max_new_tokens=640, num_beams=1)[0], skip_special_tokens=True))

Limitations

A 783M student shows a capacity step-down from the 20B teacher on the hardest L4 layout cases (long email/list blocks); T5 was pretrained mostly at 512 tokens. For an int8, CPU-only deployment (< 1 GB) convert with CTranslate2.

License Apache-2.0 (matches the openai/gpt-oss base and the curriculum dataset).