www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Предварительно обученные вложения или слой встраивания? - Дилемма

Дата публикации Jun 7, 2019

Когда вложения слов стали доступны почти десять лет назад, они навсегда изменили обработку естественного языка (NLP). Как Ронан Колоберт и соавт. в их знаменитом 2008Бумага JMLRговоря это, они заставили НЛП перестроиться «почти с нуля». Через несколько лет, в 2013 году, с выпускомМиколов и соавт. (2013)«sword2vecбиблиотека, они быстро стали доминирующим подходом для векторизации текстовых данных. Модели НЛП, которые уже были хорошо изучены на основе традиционных подходов, таких как LSI и TF-IDF, подвергались проверке на встраивание слов, и в большинстве случаев вложения слов выходили на первое место. Многие подходы встраивания были разработаны с тех пор. Кроме того, основные пакеты Deep Learning (DL) включают в себя слой внедрения, который изучает встраивания для конкретных задач.

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

Оцените слово по компании, которой оно располагает

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

«Вы должны знать слово по компании, которую оно хранит».- Джон Р. Ферт (доминирующая фигура в лингвистике 20-го века)

Лин (1998)) иллюстрирует эту концепцию словом Tezgüinoэто редкое собственное существительное, незнакомое многим. Тем не менее, становится легко сделать вывод, как только мы увидим это в контексте: «Бутылка Тezgüinoнаходится на столе. Tezgüino делает тебя пьяным. Другими словами, даже если вы не знаете значениеtezgüinoего контекст проясняет его значение.

Краткая история вложений в слова

Традиционно было предложено много статистических и основанных на правилах моделей, пытаясь смоделировать семантику распределения. Преимущественно, матрица совпадений была создана для всех слов, которые появились в корпусе, и затем эта матрица была спроецирована в гораздо меньшее пространство с использованием таких методов, как LSA. Подробное обсуждение традиционных моделей выходит за рамки данной статьи, однако оно может дать ценную информацию о семантике слов и фраз и основополагающих концепциях неконтролируемых векторов слов. Для связанной работы, см.Митчелл и Лапата (2008),Катрин Эрк (2010)), а такжеКац и Гизбрехт (2006).

Лишь в 2003 году идея изучения встраиваний слов под наблюдением была исследованаYoshua Bengio et al. (2003), В своей работе авторы представляют нейронную сеть, которая изучает функцию вероятности для последовательностей слов (основная цель языковой модели) и одновременно изучает представление распределения для каждого слова. Они вводят веса ввода в скрытый слой нейронной сети как вложения слов. Однако их модель вычислительно дорогая и далеко не практичная, в основном из-за выходного слоя Softmax. Задача модели состоит в том, чтобы изучить функцию, которая предсказывает хорошее распределение условных вероятностей с учетом наблюдаемой последовательности слов:

Архитектуру сети можно увидеть ниже:

Рисунок изBengio et al. 2003, Предлагаемая архитектура для изучения представлений слов.

гдеС (я)является представлением для i-го слова лексики. Выходной слой - что делает модель непрактичной, вычисляет условное распределение вероятностей по всему словарю для каждого слова:

гдеNсеть перед слоем Softmax. Эта проблема вычислительной сложности модели была решенаCollobert et al. (2008)которые представляют сверточную нейронную сеть, которая использует другую целевую функцию. В отличие отBengio et al. (2003)Их главная задача не в языковом моделировании, а в том, чтобы выучить хорошее вложение слов. Следовательно, они имеют больше свободы для достижения этой цели. Они извлекают выгоду из контекста до и после слова, для которого изучается представление. Хотя эта модель создает (первые) неконтролируемые вложения слов, которые включают в себя семантическую и синтаксическую информацию, она все еще является вычислительно дорогой. Из-за высоких вычислительных затрат предыдущих моделей, только в 2013 годуМиколов и др. (2013)представьте свою простую, но эффективную модель, которая популяризировала встраивание слов и начала проникать через НЛП.

Они предлагают две архитектуры для вычисления вложения слов: модели Continuous Bag-of-Words (CBOW) и Skip -gram (SG). Модель CBOW, где контекст (w_ {i-2}, w_ {i-1}, w_ {i + 1}, w_ {i + 2}) используется для прогнозирования целевого слова (w_i), показано на следующем рисунке:

