В предыдущем материале мы узнали, как подружиться с питоном, если вы гуманитарий. Now, we need to go deeper: разбираемся, является ли естественный язык своеобразным кодом, который можно скормить машине и с чего начать NLP, если у вас лапки.
Шаг 1. Выяснить, что такое NLP.
NLP расшифровывается как Natural Language Processing и представляет собой целое направление, связанное с обработкой и распознаванием языковых данных. На сегодняшний день в числе достижений NLP можно отметить машинный перевод, чат-ботов, голосовых помощников, автоматических переводчиков и умную контекстную рекламу.
Где используется
Во множестве приложений и инструментов, от роботов в колл-центрах, электронных консультантов на сайтах, таргетированной рекламы и Google Translate, до проверки грамматики в Microsoft Word и Grammarly. Не забудем о голосовых помощниках вроде Siri, Алисы и Алексы.
Как работает
Основная задача и идея NLP — превратить неструктурированные (сырые) языковые данные в форму, понятную компьютеру.
В чем сложности
Сама природа человеческого естественного языка делает некоторые задачи NLP непростыми: не все закономерности можно эффективно формализовать, некоторые феномены являются очень абстрактными (например, до сих пор эффективно не решена задача автоматического обнаружения сарказма, иронии и импликатур в текстах). Некоторые — более простые, например, описание изменения окончаний у существительных.
Чтобы ориентироваться в море задач, нам нужно сделать следующий шаг:
Шаг 2. Познакомиться с арсеналом методов
В Natural Language Processing существует множество методов работы с данными, и для каждого типа задачи необходимо выбрать свой. Вот некоторые из них:
Подходы, основанные на правилах (rule-based):
(1) Определяем языковые правила, которые описывают поведение данных (например, как у существительных в немецком формируется множественное число)
(2) Задаем порядок, как правила должны применяться к данным.
(3) Применяем (пишем программу)
С помощью правил можно решить такие задачи как:
- лемматизация — приведение словоформы к словарной форме (например, если в анализируемом предложении было слово «лапки», компьютер, чтобы понять вас, преобразует его в «лапка»);
- морфологический разбор — разделение слов на составляющие (морфемы);
- токенизация — разделение текста на слова;
- разбор слов по частям речи;
- синтаксический анализ — разбор предложения по членам и определение структуры их отношений (чаще всего в виде дерева).
Обычно у правиловых методов высокая точность, они могут давать хороший результат при специфичных задачах. Из минусов — rule-based методы плохо масштабируются: сложно написать большой проект полностью на правилах, обычно метод используется точечно для решения конкретных задач (например, токенизации) и в тандеме с методами из машинного обучения.
Классическое машинное обучение
Классический ML делится на обучение с учителем (supervised ML) и без учителя (unsupervised ML). Идея классической ML-модели: с помощью размеченных данных обучить модель решать задачу, затем потестить на новых данных, которые не использовались при обучении.
Так как мы тренируем математическую модель, наши данные должны быть представлены в числовом виде. (Например, капитализацию слов можно представить как 1.0 and 0.0). Данные обычно представлены как вектора фиксированной длины (например, слова, по отношению к другим словам — см. векторную семантику). ML-модели имеют бòльшую полноту по сравнению с методами на правилах. К минусам можно отнести необходимость иметь размеченные данные, они не всегда доступны.
Типичные алгоритмы классического ML, используемые в NLP — это:
- Support Vector Machine
- Linear regression
- Logistic regression
- K Nearest Neighbours
- Decision trees
Unsupervised ML или обучение без учителя не требует размеченных датасетов, задача алгоритма — самому разобраться в закономерностях данных. Типичные алгоритмы ML без учителя в NLP — это алгоритмы кластеризации.
Методы классического машинного обучения хороши в плане точности и полноты, однако требовательны к подбору признаков. Прежде чем применить модель, исследователю надо понять, какие именно признаки объектов (features) хорошо сработают в задаче. Ответ на этот вопрос часто неочевиден и требует экспериментов, порой затратных. В какой-то момент появилась даже специальная специальность внутри ML — feature engineering, инженерия признаков. Но есть ещё один вариант.
Глубинное машинное обучение.
Для глубокого обучения не требуется сложная разметка данных, задача примерно такая же: представить текст как вектор. Однако теперь нейросеть самостоятельно выберет самые главные признаки. DL-методы дают высокую точность, однако среди недостатков — они медленнее правиловых методов и классического ML, а кроме того, требуется больше вычислительных мощностей и высокое качество данных для обучения.
Шаг 3. Осознать поле типичных NLP-задач
Их много: автоматическое распознавание речи, машинный перевод,классификация текстов и тематическое моделирование, снятие многозначности, извлечение информации (именованных сущностей, ключевых слов и тд), автоматическая частеречная разметка,парсинг непосредственных составляющих, разрешение кореференции, dependency parsing, исправление опечаток(спелл-чекинг), извлечение отношений, semantic role labeling, парсинг(синтаксический, семантический, и др), вопросно-ответные системы, создание онтологий, баз и графов знаний, диалоговые системы, анализ тональности, дистрибутивная семантика, автореферирование текста, генерация текста и это еще не все.
Шаг 4. Найти полезные Ресурсы
Чтение:
- Классическая книга Дэна Журафски и Криса Мэннинга
- Йоав Голдберг с рассказом о DL в NLP
- Foundations of Statistical Natural Language Processing (Christopher D Manning & Hinrich Schutze)
- NLTK book
- Материалы от NLP Stanford Group
- Natural Language Processing by Jacob Eisenstein
Датасеты:
Онлайн-курсы
- Natural Language Processing
- Applied Text Mining in Python
- Natural Language Processing with Dan Jurafsky and Chris Manning, 2012
- Курс от университета Стэнфорда по DL in NLP
Сайты и блоги
Готово: теперь вы можете выбрать задачу, метод(ы) и начать воплощать задуманное!
PS: методы можно комбинировать
Источники
- Using computers to understand human language
- Gentle Start to Natural Language Processing using Python
- A HIGH-LEVEL GUIDE TO NATURAL LANGUAGE PROCESSING TECHNIQUES
- How to get started in NLP
- A Simple Introduction to Natural Language Processing