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-base encoder
  • 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: a8f8bc87fdd4d4a92898513fd87eed9e7ccd2b6603ef1d1d5ce152e49192b6c2
  • model.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
Inference Providers NEW
This model isn't deployed by any Inference Provider. 馃檵 Ask for provider support

Model tree for lokomotifai/hushmark-tr-289m

Finetuned
(7)
this model