Продвинутое понимание обработки естественного языка. Частотные формулы → векторы → трансформеры → большие языковые модели.
За последние 15+ лет обработка естественного языка изменилась сильнее, чем за предыдущие пятьдесят. Мы прошли путь от подсчёта частот слов до моделей, которые пишут код, ведут диалог и решают задачи по описанию.
Понимать эту эволюцию полезно не только исследователям: от выбора «какой подход использовать» зависят сроки, бюджет и качество продуктов. Ниже — ключевые этапы без лишнего академизма, с фокусом на идеи и практику.
Что разберём по шагам
- TF-IDF — как оценить важность слова в документе и почему этого мало
- Word Embeddings — слова как векторы и первые семантические аналогии
- RNN и LSTM — учёт порядка слов и проблема длинных зависимостей
- Transformer — почему «внимание» заменило рекурсию и как это масштабируется
- BERT и GPT — зачем делят на энкодеры (понимание) и декодеры (генерация)
- LLM — как масштаб даёт эмерджентные способности и когда что применять
TF-IDF: классика поиска
Как устроено
TF — как часто термин встречается в документе. IDF — в скольких документах он есть; редкие в коллекции слова получают больший вес, потому что лучше отличают документы друг от друга.
TF-IDF(t, d, D) = TF(t, d) × log(|D| / число док. с t)
Плюсы: очень просто внедрить, быстро считается, мало памяти, результат интерпретируем. До сих пор нормальный выбор для поиска по своим документам и базовой категоризации.
Минусы: порядок слов не учитывается — «не люблю банки» и «банки не любят» для TF-IDF могут быть похожи. Разные формы одного слова (бегу, бежать) считаются разными токенами. Смысл и контекст не моделируются.
Вывод: отличный базовый уровень, но для семантики и сложных сценариев нужны следующие шаги.
Word Embeddings: слова как векторы
Вместо «мешка слов» и частот — непрерывные векторы фиксированной размерности. Идея: близкие по смыслу слова должны быть близки в пространстве. Это уже не просто статистика, а представление семантики.
Word2Vec и GloVe
Word2Vec учит векторы без явной разметки: по контексту предсказываем слово или наоборот. CBOW — по окну слов вокруг угадываем центральное; Skip-gram — по слову предсказываем соседей. Обучение на огромных корпусах даёт знаменитые аналогии: «король − мужчина + женщина ≈ королева».
GloVe явно использует глобальную совместную встречаемость слов в корпусе и строит векторы так, чтобы скалярное произведение было связано с логарифмом частоты совместного появления.
Размерность обычно 50–300 — удобно для классификаторов и быстрого семантического поиска. Но у каждого слова один вектор на всё: многозначность (полисемия) не учитывается — «ключ» от двери и «ключ» в музыке представлены одинаково.
Итог: большой шаг к смыслу, но контекст и порядок по-прежнему слабо задействованы.
RNN и LSTM: последовательность и память
Мешки слов и статичные эмбеддинги не учитывают порядок. «Собака укусила человека» и «человека укусила собака» для них выглядят почти одинаково, хотя смысл разный. Нужна модель последовательности.
RNN и проблема длинных зависимостей
Рекуррентная сеть обрабатывает текст по шагам: на каждом шаге есть скрытое состояние h_t, зависящее от текущего входа x_t и предыдущего состояния h_{t-1}. Теоретически в h может «жить» память обо всём предыдущем тексте.
На практике градиент при обучении затухает или взрывается при длинных последовательностях — сигнал плохо доходит до начала. Поэтому обычные RNN плохо запоминают далёкий контекст.
LSTM (Long Short-Term Memory) вводит ячейку памяти и ворота: забывания, входа и выхода. Сеть явно решает, что забыть и что запомнить, и лучше сохраняет долгую зависимость. LSTM долго были основой для генерации и перевода.
Минус: последовательная обработка плохо параллелится на GPU, обучение медленное. Следующий шаг — отказаться от рекурсии и перейти на внимание.
Transformer: внимание без рекурсии
«Attention is All You Need» убрала рекурсию и заменила её механизмом внимания: каждая позиция в последовательности может «смотреть» на любую другую. Все позиции обрабатываются параллельно — это дало огромный выигрыш в масштабируемости и качестве.
Как устроено внимание
Из входа получаем три матрицы: запросы Q, ключи K и значения V (линейные проекции). Скалярное произведение Q и K даёт «схожесть» каждой позиции с каждой; после softmax получаем веса внимания. По этим весам усредняются V — в итоге каждый токен получает контекст от всех остальных.
Attention(Q,K,V) = softmax(QK^T / √d_k) × V
Делитель √d_k стабилизирует градиенты. Multi-Head Attention — несколько таких голов с разными проекциями; модель может одновременно учитывать разные типы связей (например, синтаксис и кореференцию). Результаты голов конкатенируются и проходят линейный слой.
Архитектура: энкодер — стопка блоков (self-attention + feed-forward, нормализация, остатки); декодер — стопка блоков с masked self-attention (не видит будущие токены), cross-attention на выход энкодера и feed-forward. Маскирование в декодере нужно для авторегрессивной генерации.
Transformer стал общей основой и для BERT (только энкодер), и для GPT (только декодер), и для гибридов.
BERT и энкодеры: понимание текста
BERT использует только энкодер трансформера и обучается без явной разметки на двух задачах: предсказание замаскированных токенов по контексту и предсказание того, идёт ли одно предложение за другим. В результате получаем контекстные представления для каждой позиции — одно и то же слово в разных контекстах даёт разные векторы.
Обучение и выход
MLM (Masked Language Model): случайно маскируем часть токенов (например, 15%) и учим модель предсказывать их по окружающему контексту. NSP (Next Sentence Prediction): подаём пару предложений и учим предсказывать, действительно ли B идёт после A. Обе задачи не требуют ручной разметки — можно учиться на любом текстовом корпусе.
На выходе — вектор для каждой позиции в последовательности. Токен [CLS] в начале часто используют как общее представление предложения для классификации; можно усреднять по позициям или брать эмбеддинги для поиска (запрос и документ кодируем и сравниваем по косинусу или скалярному произведению).
Где применяют: классификация текста (тональность, темы, интент), семантический поиск и ранжирование, извлечение сущностей (NER), ответы на вопросы (в паре с головой), эмбеддинги для кластеризации и рекомендаций. BERT и аналоги не предназначены для длинной генерации — они «понимают», но не «сочиняют» по токенам.
Итог: для задач понимания и поиска энкодеры до сих пор часто выгоднее или дополняют LLM (например, быстрый поиск по своим данным через BERT-эмбеддинги).
GPT и декодеры: генерация текста
В GPT используется только декодер трансформера с masked self-attention: модель не видит будущие токены. Обучение — классическое language modeling: предсказание следующего токена по всем предыдущим на огромных текстовых корпусах. Генерация — авторегрессия: по уже сгенерированным токенам предсказываем следующий, пока не получим конец или стоп-токен.
С ростом модели и объёма данных появились эмерджентные способности: few-shot и zero-shot выполнение задач без явного дообучения под каждую. GPT-3 показал, что масштаб сам по себе даёт универсальность. Дальше — мультимодальность (текст + изображение в GPT-4V и аналогах), инструктивное обучение (InstructGPT и далее) и RLHF (обучение с подкреплением по откликам человека) для «полезного» и безопасного поведения.
Декодеры стали основой для диалоговых систем, генерации кода, суммаризации, перевода «в стиле», написания текстов по описанию. Ограничение — длина контекста и стоимость инференса; для многих задач «понимания» (поиск, классификация) легковесный BERT или эмбеддинги от LLM часто достаточны и дешевле.
Итог: для генерации и сложных инструкций — декодеры и LLM; для понимания и поиска — можно комбинировать с энкодерами и более лёгкими моделями.
Большие языковые модели (LLM)
Свойства
Large Language Model — модель с десятками или сотнями миллиардов параметров, дообученная на огромных текстовых (и часто мультимодальных) данных. Обычно архитектура — трансформер-декодер или гибрид. Масштаб даёт эмерджентное поведение: следование инструкциям, рассуждения, генерация кода без явного обучения под каждую задачу.
Контекстное окно — десятки и сотни тысяч токенов позволяют подавать длинные документы и длинные диалоги. От этого зависят RAG-сценарии и «память» ассистента.
Интерфейс — текстовый ввод/вывод; поведение задаётся промптами и системными инструкциями. Prompt engineering и выбор формата сильно влияют на результат.
Дообучение и выравнивание — после предобучения на тексте идут fine-tuning на инструкциях и RLHF (обучение с подкреплением по оценкам человека), чтобы модель была полезной и безопасной.
Когда что использовать: для понимания, поиска и классификации часто достаточно BERT или эмбеддингов от LLM — быстрее и дешевле. Для генерации, диалога и сложных инструкций — полноценная LLM. Для самого простого и дёшевого базового уровня — TF-IDF или легковесные эмбеддинги.
Семейства: GPT, Claude, LLaMA/Mistral/Qwen (открытые), Gemini — у каждого свой фокус по контексту, мультимодальности и экосистеме.
Сводная схема: от TF-IDF до LLM
Краткая шпаргалка: какой подход что моделирует и для каких задач уместен. Выбор уровня абстракции — часть проектирования продукта: переплачивать за LLM там, где хватает BERT или TF-IDF, не имеет смысла; и наоборот — для диалога и сложной генерации «маленькие» модели быстро упираются в потолок.
1. TF-IDF — моделируем важность слова в документе. Подходит для поиска и простой классификации.
2. Word2Vec, GloVe — семантика слова в виде одного вектора. Удобно для аналогий и семантического поиска.
3. RNN, LSTM — порядок слов и короткая память. Исторически использовались для ранней генерации и классификации последовательностей.
4. Transformer — контекст и зависимости через механизм внимания. Универсальная основа для энкодеров и декодеров.
5. BERT и энкодеры — контекстное представление текста для каждой позиции. Задачи: NER, поиск, классификация, эмбеддинги.
6. GPT и декодеры — предсказание следующего токена. Основа для генерации, диалога, суммаризации.
7. LLM — масштаб плюс инструкции и длинный контекст. Универсальные ассистенты, генерация кода, анализ, творческие задачи.
Путь от TF-IDF до LLM — это переход от частот и «мешка слов» к векторам и смыслу; от одного вектора на слово к контекстным представлениям (BERT); от последовательной обработки (RNN/LSTM) к параллельному вниманию (Transformer); от задач «понять текст» к задачам «понять и сгенерировать» (GPT, LLM).
Продвинутое понимание NLP сегодня — это в том числе умение выбирать уровень: когда достаточно TF-IDF или легких эмбеддингов, когда нужен BERT-подобный энкодер, а когда — полноценная LLM с промптами и тонкой настройкой под задачу.