Алгоритм анализа настроений от принципа до полного решения реального боя PaddlePaddle

NLP

При обработке естественного языка анализ настроений обычно относится к оценке эмоционального состояния, выраженного фрагментом текста. Среди них фрагмент текста может быть предложением, абзацем или документом. Эмоциональные состояния могут быть двух типов, например (положительные, отрицательные), (радостные, грустные), а также трех типов, например (положительные, отрицательные, нейтральные) и так далее. Сценарии применения анализа настроений очень широки, например, разделение комментариев, размещенных пользователями на веб-сайтах с покупками (Amazon, Tmall, Taobao и т. д.), туристических веб-сайтах и ​​веб-сайтах с обзорами фильмов, на положительные и отрицательные комментарии. собирать отзывы пользователей о продуктах и ​​выполнять анализ настроений и т. д. Сегодня 20 мая, PaddlePaddle научит вас пользоваться алгоритмами анализа настроений (GitHub.com/paddle pad DL…Почувствуйте разум богини. Далее мы будем использовать анализ настроений в качестве примера, чтобы представить использование глубокого обучения для сквозной классификации коротких текстов, и использовать PaddlePaddle для завершения всех связанных экспериментов.

1. Фон приложения

При обработке естественного языка анализ тональности представляет собой типичную проблему классификации текста, то есть текст, требующий анализа тональности, делится на свою категорию. Классификация текста включает в себя две проблемы представления текста и методов классификации. До появления методов глубокого обучения основными методами представления текста были BOW (мешок слов), тематические модели и т. д.; методами классификации были SVM (автомат опорных векторов), LR (логистическая регрессия) и т. д. Для фрагмента текста представление BOW будет игнорировать его порядок слов, грамматику и синтаксис и рассматривать текст как просто набор слов, поэтому метод BOW не может полностью представить семантическую информацию текста. Например, предложения «Этот фильм отстой» и «Скучная, пустая и бессмысленная работа» имеют высокое семантическое сходство при анализе настроений, но их представление BOW имеет сходство, равное 0. Другой пример: предложения «пустое произведение без коннотации» и «непустое произведение с коннотацией» имеют высокое БОВОЕ сходство, но на самом деле их значения сильно различаются. В этом руководстве модель глубокого обучения, которую мы собираемся представить, преодолевает вышеупомянутые недостатки представления BOW, отображая текст в низкоразмерное семантическое пространство с учетом порядка слов и сквозным образом. Для текстового представления и классификации, его производительность значительно улучшена по сравнению с традиционными методами [1].

2. Обзор модели

Модели текстового представления, используемые в этом руководстве, — это сверточные нейронные сети, рекуррентные нейронные сети и их расширения. Эти модели вводятся по очереди.

  1. Введение в текстовые сверточные нейронные сети (CNN) Для сверточной нейронной сети сначала используйте свертку для обработки векторной последовательности входных слов для создания карты признаков, а затем используйте операцию максимального объединения во времени на карте признаков для получения этой свертки. , и, наконец, функции, полученные всеми ядрами свертки, объединяются вместе, чтобы сформировать векторное представление текста фиксированной длины.Для задачи классификации текста подключение его к softmax создает полную модель. В практических приложениях мы будем использовать несколько ядер свертки для обработки предложений, а ядра свертки с одинаковым размером окна складываются для формирования матрицы, которая может выполнять операцию более эффективно. Кроме того, мы также можем использовать ядра свертки с окнами разного размера для обработки предложений.На рисунке 1 показана модель классификации текста сверточной нейронной сети, а разные цвета представляют операции ядра свертки разных размеров.

Для общих задач классификации коротких текстов описанная выше простая сверточная сеть текста может обеспечить высокую точность [1]. Если вы хотите получить более абстрактное и расширенное представление текстовых признаков, вы можете построить свёрточную нейронную сеть с глубоким текстом [2, 3].

  1. Рекуррентная нейронная сеть (RNN)

Рекуррентные нейронные сети — это мощный инструмент для точного моделирования данных последовательности. Фактически, теоретическая вычислительная мощность RNN является полной по Тьюрингу [4]. Естественный язык представляет собой типичную последовательность данных (последовательность слов).В последние годы рекуррентные нейронные сети и их варианты (такие как долговременная память [5] и т. д.) используются во многих областях обработки естественного языка, таких как язык моделирование, разбор синтаксиса, аннотация семантической роли (или аннотация общей последовательности), семантическое представление, генерация изображений и текста, диалог, машинный перевод и другие задачи хорошо зарекомендовали себя и даже стали лучшим методом в настоящее время.

  1. Сеть долговременной кратковременной памяти (LSTM)

Для данных более длинных последовательностей во время процесса обучения рекуррентной нейронной сети может возникнуть феномен исчезновения или взрыва градиента [6]. LSTM может решить эту проблему. По сравнению с простой рекуррентной нейронной сетью LSTM добавляет блок памяти c, входной вентиль i, вентиль забывания f и вентиль вывода o. Комбинация этих вентилей и блоков памяти значительно улучшает способность рекуррентных нейронных сетей обрабатывать длинные последовательности данных. Если функция, представленная рекуррентной нейронной сетью на основе LSTM, обозначена как F, ее формула будет следующей:

F состоит из следующих формул [7]:

LSTM расширяет возможности работы с долгосрочными зависимостями, добавляя память и элементы управления к простым рекуррентным нейронным сетям. Усовершенствованием по аналогичному принципу является Gated Recurrent Unit (GRU) [8], имеющее более компактную конструкцию. Хотя эти улучшения различны, их описание макроса такое же, как у простой рекуррентной нейронной сети (как показано на рисунке 2), то есть скрытое состояние изменяется в соответствии с текущим вводом и скрытым состоянием предыдущего момента, и процесс непрерывно циклируется до тех пор, пока не будет обработан ввод:

Среди них Recrurent может представлять собой простую рекуррентную нейронную сеть, GRU или LSTM.

  1. Стекированный двунаправленный LSTM

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

3. Реальный бой на основе PaddlePaddle

  1. Введение в весло PaddlePaddle (paddlepaddle.org) — это среда глубокого обучения, разработанная Baidu. В дополнение к основному фреймворку PaddlePaddle также предоставляет богатые инструментальные компоненты. Официально открыт ряд моделей приложений промышленного уровня, охватывающих обработку естественного языка, компьютерное зрение, механизмы рекомендаций и другие области, а также открыт ряд ведущих предварительно обученных китайских моделей. На саммите разработчиков глубокого обучения 23 апреля компания PaddlePaddle представила ряд новых функций и вариантов применения.

  2. Введение в набор данных В качестве примера мы возьмем набор данных анализа настроений IMDB. Обучающий и тестовый наборы данных IMDB содержат по 25 000 аннотированных обзоров фильмов. Среди них оценка отрицательных комментариев меньше или равна 4, оценка положительных комментариев больше или равна 7, а полная оценка составляет 10 баллов.

    PaddlePaddle реализует автоматическую загрузку и чтение наборов данных imdb в dataset/imdb.py и предоставляет API для чтения словарей, обучающих данных и тестовых данных.

  3. модель конфигурации

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

  1. Текстовые сверточные нейронные сети

Строим нейросеть convolution_net, пример кода такой. Следует отметить, что Fluid.nets.sequence_conv_pool содержит две операции слоев свертки и объединения.

Вход input_dim сети представляет размер словаря, а class_dim представляет количество категорий. Здесь мы реализуем операции свертки и объединения с помощью API sequence_conv_pool.

  1. Стекированный двунаправленный LSTM

Фрагмент кода стекированной двунаправленной нейронной сети stacked_lstm_net выглядит следующим образом:

Приведенный выше двунаправленный LSTM с накоплением абстрагирует функции высокого уровня и сопоставляет их с векторами того же размера, что и количество категорий классификации. Функция активации softmax последнего полносвязного слоя используется для расчета вероятности принадлежности классификации к определенному классу. Повторюсь, здесь мы можем вызвать любую сетевую структуру convolution_net или stacked_lstm_net для обучения и обучения. Возьмем в качестве примера convolution_net. Далее мы определяем программу предсказания (inference_program). Предиктор использует convolution_net для прогнозирования ввода данных Fluid.layer.data.

Здесь мы определяем training_program. Он использует результат, возвращенный из inference_program, для вычисления ошибки. Мы также определяем функцию оптимизации optimizer_func. Поскольку это обучение с учителем, метки обучающего набора также определяются в Fluid.layers.data. Во время обучения кросс-энтропия используется в Fluid.layer.cross_entropy в качестве функции потерь. Во время тестирования классификатор вычисляет вероятность каждого выхода. Первое возвращаемое значение указывается как стоимость.

В-четвертых, модель обучения

  1. Определите среду обучения

Определите, будет ли ваше обучение на CPU или GPU:

  1. определить поставщика данных

Следующим шагом является определение поставщиков данных для обучения и тестирования. Поставщик считывает данные размером BATCH_SIZE. paddle.dataset.imdb.word_dict будет предоставлять данные размера BATCH_SIZE каждый раз после нарушения порядка, а размер не по порядку — это размер кэша buf_size. Примечание. Чтение данных из IMDB может занять несколько минут, наберитесь терпения.

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

Каждая строка представляет собой соответствие, такое как ('limited': 1726), которое указывает, что метка, соответствующая слову limited, равна 1726.

  1. Тренер по конструированию

Для тренера требуется программа обучения и функция оптимизации обучения.

Эта функция используется для расчета результатов обучающей модели на тестовом наборе данных.

  1. Предоставьте данные и постройте основной цикл обучения

feed_order используется для определения отношения отображения между каждым фрагментом сгенерированных данных и Fluid.layers.data. Например, первый столбец данных, сгенерированных imdb.train, соответствует характеристике слов.

  1. Обработка тренировочного процесса

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

  1. начать обучение

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

5. Модель приложения

  1. Создайте предиктор

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

  1. Генерация тестовых входных данных

Чтобы делать прогнозы, мы произвольно выбираем 3 отзыва. Не стесняйтесь выбирать 3 из ваших фаворитов. Мы сопоставляем каждое слово в обзоре с идентификатором в word_dict. Если слово не существует в словаре, оно устанавливается как неизвестное. Затем мы используем create_lod_tensor для создания тензора уровня детализации.

6. Примените модель и сделайте прогноз

Теперь мы можем делать положительные или отрицательные прогнозы для каждого комментария.

Заинтересованные партнеры могут ознакомиться с другими соответствующими документами на официальном сайте PaddlePaddle:www.paddlepaddle.org/

7. Ссылки:

Kim Y. Convolutional neural networks for sentence classification[J]. arXiv preprint arXiv:1408.5882, 2014.

Kalchbrenner N, Grefenstette E, Blunsom P. A convolutional neural network for modelling sentences[J]. arXiv preprint arXiv:1404.2188, 2014.

Yann N. Dauphin, et al. Language Modeling with Gated Convolutional Networks[J] arXiv preprint arXiv:1612.08083, 2016.

Siegelmann H T, Sontag E D. On the computational power of neural nets[C]//Proceedings of the fifth annual workshop on Computational learning theory. ACM, 1992: 440-449.

Hochreiter S, Schmidhuber J. Long short-term memory[J]. Neural computation, 1997, 9(8): 1735-1780.

Bengio Y, Simard P, Frasconi P. Learning long-term dependencies with gradient descent is difficult[J]. IEEE transactions on neural networks, 1994, 5(2): 157-166.

Graves A. Generating sequences with recurrent neural networks[J]. arXiv preprint arXiv:1308.0850, 2013.

Чо К., Ван Мерриенбоер Б., Гулсер С. и др. Изучение представлений фраз с использованием кодировщика-декодера RNN для статистического машинного перевода[J], препринт arXiv arXiv:1406.1078, 2014.

Zhou J, Xu W. End-to-end learning of semantic role labeling using recurrent neural networks[C]//Proceedings of the Annual Meeting of the Association for Computational Linguistics. 2015.