Instructions to use lokomotifai/hushmark-tr-289m with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- GLiNER
How to use lokomotifai/hushmark-tr-289m with GLiNER:
from gliner import GLiNER model = GLiNER.from_pretrained("lokomotifai/hushmark-tr-289m") - Notebooks
- Google Colab
- Kaggle
Hushmark-TR 289M 路 v0.1.0
T眉rk莽e model kart谋 路 Hushmark source
Hushmark-TR 289M is a 288,949,504-parameter Turkish named-entity recognition checkpoint for detecting the
NER-owned personal-data categories used by Hushmark. It is a full GLiNER checkpoint,
fine-tuned from urchade/gliner_multi_pii-v1,
not a LoRA or PEFT adapter.
The release contains the adopted PyTorch checkpoint and the verified FP32 ONNX export. The rejected experimental INT8 export is intentionally not included.
Intended use
The model proposes spans for these 12 entity types:
| Hushmark type | Suggested GLiNER label |
|---|---|
PERSON |
person |
ADDRESS |
full address |
ORG |
organization |
DOB |
date of birth |
HEALTH |
medical condition |
RELIGION |
religious belief |
ETHNICITY |
ethnic origin |
POLITICAL |
political opinion |
SEXUAL_LIFE |
sexual orientation |
CRIMINAL |
criminal record |
BIOMETRIC_REF |
biometric data |
UNION |
trade union membership |
Deterministic identifiers and secrets are handled by Hushmark's validators rather than this model. Policy, masking, blocking, and audit decisions are also outside the model.
This model is a detection aid. It is not an anonymization or legal-compliance guarantee. False negatives and false positives remain possible; evaluate it on representative data before production use.
Usage
pip install "gliner==0.2.28"
from gliner import GLiNER
model = GLiNER.from_pretrained("lokomotifai/hushmark-tr-289m")
labels = [
"person",
"full address",
"organization",
"date of birth",
"medical condition",
"religious belief",
"ethnic origin",
"political opinion",
"sexual orientation",
"criminal record",
"biometric data",
"trade union membership",
]
text = "Ay艧e Y谋lmaz, Ankara'da Acme A艦 i莽in 莽al谋艧谋yor."
entities = model.predict_entities(text, labels, threshold=0.5)
print(entities)
Inputs are limited to 384 tokens and candidate spans to 12 tokens. Longer inputs must be
chunked by the caller. For Hushmark's production ONNX path, use the shipped model.onnx
with the Hushmark runtime; its development-calibrated effective threshold is 0.4.
Architecture
- variant:
289M(exactly 288,949,504 parameters) - release:
v0.1.0 - GLiNER architecture from
urchade/gliner_multi_pii-v1 - pinned
microsoft/mdeberta-v3-baseencoder - maximum input length: 384 tokens
- maximum span width: 12 tokens
- PyTorch reference checkpoint and FP32 ONNX opset-19 export
Training data
No customer data, private strategy corpus, LLM-generated corpus, or external training dataset was used.
- Training: 200,592 deterministic, balanced synthetic examples.
- Development: 1,008 disjoint synthetic examples used for checkpoint selection.
- Locked evaluation: 2,016 disjoint synthetic examples, evaluated once after selection.
The splits are content-disjoint but share a synthetic template family. Consequently, the reported benchmark is evidence for this controlled synthetic distribution, not proof of performance on arbitrary real-world Turkish text.
Training configuration
The adopted run used one NVIDIA A100-SXM4-80GB, BF16, batch size 16, seed 20260809, a
frozen encoder, head learning rate 1e-5, 50 warm-up steps, linear decay, balanced
sampling, validation every 100 steps, minimum development improvement 0.002, and early
stopping patience 5. The best checkpoint was selected at step 1,500; training stopped at
step 2,000 after 930.497 seconds.
Evaluation
On the once-only locked synthetic benchmark:
| Metric | Result |
|---|---|
| Candidate NER macro strict-F1 | 0.9941238343 |
| Incumbent NER macro strict-F1 | 0.0796138809 |
| Absolute improvement | +0.9145099534 |
| Per-type regressions greater than 0.02 | none |
The weakest candidate type scores were SEXUAL_LIFE=0.973262, ORG=0.981723,
PERSON=0.984954, and ADDRESS=0.989547; the remaining evaluated NER types scored 1.0
on this synthetic benchmark.
On all 1,008 development rows, the FP32 ONNX graph reached macro strict-F1
0.993782469, a change of -0.000859107 from PyTorch. Dynamic INT8 quantization was
rejected after reaching only 0.413555 at its best development threshold.
Limitations
- Training and evaluation are synthetic and template-adjacent.
- The evidence does not cover every Turkish dialect, spelling error, OCR artifact, code-switching pattern, or organization-specific document.
- Rare special-category entities have limited lexical diversity.
- Inputs beyond 384 tokens are truncated unless the caller chunks them.
- Human-curated and organization-specific evaluation is still required.
- Do not use predictions as the sole basis for legal, employment, healthcare, credit, or other high-impact decisions.
Release integrity
Exact artifact sizes and SHA-256 values are recorded in SHA256SUMS and
MODEL_RELEASE.json. The adopted weight hashes are:
pytorch_model.bin:a8f8bc87fdd4d4a92898513fd87eed9e7ccd2b6603ef1d1d5ce152e49192b6c2model.onnx:c5e72ca974f2e671325314f5a2d1d7eb2e1951ccd3d5250b0e223787f22c35ed
License and attribution
Hushmark-TR is released under Apache-2.0. The base GLiNER checkpoint is Apache-2.0 and
the pinned mDeBERTa-v3-base encoder is MIT licensed. See LICENSE,
NOTICE, and THIRD_PARTY_NOTICES.md.
Citation
@software{hushmark_tr_2026,
author = {Guner, Fatih and Hushmark Contributors},
title = {Hushmark-TR 289M: Turkish Personal-Data Named-Entity Recognition Model},
year = {2026},
version = {0.1.0},
url = {https://huggingface.co/lokomotifai/hushmark-tr-289m}
}
- Downloads last month
- 3
Model tree for lokomotifai/hushmark-tr-289m
Base model
urchade/gliner_multi_pii-v1