12 февраля 2026 г. (изменено: 12 февраля 2026 г.)

Канал: @cherkashindev

1 066 0

Как научить машину понимать смысл слов

Я думаю все вы слышали про векторные базы данных. В прошлом посте обещал поделиться статьёй про то, как же слова и целые тексты превращаются в вектора.

«Привет! Я [0.44, -0.91, 0.66…]» или как научить машину понимать смысл слов

В машинном обучении есть базовое правило: модель умеет работать только с числами.
Поэтому любой объект — текст, картинку, звук — сначала нужно превратить в числовое представление. Только тогда модель сможет понять, что «груша» связана с «яблоком» куда больше, чем с «теплоходом»

Самый простой вариант для текста — 🔢 one hot encoding.

Мы берём словарь и каждому слову ставим в соответствие вектор, где одна позиция равна 1, а все остальные — 0.

Возьмём предложения:

  1. The movie was good.
  2. The movie was bad.
  3. The movide was awesome.

Кодировка на первой картинке.

Формально задача решена, но есть проблема: такие векторы ничего не говорят о смысле слов. Для модели слова «кот» и «собака» так же не похожи друг на друга, как «кот» и «кирпич».

Плюс векторы получаются «разреженными» — огромными и почти полностью заполненными нулями. Ну и, конечно, это потребует большого количества ресурсов для обработки.

👉 Следующий шаг — мешок слов и N-граммы.
Мы начинаем учитывать не отдельные слова, а их последовательности.

Кодировка на второй картинке.

Но N-граммы смотрят только на ограниченное число слов и строго по порядку. Поэтому они не улавливают более глубокие смысловые связи.

В реальности таких возможных N-грамм — тысячи, и большая часть значений всегда равна 0. То есть, проблема разреженных векторов полностью не уходит.

Чтобы модель работала лучше, ей нужно понимать семантику и контекст.
Здесь и появляются 🔡 word embeddings.

Эмбеддинг — это плотный числовой вектор фиксированной размерности, почти без нулей. Идея в том, что похожие по смыслу слова имеют похожие векторы, а направление в векторном пространстве несёт смысл.

В статье это объясняется на наглядном примере с животными.

  • Сначала берётся одно измерение — размер. Животные с похожими габаритами находятся рядом.
  • Затем добавляется второе измерение — хищность. В таком пространстве 🦁 «лев» и 🐯 «тигр» оказываются близко (крупные и опасные), 🐄 «корова» — отдельно (крупная, но безопасная), а 🐹 «хомяк» — совсем в другой области.

Когда слова представлены такими векторами, с ними можно выполнять математические операции:

V(Madrid) + V(Germany) − V(Spain) ≈ V(Berlin)

если мы возьмём слово «Мадрид», добавим «Германия» и вычтем «Испания», ближайшим полученным словом будет «Берлин». Это работает, потому что Мадрид — столица Испании. Когда мы убираем атрибуты, связанные с Испанией, и добавляем атрибуты, связанные с Германией, результирующий вектор тесно совпадает с Берлином, столицей Германии.

Сами эмбеддинги генерируются с помощью специально обученных моделей. Ну а про сам подход генерации лучше почитать непосредственно в стать. А на гифке можете посмотреть, как с помощью метода главных компонент визуализировать эмбеддинги.

👍 — если работал с эмбеддингами ❤️ — если интересно, но пока не довелось 👀 — если не твоя тема

19 👍 7 👀 4