Token Classification
Transformers
ONNX
Safetensors
Transformers.js
modernbert
punctuation
punctuation-restoration
truecasing
capitalization
asr
speech-recognition
transcription
mmbert
Instructions to use Horizon-Labs/multilingual-punctuation-truecase-base with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Horizon-Labs/multilingual-punctuation-truecase-base with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("token-classification", model="Horizon-Labs/multilingual-punctuation-truecase-base")# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForTokenClassification tokenizer = AutoTokenizer.from_pretrained("Horizon-Labs/multilingual-punctuation-truecase-base") model = AutoModelForTokenClassification.from_pretrained("Horizon-Labs/multilingual-punctuation-truecase-base", device_map="auto") - Transformers.js
How to use Horizon-Labs/multilingual-punctuation-truecase-base with Transformers.js:
// npm i @huggingface/transformers import { pipeline } from '@huggingface/transformers'; // Allocate pipeline const pipe = await pipeline('token-classification', 'Horizon-Labs/multilingual-punctuation-truecase-base'); - Notebooks
- Google Colab
- Kaggle
Download code/truecase/pcs_preds.py from Horizon-Labs/multilingual-punctuation-truecase-base: direct link, hf CLI and curl.
- Browser
- Download file 2.02 kB
-
https://huggingface.co/Horizon-Labs/multilingual-punctuation-truecase-base/resolve/main/code/truecase/pcs_preds.py
- Command line
-
hf download hf://Horizon-Labs/multilingual-punctuation-truecase-base/code/truecase/pcs_preds.py
-
curl -L -o pcs_preds.py https://huggingface.co/Horizon-Labs/multilingual-punctuation-truecase-base/resolve/main/code/truecase/pcs_preds.py
2.02 kB
| """Per-word punctuation and casing predictions of 1-800-BAD-CODE/xlm-roberta_punctuation_fullstop_truecase (punctuators package, ONNX) | |
| on the truecase/tc_metrics.py chunks (lowercased, mark-free input). Output words are aligned to the input words (difflib, case- | |
| insensitive, as punct/eval_pcs.py); casing = class of the output word; unaligned words get '0' / lower. Run in a private venv. | |
| python truecase/pcs_preds.py EVAL_DIR OUT.json [MODEL]""" | |
| import difflib, json, os, sys, time | |
| sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) | |
| from tc_metrics import chunks, units | |
| from common_tc import case_of, lower_keep_len | |
| from punctuators.models import PunctCapSegModelONNX | |
| ev, out = sys.argv[1:3]; mname = sys.argv[3] if len(sys.argv) > 3 else "1-800-BAD-CODE/xlm-roberta_punctuation_fullstop_truecase" | |
| items = chunks(ev); m = PunctCapSegModelONNX.from_pretrained(mname); t0 = time.time(); res = []; miss = 0 | |
| texts = [lower_keep_len(it["text"]) for it in items]; outs = [] | |
| for s in range(0, len(texts), 64): | |
| outs += m.infer(texts[s:s + 64], apply_sbd=False) | |
| if s % 6400 == 0: | |
| print(s, f"{time.time() - t0:.0f}s", flush=True) | |
| for it, o in zip(items, outs): | |
| ul = "cmn_Hani" if it["lang"].startswith(("zho", "yue")) else it["lang"] | |
| oc, oe, ol = units(o, ul) # output text -> marks per unit; the unit text keeps the output's casing | |
| gw = [lower_keep_len(it["text"][(it["ends"][i - 1] if i else 0):x]).strip() for i, x in enumerate(it["ends"])] | |
| pw_raw = [oc[(oe[i - 1] if i else 0):x].strip() for i, x in enumerate(oe)] | |
| p, c = ["0"] * len(gw), [0] * len(gw) | |
| for tag, a1, a2, b1, b2 in difflib.SequenceMatcher(None, gw, [w.lower() for w in pw_raw], autojunk=False).get_opcodes(): | |
| if tag == "equal": | |
| p[a1:a2] = ol[b1:b2]; c[a1:a2] = [case_of(w) for w in pw_raw[b1:b2]] | |
| else: | |
| miss += a2 - a1 | |
| res.append(dict(p=p, c=c)) | |
| json.dump(res, open(out, "w")); print("done", len(res), "unaligned words", miss, f"{time.time() - t0:.0f}s") | |