"Машинное обучение"

Внимание: классификация документов

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

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

Однако решающее значение имеет понимание слов в порядке компонентов предложений a. Ой, позвольте мне попробовать еще раз. Однако является ли порядок одним из важнейших компонентов понимания предложений. Нет, это тоже неправильно. Я хотел сказать следующее: Однако порядок слов является важным компонентом в понимании предложений.. Эта идея привела к появлению повторяющихся алгоритмов, таких как LSTM и GRU, которые действительно используют порядок слов для прогнозирования. Здесь - хороший ресурс для более подробного изучения повторяющихся алгоритмов; Если кратко, то эти модели отслеживают состояние, которое обновляется от слова к слову. Это состояние можно рассматривать как память, принимая во внимание предыдущие идеи / концепции слов при обработке следующего слова.

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

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

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

Итак, как работает внимание? Одно дело взглянуть на данное предложение и сказать, какие слова важны. Однако эта модель, очевидно, бесполезна, если ее нельзя обобщать, поэтому ей нужно каким-то образом изучать свойства слов, а также то, как эти свойства взаимодействуют и какие взаимодействия приводят к значимости.

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

Шаг второй: отправьте каждое предложение встраиваемых векторов через ГРУ. У ГРУ будет скрытое состояние между каждым словом. Обычно для прогнозирования мы заботимся только о конечном состоянии, но для этой модели мы также хотим отслеживать каждое промежуточное состояние. Пусть h будет вектором, который представляет послеслово скрытого состояния i. Обратите внимание, что, хотя, вероятно, и не обязательно, я следовал бумаге при использовании двунаправленного ГРУ. Это означает, что модель пробегает предложение вперед и назад. Каждое слово i затем имеет скрытые состояния h ᶠ и h ᵇ, и мы просто объединяем эти два вектора в h и продолжаем.

Шаг третий: пропустите каждую из h через полностью связанный линейный слой, включая член смещения. В документе рекомендуется, чтобы выходной формат был размером 100; Я еще не исследовал эффективность настройки этого гиперпараметра, хотя думаю, что это может быть интересная область исследования. Для каждого элемента в результирующем векторе возьмите tanh. Назовите этот новый вектор u , снова соответствующий слову i.

Шаг четвертый: отправьте каждое из u через другой линейный слой, на этот раз без смещения. Этот линейный слой должен иметь скалярный вывод, поэтому теперь у нас есть одно скалярное значение, связанное с каждым словом i. Затем примените функцию softmax для каждого предложения; скаляры будут суммировать по одному для каждого предложения. Пусть скаляр для предложения i назовется αᵢ.

Шаг пятый: время почти наступило. Теперь у нас есть для каждого слова i в данном предложении вектор h ᵢ, и скаляр важности αᵢ. Здесь важно понимать, что эти векторы hᵢ отличаются от исходных вложений слов, поскольку они запоминают предложения как в прямом, так и в обратном направлении. Мы берем поэлементно взвешенную сумму для всех векторов в обзоре, называем этот вектор обзора s.

Шаг шестой: функция, применяемая к s, различается в зависимости от цели модели, но поскольку эта модель заинтересована в двоичной классификации документа, я применил последний линейный слой к вектору s , который возвращает единственное значение p, вероятность принадлежности к классу 1.

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

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

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

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