знакомство с pytorch глубокое обучение при обработке естественного языка

Знакомство с PyTorch. Глубокое обучение при обработке естественного языка

знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языка

Доброго времени суток, уважаемые друзья-питонисты. Мы уже как-то рассматривали книгу издательства O’Reilly. Это была «Изучаем Python«, которая очень понравилась и нам, и вам, и вообще всем. А издательство уже давно привлекает наше внимание своими книгами, точнее их качеством. Настала пора рассмотреть NLP.

Сегодня у нас на очереди «Знакомство с PyTorch. Глубокое обучение при обработке естественного языка». Брайан Макмахан и Делип Рао постарались сделать всё для того, чтобы вы могли как можно быстрее разобраться с обработкой человеческого языка. Спойлер: у них получилось.

Об авторах

Брайан Макмахан — аналитик с опытом работы более 15 лет, работавший над огромным количеством проектов, и знающий о PyTorch буквально всё.

Делип Рао — вице-президент компании AI Foundation, занимающейся вообще всем, что связано с искусственным интеллектом. У него за плечами так же более 15 лет работы в сфере IT, а также работа в таких компаниях как Amazon, Google и Twitter.

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

Содержание

Как и в любой книге, связанной с искусственным интеллектом, люди, которые только-только входят в эту сферу, мало что поймут поначалу. Но ведь это только начало!

О книге

Для начала стоит разобраться, что же вообще такое NLP или Natural Language Processing.

NLP — такая сфера ИИ, которая отвечает за обработку естественного (человеческого) языка. Другими словами, это понимание компьютеров человеческого общения, фраз, реплик, даже интонации текста. Всё еще непонятно? Благодаря NLP, Google Translate переводит тексты так, что результат не отличить от текста, написанного человеком. Яндекс.Алиса общается с вами так, что вы не всегда поймете, что это робот. В этой книге вас и научат заниматься чем-то подобным.

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

Конечно, чтобы использовать PyTorch, желательно знать Python, куда уж без него. Но с помощью нашего сайта, эта задача будет по силам каждому.

Подведем итоги

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

Делитесь мнением об этой книге в комментариях, и пишите, какие книги были бы вам интересны. Удачи!

Скачать книгу можно прямо из нашего Telegram-канала. Вот ссылка.

Источник

Знакомство с PyTorch, глубокое обучение при обработке естественного языка, Макмахан Б., Рао Д., 2020

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

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

Также можно купить бумажную версию книги здесь.

Знакомство с PyTorch, глубокое обучение при обработке естественного языка, Макмахан Б., Рао Д., 2020.

Обработка текстов на естественном языке (Natural Language Processing, NLP) — крайне важная задача в области искусственного интеллекта. Успешная реализация делает возможными такие продукты, как Alexa от Amazon и Google Translate. Эта книга поможет вам изучить PyTorch — библиотеку глубокого обучения для языка Python — один из ведущих инструментов для дата-сайентистов и разработчиков ПО, занимающихся NLP. Делип Рао и Брайан Макмахан введут вас в курс дел с NLP и алгоритмами глубокого обучения. И покажут, как PyTorch позволяет реализовать приложения, использующие анализ текста.

знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языка

Предисловие.

Цель этой книги — рассказать новичкам о возможностях обработки естественного языка (Natural Language Processing, NLP) и глубокого обучения. Эти сферы сегодня стремительно развиваются, и данная книга посвящена им обеим, с упором на реализацию. При ее написании нам часто приходилось принимать сложные, а иногда и неприятные решения относительно того, какой материал не включать в книгу. Мы надеемся, что начинающие программисты смогут получить базовые знания и хотя бы бегло ознакомиться с имеющимися возможностями. Машинное обучение вообще и глубокое обучение в частности — эмпирические, а не теоретические дисциплины. Многочисленные комплексные примеры, включенные во все главы, приглашают вас проверить изложенный материал на практике.

Краткое содержание.

