
Привет, Хабр!
В широком смысле, эмбеддинг — это процесс преобразования каких-либо данных (чаще всего текста, но могут быть и изображения, звуки и т.д.) в набор чисел, векторы, которые машина может не только хранить, но и с которыми она может работать. Звучит очень интересно. Казалось бы, наша речь — это так просто, все связано и понятно. Но как это объяснить машине?
В этой статье мы рассмотрим, что такое эмбеддинги и какие они бывают.
Проще говоря эмбеддинг — это способ преобразования чего-то абстрактного, например слов или изображений в набор чисел и векторов. Эти числа не случайны; они стараются отражают суть или семантику нашего исходного объекта.
В
Евклидово расстояние подходит для измерения абсолютных различий, но может быть менее эффективным в высокоразмерных пространствах из-за проклятия размерности.
Манхэттенское расстояние иногда более подходящее для определенных типов данных, это расстояние измеряется как сумма абсолютных разностей их компонентов. Оно определяется как:
Сходство между векторами измеряет степень «похожести» между двумя векторами. В эмбеддингах это используется для определения степени семантической или контекстной близости между элементами.
Одна из наиболее популярных метрик в текстовых эмбеддингах это косинусное сходство. Косинусное сходство измеряет косинус угла между двумя векторами. Если угол между векторами мал, косинус приближается к 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.
Эмбеддинги позволяют преобразовывать текстовую или категориальную информацию в числовой формат, делая её доступной для машины.
Больше практической информации вы можете получить в рамках онлайн-курсов. У моих коллег из OTUS, например, скоро пройдет бесплатный урок, на котором вы сможете изучить основные алгоритмы, основанные на матричных разложениях для рекомендательных систем. Изучите алгоритм SVD и ALS, а также примените их на практике. Регистрация доступна по ссылке.
ссылка на оригинал статьи https://habr.com/ru/articles/787116/
Добавить комментарий