Перейти к основному содержимому

Модели обучения

Разработчику

Модель обучения — это математическая функция с настраиваемыми параметрами (весами), которая после обучения на данных превращает вход (текст, числа, изображение) в полезный результат: метку класса, вектор смысла, перевод, ответ. В отличие от жёстко прописанных правил if, содержание решения извлекается из примеров — см. Категории обучения.

В этой статье — фокус на текстовых моделях: от классических эмбеддингов до трансформеров и семантического поиска. Общий обзор ML — Машинное обучение; углублённый NLP-маршрут — Трансформеры и NLP.


Что такое модель обучения

Модель — это сжатое представление закономерностей в обучающих данных. Программист задаёт:

  • архитектуру — как устроены слои и связи;
  • функцию потерь — что считать ошибкой;
  • алгоритм оптимизации — как обновлять веса (SGD, Adam и др.);
  • гиперпараметры — learning rate, размер батча, число эпох.

После обучения модель инференсит — принимает новые данные и выдаёт прогноз без пересчёта градиентов.

В NLP типичные задачи модели обучения:

ЗадачаЧто предсказывает модель
Классификация интентаНамерение пользователя («заказать», «отменить»)
NERИменованные сущности в тексте
ЭмбеддингВектор смысла фразы для поиска
ГенерацияПродолжение или ответ по контексту

Виды архитектур моделей

Архитектура определяет, как модель обрабатывает вход. Для текста исторически выделяют несколько линий:

СемействоИдеяКогда уместно
Bag-of-words / TF-IDFЧастоты слов, без порядкаБыстрый baseline, короткие тексты
Word embeddings (Word2Vec, FastText, GloVe, Navec)Плотный вектор на словоКлассификация, поиск похожих слов
RNN / LSTM / GRUПоследовательная обработка с памятьюВременные ряды текста, старые seq2seq
CNN для текстаСвёртки по n-граммамБыстрая классификация на GPU
Transformer (BERT, MPNet, T5, GPT)Self-attention, параллельный проходСовременный NLP, высокое качество
Sentence encoders (SBERT, LaBSE, E5)Вектор целой фразыСемантический поиск, RAG

Подробный разбор трансформеров — Обзор архитектур. Дообучение готовой модели под свою задачу — Обучение на базе готовой модели.


Токены, слои и эмбеддинги

Токены

Токен — минимальная единица, с которой работает модель. Это не всегда слово:

  • "привет" → 1 токен;
  • "unbelievable"["un", "believ", "able"] → 3 токена (subword);
  • числа и пунктуация — часто отдельные токены.

Токенизация выполняется токенизатором (BPE, WordPiece, SentencePiece), привязанным к конкретной модели. Разные модели — разные словари и правила разбиения. Подробнее — NLP и работа с текстом и Работа с ИИ-моделями.

Слои

Нейросеть — стек слоёв, каждый преобразует тензор:

СлойРоль
EmbeddingID токена → вектор фиксированной размерности
AttentionВзвешенное смешивание контекста всех позиций
FFN (feed-forward)Нелинейное преобразование каждой позиции
Классификационная головаВектор → метка класса или логиты
PoolingПоследовательность векторов → один вектор (mean, [CLS], max)

Ранние слои часто учат общие признаки (морфология, синтаксис); поздние — задачеспецифичные (интент, тональность).

Эмбеддинги

Эмбеддинг — плотный числовой вектор, кодирующий смысл.

  • Статические (FastText, Navec) — одно слово → один вектор, независимо от контекста.
  • Контекстуальные (BERT) — вектор токена зависит от соседей: «банк» у реки и «банк» финансовый получают разные представления.
  • Sentence-level (MPNet, LaBSE) — один вектор на всю фразу, оптимизированный для сравнения смыслов.

Размерность эмбеддинга (например, 300, 768, 1024) — гиперпараметр архитектуры; от неё зависят память и качество.


Словари, интенты, память, фразы, ошибки

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

Словарь (vocabulary)

Словарь — таблица соответствия токен ↔ числовой ID. Размер словаря (vocab_size) — от нескольких тысяч (компактные модели) до 250 000+ (multilingual LLM). Токены вне словаря обрабатываются как UNK или разбиваются на subword.

Словарь фиксируется при обучении предобученной модели; при fine-tuning обычно не меняют.

Интенты

Интент (intent) — класс намерения пользователя: order_pizza, cancel_booking, greeting. Модель классификации интентов получает фразу и возвращает метку + уверенность.

Обучение требует размеченных примеров — десятки–сотни фраз на каждый интент с вариативностью формулировок.

Фразы (training phrases)

Фразы — обучающие примеры: «Хочу пиццу», «Закажи маргариту», «Доставка на дом». Чем разнообразнее формулировки, тем лучше обобщение. Дубли и шаблоны без вариаций ведут к переобучению на точные строки.

Память (контекст диалога)

