tanaos-NER-v1: локальный NER и дообучение на CPU | AiManual
AiManual Logo Ai / Manual.
13 Янв 2026 Инструмент

Как использовать и дообучить 500Мб NER-модель tanaos-NER-v1 локально на CPU с помощью Artifex

Пошаговый гайд по использованию и дообучению легкой NER-модели tanaos-NER-v1 локально на CPU с библиотекой Artifex. Примеры кода на Python.

Зачем вам NER-модель на CPU в 2025 году?

Если вы думаете, что извлечение именованных сущностей - это удел мощных GPU и гигабайтных моделей, то tanaos-NER-v1 вас удивит. Всего 500 МБ, работает на процессоре и не требует видеокарты. И да, её можно дообучить на любом языке, даже на испанском, который вы не знаете.

Эта модель - как раз то, что нужно для локальных приложений, где приватность важнее скорости. Или для старого железа, которое пылится в углу. (Да, я про те серверы, которые жалко выбросить.)

tanaos-NER-v1 доступна на Hugging Face и построена на архитектуре BERT. Она извлекает стандартные сущности: персоны, организации, локации и т.д. Но главное - её можно дообучить на своих данных без танцев с бубном.

Ставим Artifex и качаем модель

Artifex - это библиотека, которая упрощает работу с моделями Hugging Face. Установите её через pip:

pip install artifex

Если у вас нет Python 3.8 или выше, сначала обновите его. (Серьёзно, как вы до сих пор работаете на Python 3.6?)

Теперь загрузим модель. Весит она 500 МБ, так что на медленном интернете можно сходить за кофе.

from artifex import NERModel

model = NERModel.load("tanaos/tanaos-NER-v1")
print("Модель загружена. Можно работать.")

Извлекаем сущности за три строчки кода

Допустим, у вас есть текст: "Иван Петров работает в компании Рога и копыта в Москве." Хотите найти имена, организации и города? Вот как:

text = "Иван Петров работает в компании Рога и копыта в Москве."
entities = model.predict(text)
for entity in entities:
    print(f"{entity['word']} -> {entity['entity']}")

Результат будет примерно таким:

Иван -> B-PER
Петров -> I-PER
Рога и копыта -> B-ORG
Москве -> B-LOC

B-PER, I-PER - это стандартная разметка для начала и продолжения сущности. Если вы не знакомы с BIO-разметкой, погуглите. (Или не погуглите, если используете DuckDuckGo.)

Модель работает на CPU, так что не ждите молниеносной скорости. На Core i5 обработка одного предложения занимает около 100 мс. Для пакетной обработки лучше использовать батчи, но об этом позже.

Дообучаем модель на испанском без GPU

Предположим, вам нужно извлекать сущности из испанских текстов, но модель обучена на русском и английском. Не проблема. Дообучим её на синтетических данных.

Сначала подготовим данные. Возьмём несколько испанских предложений и разметим сущности. Если нет размеченных данных, сгенерируем их с помощью LLM. (Да, это как матрёшка: одна модель помогает другой.)

Пример синтетических данных в формате JSON:

[
  {
    "text": "Carlos García vive en Barcelona y trabaja en Telefónica.",
    "entities": [
      {"start": 0, "end": 12, "label": "PER"},
      {"start": 25, "end": 33, "label": "LOC"},
      {"start": 46, "end": 56, "label": "ORG"}
    ]
  }
]

Теперь дообучим модель. Используем Artifex для fine-tuning:

from artifex import NERModel

model = NERModel.load("tanaos/tanaos-NER-v1")
model.finetune(
    train_data="spanish_train.json",
    eval_data="spanish_eval.json",
    output_dir="./tanaos-spanish",
    num_epochs=3,
    batch_size=8,
    learning_rate=2e-5
)

Это займёт время. На CPU с 4 ядрами и 16 ГБ ОЗУ дообучение на 1000 примеров может длиться несколько часов. Не советую запускать на ноутбуке, который вы используете для Zoom-совещаний.

После дообучения сохраните модель и используйте как обычно:

model.save("./tanaos-spanish/final_model")
new_model = NERModel.load("./tanaos-spanish/final_model")
entities = new_model.predict("Ana López es de Sevilla.")
💡
Если у вас мало данных, сгенерируйте больше синтетических примеров с помощью любой LLM, например, через Hugging Face Inference API. Только проверяйте качество разметки - модели иногда галлюцинируют.

Чем tanaos-NER-v1 лучше или хуже других?

Давайте сравним с популярными альтернативами.

Модель/БиблиотекаРазмерТребует GPUДообучениеЯзыки
tanaos-NER-v1 + Artifex500 МБНетДа, легкоЛюбые (после дообучения)
spaCy (модель ru_core_news_lg)600 МБНетДа, но сложнееПоддерживаемые (русский, английский и др.)
Stanza~1 ГБНетОграниченноМного языков
BERT-large NER (Hugging Face)1.5 ГБРекомендуетсяДа, но тяжёлоеЗависит от модели

Главное преимущество tanaos-NER-v1 - простота дообучения на новых языках. С spaCy пришлось бы разбираться с конфигами и пайплайнами. Здесь же - один вызов метода.

Недостаток? Скорость. На CPU она медленнее, чем оптимизированные библиотеки вроде spaCy. Но для пакетной обработки в фоне это не критично.

Кому эта модель подойдёт, а кому нет

tanaos-NER-v1 - отличный выбор для:

  • Разработчиков, которые хотят встроить NER в локальное приложение без зависимостей от облаков.
  • Тех, у кого есть тексты на редких языках и нет готовых моделей. Дообучили - и работайте.
  • Людей со старым железом, как в статье про запуск LLM на серверном железе. Только вместо LLM - NER.

Не берите эту модель, если:

  • Вам нужна реальная скорость. Лучше использовать GPU-ускорение, как в гайде по MoE на RTX 4090.
  • Вы работаете только с английским или русским. Готовые решения вроде spaCy могут быть удобнее.
  • У вас нет времени на дообучение. Иногда проще заплатить за API.

Последний совет: не переобучайте

Если вы дообучаете модель на маленьком датасете, используйте мало эпох - 2-3 достаточно. Иначе модель забудет, что умела раньше. (Это как переучить кошку командам: можно, но зачем?)

Синтетические данные - это хорошо, но они не заменят реальные. Если есть возможность, соберите хотя бы 100-200 размеченных примеров вручную. Или попросите коллегу. Или заплатите фрилансеру. В общем, вы поняли.

tanaos-NER-v1 - не панацея, но для локальных задач, где приватность и кастомизация важнее скорости, она отлично подходит. А если у вас есть GPU, то можете дообучать и быстрее, но это уже другая история.