
Привет, Хабр!
В широком смысле, эмбеддинг - это процесс преобразования каких-либо данных (чаще всего текста, но могут быть и изображения, звуки и т.д.) в набор чисел, векторы, которые машина может не только хранить, но и с которыми она может работать. Звучит очень интересно. Казалось бы, наша речь - это так просто, все связано и понятно. Но как это объяснить машине?
В этой статье мы рассмотрим, что такое эмбеддинги и какие они бывают.
Проще говоря эмбеддинг - это способ преобразования чего-то абстрактного, например слов или изображений в набор чисел и векторов. Эти числа не случайны; они стараются отражают суть или семантику нашего исходного объекта.
В NLP, например, эмбеддинги слов используются для того, чтобы компьютер мог понять, что слова «кошка» и «котенок» связаны между собой ближе, чем, скажем, «кошка» и «окошко». Это достигается путем присвоения словам векторов, которые отражают их значение и контекстное использование в языке.
Эмбеддинги не ограничиваются только словами. В компьютерном зрении, например, можно использовать их для преобразования изображений в вектора, чтобы машина могла понять и различать изображения.
Немного математической базы
Векторные пространства — это математические структуры, состоящие из векторов. Векторы можно понимать как точки в некотором пространстве, которые обладают направлением и величиной. В эмбеддингах, каждый вектор представляет собой уникальное представление объекта, преобразованное в числовую форму.
Размерность вектора определяет, сколько координат используется для описания каждого вектора в пространстве. В эмбеддингах высокая размерность может означать более детализированное представление данных. Векторное пространство для текстовых эмбеддингов может иметь тысячи измерений.
Расстояние между векторами в эмбеддингах измеряется с помощью метрик, таких как Евклидово расстояние или косинусное сходство. Метрики позволяют оценить, насколько близко или далеко друг от друга находятся различные объекты в векторном пространстве, что является основой для многих алгоритмов машинного обучения, таких как классификация
Самый интуитивно понятный способ измерения расстояния - это Евклидово расстояние. В эмбеддингах расстояние вычисляется как квадратный корень из суммы квадратов разностей соответствующих компонентов двух векторов. Для двух векторов a и b, евклидово расстояние d определяется как:
Евклидово расстояние подходит для измерения абсолютных различий, но может быть менее эффективным в высокоразмерных пространствах из-за проклятия размерности.
Манхэттенское расстояние иногда более подходящее для определенных типов данных, это расстояние измеряется как сумма абсолютных разностей их компонентов. Оно определяется как:
Сходство между векторами измеряет степень "похожести" между двумя векторами. В эмбеддингах это используется для определения степени семантической или контекстной близости между элементами.
Одна из наиболее популярных метрик в текстовых эмбеддингах это косинусное сходство. Косинусное сходство измеряет косинус угла между двумя векторами. Если угол между векторами мал, косинус приближается к 1, что указывает на высокое сходство. Математически оно выражается как:
где ⋅ обозначает скалярное произведение векторов, а ∥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.
Эмбеддинги позволяют преобразовывать текстовую или категориальную информацию в числовой формат, делая её доступной для машины.
Хотите углубить свои знания в области машинного обучения? Мы предлагаем два курса, которые помогут систематизировать и расширить понимание этой темы.
«Специализация Machine Learning» — для изучения ключевых методов и алгоритмов машинного обучения, включая работу с данными, обучение моделей и оценку их качества. Вы получите практические навыки, необходимые для анализа и обработки данных.
Курс «Machine Learning. Professional» поможет углубиться в более сложные аспекты ML, включая оптимизацию моделей, работу с большими объемами данных и применение современных библиотек для машинного обучения.