Память в диалоговых системах — сохранённые слоты и история: имя клиента, город, предыдущий интент. Для модели это:

  • краткосрочная — последние N реплик в контекстном окне;
  • долгосрочная — внешнее хранилище (БД, векторная база), куда пишут факты из диалога.

LSTM исторически хранил «память» во внутреннем состоянии; трансформеры — в attention по всему контексту (в пределах окна).

Ошибки

Типичные ошибки при обучении и эксплуатации NLU-моделей:

ОшибкаПричинаЧто делать
Путаница похожих интентовМало примеров, пересекающиеся формулировкиДобавить контрастные фразы, уточнить границы классов
Низкая уверенность на новых фразахДоменный сдвиг, жаргонДообучить на реальных логах, data augmentation
ПереобучениеМало данных, слишком тяжёлая модельРегуляризация, меньшая модель, больше примеров
OOV (out-of-vocabulary)Редкие слова вне словаряSubword-токенизация (BERT, FastText)
Ложные срабатыванияДисбаланс классовВзвешивание классов, порог уверенности, fallback

Метрики: accuracy, F1 по классам, confusion matrix. См. также смещение и переобучение.


Параметры — размеры моделей, словарей, языки

Параметры модели

Параметр — обучаемый вес (число в матрице). «Модель на 7B» — ~7 миллиардов таких весов. Грубая оценка памяти при inference в FP16: параметры × 2 байта (7B ≈ 14 ГБ VRAM без квантизации).

МодельПараметрыТипичное применение
Navec~50M (300-dim embeddings)Русские word vectors
FastText ru~100M–1B (зависит от корпуса)Subword embeddings
BERT-base~110MКлассификация, NER
BERT-large~340MКачество выше, медленнее
MPNet-base~110MSentence embeddings EN
LaBSE~471MMultilingual sentence similarity
ruBERT-large~435MРусский encoder

Размер словаря

Модельvocab_size (порядок)
BERT-base (cased)~30 000
multilingual BERT~120 000
GPT-2 / LLM50 000–256 000
Navec~500 000 лемм (русский корпус)

Больший словарь — меньше UNK, но больше памяти на embedding-матрицу (vocab_size × hidden_size).

Поддерживаемые языки

  • Монолингвальные (Navec, ruBERT) — заточены под русский; на английском качество падает.
  • Multilingual (mBERT, LaBSE, mE5) — один чекпоинт на 100+ языков; удобно для смешанных корпусов.
  • Cross-lingual (LaBSE) — похожие фразы на разных языках близки в векторном пространстве.

Перед выбором проверяйте model card на Hugging Face: языки обучения, лицензия, ограничения.


Семантический поиск

Семантический поиск находит документы по смыслу, а не по точному совпадению слов. Запрос «как оформить возврат» находит статью «политика возврата товара», даже если слова не совпадают.

Типичный pipeline:

  1. Разбить базу знаний на чанки (абзацы, статьи).
  2. Прогнать каждый чанк через sentence encoder (MPNet, LaBSE, E5).
  3. Сохранить векторы в векторной БД (обзор).
  4. При запросе — эмбеддинг запроса, kNN по cosine similarity, top-k чанков в контекст LLM (RAG).

Метрики качества: Recall@k, MRR, nDCG. Для продакшена важны latency и периодическая переиндексация при обновлении базы.


LSTM-нейросети

LSTM (Long Short-Term Memory) — разновидность рекуррентной сети (RNN) с вентилями (forget, input, output), которые регулируют, что запомнить и что забыть. Решает проблему затухающего градиента обычных RNN на длинных последовательностях.

ПлюсыМинусы
Учитывает порядок токеновПоследовательный проход — медленно на GPU
Работает на коротких–средних текстахУступает трансформерам по качеству NLP
Меньше памяти, чем большой BERTСложно параллелить обучение

Сегодня LSTM применяют для legacy-систем, временных рядов и как учебный шаг; для новых NLP-проектов чаще берут BERT или sentence encoders. Подробнее — нейросети, RNN и LSTM и обзор ML.


Navec — набор русских эмбеддингов слов, обученных на корпусе НКРЯ (Национальный корпус русского языка). Проект Natasha (Александр Кукушкин).

ХарактеристикаЗначение
Размерность300
Словарь~500 000 лемм
Формат.tar с векторами, быстрая загрузка
КонтекстСтатический — одна лемма → один вектор
from navec import Navec

navec = Navec.load("navec_hudlit_v1_12B_500K_300d_100q.tar")
vector = navec["машинное"] # numpy array shape (300,)

Когда использовать: лёгкая классификация на русском, baseline без GPU, прототипы. Когда не использовать: нужен контекст слова («ключ» как инструмент vs музыка) — берите BERT или LaBSE.


FastText

FastText (Facebook/Meta) — библиотека для word embeddings с ключевой особенностью: вектор слова = сумма векторов символьных n-грамм. Слово где и редкое где-нибудь делят общие n-граммы — меньше проблем с OOV.

