CoolFace
Modelpublic

uzbtrust/uzbek-operator-ner

sourceHugging Facemitupdated 2mo agoView on Hugging Face
0likes5downloads
Model Card

Uzbek Operator NER — BiLSTM-CRF

A multilingual (English + Russian) Named Entity Recognition model, fine-tuned to recognize telecom-operator domain entities (tariffs, services, USSD codes) alongside general PER/ORG/LOC/MISC entities. Architecture and training code: `uzbtrust/uzbek-operator-ner` on GitHub.

The encoder is a hand-written BiLSTM-CRF — no pretrained transformer. Word embeddings are FastText (EN+RU), combined with a character-level CNN and a learned language embedding.

Results (this checkpoint)

Test setF1
CoNLL-2003 (English)0.786
WikiANN (Russian)0.817
Operator domain (synthetic)1.000

This is the checkpoint from the second (mixed, fully-unfrozen) stage of domain fine-tuning — the stage chosen to preserve general EN/RU performance rather than the first-stage checkpoint, which reaches domain F1 = 1.0 faster but at some cost to general-domain recall.

Files

  • —model.pt — {"epoch", "best_f1", "model": state_dict}
  • —word_vocab.json, char_vocab.json, tag_map.json — vocabularies built during training
  • —config.json — architecture summary

Usage

The model class lives in the GitHub repo, not in this repository (this is a plain PyTorch state_dict, not a transformers-compatible checkpoint):

bash
git clone https://github.com/uzbtrust/uzbek-operator-ner
cd uzbek-operator-ner
python
import torch, json
from model.ner_model import NERModel  # see repo for exact constructor args

vocab = json.load(open("word_vocab.json"))
tags = json.load(open("tag_map.json"))

ckpt = torch.load("model.pt", map_location="cpu")
model = NERModel(vocab_size=len(vocab), num_tags=len(tags))
model.load_state_dict(ckpt["model"])
model.eval()

See `training/predict.py` in the GitHub repo for a complete, runnable inference example.

License

MIT, matching the GitHub repository.