Эпоха 2 · Фундамент · 2003

13 Нейроязыковая модель

A Neural Probabilistic Language Model · Bengio, Ducharme, Vincent, Jauvin · JMLR
🟧 оригинал выборочно~1.5–2 чоригинал ↗
Суть за 20 секунд. Языковая модель, где каждое слово — обучаемый вектор (эмбеддинг), а нейросеть предсказывает следующее слово. Похожие слова получают близкие векторы → модель обобщает на невиданные сочетания. Прямой предок word2vec и всех LLM.

Контекст

Классические языковые модели — счётные n-граммы: оценивают вероятность слова по частотам предыдущих. Беда — «проклятие размерности»: почти любая тестовая фраза дословно не встречалась, и нет понятия похожести слов. Бенжио (2003) предлагает нейросетевую LM.

Идея и механизм

Каждому слову сопоставляется обучаемый вектор ew ∈ ℝd. Модель берёт эмбеддинги n−1 предыдущих слов, склеивает, прогоняет через скрытый слой и softmax → распределение следующего слова. Эмбеддинги учатся совместно с задачей. Похожие по употреблению слова получают близкие векторы → модель обобщает: выучив «кошка сидит на …», она лучше предскажет «собака лежит на …».

теория вероятностей Проклятие размерности и почему эмбеддинги его снимают

Счётная n-грамма хранит вероятность для каждого возможного контекста из n слов. При словаре V число контекстов:

Vn  (для V=10⁵, n=4 — это 10²⁰)

Большинство контекстов в данных не встречаются ни разу → их вероятность ноль, обобщения нет. Нейросетевая LM заменяет таблицу на функцию:

P(wt = j | контекст) = softmax(Uh)j = eojΣk eok

Число параметров теперь ≈ V·d (эмбеддинги) плюс веса сети — линейно по V, а не экспоненциально. И главное: эмбеддинги разделяют статистическую силу между похожими словами — близкие векторы дают близкие предсказания, поэтому невиданное сочетание получает разумную вероятность.

NumPy Прямой проход нейроязыковой модели
import numpy as np

def neural_lm(ctx, E, W, b, U):
    x = E[ctx].reshape(-1)            # эмбеддинги n−1 слов, склеены
    h = np.tanh(W @ x + b)           # скрытый слой
    logits = U @ h                   # оценки по всему словарю
    p = np.exp(logits - logits.max())
    return p / p.sum()               # softmax → P(следующее слово)
«кошка» «сидит» «на» эмб.ℝᵈ tanh softmaxпо словарю P(wₜ)
Слова → эмбеддинги (общие для всех контекстов) → скрытый слой → softmax по словарю. Похожие слова — близкие векторы — близкие предсказания.
Аналогия. Счётная n-грамма — это огромный разговорник, где каждая фраза прописана буквально; не нашлось точной фразы — модель нема. Нейросетевая LM — это человек, понимающий смысл слов: услышав незнакомую комбинацию, он подставляет похожие по смыслу и угадывает продолжение. Эмбеддинги — это и есть «смысл», вынесенный в геометрию.

Почему это важно

Прямой интеллектуальный предок word2vec/GloVe (там эмбеддинги выделили в самоцель) и всех современных LLM: схема та же — токены → эмбеддинги → контекст → softmax, только контекст теперь строит Transformer, а не маленький MLP. Ограничение эпохи — дорого (большой softmax, слабое железо 2003-го).

Связи

→ ведёт к17. Word2Vec

Word2vec берёт побочный продукт этой модели — эмбеддинги — и делает их главной целью, выкинув дорогой скрытый слой ради скорости. Векторы слов из «детали языковой модели» превращаются в самостоятельный, повсеместно используемый инструмент.

→ ведёт к32. Transformer

Базовая схема LLM заложена здесь: представить слова векторами и предсказывать следующее через softmax. Transformer радикально усиливает «контекст» (self-attention вместо фиксированного окна из n−1 слов), но костяк — тот же.

↔ контраст10. SVM

Два взгляда на «как представлять данные»: SVM берёт фиксированное (ядровое) пространство признаков, заданное вручную; нейроязыковая модель учит представление (эмбеддинги) под задачу. Спор «фиксированные признаки vs выученные» — и здесь.

Вопросы пытливого ума

Откуда вообще берётся «смысл» в эмбеддингах, если модель лишь предсказывает следующее слово?

Из дистрибутивной гипотезы: «слово узнаётся по компании, в которой оно встречается». Чтобы хорошо предсказывать контекст, модель вынуждена ставить слова со схожим окружением рядом в пространстве — так геометрия начинает кодировать семантику. Никто не размечал «смысл»; он возникает как побочный эффект задачи предсказания.

Softmax по всему словарю — это же дорого. Как с этим борются?

Это главное узкое место. Лечат приближениями: иерархический softmax (дерево вместо плоского нормирования), negative sampling и noise-contrastive estimation (учить отличать настоящее слово от случайных, не нормируя по всему словарю — это и сделал word2vec), sampled softmax. Все они обходят суммирование по V словам.

Если идея 2003-го такая мощная, почему LLM-революция случилась только через ~17 лет?

Не хватало трёх вещей: данных (огромные корпуса), вычислений (GPU/TPU) и архитектуры контекста (Transformer вместо фиксированного окна). Бенжио заложил рецепт, но он масштабировался плохо на железе 2003-го. История DL вообще про то, как старые правильные идеи ждут данных и compute.

Что читать в оригинале

Читать ключевое — идею распределённого представления и архитектуру; это интеллектуальный предок эмбеддингов и LLM, и стоит увидеть его в исходном виде.