Создание встраивания пользовательских слов с помощью 2D-визуализаций t-SNE и повторное обучение векторов перчаток поверх собственных данных с помощью кода

Шаги:

  1. Введение
  2. Тренируем собственное встраивание слов (код)
  3. Фразы (биграммы)
  4. t-SNE визуализации в 2D
  5. Восстановить векторы перчаток поверх моих собственных данных

Введение:

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

Word2Vec - один из самых популярных методов изучения встраивания слов с помощью неглубокой нейронной сети. Его разработал Томас Миколов в 2013 году в Google.

Поигравшись с ПЕРЧАТКОЙ, вы быстро обнаружите, что определенные слова в ваших обучающих данных отсутствуют в ее словаре. Обычно они заменяются нулевым вектором той же формы, что по сути означает, что вы «жертвуете» словом в качестве входной функции, что потенциально может быть важно для правильного прогнозирования. Другой способ справиться с этим - обучить ваши собственные вложения слов, используя ваши обучающие данные, чтобы можно было лучше представить семантические отношения вашего собственного обучающего корпуса.

зачем нам word2vec?



Word2Vec - это метод построения встраивания слов. Его можно получить двумя способами (оба с использованием нейронных сетей): Skip Gram и Common Bag Of Words (CBOW). Подробнее читайте в разделе 10 статьи ниже.







Кто победит?

У обоих есть свои преимущества и недостатки. По словам Миколова, Skip Gram хорошо работает с небольшим объемом данных и хорошо отображает редкие слова.

С другой стороны, CBOW быстрее и лучше отображает более частые слова.

Создадим собственное вложение слов (код):

Чтение доноров Выберите текстовые данные и очистите их для встраивания

Word2vec - это самоконтролируемый метод (ну, вроде как неконтролируемый, но не неконтролируемый, поскольку он предоставляет свои собственные ярлыки. Более подробное объяснение можно найти в этой ветке Quora. ), поэтому мы можем в полной мере использовать весь набор данных (включая тестовые данные), чтобы получить более полное представление о встраивании слов.

Фразы (биграммы):

Мы используем пакет Gensim Phrases для автоматического определения распространенных фраз (биграмм) из списка предложений. Https://radimrehurek.com/gensim/models/phrases.html

Основная причина, по которой мы это делаем, - ловить такие слова, как «mr_burns» или «bart_simpson»!

Параметры фраз:

  • предложения (итерация списка str, необязательно) - итерируемые предложения могут быть просто списком, но для больших корпусов рассмотрите генератор, который передает предложения прямо с диска / сети. Примеры см. в BrownCorpus, Text8Corpus или LineSentence.
  • min_count (float, необязательно) - игнорировать все слова и биграммы с общим собранным счетчиком ниже этого значения.
  • порог (float, необязательно) - представляет пороговое значение оценки для формирования фраз (чем выше, тем меньше фраз). Фраза из слов a, за которой следует b, принимается, если оценка фразы превышает пороговое значение. Сильно зависит от конкретной функции оценки, см. Параметр оценки.
  • max_vocab_size (int, необязательно) - максимальный размер (количество токенов) словаря. Используется для управления сокращением менее распространенных слов, чтобы держать память под контролем. По умолчанию для 40 МБ требуется около 3,6 ГБ ОЗУ. Увеличивайте / уменьшайте max_vocab_size в зависимости от того, сколько у вас доступной памяти.
  • разделитель (str, необязательно) - связующий символ, используемый для объединения токенов словосочетания.
  • оценка ({‘default’, ‘npmi’, function}, optional) -
  • Укажите, как оцениваются потенциальные фразы. оценка может быть установлена ​​либо строкой, которая ссылается на встроенную функцию оценки, либо функцией с ожидаемыми именами параметров. Две встроенные функции оценки доступны при установке оценки в строку:
  • connector_words (набор str, необязательно) - набор слов, которые могут быть включены во фразу, не влияя на ее оценку. Ни одна фраза не может начинаться или заканчиваться соединительным словом; фраза может содержать любое количество соединительных слов посередине.

Давайте проверим эффективность лемматизации, удаления стоп-слов и добавления биграмм.

Обучение модели

Мы используем Gensim-реализацию word2vec: https://radimrehurek.com/gensim/models/word2vec.html

Параметры:

  • min_count = int - игнорирует все слова с общей абсолютной частотой ниже этой - (2, 100)
  • window = int - Максимальное расстояние между текущим и предполагаемым словом в предложении. Например. window слов слева и window слов слева от нашей цели - (2, 10)
  • size = int - Размерность векторов признаков. - (50, 300)
  • sample = float - Порог для настройки того, какие из наиболее часто встречающихся слов будут случайным образом субдискретизированы. Очень влиятельный. - (0, 1e-5)
  • alpha = float - Начальная скорость обучения - (0,01, 0,05)
  • min_alpha = float - Скорость обучения будет линейно снижаться до min_alpha по мере обучения. Чтобы установить это: альфа - (мин_альфа * эпох) ~ 0.00
  • negative = int - Если ›0, будет использоваться отрицательная выборка, int для отрицательного указывает, сколько« шумовых слов »следует заглушить. Если установлено значение 0, отрицательная выборка не используется. - (5, 20)
  • workers = int - Используйте это множество рабочих потоков для обучения модели (= более быстрое обучение на многоядерных машинах)

Word2Vec()

ШАГ 1 . Инициализация Word2Vec ():

На этом первом шаге я настроил параметры модели один за другим.
Я не указываю параметр sentences и поэтому намеренно оставляю модель неинициализированной.

ШАГ 2. Создание словарного запаса и обучение модели:

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

Изучение модели

Наибольшее сходство и сходство:

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

Визуализации t-SNE:

t-SNE - это алгоритм нелинейного уменьшения размерности, который пытается представить данные высокой размерности и лежащие в основе отношения между векторами в пространстве меньшей размерности.

Наша цель в этом разделе - построить наши 300-мерные векторы в двухмерных графиках и посмотреть, сможем ли мы выявить интересные закономерности.
Для этого мы собираемся использовать реализацию t-SNE из scikit-learn.

Чтобы сделать визуализации более релевантными, мы рассмотрим отношения между словом запроса (выделено ** красным **), его наиболее похожими словами в модели (** синим **) и другими словами из словаря (в **зеленый**).

Это позволит сравнить, где векторное представление Гомера, его 10 наиболее похожих слов из модели, а также 8 случайных слов находятся на 2D-графике.

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

Как переобучить «Векторы перчаток» поверх моих собственных данных?

Предположим, у вас есть набор данных (скажем, mydata.txt), в котором есть новые слова, которых нет в существующей Glove. Итак, как переобучить перчатку, чтобы существующая предварительно обученная перчатка теперь должна включать новые слова в корпусе mydata.txt.

  • Создайте новый экземпляр модели GloVe с old_words и new_words в качестве словаря.
  • Замените исходные векторы / смещения old_words на те, которые у вас уже есть.
  • Обучите эту модель на mydata.txt.

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

========= Спасибо ================

Ссылка:

Миколов, Т., Чен, К., Коррадо, Г.С., и Дин, Дж. (2013). Эффективное оценивание представлений слов в векторном пространстве. CoRR, абс. / 1301,3781.

Https://www.kaggle.com/chewzy/tutorial-how-to-train-your-custom-word-embedding

Https://datascience.stackexchange.com/questions/33792/how-to-retrain-glove-vectors-on-top-of-my-own-data