Последние достижения в области глубокого обучения позволяют создавать приложения, с исключительной точностью распознающие текст и речь. Что в результате? Появляются чат-боты, ведущие диалог не хуже реальных людей, программы, эффективно подбирающие резюме под заданную вакансию, развивается превосходный предиктивный поиск, автоматически генерируются аннотации документов. Благодаря новым приемам и инструментам, таким как Keras и Tensorflow, сегодня возможно как никогда просто реализовать качественную обработку естественного языка (NLP).
«Обработка естественного языка в действии» станет вашим руководством по созданию программ, способных распознавать и интерпретировать человеческий язык. В издании рассказано, как с помощью готовых пакетов на языке Python извлекать из текста смыслы и адекватно ими распоряжаться. В книге дается расширенная трактовка традиционных методов NLP, что позволит задействовать нейронные сети, современные алгоритмы глубокого обучения и генеративные приемы при решении реальных задач, таких как выявление дат и имен, составление текстов и ответов на неожиданные вопросы.
Author(s): Хобсон Лейн, Ханнес Хапке, Коул Ховард
Series: Библиотека программиста
Edition: 1
Publisher: Питер
Year: 2020
Language: Russian
Commentary: Vector PDF
Pages: 576
City: СПб.
Tags: Machine Learning;Neural Networks;Deep Learning;Natural Language Processing;Python;Chatbots;Convolutional Neural Networks;Recurrent Neural Networks;Principal Component Analysis;Text Generation;Sentiment Analysis;Batch Processing;Information Extraction;Spam Detection;Topic Modeling;Attention;Perceptron;Semantic Analysis;Long Short-Term Memory;Performance Tuning;word2vec;Scaling;Latent Dirichlet Allocation;Singular Value Decomposition;Sequence-to-sequence Models;Backpropagation
Об этой книге
Дорожная карта
Что вы найдете в книге
О коде
Дискуссионный форум liveBook
Об авторах
Об иллюстрации на обложке
От издательства
Благодарности
Хобсон Лейн
Ханнес Макс Хапке
Коул Ховард
Вступление
Предисловие
Часть I. Машины
обработки слов
Глава 1. Знакомство с технологией NLP
1.1. Естественный язык в сравнении с языком программирования
1.2. Магия
1.2.1. Машины, которые общаются
1.2.2. Математика
1.3. Практическое применение
1.4. Язык глазами компьютера
1.4.1. Язык замков
1.4.2. Регулярные выражения
1.4.3. Простой чат-бот
1.4.4. Другой вариант
1.5. Краткая экскурсия по гиперпространству
1.6. Порядок слов и грамматика
1.7. Конвейер чат-бота на естественном языке
1.8. Углубленная обработка
1.9. IQ естественного языка
Резюме
Глава 2. Составление словаря: токенизация слов
2.1. Непростые задачи: обзор стемминга
2.2. Построение словаря с помощью токенизатора
2.2.1. Скалярное произведение
2.2.2. Измерение пересечений мультимножеств слов
2.2.3. Улучшение токенов
2.2.4. Расширяем словарь n-граммами
2.2.5. Нормализация словаря
2.3. Тональность
2.3.1. VADER — анализатор тональности на основе правил
2.3.2. Наивный байесовский классификатор
Резюме
Глава 3. Арифметика слов: векторы TF-IDF
3.1. Мультимножество слов
3.2. Векторизация
3.2.1. Векторные пространства
3.3. Закон Ципфа
3.4. Тематическое моделирование
3.4.1. Возвращаемся к закону Ципфа
3.4.2. Ранжирование по релевантности
3.4.3. Инструменты
3.4.4. Альтернативы
3.4.5. Okapi BM25
3.4.6. Что дальше?
Резюме
Глава 4. Поиск смысла слов по их частотностям: семантический анализ
4.1. От частотностей слов до оценок тем
4.1.1. Векторы TF-IDF и лемматизация
4.1.2. Векторы тем
4.1.3. Мысленный эксперимент
4.1.4. Алгоритм оценки тем
4.1.5. LDA-классификатор
4.2. Латентно-семантический анализ
4.2.1. Воплощаем мысленный эксперимент на практике
4.3. Сингулярное разложение
4.3.1. U — левые сингулярные векторы
4.3.2. S — сингулярные значения
4.3.3. VT — правые сингулярные векторы
4.3.4 Ориентация SVD-матрицы
4.3.5. Усечение тем
4.4. Метод главных компонент
4.4.1. PCA на трехмерных векторах
4.4.2. Хватит возиться с лошадьми, возвращаемся к NLP
4.4.3. Применение PCA для семантического анализа СМС
4.4.4. Применение усеченного SVD для семантического анализа СМС
4.4.5. Насколько хорошо LSA классифицирует спам?
4.5. Латентное размещение Дирихле
4.5.1. Основная идея LDiA
4.5.2. Тематическая модель LDiA для СМС
4.5.3. LDiA + LDA = классификатор спама
4.5.4. Более честное сравнение: 32 темы LDiA
4.6. Расстояние и подобие
4.7. Стиринг и обратная связь
4.7.1. Линейный дискриминантный анализ
4.8. Мощь векторов тем
4.8.1. Семантический поиск
4.8.2. Дальнейшие усовершенствования
Резюме
Часть II. Более глубокое обучение: нейронные сети
Глава 5. Первые шаги в нейронных сетях: перцептроны и метод обратного распространения ошибки
5.1. Нейронные сети, список ингредиентов
5.1.1. Перцептрон
5.1.2. Числовой перцептрон
5.1.3. Коротко про смещение
5.1.4. Айда кататься на лыжах — поверхность ошибок
5.1.5. Поднимаемся со стула и на склон
5.1.6. Проведем небольшую реорганизацию
5.1.7. Keras: нейронные сети на Python
5.1.8. Вперед и вглубь
5.1.9. Нормализация: «стильный» входной сигнал
Резюме
Глава 6. Умозаключения на основе векторов слов (Word2vec)
6.1. Семантические запросы и аналогии
6.1.1. Вопросы на аналогию
6.2. Векторы слов
6.2.1. Векторные умозаключения
6.2.2. Вычисление представлений Word2vec
6.2.3. Использование модуля gensim.word2vec
6.2.4. Как сгенерировать свои собственные представления векторов слов
6.2.5. Word2vec по сравнению с GloVe (моделью глобальных векторов)
6.2.6. fastText
6.2.7. Word2vec по сравнению с LSA
6.2.8. Визуализация связей между словами
6.2.9. Искусственные слова
6.2.10. Определение сходства документов с помощью Doc2vec
Резюме
Глава 7. Сверточные нейронные сети
7.1. Усвоение смысла
7.2. Инструментарий
7.3. Сверточные нейронные сети
7.3.1. Стандартные блоки
7.3.2. Размер шага (свертки)
7.3.3. Формирование фильтров
7.3.4. Дополнение
7.3.5. Обучение
7.4. Окна и правда узкие
7.4.1. Реализация на Keras: подготовка данных
7.4.2. Архитектура сверточной нейронной сети
7.4.3. Субдискретизация
7.4.4. Дропаут
7.4.5. Вишенка на торте
7.4.6. Приступаем к обучению
7.4.7. Применение модели в конвейере
7.4.8. Что дальше?
Резюме
Глава 8. Нейронные сети с петлями: рекуррентные нейронные сети
8.1. Запоминание в нейронных сетях
8.1.1. Обратное распространение ошибки во времени
8.1.2. Когда что обновлять
8.1.3. Краткое резюме
8.1.4. Всегда есть какой-нибудь подвох
8.1.5. Рекуррентные нейронные сети и Keras
8.2. Собираем все вместе
8.3. Приступим к изучению прошлого
8.4. Гиперпараметры
8.5. Предсказание
8.5.1. Сохранение состояния
8.5.2. И в другую сторону
8.5.3. Что это такое?
Резюме
Глава 9. Эффективное сохранение информации с помощью сетей с долгой краткосрочной памятью
9.1. Долгая краткосрочная память
9.1.1. Обратное распространение ошибки во времени
9.1.2. А как же проверка на практике?
9.1.3. «Грязные» данные
9.1.4. Возвращаемся к «грязным» данным
9.1.5. Работать со словами сложно. С отдельными буквами — проще
9.1.6. Моя очередь говорить
9.1.7. Моя очередь говорить понятнее
9.1.8. Мы научились, как говорить, но не что говорить
9.1.9. Другие виды памяти
9.1.10. Углубляемся
Резюме
Глава 10. Модели sequence-to-sequence и механизм внимания
10.1. Архитектура типа «кодировщик — декодировщик»
10.1.1. Декодирование вектора идеи
10.1.2. Знакомо, правда?
10.1.3. Диалог с помощью sequence-to-sequence
10.1.4. Обзор LSTM
10.2. Компонуем конвейер sequence-to-sequence
10.2.1. Подготавливаем набор данных для обучения модели sequence-to-sequence
10.2.2. Модель sequence-to-sequence в Keras
10.2.3. Кодировщик последовательностей
10.2.4. Декодировщик идеи
10.2.5. Формируем сеть sequence-to-sequence
10.3. Обучение сети sequence-to-sequence
10.3.1. Генерация выходных последовательностей
10.4. Создание чат-бота с помощью сетей sequence-to-sequence
10.4.1. Подготовка корпуса для обучения
10.4.2. Формирование словаря символов
10.4.3. Генерируем унитарные тренировочные наборы данных
10.4.4. Обучение нашего чат-бота sequence-to-sequence
10.4.5. Формируем модель для генерации последовательностей
10.4.6. Предсказание последовательности
10.4.7. Генерация ответа
10.4.8. Общаемся с нашим чат-ботом
10.5. Усовершенствования
10.5.1. Упрощаем обучение с помощью обработки данных по корзинам
10.5.2. Механизм внимания
10.6. На практике
Резюме
Часть III. Поговорим серьезно. Реальные задачи NLP
Глава 11. Выделение информации: выделение поименованных сущностей и формирование ответов на вопросы
11.1. Поименованные сущности и отношения
11.1.1. База знаний
11.1.2. Выделение информации
11.2. Регулярные паттерны
11.2.1. Регулярные выражения
11.2.2. Выделение информации и признаков при машинном обучении
11.3. Заслуживающая выделения информация
11.3.1. Выделение GPS-координат
11.3.2. Выделение дат
11.4. Выделение взаимосвязей (отношений)
11.4.1. Частеречная (POS) разметка
11.4.2. Нормализация имен сущностей
11.4.3. Нормализация и выделение отношений
11.4.4. Паттерны слов
11.4.5. Сегментация
11.4.6. Почему не получится разбить по ('.!?')
11.4.7. Сегментация предложений с помощью регулярных выражений
11.5. На практике
Резюме
Глава 12. Начинаем общаться: диалоговые системы
12.1. Языковые навыки
12.1.1. Современные подходы
12.1.2. Гибридный подход
12.2. Подход сопоставления с паттернами
12.2.1. Сопоставляющий с паттернами чат-бот на основе AIML
12.2.2. Сетевое представление сопоставления с паттерном
12.3. «Заземление»
12.4. Информационный поиск
12.4.1. Проблема контекста
12.4.2. Пример чат-бота на основе информационного поиска
12.4.3. Чат-бот на основе поиска
12.5. Порождающие модели
12.5.1. Разговор в чате про NLPIA
12.5.2. Достоинства и недостатки каждого из подходов
12.6. Подключаем привод на четыре колеса
12.6.1. Will — залог нашего успеха
12.7. Процесс проектирования
12.8. Маленькие хитрости
12.8.1. Задавайте вопросы с предсказуемыми ответами
12.8.2. Развлекайте пользователей
12.8.3. Если все остальное не дает результата — ищите!
12.8.4. Стремитесь к популярности
12.8.5. Объединяйте людей
12.8.6. Проявляйте эмоции
12.9. На практике
Резюме
Глава 13. Масштабирование: оптимизация, распараллеливание и обработка по батчам
13.1. Слишком много хорошего (данных)
13.2. Оптимизация алгоритмов NLP
13.2.1. Индексация
13.2.2. Продвинутая индексация
13.2.3. Продвинутая индексация с помощью пакета Annoy
13.2.4. Зачем вообще использовать приближенные индексы
13.2.5. Решение проблемы индексации: дискретизация
13.3. Алгоритмы с постоянным расходом RAM
13.3.1. Gensim
13.3.2. Вычисления на графах
13.4. Распараллеливание вычислений NLP
13.4.1. Обучение моделей NLP на GPU
13.4.2. Арендовать или покупать?
13.4.3. Варианты аренды GPU
13.4.4. Тензорные процессоры
13.5. Сокращение объема потребляемой памяти при обучении модели
13.6. Как почерпнуть полезную информацию о модели с помощью TensorBoard
13.6.1. Визуализация вложений слов
Резюме
Приложения
Приложение А. Инструменты для работы с NLP
A.1. Anaconda3
A.2. Установка NLPIA
A.3. IDE
A.4. Система управления пакетами Ubuntu
A.5. Mac
A.5.1. Система управления пакетами для Macintosh
A.5.2. Дополнительные пакеты
A.5.3. Настройки
A.6. Windows
A.6.1. Переходите в виртуальность
A.7. Автоматизация в пакете NLPIA
Приложение Б. Эксперименты с Python и регулярные выражения
Б.1. Работа со строковыми значениями
Б.1.1. Типы строк: str и bytes
Б.1.1. Шаблоны в Python: .format()
Б.2. Ассоциативные массивы в Python: dict и OrderedDict
Б.3. Регулярные выражения
Б.3.1. | — OR
Б.3.2. () — группы
Б.3.3. [] — классы символов
Б.4. Стиль
Б.5. Овладейте в совершенстве
Приложение В. Векторы и матрицы: базовые элементы линейной алгебры
В.1. Векторы
В.2. Расстояния
Приложение Г. Инструменты и методы машинного обучения
Г.1. Выбор данных и устранение предвзятости
Г.2. Насколько хорошо подогнана модель
Г.3. Знание — половина победы
Г.4. Перекрестное обучение
Г.5. Притормаживаем модель
Г.5.1. Регуляризация
Г.5.2. Дропаут
Г.5.3. Нормализация по мини-батчам
Г.6. Несбалансированные тренировочные наборы данных
Г.6.1. Супердискретизация
Г.6.2. Субдискретизация
Г.6.3. Дополнение данных
Г.7. Метрики эффективности
Г.7.1. Оценка эффективности классификатора
Г.7.2. Оценка эффективности регрессора
Г.8. Советы от профессионалов
Приложение Д. Настройка GPU
на AWS
Д.1. Шаги создания экземпляра с GPU на AWS
Д.1.1. Контроль затрат
Приложение Е. Хеширование с учетом локальности
Е.1. Векторы высокой размерности принципиально отличны
Е.1.1. Индексы и хеши векторного пространства
Е.1.2. Мыслим многомерно
Е.2. Многомерная индексация
Е.2.1. Хеширование с учетом локальности
Е.2.2. Приближенный метод ближайших соседей
Е.3. Предсказание лайков
Источники информации
Приложения и идеи проектов
Курсы и учебные руководства
Утилиты и пакеты
Научные статьи и обсуждения
Конкурсы и премии
Наборы данных
Поисковые системы
Глоссарий
Акронимы
Терминология