Предисловие.
Благодарности.
От издательства.
Глава 1. Введение.
Глава 2. Краткое знакомство с NLP.
Глава 3. Базовые компоненты нейронных сетей.
Глава 4. Использование упреждающих сетей при NLP.
Глава 5. Вложение слов и прочих типов.
Глава 6. Моделирование последовательностей для обработки текстов на естественных языках.
Глава 7. Продолжаем моделирование последовательностей для обработки текстов на естественных языках.
Глава 8. Продвинутое моделирование последовательностей для обработки текстов на естественных языках.
Глава 9. Классические методы и перспективные направления.
Что читать дальше.
Об авторах.
Об иллюстрации на обложке.

По кнопкам выше и ниже «Купить бумажную книгу» и по ссылке «Купить» можно купить эту книгу с доставкой по всей России и похожие книги по самой лучшей цене в бумажном виде на сайтах официальных интернет магазинов Лабиринт, Озон, Буквоед, Читай-город, Литрес, My-shop, Book24, Books.ru.

По кнопке «Найти похожие материалы на других сайтах» можно найти похожие материалы на других сайтах.

On the buttons above and below you can buy the book in official online stores Labirint, Ozon and others. Also you can search related and similar materials on other sites.

Источник

Книга «Знакомство с PyTorch: глубокое обучение при обработке естественного языка»

знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языка Привет, Хаброжители! Обработка текстов на естественном языке (Natural Language Processing, NLP) — крайне важная задача в области искусственного интеллекта. Успешная реализация делает возможными такие продукты, как Alexa от Amazon и Google Translate. Эта книга поможет вам изучить PyTorch — библиотеку глубокого обучения для языка Python — один из ведущих инструментов для дата-сайентистов и разработчиков ПО, занимающихся NLP. Делип Рао и Брайан Макмахан введут вас в курс дел с NLP и алгоритмами глубокого обучения. И покажут, как PyTorch позволяет реализовать приложения, использующие анализ текста.

В этой книге • Вычислительные графы и парадигма обучения с учителем. • Основы оптимизированной библиотеки PyTorch для работы с тензорами. • Обзор традиционных понятий и методов NLP. • Упреждающие нейронные сети (многослойный перцептрон и другие). • Улучшение RNN при помощи долгой краткосрочной памяти (LSTM) и управляемых рекуррентных блоков • Предсказание и модели преобразования последовательностей. • Паттерны проектирования NLP-систем, используемых в продакшене.

Отрывок. Вложение слов и прочих типов

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

В основе успешного применения глубокого обучения в NLP лежит представление дискретных типов данных (например, слов) в виде плотных (dense) векторов. Термины «обучение представлениям» (representation learning) и «вложение» (embedding) означают обучение отображению/представлению из дискретного типа данных в точку векторного пространства. Если дискретные типы представляют собой слова, то плотное векторное представление называется вложением слов (word embedding). Мы уже встречали примеры методов вложения на основе количества вхождений, например TF-IDF («частотность терма — обратная частотность документа») в главе 2. В этой главе мы сосредоточим внимание на методах вложения на основе обучения и методах вложения на основе предсказания (см. статью Барони и др. [Baroni et al., 2014]), в которых обучение представлениям производится путем максимизации целевой функции для конкретной задачи обучения; например, предсказания слова по контексту. Методы вложения на основе обучения в настоящий момент являются стандартом благодаря широкой применимости и высокой эффективности. На самом деле вложения слов в задачах NLP так распространены, что их называют «сирача NLP» (sriracha of NLP), поскольку можно ожидать, что их использование в любой задаче обеспечит повышение эффективности решения. Но это прозвище немного вводит в заблуждение, ведь, в отличие от сирачи, вложения обычно не добавляются в модель постфактум, а представляют собой ее базовый компонент.

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

Зачем нужно обучение вложениям

В предыдущих главах мы продемонстрировали вам обычные методы создания векторных представлений слов. А именно, вы узнали, как использовать унитарные представления — векторы длиной, совпадающей с размером словаря, с нулями на всех позициях, кроме одной, содержащей значение 1, соответствующее конкретному слову. Кроме того, вы встречались с представлениями количеств вхождений — векторами длиной, равной числу уникальных слов в модели, содержащими количества вхождений слов в предложение на соответствующих позициях. Такие представления называются также дистрибутивными (distributional representations), поскольку их значимое содержание/смысл отражается несколькими измерениями вектора. История дистрибутивных представлений насчитывает уже много десятилетий (см. статью Ферта [Firth, 1935]), они отлично подходят для множества моделей машинного обучения и нейронных сетей. Эти представления конструируются эвристически1, а не обучаются на данных.

