Downloads · 30 days
14
30% of all-time downloads
Bathris/ner-rubert-tiny-news-onnx
ner-rubert-tiny-news-onnx is a token classification model from Bathris. Use it when you need labels on individual words, such as names. It is set up for onnx. The card lists the license as mit.
Динамически квантованная в int8 сборка r1char9/ner-rubert-tiny-news для запуска через onnxruntime без torch.
Downloads · 30 days
14
30% of all-time downloads
All-time downloads
47
Public
Repo size
29.3 MB
Likes
0
Public
Click a slice to open those files.
.onnx29.3 MB · 89%
From the Hugging Face model README
Динамически квантованная в int8 сборка
r1char9/ner-rubert-tiny-news
для запуска через onnxruntime без torch.
Веса не переобучались: это та же модель, только в другом формате. Всё, что касается качества разметки, относится к исходной модели, а не к сборке.
32 МБ вместо 116 МБ, и запускается там, где нет torch: musl-сборки, свежие версии Python, окружения без компилятора.
Сборка нужна библиотеке rumask — обезличиванию персональных данных в русском тексте. Там эта модель работает не как искатель организаций, а как щит для имён: слово, которое документ дважды назвал организацией, снимается с людей во всём тексте разом.
Причина в том, что у названия фирмы нет признака в самом слове. На рабочей
переписке две трети ложных людей оказались компаниями — «Апит», «Технодор»,
BBS2, — и правилами это не лечится. Отдельно ценно, что модель видит
латиницу: имена клиентов вида BBS2 не находит ни один другой голос.
from rumask import Masker
masker = Masker(orgs="on")
Веса скачаются отсюда в кеш пользователя при первом запуске. В закрытом контуре
скачайте файлы руками и назовите каталог: Masker(orgs="/opt/rumask-orgs").
Или напрямую:
import json
import numpy as np
import onnxruntime as ort
from tokenizers import Tokenizer
session = ort.InferenceSession("model_int8.onnx")
tokenizer = Tokenizer.from_file("tokenizer.json")
labels = json.load(open("config.json"))["id2label"]
encoded = tokenizer.encode("Компания Апит поставила оборудование.")
logits = session.run(None, {
"input_ids": np.array([encoded.ids], dtype=np.int64),
"attention_mask": np.array([encoded.attention_mask], dtype=np.int64),
"token_type_ids": np.zeros((1, len(encoded.ids)), dtype=np.int64),
})[0]
Не считайте батчем. Квантизация динамическая, и масштаб активаций берётся по всему входному тензору: окна в одной пачке получат общий масштаб на всех, и метки поедут вместе с логитами. Считайте окна по одному — их можно раскладывать по потокам, выход от числа потоков не зависит побитово.
Служебные токены нужны каждому окну. [CLS] и [SEP] ставятся на каждое
окно отдельно, а не один раз на документ.
Ограничение длины зашито в tokenizer.json. Если режете документ на окна
сами, отключите усечение в токенизаторе — иначе модель молча не увидит текст
дальше первого окна.
| файл | что это |
|---|---|
model_int8.onnx | веса, динамическая квантизация int8 |
tokenizer.json | токенизатор в формате tokenizers |
config.json | метки и параметры модели |
vocab.txt, tokenizer_config.json, special_tokens_map.json | из исходной модели, для совместимости |
MIT, как и у исходной модели.