10 классных вещей, которые вы можете делать с эмбеддингами! [Часть 1]

10 классных вещей с эмбеддингами! [Часть 1]

Примените эти концепции для решения реальных проблем индустрии в глубинном обучении

Отойдя от классического машинного обучения (ML), эмбеддинги являются основой большинства применений глубокого обучения (DL). Понимание этого концепта позволяет выполнять гибкие задачи со свойственным пространством и переформулировать проблемы ML/DL, особенно с высокоразмерными данными в компьютерном зрении и обработке естественного языка.

Эмбеддинги оказывают заметное влияние на несколько областей применения в настоящее время, включая большие языковые модели (LLM). Чего не хватает в литературе среди этих великих, хотя и рассеянных концепций вокруг эмбеддингов, так это последовательного плана различных отраслевых приложений и того, как начать работу в этой сфере! Именно поэтому этот блог познакомит вас с различными способами использования эмбеддингов и применения их в реальных проблемах отрасли.

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

Интуитивное объяснение эмбеддингов

Эмбеддинги – это низкоразмерные, изучаемые непрерывные векторные представления дискретных переменных [1].

Мы можем разделить это определение и усвоить важные моменты:

  • меньшая размерность, чем у входных данных
  • сжатое представление данных
  • захват сложных нелинейных отношений, изучаемых моделью, как линейное представление
  • сокращение размерности путем сохранения соответствующей информации и отбрасывания шума
  • обычно извлекается из последних слоев нейронных сетей (непосредственно перед классификатором)

Давайте интуитивно поймем определение и истинный потенциал эмбеддингов на примере. Предположим, мы анализируем эффективность операторов колл-центра на основе анкет клиентов. Формы были представлены тысячами клиентов и содержат миллионы уникальных слов. Для выполнения любого вида текстового анализа наш набор входных параметров будет огромным и, вероятно, приведет к плохой производительности. Именно здесь начинают действовать эмбеддинги!

Вместо использования исходного набора входных параметров мы берем все уникальные слова и выражаем их в виде эмбеддингов. Таким образом, мы уменьшаем размерность и сокращаем набор входных признаков, скажем, до 9, что более удобно для модели. Визуализируя эмбеддинги для операторов, легко заметить, что операторы B и C получили схожую обратную связь от клиентов. Еще один пример можно найти здесь. [2]

Изображение от автора

Что мы можем делать с эмбеддингами?

В первой части серии мы рассмотрим следующие приложения эмбеддингов:

  • Использование текстовых эмбеддингов для поиска похожих текстов
  • Использование визуальных эмбеддингов для поиска похожих изображений
  • Использование разных типов эмбеддингов для поиска похожих элементов
  • Использование разных весов эмбеддингов для поиска похожих элементов
  • Размещение изображений и текстовых эмбеддингов в одном пространстве (мультимодальные)

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

I. Использование текстовых эмбеддингов для поиска похожих текстов

Текстовые эмбеддинги = представление текста (слов или предложений) в виде вещественных векторов в пространстве меньшей размерности.

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

Теперь предположим, что мы хотим узнать, насколько похожи или различны вышеприведенные предложения. Мы можем сделать это, используя текстовый энкодер. Здесь мы используем предобученную модель DistilBERT от Hugging Face для вычисления текстовых эмбеддингов и косинусную схожесть для вычисления сходства!

Сравнение векторных представлений текстов DistilBERT для разных текстов с использованием косинусной схожести

Мы наблюдаем, что тексты, содержащие похожие и совпадающие слова, дадут более высокий показатель схожести. С другой стороны, тексты, отличающиеся друг от друга по выбору слов, значению и контексту (в зависимости от модели!), приведут к более низкому показателю схожести, как показано ниже. Таким образом, векторные представления текста стремятся использовать семантическую близость слов для установления значимых отношений.

Прикладные области: поиск документов, поиск информации, анализ настроений, поисковые системы [3]

II. Использование визуальных представлений для поиска похожих изображений