ХарактеристикаДетали
ОбучениеНа своём корпусе или готовые cc.ru.300.bin
SubwordСимвольные n-граммы длиной 3–6
ЗадачиКлассификация текста, поиск похожих слов, лёгкий inference
РазмерОт компактных 300-dim до больших бинарников на весь Common Crawl
import fasttext

# Предобученные векторы (скачать с fasttext.cc)
model = fasttext.load_model("cc.ru.300.bin")
model.get_word_vector("обучение")

# Обучение классификатора на своих метках
model_sup = fasttext.train_supervised("train.txt", epoch=25, lr=0.5, wordNgrams=2)
model_sup.predict("Хочу отменить заказ")

Плюсы: быстро, мало ресурсов, хорош для коротких текстов и продакшен-микросервисов (микро-ML). Минусы: нет глубокого контекста предложения — для семантического поиска по абзацам лучше MPNet или LaBSE.


BERT

BERT (Bidirectional Encoder Representations from Transformers, Google, 2018) — encoder-only трансформер, предобученный на задачах Masked Language Modeling (угадай замаскированное слово) и Next Sentence Prediction.

СвойствоОписание
КонтекстДвунаправленный — видит слова слева и справа
ВыходВектор на каждый токен + специальный [CLS] на всё предложение
Fine-tuningДобавить голову классификатора, обучить на своих метках
РусскийDeepPavlov/rubert-base-cased, ai-forever/ruBert-large
from transformers import AutoTokenizer, AutoModelForSequenceClassification

tokenizer = AutoTokenizer.from_pretrained("cointegrated/rubert-tiny2")
model = AutoModelForSequenceClassification.from_pretrained(
"cointegrated/rubert-tiny2",
num_labels=5, # число интентов
)
inputs = tokenizer("Хочу вернуть товар", return_tensors="pt")
outputs = model(**inputs)
# outputs.logits — оценки по классам

BERT — рабочая лошадка для классификации, NER, извлечения сущностей. Для сравнения целых предложений (поиск) поверх BERT часто обучают sentence-BERT или берут специализированные encoder'ы — MPNet, LaBSE.

Разбор семейства — Обзор трансформерных архитектур.


MPNet

MPNet (Microsoft, 2020) — encoder, объединяющий идеи BERT (masked tokens) и XLNet (permutation language modeling). В линейке sentence-transformers модель sentence-transformers/all-mpnet-base-v2 — популярный англоязычный sentence encoder.

ХарактеристикаЗначение
Параметры~110M
Размерность эмбеддинга768
ЯзыкПреимущественно английский
Метрика сравненияCosine similarity
from sentence_transformers import SentenceTransformer

model = SentenceTransformer("sentence-transformers/all-mpnet-base-v2")
emb1 = model.encode("How to reset my password")
emb2 = model.encode("Password recovery steps")
# cosine_similarity(emb1, emb2) — высокая для близких по смыслу фраз

Для русского semantic search на Hub есть ai-forever/sbert_large_nlu_ru, intfloat/multilingual-e5-large — MPNet напрямую на русском хуже.


LaBSE

LaBSE (Language-agnostic BERT Sentence Embedding, Google) — мультиязычный sentence encoder: похожие по смыслу фразы на разных языках лежат рядом в векторном пространстве.

ХарактеристикаЗначение
Чекпоинтsentence-transformers/LaBSE
Параметры~471M
Размерность768
Языки100+ (включая русский)
ЗадачаCross-lingual semantic similarity, поиск, clustering
from sentence_transformers import SentenceTransformer

model = SentenceTransformer("sentence-transformers/LaBSE")
ru = model.encode("Как оформить возврат товара")
en = model.encode("How to return a product")
# Высокая cosine similarity между ru и en

Когда выбирать LaBSE: мультиязычная база знаний, смешанные RU/EN запросы, кросс-лингвальный поиск без перевода. Альтернативы: intfloat/multilingual-e5-large, BAAI/bge-m3 — часто сильнее на бенчмарках 2023–2025, но LaBSE остаётся понятным baseline.


Как выбрать модель

ЗадачаСтартЕсли нужно лучше
Классификация интентов (RU)FastText supervisedrubert-tiny2 + fine-tune
NER, извлечение сущностейruBERT + token classificationDeepPavlov pipelines
Семантический поиск (RU)LaBSE или e5-multilingualbge-m3, дообучение на своих парах
Семантический поиск (EN)MPNete5-large, Cohere/Voyage API
Лёгкий edge без GPUFastText, Navec + логрегrubert-tiny2 в ONNX
Генерация ответовLLM + RAG (модели и инструменты)

Общий pipeline: baseline на простой модели → замер метрик → усложнение только при доказанной необходимости.


Связь с другими материалами

ТемаСтатья
NLP-задачи, корпуса, метрикиNLP и работа с текстом
Fine-tuning, LoRAДообучение под задачи NLP
Hugging Face, русские чекпоинтыПрактика с предобученными моделями
Векторные БД, RAGВекторные базы данных
RNN, LSTM, трансформерыНейросети — RNN и трансформеры
Transfer learningОбучение на базе готовой модели