Архитектура модели встраивания слов CBOW

Модель SG, с другой стороны, пытается предсказать контекст по заданному слову. Как видно выше, модель CBOWМиколов и соавт. (2013)имеет гораздо более простую архитектуру по сравнению с предыдущей работой, что привело к низким вычислительным затратам этой модели. Реализация этой модели (word2vec) способствовал широкому распространению экспериментов с встраиванием слов в различных областях НЛП. Эксперименты, которые показали использование встраивания слов, привели к улучшению в большинстве задач НЛП (Baroni et al. (2014),Миколов и соавт. (2013), а такжеЙездани и Попеску-Белис (2013)). В последние несколько лет было предложено много других подходов к встраиванию, таких как GloVe, ELMO иМультисмысловые вложения словсреди многих других моделей.

Итак ... Слой встраивания или Предварительно обученные вложения в слова?

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

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

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

Я изучаю влияние двух упомянутых вложений на выполнение двух семантических задач НЛП. то естьАнализ настроенийа такжеКлассификация вопросови обеспечивают сравнение между предварительно обученными вложениями слов и слоем внедрения.

Модельная архитектура

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

class CNN(nn.Module):
def __init__(self, one_hot_dim, embedding_dim, output_dim, kernel_size, stride_size):
super(CNN, self).__init__()
# only for the model with an embedding layer
self.embedding = nn.Embedding(one_hot_dim, embedding_dim)
self.maxpool1 = nn.MaxPool1d(kernel_size=kernel_size, stride=stride_size, padding=1)
self.conv1 = nn.Conv1d(embedding_dim, out_channels=embedding_dim, kernel_size=kernel_size, stride=stride_size, padding=1)
self.relu1 = nn.ReLU()

self.maxpool2 = nn.MaxPool1d(kernel_size=kernel_size, stride=stride_size, padding=1)
self.conv2 = nn.Conv1d(embedding_dim, out_channels=embedding_dim, kernel_size=kernel_size, stride=stride_size, padding=1)
self.relu2 = nn.ReLU()

self.fc1 = nn.Linear(in_features=size_after_conv, out_features=output_dim)

def forward(self, x):
# only for the model with an embedding layer
x = self.embedding(x)
x = x.transpose(0,1).transpose(1,2)

x = self.conv1(x)
x = self.relu1(x)
x = self.maxpool1(x)

x = self.conv2(x)
x = self.relu2(x)
x = self.maxpool2(x)

x = x.reshape(x.size(0), -1)
x = self.fc1(x)
return x

Hyper-параметры

Чтобы иметь возможность управлять только типами вложения, я фиксирую следующие гиперпараметры и выполняю эксперименты с точно такими же гиперпараметрами:

embedding length = 300
kernel size (Conv Layer 1 and 2) = 3
stride size (Conv Layer 1 and 2) = 2
fixed sequence length for sentiment analysis (IMDB data) = 500
fixed sequence length for question classification (TREC data) = 25

Данные

Анализ настроений: набор данных IMDB
Классификация вопросов: набор данных TREC

Предварительно обученные векторы

  1. Перчатка (glove.42B.300d): 300-мерные векторы, обученные на корпусе Common Crawl токена 42B
  2. fastText WIKI (вики-новости-300d-1М): 300-мерные векторы обучены на 16В жетоне Википедии 2017

оценка

Я проиллюстрирую свои выводы с точки зрения (i) потери обучения, (ii) матрицы путаницы, (iii) точности (макро-среднее значение), отзыва (макро-среднее значение) и оценки F1 для различных типов вложений.

Задача 1: Анализ настроений

Анализ настроений (также известный как определение полярности и анализ мнений) означает определение полярности или настроения данного текста. Чувства обычно определяются количественно с помощью положительных, отрицательных и нейтральных ярлыков. Я экспериментирую с набором данных IMDB изtorchtext.datasetsгде настроения представлены 0 и 1. Результаты в терминах потери обучения и матрицы путаницы для разных моделей представлены на следующих рисунках.

Слой встраивания