Распределенные представления (distributed representation) получили свое название оттого, что слова в них представлены плотным вектором намного меньшей размерности (допустим, d=100 вместо размера всего словаря, который может быть порядка знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языка), а смысл и другие свойства слова распределены по нескольким измерениям этого плотного вектора.

У низкоразмерных плотных представлений, полученных в результате обучения, есть несколько преимуществ по сравнению с унитарными и содержащими количества вхождений векторами, с которыми мы сталкивались в предыдущих главах. Во-первых, понижение размерности эффективно с вычислительной точки зрения. Во-вторых, представления на основе количества вхождений приводят к векторам высокой размерности с излишним кодированием одной и той же информации в различных измерениях, и их статистическая мощность не слишком велика. В-третьих, слишком большая размерность входных данных может привести к проблемам при машинном обучении и оптимизации — феномен, часто называемый проклятием размерности (http://bit.ly/2CrhQXm). Для решения этой проблемы с размерностью применяются различные способы понижения размерности, например сингулярное разложение (singular-value decomposition, SVD) и метод главных компонентов (principal component analysis, PCA), но, по иронии судьбы, эти подходы плохо масштабируются на размерности порядка миллионов (типичный случай в NLP). В-четвертых, представления, усвоенные из (или подогнанные на основе) относящихся к конкретной задаче данных, оптимально подходят именно для этой задачи. В случае эвристических алгоритмов вроде TF-IDF и методов понижения размерности наподобие SVD непонятно, подходит ли для конкретной задачи целевая функция оптимизации при таком способе вложения.

Эффективность вложений

Чтобы понять, как работают вложения, рассмотрим пример унитарного вектора, на который умножается матрица весов в линейном слое, как показано на рис. 5.1. В главах 3 и 4 размер унитарных векторов совпадал с размером словаря. Вектор называется унитарным потому, что содержит 1 на позиции, соответствующей конкретному слову, указывая таким образом на его наличие.

знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языка

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

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

Еще одно, последнее примечание относительно эффективности вложений: несмотря на пример с рис. 5.1, где размерность матрицы весов совпадает с размерностью входного унитарного вектора, так бывает далеко не всегда. На самом деле вложения часто применяются для представления слов из пространства меньшей размерности, чем понадобилось бы при использовании унитарного вектора или представления количества вхождений. Типичный размер вложений в научных статьях — от 25 до 500 измерений, причем выбор конкретного значения сводится к объему доступной памяти GPU.

Подходы к обучению вложениям слов

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

Практическое применение предобученных вложений слов

Основная часть этой главы, а также остальная часть книги касается использования предобученных вложений слов. Предобученные с помощью одного из множества описанных выше методов на большом корпусе — например, на полном корпусе Google News, «Википедии» или Common Crawl1 — вложения слов можно свободно скачать и использовать. Далее в главе мы покажем, как грамотно находить и загружать эти вложения, изучим некоторые свойства вложений слов и приведем примеры применения предобученных вложений слов в задачах NLP.

Загрузка вложений

Вложения слов стали настолько популярными и распространенными, что для скачивания доступно множество различных их вариантов, начиная с первоначального Word2Vec2 до стэнфордского GloVe (https://stanford.io/2PSIvPZ), в том числе FastText3 компании Facebook (https://fasttext.cc/) и многие другие. Обычно вложения поставляются в следующем формате: каждая строка начинается со слова/типа, за которым идет последовательность чисел (то есть векторное представление). Длина этой последовательности равна размерности представления (размерности вложения). Размерность вложений обычно порядка сотен. Количество типов токенов чаще всего равно размеру словаря и составляет порядка миллиона. Например, вот первые семь измерений векторов dog и cat из GloVe.

знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языка

Для эффективной загрузки и обработки вложений мы опишем вспомогательный класс PreTrainedEmbeddings (пример 5.1). В нем создается хранимый в оперативной памяти индекс всех векторов слов для упрощения быстрого поиска и запросов ближайших соседей с помощью пакета приближенного вычисления ближайших соседей, annoy.

Пример 5.1. Использование предобученных вложений слов

знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языка

знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языка

В этих примерах мы используем вложения слов GloVe. Их необходимо скачать и создать экземпляр класса PreTrainedEmbeddings, как показано в Input[1] из примера 5.1.

Связи между вложениями слов

Ключевое свойство вложений слов — кодирование синтаксических и семантических связей, проявляющихся в виде закономерностей использования слов. Например, о котах и собаках обычно говорят очень схоже (обсуждают своих питомцев, особенности кормления и т. п.). В результате вложения для слов cats и dogs гораздо ближе друг к другу, чем к вложениям для названий других животных, скажем уток и слонов.

Изучать семантические связи, закодированные во вложениях слов, можно по-разному. Один из самых популярных методов — использовать задачу на аналогию (один из частых видов задач на логическое мышление на таких экзаменах, как SAT):

Слово1: Слово2 :: Слово3: ______

В этой задаче необходимо по заданным трем словам определить четвертое, отвечающее связи между первыми двумя. С помощью вложений слов эту задачу можно кодировать пространственно. Во-первых, вычитаем Слово2 из Слово1. Вектор разности между ними кодирует связь между Слово1 и Слово2. Эту разность затем можно прибавить к Слово3 и получить в результате вектор, ближайший к четвертому, пропущенному слову. Для решения задачи на аналогию достаточно выполнить запрос ближайших соседей по индексу с помощью этого полученного вектора. Соответствующая функция, показанная в примере 5.2, делает в точности описанное выше: она с помощью векторной арифметики и приближенного индекса ближайших соседей находит недостающий элемент в аналогии.

Пример 5.2. Решение задачи на аналогию с помощью вложений слов

знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языка

знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языка

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

Пример 5.3. Кодирование с помощью вложений слов множества лингвистических связей на примере задач на аналогии SAT

знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языка

знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языка

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

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

знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языка

Пример 5.5 иллюстрирует одно из самых распространенных сочетаний при кодировании гендерных ролей.

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

знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языка

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

Пример 5.6. «Зашитые» в векторы слов культурные предубеждения

знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языка

Не следует забывать о возможных систематических ошибках во вложениях с учетом роста их популярности и распространенности в NLP-приложениях. Искоренение систематических ошибок во вложениях слов — новая и очень интересная сфера научных исследований (см. статью Болукбаши и др. [Bolukbasi et al., 2016]). Рекомендуем заглянуть на сайт ethicsinnlp.org, где можно найти актуальную информацию по вопросам интерсекциональности этики и NLP.

Об авторах

Делип Рао — основатель консалтинговой компании Joostware из Сан-Франциско, специализирующейся на машинном обучении и исследованиях в области NLP. Один из соучредителей Fake News Challenge — инициативы, призванной объединить хакеров и исследователей в области ИИ над задачами проверки фактов в СМИ. Ранее Делип занимался связанными с NLP исследованиями и программными продуктами в компаниях Twitter и Amazon (Alexa).

Брайан Макмахан — научный сотрудник в компании Wells Fargo, занимающийся преимущественно NLP. Ранее работал в компании Joostware.

Для Хаброжителей скидка 25% по купону — PyTorch

По факту оплаты бумажной версии книги на e-mail высылается электронная книга.

Источник

Книга «Программируем с PyTorch: Создание приложений глубокого обучения»

знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языка Привет, Хаброжители! Ян Пойнтер поможет разобраться, как настроить PyTorch в облачной среде, как создавать нейронные архитектуры, облегчающие работу с изображениями, звуком и текстом. Книга охватывает важнейшие концепции применения переноса обучения, модели отладки и использования библиотеки PyTorch. Вы научитесь: — Внедрять модели глубокого обучения в работу — Использовать PyTorch в масштабных проектах — Применять перенос обучения — Использовать PyTorch torchaudio и сверточные модели для классификации аудиоданных — Применять самые современные методы NLP, используя модель, обученную на «Википедии» — Выполнять отладку моделей PyTorch с TensorBoard и флеймграф — Развертывать приложения PyTorch в контейнерах «PyTorch –– это одна из самых быстрорастущих библиотек глубокого обучения, соперничающая с гигантом Google — TensorFlow — практически на равных.

Классификация изображений с помощью PyTorch

Учебники по глубокому обучению пестрят профессиональной непонятной терминологией. Я стараюсь свести ее к минимуму и всегда приводить один пример, который можно легко расширить, когда вы привыкнете работать с PyTorch. Мы используем этот пример на протяжении всей книги, чтобы продемонстрировать, как отладить модель (глава 7) или развернуть ее в рабочей среде (глава 8).

С этого момента и до конца главы 4 мы будем компилировать классификатор изображений. Нейронные сети обычно используются в качестве классификаторов изображений; сети предлагают картинку и задают простой вопрос: «Что это?».

Давайте начнем с создания нашего приложения в PyTorch.

Проблема классификации

Здесь мы создадим простой классификатор, который может отличить рыбку от кошки. Мы будем итерировать дизайн и процесс разработки нашей модели, чтобы сделать ее более точной.
На рис. 2.1 и 2.2 изображены рыбка и кошка во всей своей красе. Не уверен, есть ли у рыбки имя, а вот кошку зовут Гельветика.

Давайте начнем с обсуждения стандартных проблем, связанных с классификацией.

знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языказнакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языка

Стандартные трудности

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

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

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

Но сначала данные

Для начала нам нужны данные. Сколько данных? Зависит от разных факторов. Как вы увидите в главе 4, идея о том, что для работы любой техники глубокого обучения нужны огромные объемы данных для обучения нейронной сети, не обязательно верна. Однако сейчас мы собираемся начинать с нуля, что обычно требует доступа к большому количеству данных. Требуется много изображений рыбок и кошек.

Можно было бы потратить какое-то время на загрузку кучи изображений из поиска изображений в Google, но есть более легкий путь: стандартная коллекция изображений, используемая для обучения нейронных сетей, — ImageNet. Она содержит более 14 миллионов изображений и 20 тысяч категорий изображений. Это стандарт, по которому все классификаторы изображений проводят сравнение. Поэтому я беру изображения оттуда, хотя, если хотите, то можете выбрать другие варианты.

Кроме данных у PyTorch должен быть способ определить, что такое кошка и что такое рыбка. Это достаточно просто для нас, но для компьютера задача сложнее (именно поэтому мы и создаем программу!). Мы используем маркировку, прикрепленную к данным, и такое обучение называется машинное обучение с учителем. (Если у вас нет доступа к каким-либо маркировкам, то используется, как вы наверняка догадались, машинное обучение без учителя.)

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

Требуется перемаркировать их. Поскольку ImageNet представляет собой обширную коллекцию изображений, я собрал URL-адреса изображений и маркировки рыбок и кошек (https://oreil.ly/NbtEU).

Вы можете запустить скрипт download.py в этом каталоге, и он загрузит изображения с URL-адресов и разместит их в соответствующих местах для обучения. Перемаркировка проста; скрипт хранит изображения кошек в каталоге train/cat и изображения рыбок в каталоге train/fish. Если не хотите использовать скрипт для загрузки, просто создайте эти каталоги и разместите соответствующие изображения в нужных местах. Теперь у нас есть данные, но нужно преобразовать их в формат, понятный PyTorch.

PyTorch и загрузчики данных

Загрузка и преобразование данных в готовые к обучению форматы часто оказываются одной из областей data science, которая отнимает слишком много времени. PyTorch разработал установленные требования взаимодействия с данными, которые делают его довольно понятным, независимо от того, работаете ли вы с изображениями, текстом или аудио.

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

Загрузчик данных — это то, что передает данные из набора данных в сеть. (Может включать в себя такую информацию, как: Сколько рабочих процессов передают данные в сеть? Сколько изображений мы передаем одновременно?)

Давайте сначала посмотрим на набор данных. Каждый набор данных, независимо от того, содержит ли он изображения, аудио, текст, 3D-ландшафты, информацию о фондовом рынке или что-либо еще, может взаимодействовать с PyTorch, если отвечает требованиям этого абстрактного класса Python:

Это довольно просто: мы должны воспользоваться методом, который возвращает размер нашего набора данных (len), и тем, который может извлечь элемент из набора данных в паре (label, tensor). Это вызывается загрузчиком данных, поскольку передает данные в нейронную сеть для обучения. Таким образом, мы должны написать тело для метода getitem, которое может взять изображение, преобразовать его в тензор и вернуть его и маркировку обратно, чтобы PyTorch мог с ним работать. Все понятно, но, очевидно, этот сценарий встречается достаточно часто, так что, может быть, PyTorch облегчит задачу?

Создание обучающего набора данных

В пакет torchvision включен класс ImageFolder, который делает практически все, при условии, что наши изображения находятся в структуре, где каждый каталог представляет собой маркировку (например, все кошки находятся в каталоге с именем cat). Вот что нужно для примера с кошками и рыбками:

Здесь добавляется кое-что еще, потому что torchvision также позволяет указать список преобразований, которые будут применены к изображению, прежде чем оно попадет в нейронную сеть. Преобразование по умолчанию состоит в том, чтобы взять данные изображения и превратить их в тензор (метод trans forms.ToTensor(), показанный в предыдущем коде), но также выполняется несколько других действий, которые могут быть не такими очевидными.

Во-первых, GPU созданы для быстрого выполнения вычислений стандартного размера. Но у нас, вероятно, есть ассортимент изображений во многих разрешениях. Чтобы повысить производительность обработки, мы масштабируем каждое входящее изображение до того же разрешения 64 × 64 с помощью преобразования Resize (64). Затем конвертируем изображения в тензор и, наконец, нормализуем тензор вокруг определенного набора средних и стандартных точек отклонения.

Нормализация важна, поскольку предполагается выполнение большого количества операций умножения, когда входные данные проходят через слои нейронной сети; поддержание входящих значений от 0 до 1 предотвращает серьезное увеличение значений во время фазы обучения (известное как проблема взрывающихся градиентов). Это волшебное воплощение — всего лишь среднее и стандартное отклонение набора данных ImageNet в целом. Можно рассчитать его специально для подмножества рыбок и кошек, но эти значения достаточно надежны. (Если бы вы работали над совершенно другим набором данных, нужно было бы вычислить это среднее значение и отклонение, хотя многие просто используют константы ImageNet и сообщают о приемлемых результатах.)

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

В этом примере мы изменяем размеры изображений до 64 × 64. Я сделал такой случайный выбор, чтобы ускорить вычисления в нашей первой сети. Большинство существующих архитектур, которые вы увидите в главе 3, используют для своих входных изображений разрешение 224 × 224 или 299 × 299.. Как правило, чем больше размер входного файла, тем больше данных, по которым сеть может обучаться.. Обратная сторона медали в том, что обычно можно разместить меньшую партию изображений в памяти GPU.

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

Валидация и контрольные наборы данных

Наш набор данных для обучения настроен, но теперь нужно повторить те же шаги с набором данных для валидации. Какая здесь разница? Одним из подводных камней глубокого обучения (и фактически всего машинного обучения) является переобучение: модель действительно хорошо распознает то, на чем была обучена, но не работает на примерах, которых не видела. Модель видит изображение кота, и если все другие изображения котов не очень похожи на это, модель решает, что это не кот, хотя очевидно обратное. Чтобы нейросеть так себя не вела, мы загружаем контрольную выборку в download.py, то есть в серию изображений кошек и рыбок, которых нет в наборе данных для обучения. В конце каждого цикла обучения (также известного как эпоха) мы сравниваем этот набор, чтобы убедиться, что сеть не ошиблась. Не пугайтесь, код для этой проверки невероятно прост: это тот же код с несколькими измененными именами переменных:

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

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

На первый взгляд разные типы наборов могут показаться сложными и сбивать с толку, поэтому я составил таблицу, чтобы указать, в какой части обучения используется каждый набор (табл. 2.1).

знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языка

Теперь мы можем создать загрузчики данных с помощью еще нескольких строк кода на Python:

Новое и достойное упоминания в этом коде — это команда batch_size. Она говорит, сколько изображений пройдет через сеть, прежде чем мы обучим и обновим ее. Теоретически мы могли бы присвоить batch_size ряду изображений в тестовом и обучающем наборах данных, чтобы сеть видела каждое изображение перед обновлением. На практике это обычно не делается, потому что меньшие пакеты (более широко известные в литературе как мини-пакеты) требуют меньше памяти и нет необходимости хранить всю информацию о каждом изображении в наборе данных, а меньший размер пакета приводит к более быстрому обучению, поскольку сеть обновляется намного быстрее. Для загрузчиков данных PyTorch значение batch_size по умолчанию установлено на 1. Скорее всего, вы захотите его изменить. Хотя я выбрал 64, вы можете поэкспериментировать, чтобы понять, сколько мини-пакетов можно использовать, не исчерпав память GPU. Поэкспериментируйте с некоторыми дополнительными параметрами: например, можно указать, как будет осуществляться выборка наборов данных, будет ли перемешиваться весь набор при каждом запуске и сколько рабочих процессов задействовано для извлечения данных из набора. Все это можно найти в документации PyTorch.

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

И наконец, нейронная сеть!

Мы начнем с самой простой сети глубокого обучения — входного слоя, который будет работать со входными тензорами (нашими изображениями); выходного слоя размером с число наших выходных классов (2); и скрытого слоя между ними. В первом примере будем использовать полностью связанные слои. На рис. 2.3 показан входной слой из трех узлов, скрытый
слой из трех узлов и выход из двух узлов.

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

знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть фото знакомство с pytorch глубокое обучение при обработке естественного языка. Смотреть картинку знакомство с pytorch глубокое обучение при обработке естественного языка. Картинка про знакомство с pytorch глубокое обучение при обработке естественного языка. Фото знакомство с pytorch глубокое обучение при обработке естественного языка

Функции активации

Функция активации — звучит мудрено, однако наиболее распространенная функция активации, которую вы сейчас можете встретить, — это ReLU, или выпрямленный линейный блок. Опять заумно! Но это всего лишь функция, которая реализует max(0,x), поэтому результат равен 0, если входное значение отрицательное, или просто входному значению (x), если x положительное. Все просто!

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

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

Создание нейронной сети

Создание нейронной сети в PyTorch напоминает программирование на Python. Мы наследуем от класса под названием torch.nn.Network и заполняем методы __init__ и forward:

Повторюсь, это несложно. Мы делаем необходимые настройки в init(), в этом случае вызываем конструктор суперкласса и три полносвязных слоя (называемых в PyTorch Linear, в Keras они называются Dense). Метод forward() описывает, как данные передаются по сети как при обучении, так и при предсказании (inference). Во-первых, мы должны преобразовать трехмерный тензор (x и y плюс трехканальная цветовая информация — красный, зеленый, синий) в изображении — внимание! — в одномерный тензор, чтобы его можно было передавать в первый слой Linear, и мы делаем это с помощью view(). Таким образом мы применяем слои и функции активации по порядку, возвращая выходные данные softmax, чтобы получить прогноз для этого изображения.

Числа в скрытых слоях являются произвольными, за исключением выходных данных последнего слоя, который равен 2, совпадающих с нашими двумя классами — кошки или рыбки. Требуется, чтобы данные в слоях сжимались по мере их уменьшения в стеке. Если в слой идет, скажем, от 50 входных данных на 100 выходных данных, то сеть может обучиться, просто передав 50 связей на пятьдесят из ста выходных данных, и считать свою работу выполненной. Сокращая размер выходных данных по отношению ко входным данным, мы заставляем эту часть сети выучить репрезентативность исходных входных данных с меньшим количеством ресурсов, что предположительно означает, что сеть определяет некоторые отличительные признаки изображений: например, научилась распознавать плавник или хвост.

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

ОБ АВТОРЕ

Ян Пойнтер (Ian Pointer) — инженер data science, специализирующийся на решениях для машинного обучения (включая методы глубокого обучения) для нескольких клиентов из списка Fortune 100. В настоящее время Ян работает в Lucidworks, где занимается передовыми приложениями и разработкой NLP.

Для Хаброжителей скидка 25% по купону — PyTorch

По факту оплаты бумажной версии книги на e-mail высылается электронная книга.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *