Определение языка имени человека с помощью PyTorch RNN

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

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

План атаки

  1. Предварительная обработка данных
  2. Превращение имен в тензоры PyTorch
  3. Создание RNN
  4. Тестирование RNN
  5. Обучение RNN
  6. Построение результатов
  7. Оценка результатов
  8. Прогнозирование новых имен
  9. Заключение

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

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

Чтобы загрузить все файлы за один раз, мы будем использовать модуль Python, известный как glob . Модуль glob находит все пути, соответствующие заданному шаблону, в соответствии с правилами, используемыми оболочкой Unix. Результаты возвращаются в произвольном порядке. Мы будем использовать его для загрузки всех файлов в папке, которые заканчиваются на .txt.

В настоящее время имена даны в формате Unicode. Однако мы должны преобразовать их в стандарт ASCII. Это уберет диакритические знаки в словах. Например, французское название Béringer будет преобразовано в Beringer.

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

См. также:  Прогнозирование дефолта по ссуде с помощью набора данных Berka

Мы можем просмотреть первые пятнадцать имен во французском словаре, как показано ниже.

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

Превращение имен в тензоры PyTorch

При работе с данными в PyTorch мы должны преобразовать их в тензоры PyTorch. Это очень похоже на массивы NumPy. В нашем случае мы должны преобразовать каждую букву в тензор факела. Это будет горячий вектор, заполненный нулями, за исключением 1 в индексе текущей буквы. Давайте покажем, как это делается, а затем преобразуем букву M в горячий вектор.

Чтобы сформировать одно слово, нам нужно будет объединить несколько горячих векторов, чтобы сформировать 2D-матрицу.

Создание RNN

При создании нейронной сети в PyTorch мы используем torch.nn.Module, который является базовым классом для всех модулей нейронной сети. torch.autograd предоставляет классы и функции, реализующие автоматическое дифференцирование произвольных скалярных функций. torch.nn.LogSoftmax() применяет функцию Log(Softmax(x)) к n-мерному входному тензору.

Тестирование RNN

Мы начинаем с создания экземпляра класса RNN и передачи необходимых аргументов.

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

Обучение RNN

Чтобы получить вероятность каждой категории, мы используем Tensor.topk , чтобы получить индекс наибольшего значения.

Далее нам нужен быстрый способ получить имя и его вывод.

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

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

См. также:  Краткое введение в циклы while в C#

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

Построение результатов

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

Оценка результатов

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

Предсказание новых имен

Мы определим функцию, которая будет принимать имя и возвращать вероятные языки, из которых оно принадлежит.

«Ссылка»

Заключение

Если вы хотите узнать больше о PyTorch, есть несколько руководств, вложенных в его официальные документы. Если вы хотите узнать больше о RNN, Брайан Мванги. также написал отличное руководство:

 

Вводное руководство по реализации сетей долгосрочной краткосрочной памяти (LSTM)
Человеческие мысли постоянны, и это позволяет нам понимать закономерности, что, в свою очередь, дает нам возможность … heartbeat.comet.ml

 

 

Учебный курс по науке о данных на Python
Изучите Python для науки о данных, NumPy, Pandas, Matplotlib, Seaborn, Scikit-learn, Dask, LightGBM, XGBoost, CatBoost и многое другое… www.udemy.com

 

Обсудите этот пост в Hacker News и Reddit.

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

Являясь независимой редакцией, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее создавать лучшие модели машинного обучения.

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: