Вступление

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

Сбор данных

Прежде всего, нам нужно собрать данные. В этой реализации мы собираемся использовать название статьи, чтобы предсказать, будет ли статья принята на конференции (т.е. принять / отклонить). Наши данные взяты из ICLR 2018 и ICLR 2017. Для эффективного сбора данных мы будем использовать BeautifulSoup, чтобы удалить все названия статей с этих двух веб-сайтов. Хотите увидеть более подробную информацию о парсинге веб-сайта (веб-сканер), вы можете увидеть мое предыдущее руководство о том, как использовать пакет BeautifulSoup. Вот ссылка на учебник и код.

Предварительная обработка данных

После того, как у нас есть данные, нам нужно сначала их обработать. Это потому, что мы не можем ввести слово в нашу RNN. Итак, сначала мы создадим словарь для данных. Например, «Как дела?». В таком виде мы можем построить наш словарь. {«Как»: 1, «являются»: 2, «вы»: 3}. Данные должны быть предварительно обработаны, чтобы поместить их в рекуррентную нейронную сеть, а метод предварительной обработки приведен ниже. Чтобы получить данные теста сборки, мы выбираем первые 50 заголовков в качестве тестовых данных, а остальные - в качестве данных обучения.

Мы импортируем numpy и pandas для чтения наших данных.

Во второй ячейке мы разделяем «пробел», чтобы получить все слова из названия статьи.

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

В пятой и шестой ячейках мы создаем целевую метку и ввод и делаем их как np.array.

Рекуррентная нейронная сеть

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

После того, как у нас есть модель RNN, мы можем поместить наши данные и начать обучение нашей модели. Есть некоторые проблемы, на которых нам нужно сосредоточиться. Если я не скопирую b_y в b_z, он будет иметь неправильный тип, даже если вы используете метод (.to (, dtype = torch.float)). Вот проблемы с наложением стеков.

В конце концов, кривая обучения и уровень точности ниже. Хотите увидеть более подробный код или ванильную реализацию rnn, вы можете проверить ссылку. Ссылка будет доступна до 19.05.2019 (извините за это !!!).

Спасибо за чтение, надеюсь, вы что-то извлекли из этого. Дать аплодисменты буду очень благодарен !!!

Для дополнительной информации:

  1. Https://openreview.net/group?id=ICLR.cc/2017/conference
  2. Https://openreview.net/group?id=ICLR.cc/2018/Conference
  3. Https://blog.goodaudience.com/web-crawler-of-top-conferences-for-machine-learning-861c8eb5edd3?source=friends_link&sk=704f4f9862575fc1e4a06c6bfe0d4b91
  4. Https://github.com/Raychiu123/Web-Crawler-for-Machine-Learning-Conference
  5. Https://github.com/Raychiu123/Recurrent-Neural-Network-for-Prediction-Acceptance
  6. Http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/
  7. Https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/