Пределы классики: почему счётчиков слов мало

Классические методы довели нас далеко, но у них есть стеклянный потолок; этот урок честно очерчивает их границы и готовит почву для эмбеддингов.

Семантический разрыв — неспособность счётных моделей понять, что разные слова могут означать близкие вещи, а одно слово — разные вещи.

Что мы умеем после классики

К этому моменту мы научились многому без единой нейросети: превращать текст в векторы (bag-of-words, TF-IDF), мерить похожесть (косинус), классифицировать (наивный байес), предсказывать слова (n-граммы). Это рабочие инструменты, которые до сих пор применяются. Но у всех них общий фундаментальный изъян.

Изъян 1: слова — это просто индексы

В bag-of-words «кот», «кошка» и «котёнок» — три разных, никак не связанных измерения. Модель не знает, что они близки. Покажем это: косинус между «кот» и «кошка» в one-hot представлении равен нулю — как у совершенно несвязанных слов.

vocab = ["кот", "кошка", "молоток"]

def one_hot(word):
    return [1 if w == word else 0 for w in vocab]

def cosine(a, b):
    dot = sum(x * y for x, y in zip(a, b))
    import math
    na = math.sqrt(sum(x * x for x in a))
    nb = math.sqrt(sum(y * y for y in b))
    return dot / (na * nb) if na and nb else 0.0

print("cos(кот, кошка)  =", cosine(one_hot("кот"), one_hot("кошка")))
print("cos(кот, молоток)=", cosine(one_hot("кот"), one_hot("молоток")))

Вывод:

cos(кот, кошка)  = 0.0
cos(кот, молоток)= 0.0

Вот в чём беда: для классики «кот» одинаково далёк и от «кошки», и от «молотка». Близость по смыслу полностью утеряна. А ведь именно смысловая близость — то, чего мы хотим от понимания языка.

Изъян 2: разрежённость и размерность

Словарь реального корпуса — десятки и сотни тысяч слов. Каждый документ — вектор такой длины, почти весь из нулей. Это дорого по памяти и плохо для многих алгоритмов («проклятие размерности»). С n-граммами всё ещё хуже — размерность взрывается.

Изъян 3: слабый и короткий контекст

N-граммная модель видит 1-2 предыдущих слова. Она никогда не свяжет начало и конец длинного предложения, не разрешит «он/она» из соседнего абзаца. Контекст в классике либо отсутствует (мешок слов), либо предельно короток (n-граммы).

Изъян 4: незнакомые слова и формы

Новое слово или редкая форма — это новое измерение, про которое модель ничего не знает. Лемматизация помогает лишь отчасти и зависит от языка.

Что напрашивается

Хочется, чтобы у слова было плотное представление (не десятки тысяч нулей, а, скажем, 300 осмысленных чисел), в котором близкие по смыслу слова были близки геометрически. Тогда «кот» и «кошка» окажутся рядом, а арифметика над словами станет осмысленной. Это и есть идея эмбеддингов — следующий раздел.

А чтобы по-настоящему учитывать длинный контекст и порядок, понадобятся нейросети для последовательностей и механизм внимания — это разделы 5 и 6. Классика — фундамент, на котором всё это строится, но потолок у неё есть, и мы его достигли.

Сравнительная таблица

СвойствоКлассика (BoW/TF-IDF)Чего хочется
Близость слов по смыслунет«кот» ≈ «кошка»
Размер вектора слова= размер словаря (десятки тысяч)плотный, ~300
Контекстнет или 1-2 словадлинный, гибкий

Итог

  • Классика мощна, но слова в ней — несвязанные индексы без смысла.
  • Векторы огромны и разрежены; контекст короткий или отсутствует.
  • Хочется плотных представлений, где близкие по смыслу слова близки геометрически.
  • Это мотивирует эмбеддинги (раздел 4) и нейросети с вниманием (разделы 5-6).
Проверьте себя
1. Почему в one-hot / bag-of-words представлении косинус между «кот» и «кошка» равен нулю?
AПотому что слова приведены к нижнему регистру
BПотому что каждое слово — отдельное независимое измерение без понятия близости
CПотому что одно из слов — стоп-слово
DПотому что у них разная длина
2. Какое главное свойство хочется получить от эмбеддингов в сравнении с классикой?
AЧтобы векторы стали ещё больше
BЧтобы близкие по смыслу слова были близки геометрически, а вектор был плотным
CЧтобы полностью отказаться от обучения на данных
DЧтобы слова перестали нумероваться
3. Какой недостаток классики связан с контекстом?
AКлассика учитывает слишком длинный контекст
BКонтекст отсутствует (мешок слов) или ограничен 1-2 словами (n-граммы)
CКонтекст всегда переводится на английский
DКонтекст требует видеокарты
Поддержать проект