ner-rubert-tiny-news, ONNX int8
Динамически квантованная в 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, как и у исходной модели.
- разметка и обучение — r1char9
- основа — cointegrated/rubert-tiny2
- сборка в ONNX int8 — rumask
- Downloads last month
- 18
Model tree for Bathris/ner-rubert-tiny-news-onnx
Base model
cointegrated/rubert-tiny2