В этой истории мы визуализируем векторы встраивания слов, чтобы понять отношения между словами, описываемыми вложениями. Эта история посвящена word2vec [1] и BERT [2]. Чтобы понять вложения, я предлагаю прочитать другое введение (например, это), поскольку эта история не ставит своей целью их описание.

Эта история - часть моего пути к разработке нейронного машинного перевода (NMT) с использованием контекстуализированных векторов встраивания BERT. Предложения приветствуются!

Вложения слов

Вложения слов - это модели для создания удобных для компьютера числовых векторных представлений слов. Word2vec производит 300 чисел с плавающей запятой от 0 до 1 для каждого слова. Для компьютера это может быть более понятно, а для человека - наоборот.

На следующем изображении показаны пиксели в градациях серого с числовым значением 300 в матрице 5x60. Глядя на изображение, мы можем наблюдать не так много вещей.

Мы можем утверждать, что более светлое значение 42-го столбца похоже на все слова, связанные с людьми, и совершенно другое значение в слове яблоко.

Кроме того, queen-woman+man = king - это то, что компьютер может понять. Ближайшее слово в словаре для queen-woman+man - это king, и это считается одной из важных особенностей вложения слов. Но это трудно увидеть.

Вложение проекции

Основная идея внедрения проекции - уменьшить размерность векторов представления до 2D или 3D, чтобы их можно было визуализировать. Математика, лежащая в основе этого, называется линейной проекцией: если у нас есть n-мерный вектор x, и нам нужна m-мерная проекция (m ‹n) y, нам нужно чтобы найти m * n-матрицу A с рангом m и вычислить y = A x.

Давайте сосредоточимся на 2D! Если нам нужна проекция, в которой одно слово переходит в точку (1,0), а другое - в точку (0,1), мы хотим решить линейное уравнение I = AX, где I - идентичная матрица двух размеров, A - это матрица проекции, а матрица X содержит векторы, которые мы хотим в основе, в качестве столбцов.

Если матрица A является квадратной матрицей, это обратная матрица X, и проблема может быть легко решена с помощью исключения Гаусса. Здесь мы хотим проецировать большие векторы в 2D-подпространства, поэтому это не квадратная матрица (2x300 для word2vec и 2x768 с использованием базы BERT). Здесь то, что мы хотим, называется левой обратной матрицей. Однако мы будем использовать псевдообратное преобразование или обратное преобразование Мура-Пенроуза, поскольку оно реализовано в Numpy и генерирует матрицу, примерно близкую к идентичности (numpy.linalg.pinv).

Хорошо. Давайте код! У нас есть список слов: [‘man’, ‘woman’, ‘rich’, ‘poor’, ‘queen’, ‘king’, ‘fisherman’, ‘teacher’, ‘actress’, ‘actor’], и нам нужно двумерное подпространство, где линия мужчина-женщина является одной из осей, а линия богатых-бедных - другой. Для этого мы спроецируем man-woman на (1,0) и rich-poor на (0,1), а после проецирования сдвинем точки, чтобы они соответствовали осям.

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

Чтобы увидеть более сложные проекции слов, я могу порекомендовать TensorFlow Embedding Projector.

Прогноз предложения

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

Идея этой визуализации заключается в том, что каждое предложение в BERT начинается с токена [CLS] и заканчивается токеном [SEP], поэтому, проецируя предложения, (1,0) - это токен [CLS], а (0,1) - токен [SEP], мы может иллюстрировать предложения в двумерном подпространстве, а вложения нормализованы таким образом, что все они начинаются с (1,0) и заканчиваются (0,1).

[CLS] This is a sentence example. [SEP]

Математика здесь такая же, как и раньше. Мы используем предварительно обученную базу BERT bert_12_768_12_book_corpus_wiki_en_uncased.

Чтобы продемонстрировать порядок расположения жетонов, давайте соединим точки стрелками! Мы можем заметить, что первый токен «the» ближе к стартовому токену, а последний токен «.» ближе к конечному токену, но остальные находятся в относительно небольшая территория.

Давайте заменим в предложении слово «небо» на «море»! Обозначены точки неба и моря. Я хочу отметить, что порядок точек в основной области изменен (попробуйте коды, указанные в конце истории, для лучшего разрешения). Хотя в морском предложении нет крестика со стрелками, порядок неба выглядит совершенно случайным.

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

По сравнению с временами, знак препинания в конце предложения сильнее влияет на вложения.

Как мы упоминали ранее, вложения BERT зависят от контекста. Чтобы проиллюстрировать это, в следующем примере показаны сложные предложения со словом Mexico. Пункты Мексики помечены.

В предыдущем примере мы видим, что предложение «Это тоже в Мексике» несколько отличается от других предложений, которые мы видели до сих пор. Это в основном в отрицательной области 2D-пространства. Другими словами, это далеко от жетона [CLS].

Чтобы догадаться, почему это произошло, нам нужно немного взглянуть на данные обучения BERT. BERT был обучен с использованием двух неконтролируемых задач, одна из которых - моделирование замаскированного языка (Masked LM), а другая - предсказание следующего предложения (NSP). Во второй задаче пары предложений обучаются с помощью разделителя, например:
[CLS] This is the first sentence. [SEP] This is the second one. [SEP]

Как мы видим здесь, второе предложение начинается с токена [SEP] вместо токена [CLS]. Я думаю, что в этом причина наблюдаемой нестабильности. Другими словами, предложения, являющиеся реакциями в диалоге, могут быть дальше от маркера [CLS]. Посмотрим, сможем ли мы подтвердить этот тезис другими примерами!

Мы также можем поймать некоторые точки в областях y ‹0, но это менее заметно. Я думаю, что наблюдение за этими специальными предложениями показывает потенциал для дальнейшей работы.

Наконец, давайте проверим несколько неправильных предложений! Мы видим, что эти не-предложения также пытаются вписаться в обычную область точек.

Резюме

В этой истории мы обсудили метод визуализации встраивания слов и обсудили идею новым способом, позволяющим использовать ее в визуализации предложений.

Все коды доступны в Google Colab.

использованная литература

[1] Миколов, Т., Чен, К., Коррадо, Г., и Дин, Дж. (2013). Эффективная оценка представлений слов в векторном пространстве. Препринт arXiv arXiv: 1301.3781.

[2] Девлин, Дж., Чанг, М. В., Ли, К., и Тутанова, К. (2018). Берт: Предварительная подготовка глубоких двунаправленных трансформеров для понимания языка. Препринт arXiv arXiv: 1810.04805.

Изучите NMT с историями BERT

  1. BLEU-BERT-y: Сравнение оценок предложений
  2. Визуализация встраиваемых отношений (word2vec, BERT)
  3. Машинный перевод: краткий обзор
  4. Определение правильного значения слов с помощью BERT
  5. Машинный перевод: сравните с SOTA
  6. Простой BERT с использованием TensorFlow 2.0