От «яблока» до «королевы»: как нейросети учатся понимать смысл слов через эмбеддинги. nlp.. nlp. Word2vec.. nlp. Word2vec. векторные представления.. nlp. Word2vec. векторные представления. косинусное сходство.. nlp. Word2vec. векторные представления. косинусное сходство. Машинное обучение.. nlp. Word2vec. векторные представления. косинусное сходство. Машинное обучение. нейросети.. nlp. Word2vec. векторные представления. косинусное сходство. Машинное обучение. нейросети. нейросети python.. nlp. Word2vec. векторные представления. косинусное сходство. Машинное обучение. нейросети. нейросети python. нейросеть.. nlp. Word2vec. векторные представления. косинусное сходство. Машинное обучение. нейросети. нейросети python. нейросеть. обработка естественного языка.. nlp. Word2vec. векторные представления. косинусное сходство. Машинное обучение. нейросети. нейросети python. нейросеть. обработка естественного языка. эмбеддинги.
От «яблока» до «королевы»: как нейросети учатся понимать смысл слов через эмбеддинги - 1

И так, разбираем нейросети по винтикам. Мы уже разобрали градиентный спуск и обратное распространение ошибки. Сегодня погружаемся в самую сердцевину языковых моделей- векторные представления слов.

Представьте, что вы объясняете ребёнку, что такое «яблоко». Вы покажете картинку, дадите попробовать, расскажете, что оно круглое, сладкое, растёт на дереве, а теперь попробуйте объяснить это нейросети. Она не видит, не пробует, но она понимает только числа.

Как же тогда заставить машину понять, что «яблоко» ближе к «груше», чем к «трактору»? Ответ на самом деле кроется в элегантном приёме, который произвёл революцию в NLP- векторных представлениях слов, или эмбеддингах.

Проблема «слепого» кодирования: почему one-hot не работает

Самый наивный подход- это пронумеровать все слова в словаре и закодировать каждое вектором из нулей и одной единицы:

яблоко → [0, 0, 1, 0, 0, ..., 0]  (10 000 элементов)
груша  → [0, 1, 0, 0, 0, ..., 0]
трактор→ [1, 0, 0, 0, 0, ..., 0]
От «яблока» до «королевы»: как нейросети учатся понимать смысл слов через эмбеддинги - 2

Это one-hot encoding– надёжный, но семантически мёртвый формат. Для нейросети векторы «яблоко» и «груша» так же различны, как «яблоко» и «трактор»: их скалярное произведение равно нулю, векторы перпендикулярны. Смысл утерян.

Один философский момент: машина не «думает», она оперирует геометрией, чтобы передать смысл- нужно построить пространство, где близость векторов = близость значений.

Эмбеддинги: когда слова становятся точками в пространстве смыслов

Вместо разреженного вектора длиной 10 000 мы используем плотный вектор из 50–512 чисел (обычно 300). Каждое число- это координата в многомерном пространстве:

яблоко → [0.24, -1.31, 0.87, ..., 0.05]  (300 чисел)
груша  → [0.22, -1.29, 0.91, ..., 0.07]
трактор→ [-0.78, 2.14, -1.03, ..., -0.92]
От «яблока» до «королевы»: как нейросети учатся понимать смысл слов через эмбеддинги - 3

Что происходит? Слова с похожим контекстом использования («яблоко» и «груша» часто встречаются рядом со словами «фрукт», «сладкий», «сад») сдвигаются ближе друг к другу в этом пространстве, а слова из разных семантических полей- расходятся.

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

Магия векторной арифметики: король − мужчина + женщина = королева

Самый знаменитый эксперимент с эмбеддингами- это операции над смыслом:

вектор("король") − вектор("мужчина") + вектор("женщина") ≈ вектор("королева")
От «яблока» до «королевы»: как нейросети учатся понимать смысл слов через эмбеддинги - 4

Как это работает? Вектор «мужчина» задаёт направление гендерного признака. Вычитая его из «короля», мы получаем «абстрактного правителя». Добавляя «женщину», мы возвращаем гендер, но в ином полюсе. Результат попадает в окрестность слова «королева».

Это следствие того, что эмбеддинги улавливают регулярные паттерны в языке. Аналогичные операции работают для:

Париж − Франция + Германия ≈ Берлин

Москва − Россия + Италия ≈ Рим

Как измерить «близость» векторов: косинусное сходство против линейки

В 300-мерном пространстве евклидово расстояние («линейка») обманчиво: векторы могут быть длинными, но направлены в разные стороны. Поэтому в NLP используют косинусное сходство:

text{similarity}(A, B)=frac{A cdot B}{|A| cdot |B|}

1.0– векторы совпадают по направлению («яблоко» vs «фрукт»)

0.0– перпендикулярны («яблоко» vs «трактор»)

-1.0– противоположны («хороший» vs «плохой»)

Именно косинусное сходство лежит в основе поиска по смыслу, кластеризации текстов и работы рекомендательных систем.

Как обучать эмбеддинги: за кулисами Word2Vec

Эмбеддинги это обучаемые параметры нейросети. Рассмотрим упрощённую схему Word2Vec (архитектура Skip-gram):

  1. На вход подаётся слово в one-hot кодировке.

  2. Оно умножается на матрицу весов размером (словарь × 300) – это и есть таблица эмбеддингов.

  3. Полученный вектор проходит через нейросеть, которая предсказывает слова из контекста.

  4. При ошибке градиент распространяется назад- и обновляются строки матрицы, соответствующие словам.

В результате слова, часто встречающиеся в похожих контекстах («кот» и «собака» → «пушистый», «лапы», «мяу/гав»), сближаются в векторном пространстве.

Оптимизация на практике: современные фреймворки (PyTorch, TensorFlow) не умножают one-hot вектор на матрицу, тк это неэффективно. Вместо этого используется индекс слова для прямого извлечения строки из матрицы эмбеддингов- операция O(1).

# PyTorch: как это выглядит в коде
import torch
import torch.nn as nn

vocab_size = 10000
embedding_dim = 300

embeddings = nn.Embedding(vocab_size, embedding_dim)
word_index = torch.tensor([42])  # индекс слова "яблоко"

vector = embeddings(word_index)  # сразу получаем 300-мерный вектор
print(vector.shape)  # torch.Size([1, 300])
От «яблока» до «королевы»: как нейросети учатся понимать смысл слов через эмбеддинги - 6

Почему мы говорим об этом сегодня

Эмбеддинги- это не исторический курьёз. Они- фундамент всего современного NLP:

В трансформерах (BERT, GPT) эмбеддинги слов дополняются позиционными и сегментными.

В мультимодальных моделях (CLIP) текстовые и визуальные эмбеддинги проецируются в единое пространство, поэтому поиск «красная собака» находит нужные картинки.

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

Что дальше?

Эмбеддинги решают задачу «как подать слово в сеть», но как обрабатывать последовательности? Как учесть порядок слов и долгосрочные зависимости? Ответ на самом деле в архитектурах, которые оперируют этими векторами: рекуррентных сетях, механизме внимания и, конечно, трансформерах.

Автор: Nikta3

Источник

Rambler's Top100