Привет, Хабр!

В широком смысле, эмбеддинг - это процесс преобразования каких-либо данных (чаще всего текста, но могут быть и изображения, звуки и т.д.) в набор чисел, векторы, которые машина может не только хранить, но и с которыми она может работать. Звучит очень интересно. Казалось бы, наша речь - это так просто, все связано и понятно. Но как это объяснить машине?

В этой статье мы рассмотрим, что такое эмбеддинги и какие они бывают.

Проще говоря эмбеддинг - это способ преобразования чего-то абстрактного, например слов или изображений в набор чисел и векторов. Эти числа не случайны; они стараются отражают суть или семантику нашего исходного объекта.

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

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

Немного математической базы

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

Размерность вектора определяет, сколько координат используется для описания каждого вектора в пространстве. В эмбеддингах высокая размерность может означать более детализированное представление данных. Векторное пространство для текстовых эмбеддингов может иметь тысячи измерений.

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

Самый интуитивно понятный способ измерения расстояния - это Евклидово расстояние. В эмбеддингах расстояние вычисляется как квадратный корень из суммы квадратов разностей соответствующих компонентов двух векторов. Для двух векторов a и b, евклидово расстояние d определяется как:

 d(\mathbf{a}, \mathbf{b}) = \sqrt{\sum_{i}(a_i - b_i)^2}

Евклидово расстояние подходит для измерения абсолютных различий, но может быть менее эффективным в высокоразмерных пространствах из-за проклятия размерности.

Манхэттенское расстояние иногда более подходящее для определенных типов данных, это расстояние измеряется как сумма абсолютных разностей их компонентов. Оно определяется как:

 d(\mathbf{a}, \mathbf{b}) = \sum_{i}|a_i - b_i|

Сходство между векторами измеряет степень "похожести" между двумя векторами. В эмбеддингах это используется для определения степени семантической или контекстной близости между элементами.

Одна из наиболее популярных метрик в текстовых эмбеддингах это косинусное сходство. Косинусное сходство измеряет косинус угла между двумя векторами. Если угол между векторами мал, косинус приближается к 1, что указывает на высокое сходство. Математически оно выражается как:

 \text{similarity}(\mathbf{a}, \mathbf{b}) = \frac{\mathbf{a} \cdot \mathbf{b}}{|\mathbf{a}| |\mathbf{b}|}

где ⋅ обозначает скалярное произведение векторов, а ∥a∥ и ∥b∥ — их нормы.

Многомерные эмбеддинги могут быть сокращены до более низких размерностей с помощью техник PCA или t-SNE.

В общем виде, эмбеддинги делятся на:

Категория

тип

описание

Текстовые эмбеддинги

Word Embeddings

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

Текстовые эмбеддинги

Sentence Embeddings

Здесь уже идет дело о целых предложениях. Подобные модели создают векторные представления для целых предложений или даже абзацев, улавливая гораздо более тонкие нюансы языка.

Эмбеддинги изображений

CNN

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

Эмбеддинги изображений

Autoencoders

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

Эмбеддинги для других типов данных

Graph Embeddings

Применяются для работы с графовыми структурами (к примеру рекомендательные системы). Это способ представить узлы и связи графа в виде векторов.

Эмбеддинги для других типов данных

Sequence Embeddings

Используются для анализа последовательностей, например, во временных рядах или в музыке.

Основные алгоритмы

Word2Vec

Word2Vec использует нейронные сети для обучения векторных представлений слов из больших наборов текстовых данных. Существуют две основные архитектуры Word2Vec:

CBOW: предсказывает текущее слово на основе контекста (окружающих слов). Например, в предложении "Собака лает на ___", CBOW попытается угадать недостающее слово (например, "почтальона") на основе окружающих слов.

Skip-gram: работает наоборот по сравнению с CBOW. Использует текущее слово для предсказания окружающих его слов в предложении. Например, если взять слово "кошка", модель попытается предсказать слова, которые часто встречаются в окружении слова "кошка", такие как "мышь", "мяукает" и т.д.

Эти модели хороши в выявлении семантических отношений между словами.

Для примера работы с Word2Vec можно использовать библиотеку gensim

!pip install gensim
from gensim.models import Word2Vec

# список предложений, где каждое предложение - список слов
sentences = [
    ["кошка", "ловит", "мышь"],
    ["собака", "гоняется", "за", "кошкой"],
    ["кошка", "бежит", "от", "собаки"]
]

# Создание модели Word2Vec
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)

Word2Vec обучается на ваших текстовых данных

model.train(sentences, total_examples=model.corpus_count, epochs=10)

После обучения модели мы можем использовать полученные векторы слов или проводить различные виды семантических операций.

# Получение вектора слова
vector = model.wv['кошка']

# Поиск похожих слов
similar_words = model.wv.most_similar('кошка')

GloVe

GloVe создает векторы слов, анализируя, как часто пары слов встречаются вместе в большом текстовом корпусе. Идея заключается в том, что смысловые отношения между словами можно выразить в виде векторных различий. Например, векторы для "король" - "мужчина" + "женщина" должны быть близки к вектору для "королева".

GloVe стремится минимизировать разницу между произведением векторов слов и логарифмом их совместной встречаемости, позволяя модели улавливать различные типы отношений между словами, такие как синонимы, антонимы, контекстные отношения и т.д

Для примера работы GloVe, можно использовать предварительно обученные векторы или обучить свою модель на выбранном корпусе:

from gensim.scripts.glove2word2vec import glove2word2vec
from gensim.models import KeyedVectors

# Путь к файлу GloVe
glove_file = 'glove.6B.100d.txt'  # пример файла
word2vec_output_file = 'glove.6B.100d.word2vec'

# конвертация файла GloVe в формат, совместимый с gensim
glove2word2vec(glove_file, word2vec_output_file)

# Загрузка модели
model = KeyedVectors.load_word2vec_format(word2vec_output_file, binary=False)

После загрузки модели можно использовать векторы слов для различных задач.

# Получение вектора слова
vector = model['компьютер']

# Поиск похожих слов
similar_words = model.most_similar('компьютер')

Для работы с русскоязычными текстами понадобится найти или обучить GloVe-модель на русскоязычном корпусе, так как большинство предварительно обученных моделей GloVe предназначены для английского языка. Одна из таких - navec.


Эмбеддинги позволяют преобразовывать текстовую или категориальную информацию в числовой формат, делая её доступной для машины.

Больше практической информации вы можете получить в рамках онлайн-курсов. У моих коллег из OTUS, например, скоро пройдет бесплатный урок, на котором вы сможете изучить основные алгоритмы, основанные на матричных разложениях для рекомендательных систем. Изучите алгоритм SVD и ALS, а также примените их на практике. Регистрация доступна по ссылке.

Комментарии (0)