Эмбеддинги для начинающих

от автора

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

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

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

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

В

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

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

 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, а также примените их на практике. Регистрация доступна по ссылке.


ссылка на оригинал статьи https://habr.com/ru/articles/787116/