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, как и у исходной модели.

Downloads last month
18
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Bathris/ner-rubert-tiny-news-onnx

Quantized
(2)
this model