Матрица смешения и потери обучения для модели со слоем внедрения

Предварительно обученные вложения слов

Матрица смешения и потеря обучения для модели с предварительно обученными векторами IMDB
Матрица замешательства и потеря обучения для модели с предварительно обученными векторами перчаток
Матрица смешения и потери обучения для модели с предварительно обученными векторами WIKI

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

| Model            | Precision (Macro) | Recall(Macro) | F1    |
|------------------|-------------------|---------------|-------|
| Embedding Layer | 85.6% | 85.8% | 85.6% |
|------------------|-------------------|---------------|-------|
| IMDB vectors | 86.1% | 86.1% | 86.1% |
| Glove 4B vectors | 86.4% | 86.4% | 86.4% |
| FT WIKI vectors | 86.0% | 86.0% | 86.0% |

Задача 2: Классификация вопросов

Классификация вопросов - это задача назначения метки семантического класса для вопроса таким образом, чтобы облегчить поиск ответа на этот вопрос. Я использовал набор данных TREC изtorchtext.datasetsкоторый содержит вопросы из 6 классов TREC, т.е. СОКРАЩЕНИЕ, СУЩНОСТЬ, ОПИСАНИЕ, РАСПОЛОЖЕНИЕ и ЧИСЛЕННОЕ ЗНАЧЕНИЕ.

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

Слой встраивания

Матрица смешения и потери обучения для модели со слоем внедрения

Предварительно обученные вложения слов

Матрица смешения и потеря обучения для модели с предварительно обученными векторами TREC
Матрица замешательства и потеря обучения для модели с предварительно обученными векторами перчаток
Матрица смешения и потери обучения для модели с предварительно обученными векторами WIKI

Потеря обучения для модели на основе встраиваемого слоя и предварительно обученных моделей на основе встраивания затухает относительно быстро и без многих колебаний.Никаких существенных различий между тренировочными потерями не наблюдается.С другой стороны, общая точность, отзыв и оценка F1 улучшаются для всех моделей на основе предварительно обученных встраиваний, за исключением встраиваний, которые были обучены в наборе вопросов TREC. Это ожидаемо, поскольку TREC представляет собой небольшой набор данных с короткими вопросами, и, следовательно, векторы, обученные на этом наборе данных, предположительно не будут содержать много семантической информации. Для других предварительно обученных моделей на основе встраивания, таких как Glove 4B и fastText WIKI, производительность значительно улучшается для нескольких классов. См., Например, ABBR, где процент правильно классифицированных экземпляров увеличивается с 82% до 92-93%. Или LOC, где процент правильно классифицированных экземпляров увеличивается с 84% до 90-96%. Общая точность, отзыв и оценка F1 разных моделей представлены в следующей таблице.

| Model            | Precision (Macro) | Recall(Macro) | F1    |
|------------------|-------------------|---------------|-------|
| Embedding Layer | 87.2% | 83.2% | 84.8% |
|------------------|-------------------|---------------|-------|
| TREC vectors | 86.1% | 82.4% | 83.8% |
| Glove 4B vectors | 88.0% | 86.7% | 86.7% |
| FT WIKI vectors | 87.0% | 87.3% | 87.0% |

Брать уроки домой

Глядя на результаты задачи IMDB Sentiment Analysis,кажется, что предварительно обученные вложения слов приводят к более быстрому обучению и снижению конечных потерь при обучении.Можно интерпретировать, что модель может получать больше семантических сигналов из предварительно обученных вложений, чем из обучающих данных через уровень внедрения.

Из результатов задачи Классификации вопросов TREC видно, чтовекторы, обученные в небольшом корпусе, будут иметь худшую производительность, чем слой встраивания. Однако векторы, обученные в большом корпусе, значительно превосходят слой внедрения с точки зрения как точности, так и отзыва.

Последовательнодля обеих задач,точность и отзыв улучшаются, когда мы используем предварительно обученные вложения слов (обученные на достаточно большом корпусе), Однако для задачи «Анализ настроений» это улучшение было небольшим, тогда как для задачи «Классификация предложений» это улучшение было гораздо большим.

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

Заключительные заметки

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


Для больше таких сообщений, проверьтеomni: публикация для нас!

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map