Обработка естественного языка в действии

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

«Обработка естественного языка в действии» — практическое руководство по обработке и генерации текстов на естественном языке. В этой книге мы снабдим вас всеми инструментами и методиками, необходимыми для создания прикладных NLP-систем с целью обеспечения работы виртуального помощника (чат-бота), спам-фильтра, программы — модератора форума, анализатора тональностей, программы построения баз знаний, интеллектуального анализатора текста на естественном языке или практически любого другого NLP-приложения, какое только можно себе представить. Книга ориентирована на Python-разработчиков среднего и высокого уровня. Значительная часть книги будет полезна и тем читателям, которые уже умеют проектировать и разрабатывать сложные системы, поскольку в ней содержатся многочисленные примеры рекомендуемых решений и раскрываются возможности самых современных алгоритмов NLP. Хотя знание объектно-ориентированного программирования на Python может помочь создавать лучшие системы, для использования приводимой в этой книге информации оно не обязательно. https://github.com/totalgood/nlpia

Author(s): Лейн Хобсон, Хапке Ханнес, Ховард Коул
Series: Для профессионалов
Publisher: Питер
Year: 2020

Language: Russian
Pages: 576
City: СПб.
Tags: nlp

Краткое содержание
Оглавление
Предисловие
Вступление
Благодарности
Хобсон Лейн
Ханнес Макс Хапке
Коул Ховард
Об этой книге
Дорожная карта
Что вы найдете в книге
О коде
Дискуссионный форум 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. Улучшение токенов
Как работают регулярные выражения
Улучшенные регулярные выражения для разделения слов
Когда имеет смысл компилировать шаблоны регулярных выражений
Как использовать новый модуль regex в Python
Сокращения
Токенизация неформального текста из социальных сетей, таких как Twitter и Facebook
2.2.4. Расширяем словарь n-граммами
Все мы граммы для 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. Алгоритм оценки тем
«Дальние родственники» LSA
4.1.5. LDA-классификатор
Еще один «дальний родственник»
4.2. Латентно-семантический анализ
4.2.1. Воплощаем мысленный эксперимент на практике
Mad Libs
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 классифицирует спам?
Расширения LSA и SVD
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
Подход skip-gram
Что такое многомерная логистическая функция
Как нейронная сеть усваивает векторные представления
Поиск векторов слов с помощью линейной алгебры
Подход с непрерывным мультимножеством слов
Skip-граммы и CBOW: какой подход когда использовать
Вычислительные приемы Word2vec
6.2.3. Использование модуля gensim.word2vec
6.2.4. Как сгенерировать свои собственные представления векторов слов
Этапы предварительной обработки
Обучение предметно-ориентированной модели Word2vec
6.2.5. Word2vec по сравнению с GloVe (моделью глобальных векторов)
6.2.6. fastText
Использование предобученных моделей 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.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
AIML 1.0
Интерпретатор AIML на Python
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 — залог нашего успеха
Установка Will
Привет, 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.2. Шаблоны в 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. Предсказание лайков
Источники информации
Приложения и идеи проектов
Курсы и учебные руководства
Утилиты и пакеты
Научные статьи и обсуждения
Модели векторных пространств и семантический поиск
Финансы
Системы формирования ответов на вопросы
Глубокое обучение
Сети LSTM и RNN
Конкурсы и премии
Наборы данных
Поисковые системы
Поисковые алгоритмы
Поисковые системы с открытым исходным кодом
Утилиты полнотекстовой индексации с открытым исходным кодом
Манипулятивные поисковые системы
Менее манипулятивные поисковые системы
Распределенные поисковые системы
Глоссарий
Акронимы
Терминология