Визуальные представления = представление изображений (то есть значений пикселей) в виде вещественных векторов в пространстве меньшей размерности.

Вместо текста мы хотим узнать, насколько визуально похожи два изображения. Мы можем сделать это, используя кодировщик изображений. Здесь мы используем предварительно обученную модель ResNet-18 для вычисления визуальных представлений. Вы можете загрузить изображения здесь [4].

Находя аналогии с текстом, векторные представления, изученные на изображениях, находят сходство на основе схожих визуальных особенностей. Например, визуальные представления могут научиться распознавать ухо, нос и усы кота, давая показатель 0.81. С другой стороны, у собаки есть другие визуальные особенности, отличные от кота, что приводит к более низкому показателю схожести 0.50. Обратите внимание, что может иметься некоторая предвзятость в зависимости от выбранных изображений, однако это общий основной принцип. Таким образом, визуальные представления стремятся использовать близость пикселей изображений для установления значимых отношений.

Показатели схожести между изображениями слева и справа

Прикладные области: рекомендательные системы, поиск изображений, поиск похожих элементов

III. Использование различных типов представлений для поиска похожих элементов

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

Давайте рассмотрим простой пример и разберемся в этом концепте вместе. Ниже у нас есть набор данных из пяти продуктов питания. Я сам создал атрибуты и сгенерировал цвета с помощью библиотеки Pillow (исследуйте скрипт здесь). Вы можете загрузить данные здесь (изображения продуктов от [5]). Для каждого элемента у нас есть 5 текстовых атрибутов и 2 визуальных атрибута.

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

Мы начинаем с создания одной текстовой функции с названием ‘TEXTUAL_ATTR’ путем простого объединения слов. Обратите внимание, что мы используем простой пример здесь. В реальных случаях использования нам нужно применять продвинутые методы обработки естественного языка для очистки текстовых данных перед конкатенацией.

Объединение отдельных текстовых атрибутов в один

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

Схожесть, используя только текстовые вложения 'TEXTUAL_ATTR'
Сходство только с использованием вложений 'PRODUCT_IMAGE'

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

Давайте посмотрим, что происходит, когда мы объединяем все вложения!

Прикладные области в реальном мире: рекомендательные системы, поиск замен

IV. Использование разных весов для вложений для поиска похожих товаров

Эта концепция основана на пункте III и является более гибким расширением. Рассмотрим 3 различных сценария:

  • Вы ищете замену тостера в Costco. Вам нужна такая же функциональность, как у вашего предыдущего тостера. В этом случае вам не важно, выглядит ли ваш тостер так же, как и старый, но вам важны функции, которые он предоставляет (т.е. текстовые функции). В этом случае вы захотите использовать только текстовые вложения
Изображение от автора
  • Я порвал свои любимые штаны и, потому что я так их люблю, я хочу замену, которая будет максимально близка к ним. Я готов пожертвовать некоторыми функциями, которыми обладали мои старые штаны, но мне важны эстетика и то, как они выглядели на мне. В этом сценарии мы можем установить больший вес на визуальные вложения и немного меньший вес на текстовые вложения.
  • Если у предоставленных данных есть определенные элементы фона, например, модель человека, мы рискуем изучить особенности модели человека вместо фактического продукта, который нас интересует. В приведенном ниже примере мы хотим изучить особенности баскетбола, а не модели, держащей его. В таких случаях, вместо использования сегментации изображений, мы просто можем установить меньший вес на изображения полного тела и больший на текстовые атрибуты, а также цвет продукта, чтобы получить нужные вложения.
Изображение от [6]

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

Прикладные области в реальном мире: снижение предвзятости, настраиваемые рекомендательные системы, настраиваемый поиск похожих товаров [7][8]

V. Размещение вложений изображений и текста в одном пространстве (мультимодальность)

До сих пор мы рассматривали текстовые и визуальные данные как полностью отдельные входы. Ближе всего мы подошли к комбинированию эффектов на этапе вывода в пункте III. Но что, если мы рассматривали текст и изображения как объекты? Как мы можем коллективно представить эти объекты?

