Встраивания: получение встраиваний

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

Снижение размерности

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

Например, для создания эмбеддингов слов часто используется анализ основных компонентов (PCA). Получив на входе множество элементов, например векторные представления для набора слов, PCA пытается найти тесно связанные измерения, которые можно объединить в одно.

Обучение модели эмбеддингов в составе нейронной сети

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

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

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

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

Рисунок 12. Нейронная сеть, обрабатывающая прямой код для блюда hot dog. Первым идет входной слой с пятью узлами, каждый из них помечен изображением самого блюда: borscht, hot dog, salad, ..., shawarma. Значения этих узлов [0, 1, 0, ..., 0], что соответствует прямому коду для блюда hot dog. Входной слой соединен со слоем эмбеддинга, состоящим из трех узлов со значениями 2,98, −0,75 и 0. Слой эмбеддинга соединен со скрытым слоем из пяти узлов, который соединен с выходным слоем из пяти узлов.
Рисунок 12. Прямой код блюда hot dog в качестве входа для глубокой нейронной сети. Слой эмбеддинга преобразует прямой код в трехмерный вектор [2.98, -0.75, 0].

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

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

В модели word2vec используются статические векторные представления, но слова могут иметь разные значения в зависимости от контекста. Например, "Да" без других слов рядом имеет одно значение, а в сочетании "Да нет" – совсем другое. "Звезда" может означать небесное тело, геометрическую фигуру, известного человека, морское животное или орденский знак.

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

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

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

Подробнее о контекстных эмбеддингах

  • В моделях ELMo статический эмбеддинг объединяется с эмбеддингами из других слоев, которые кодируют прочтение предложения в прямом и обратном направлении.
  • В моделях BERT скрывается часть предложения, поступающего на вход.
  • В трансформерах для оценки влияния контекста на значение отдельного слова используется слой самовнимания. Кроме того, в них к каждому ранее подобранному эмбеддингу для токена добавляется значение из соответствующего столбца матрицы позиционных эмбеддингов (см. позиционное кодирование). Процесс проходит поэлементно, и в результате получается входной эмбеддинг, который передается далее в модель для инференса. Такой входной эмбеддинг уникален для каждой уникальной текстовой последовательности и называется контекстным эмбеддингом.

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