nlp книги машинное обучение
Книга «Знакомство с 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 вместо размера всего словаря, который может быть порядка ), а смысл и другие свойства слова распределены по нескольким измерениям этого плотного вектора.
У низкоразмерных плотных представлений, полученных в результате обучения, есть несколько преимуществ по сравнению с унитарными и содержащими количества вхождений векторами, с которыми мы сталкивались в предыдущих главах. Во-первых, понижение размерности эффективно с вычислительной точки зрения. Во-вторых, представления на основе количества вхождений приводят к векторам высокой размерности с излишним кодированием одной и той же информации в различных измерениях, и их статистическая мощность не слишком велика. В-третьих, слишком большая размерность входных данных может привести к проблемам при машинном обучении и оптимизации — феномен, часто называемый проклятием размерности (http://bit.ly/2CrhQXm). Для решения этой проблемы с размерностью применяются различные способы понижения размерности, например сингулярное разложение (singular-value decomposition, SVD) и метод главных компонентов (principal component analysis, PCA), но, по иронии судьбы, эти подходы плохо масштабируются на размерности порядка миллионов (типичный случай в NLP). В-четвертых, представления, усвоенные из (или подогнанные на основе) относящихся к конкретной задаче данных, оптимально подходят именно для этой задачи. В случае эвристических алгоритмов вроде TF-IDF и методов понижения размерности наподобие SVD непонятно, подходит ли для конкретной задачи целевая функция оптимизации при таком способе вложения.
Эффективность вложений
Чтобы понять, как работают вложения, рассмотрим пример унитарного вектора, на который умножается матрица весов в линейном слое, как показано на рис. 5.1. В главах 3 и 4 размер унитарных векторов совпадал с размером словаря. Вектор называется унитарным потому, что содержит 1 на позиции, соответствующей конкретному слову, указывая таким образом на его наличие.
Рис. 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.
Для эффективной загрузки и обработки вложений мы опишем вспомогательный класс PreTrainedEmbeddings (пример 5.1). В нем создается хранимый в оперативной памяти индекс всех векторов слов для упрощения быстрого поиска и запросов ближайших соседей с помощью пакета приближенного вычисления ближайших соседей, annoy.
Пример 5.1. Использование предобученных вложений слов
В этих примерах мы используем вложения слов GloVe. Их необходимо скачать и создать экземпляр класса PreTrainedEmbeddings, как показано в Input[1] из примера 5.1.
Связи между вложениями слов
Ключевое свойство вложений слов — кодирование синтаксических и семантических связей, проявляющихся в виде закономерностей использования слов. Например, о котах и собаках обычно говорят очень схоже (обсуждают своих питомцев, особенности кормления и т. п.). В результате вложения для слов cats и dogs гораздо ближе друг к другу, чем к вложениям для названий других животных, скажем уток и слонов.
Изучать семантические связи, закодированные во вложениях слов, можно по-разному. Один из самых популярных методов — использовать задачу на аналогию (один из частых видов задач на логическое мышление на таких экзаменах, как SAT):
Слово1: Слово2 :: Слово3: ______
В этой задаче необходимо по заданным трем словам определить четвертое, отвечающее связи между первыми двумя. С помощью вложений слов эту задачу можно кодировать пространственно. Во-первых, вычитаем Слово2 из Слово1. Вектор разности между ними кодирует связь между Слово1 и Слово2. Эту разность затем можно прибавить к Слово3 и получить в результате вектор, ближайший к четвертому, пропущенному слову. Для решения задачи на аналогию достаточно выполнить запрос ближайших соседей по индексу с помощью этого полученного вектора. Соответствующая функция, показанная в примере 5.2, делает в точности описанное выше: она с помощью векторной арифметики и приближенного индекса ближайших соседей находит недостающий элемент в аналогии.
Пример 5.2. Решение задачи на аналогию с помощью вложений слов
Что интересно, с помощью простой словесной аналогии можно продемонстрировать, как вложения слов способны улавливать разнообразные семантические и синтаксические связи (пример 5.3).
Пример 5.3. Кодирование с помощью вложений слов множества лингвистических связей на примере задач на аналогии SAT
Хотя может показаться, что связи четко отражают функционирование языка, не все так просто. Как демонстрирует пример 5.4, связи могут неверно определяться, поскольку векторы слов определяются на основе их совместной встречаемости.
Пример 5.4. Пример, иллюстрирующий опасность кодирования смысла слов на основе совместной встречаемости, — иногда это не работает!
Пример 5.5 иллюстрирует одно из самых распространенных сочетаний при кодировании гендерных ролей.
Пример 5.5. Осторожнее с защищаемыми атрибутами, например с гендером, кодируемыми вложениями слов. Они могут приводить к нежелательной предвзятости в дальнейших моделях
Оказывается, довольно сложно различить закономерности языка и закоренелые культурные предубеждения. Например, доктора отнюдь не всегда мужчины, а медсестры не всегда женщины, но подобные предубеждения настолько устоялись, что отразились в языке, а в результате и в векторах слов, как показано в примере 5.6.
Пример 5.6. «Зашитые» в векторы слов культурные предубеждения
Не следует забывать о возможных систематических ошибках во вложениях с учетом роста их популярности и распространенности в 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 высылается электронная книга.
📕 ТОП-10 книг по обработке естественного языка: от новичка до профессионала
Обработка естественного языка (natural language processing, NLP) – область computer science, находящаяся на стыке искусственного интеллекта и математической лингвистики. В практическом отношении NLP занимается созданием удобных форм взаимодействия компьютера и человека – чтобы компьютер мог понять, что мы от него хотим, просто сказав ему это.
Пример алгоритма NLP, к которому мы обращаемся ежедневно – информационный поиск. Когда мы что-то вводим в поисковую строку Google или Яндекс, модель преобразует строку в представления в виде дискретных структур: тензоров, векторов, деревьев и графов. Родственные системы анализируют эмоциональную окраску текста, вычленить факты, главную мысль и т.д. Да и не только анализируют текст, но и генерирут его, например, в чат-ботах. Или переводят речь с одного языка на другой.
В приведенной подборке мы собрали десятку актуальных книг, изданных преимущественно в последние два-три года. Стоит оговориться, что большинство изданий в качестве основного естественного языка подразумевает английский, однако многие подходы переносимы, – пусть и с оговорками – на другие языки, включая русский.
NLP для новичков
Лейн, Хапке, Ховард. Обработка естественного языка в действии (2020)
Пятисотстраничное пособие Natural Language Processing in Action переведено и выпущено в 2020 г. издательством Питер. Основной акцент сделан на популярных теперь нейросетевых подходах. Авторы успели захватить и популярный теперь механизм внимания, использующийся для моделей генерации текста. Кроме общих вопросов обработки естественного языка рассмотрены задачи выделения именованных сущностей и создания диалоговых систем.
Риз. Обработка естественного языка на Java (2016)
Описаны простые токенизаторы Java, прикладные программные интерфейсы NLP, использование библиотек NLP API для поиска именованных объектов, определения частей речи, классификации документов, нахождения взаимосвязей.
Обработка естественного языка в контексте Data Science фреймворков
Ганегедара. Обработка естественного языка с TensorFlow (2020)
TensorFlow – фреймворк глубокого обучения, разработанный и поддерживаемый компанией Google. В книге описаны методы решения задач NLP с помощью функций TensorFlow для создания нейронных сетей; стратегии обработки больших объемов данных и представления слов для использования в приложениях глубокого обучения; технологии улучшенной классификации предложений и генерации текста при помощи сверточных и рекуррентных нейросетей; их применение для решения комплексной задачи генерации текста; принципы машинного перевода; тенденции области.
Оригинал написан в 2018 г., переведено и издано ДМК Пресс в 2020 г.
Макмахан, Рао. Знакомство с PyTorch (2020)
Книга Макмахана и Рао посвящена не менее популярному фреймворку глубокого обучения на основе Python – PyTorch, разработанного компанией Facebook. Этот фреймворк существенно более интегрирован с Python и позволяет во многих случаях обходиться стандартной библиотекой языка.
Bird, Klein, Loper. Natural Language Processing with Python
NLTK – пакет библиотек и программ для символьной и статистической обработки естественного языка, написанных на Python. NLTK сопровождается обширной документацией, включая общедоступную книгу с объяснением основных концепций NLP.
Alex Tomas. Natural Language Processing with Spark NLP (2020)
Apache Spark – фреймворк с открытым исходным кодом для реализации распределённой обработки Big Data. Spark NLP – интерфейс для применения Apache Spark к задачам обработки больших массивов текстовых данных. Взаимодействие со Spark NLP показано на примере Python-библиотеки PySpark. В первой части книги дается введение в работу со Spark, во второй – основные строительные блоки, а в третьей и четвертой – практические приложения и крупные системы на основе Spark NLP.
Продвинутый уровень
Гольдберг. Нейросетевые методы в обработке естественного языка (2019)
Классическое руководство по применению нейросетевых моделей в обработке данных естественного языка. Перевод на русский язык выпущен ДМК Пресс в 2019 г. по изданию 2017 г. Книга разделена на четыре части: 1) классификация с учителем и нейронные сети прямого распространения, 2) работа с данными естественного языка, 3) специализированные архитектуры нейронных сетей, 4) дополнительные темы. Для прочтения желательны базовые знания линейной алгебры и соответствующей математической нотации.
Jurafsky, Martin. Speech and Language Processing (2020)
Своеобразная библия NLP – регулярно обновляемая онлайн-книга исследователей в области NLP и компьютерной лингвистики Дэна Журафски (Стэнфорд) и Джеймса Мартина (университет Колорадо).
Rothman. Transformers for Natural Language Processing (2021)
Книга профессора Сорбонны Дениса Ротмана посвящена исключительно одной теме – семейству моделей, встряхнувших в конце десятых годов область NLP – моделям, основанным на механизме внимания и архитектуре Transformer. Если у вас есть опыт в NLP и вы хотите на практике разобраться в текущем state-of-the-art, книга Ротмана станет отличным выбором.
Vajjala и др. Practical Natural Language Processing (2020)
Книга разделена на четыре части: введение, основы, приложения, пайплайны. В качестве языка программирования применяется Python. Большое внимание уделено использованию современных моделей NLP и созданию пайплайна проекта машинного обучения – от получения данных на входе до требуемого результата.
Чтобы оставаться в курсе анализа данных и новых книг мы рекомендуем подписаться на телеграм-каналы Библиотека Data Scientist’а (@dsproglib) и Книги для программиста (@progbook).
Лучшие книги по обработке естественного языка
Дата публикации 2017-09-08
В области доминирует статистическая парадигма, а методы машинного обучения используются для разработки прогностических моделей.
В этом посте вы найдете лучшие книги, которые вы можете прочитать, чтобы начать работу с естественным языком обработки.
Прочитав этот пост, вы узнаете:
Лучшие практические книги по обработке естественного языка
Как практикующие, мы не всегда должны брать учебник, когда начинаем новую тему.
Примеры кода в книге приведены на языке программирования Python.
Хотя практических книг по НЛП меньше, чем учебников, я попытался выбрать 3 лучших книги, которые помогут вам начать и внедрить метод НЛП в ваш проект машинного обучения.
1. Обработка естественного языка с Python
Эта книга представляет собой введение в НЛП с использованием стека Python для практиков.
Книга посвящена использованиюБиблиотека Python NLTK, который очень популярен для общих задач НЛП.
Содержание включает в себя:
Эта книга идеально подходит для тех, кто хочет познакомиться с классической НЛП на платформе NLTK.
Ресурсы
2. Укрощение текста
Эта книга представляет собой введение в набор различных инструментов и проблем НЛП, таких какApache Solr,Apache OpenNLP, а такжеАпач Махоут,
Примеры кода на Java.
Это может быть более подходящим для разработчиков, начинающих работу с более крупными инструментами НЛП корпоративного уровня в рабочих проектах.
В частности, Грант Ингерсолл является соучредителемАпач Махоутпроект.
Содержание включает в себя:
Ресурсы
3. Текст Mining с R
Эта книга демонстрирует статистические методы обработки естественного языка в ряде современных приложений.
Кодекс фокусируется на «аккуратныйПринципы Хэдли Уикхем (бумага) иtidytextпакет от авторов.
Из трех книг это самая последняя опубликованная книга, которая демонстрирует более практичный и современный вид демонстраций.
Содержание включает в себя:
Ресурсы
Знаете ли вы о других замечательных практических книгах по обработке естественного языка?
Дай мне знать в комментариях.
Лучшие учебники по обработке естественного языка
Существует множество учебников по обработке естественного языка и по отдельным подтемам.
В этом разделе я попытался сосредоточиться на том, что я (и консенсус), похоже, считаю лучшими книгами по этой теме для начинающих, например студенты или аспиранты и практики, желающие углубиться в теорию.
Я пытался выбрать сочетание общих книг по НЛП, а также книг по высоко изученным темам, таким как перевод и речь.
Первые две книги в этом разделе по сути являются пушкой для студентов НЛП.
1. Основы статистической обработки естественного языка
Примечательно, что Кристофер Мэннинг преподает НЛП в Стэнфорде и стоит заCS224n: обработка естественного языка с углубленным изучениемкурс.
Эта книга представляет собой введение в статистические методы обработки естественного языка, охватывающие как необходимую лингвистику, так и более новые (в то время, около 1999 года) статистические методы.
Эта книга обеспечивает прочную основу для лучшего понимания новых методов и кодировок.
Содержание включает в себя:
Ресурсы
2. Обработка речи и языка
Эта книга освещает НЛП с точки зрения речи и текста, уделяя особое внимание приложениям (по одному в каждой главе).
Освещение темы кажется исчерпывающим.
Содержание включает в себя:
Ресурсы
4. Статистический машинный перевод
Эта книга представляет собой введение в тему статистического машинного перевода, подполя НЛП.
Содержание включает в себя:
Ресурсы
5. Статистические методы распознавания речи
Эта книга представляет собой введение в тему статистического распознавания речи, еще одного подполя НЛП, которое в 1990-х годах претерпело изменения со статистическими подходами.
Ресурсы
НЛП Книги, которые у меня есть
Мне нравится иметь смесь практических и справочных текстов на моей полке.
Сложной частью НЛП (для меня) является просто большое количество подзадач и используемой специализированной терминологии и теории.
По этой причине у меня на полке лежат следующие 3 учебника по НЛП:
Мне также очень нравится внешний вид:
Я рекомендую выбрать книги НЛП, которые подходят именно вам и вашим потребностям или проекту.
Дайте мне знать, какие книги вы выбрали или владеете.
Оставьте комментарий ниже.
Дальнейшее чтение
Этот раздел предоставляет больше ресурсов по этой теме, если вы хотите пойти глубже
Топ НЛП Книги
Quora
Резюме
В этом посте вы обнаружили лучшие книги по обработке естественного языка.
В частности, вы узнали:
У вас есть вопросы?
Задайте свои вопросы в комментариях ниже, и я сделаю все возможное, чтобы ответить.