Ответом является мультимодальность и CLIP (Контрастное предварительное обучение языка и изображений [9]). Если вы не уверены, что такое мультимодальность, это просто сочетание различных типов данных (текст, изображение, звук, числовые значения) для более точных прогнозов. Используя CLIP, мы можем представить объекты (в данном случае, текст или изображение) как числовые векторы (вложения), чтобы помочь проецировать их в одно вложенное пространство.

Истинная ценность мультимодальной природы CLIP заключается в том, что она переводит похожие концепции в тексте и изображениях в похожие векторы. Эти векторы затем располагаются близко друг к другу в зависимости от степени их сходства. Это означает, что если текст хорошо передает концепции изображения, он располагается ближе к этому изображению. Аналогично, если изображение хорошо описывается предложением, оно находится близко к этому предложению. В приведенном ниже примере текст “собака играет на пляже” дает похожее вложение на изображение собаки, играющей на пляже.

Подобные объекты (например, текст, изображения) кодируются близко друг к другу в векторном пространстве. GIF от автора и изображения от [10]

Как видно на иллюстрации выше, CLIP позволяет перемещаться по домену текста и изображения, объединяя семантику текста с визуальным содержанием изображения (изображение в текст, текст в изображение). Мы также можем оставаться в рамках конкретного домена, например, текст в текст или изображение в изображение. Это открывает возможности для мощных приложений, включая системы рекомендаций, автономные автомобили, классификацию документов и многое другое!

Давайте продемонстрируем пример текст в изображение с использованием CLIP от HuggingFace. Мы будем использовать изображения продуктов питания [5], как показано в пункте III. Идея состоит в том, чтобы переместиться от текста к изображению напрямую.

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

Мы видим некоторые интересные результаты в демонстрации выше! В наборе данных есть два изображения торта. По запросу “торт”, мы сначала получаем изображение с шоколадным тортом. Однако, когда я добавляю более описательных ключевых слов, например “красный бархат”, получаю кусок красного бархата. Хотя оба изображения в некотором смысле изображают торт, только одно из них является красным бархатным тортом, которого модель распознала. Аналогично, по запросу “рыба с картофелем” мы получаем тарелку с рыбой и картофелем, но только запрос “картофель” дает нам коробку с картошкой фри. Модель также способна различать картошку фри и чуррос, хотя они выглядят довольно похоже.

Теперь давайте сделаем пример изображение в тексте аналогичным образом. Здесь мы берем примеры [4] из пункта II, чтобы классифицировать, является ли изображение собакой или кошкой.

Для каждого изображения мы получаем вероятность совпадения текста с изображением. В случае с изображениями кошек, метка “кошка” имеет высокую вероятность. С другой стороны, изображение собаки классифицируется как “собака”.

Приложения в реальном мире: текст в изображение (поиск), изображение в изображение (сходство), изображение в текст (классификация)

Во второй части серии мы рассмотрим больше приложений, включая искусство и интересные визуализации. Следите за обновлениями!

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

Зубия – старший ученый по машинному обучению и работает над обнаружением продуктов, персонализацией и генеративным дизайном в моде. Она является наставником, инструктором и докладчиком по вопросам, связанным с компьютерным зрением, науке о данных, женщинам/женщинам цвета в STEM и карьере в технологиях.

Ссылки

[1]: Определение векторных представлений

[2]: Объяснение векторных представлений

[3]: Поисковая система Google с использованием текстового кодера BERT

[4]: Изображения из Dogs vs. Cats (Kaggle)

[5]: Изображения из Food Images (Food-101)

[6]: Фото Малика Скайдсгаарда на Unsplash

[7]: Комбинирование различных типов векторных представлений

[8]: Векторные представления для систем рекомендаций

[9]: CLIP от OpenAI

[10]: Изображения от Оскара Саттона, Хоссейна Азарбада на Unsplash

[11]: Блог CLIP