Обзор НЛП

Добро пожаловать в Обработку естественного языка. Язык является важным средством человеческого общения. Он позволяет нам передавать информацию, выражать свои идеи и давать указания другим. Некоторые философы утверждают, что это позволяет нам формировать сложные мысли и рассуждать о них. Это может оказаться критическим компонентом человеческого интеллекта. Теперь рассмотрим различные искусственные системы, с которыми мы взаимодействуем каждый день: телефоны, автомобили, веб-сайты, кофемашины. Естественно ожидать, что они будут способны обрабатывать и понимать человеческий язык. Тем не менее, компьютеры все еще отстают. Без сомнения, мы добились невероятного прогресса в области обработки естественного языка, но впереди еще долгий путь. И именно это делает это захватывающей и динамичной областью обучения.

Что мешает компьютерам понять нас? Одним из недостатков человеческих языков или особенностью, в зависимости от того, как вы на это смотрите, является отсутствие четко определенной структуры. Чтобы понять, как это усложняет задачу, давайте сначала рассмотрим некоторые более структурированные языки. Математика, например, использует структурированный язык. Когда я пишу, что у равно 2x плюс 5, нет никакой двусмысленности в том, что я хочу передать. Я говорю, что переменная у связана с переменной х как два умножить на х плюс пять.

Рассмотрим этот оператор SQL. ВЫБЕРИТЕ имя, адрес электронной почты ОТ пользователей ГДЕ имя НРАВИТСЯ А% Мы просим базу данных вернуть имена и адреса электронной почты всех пользователей, имена которых начинаются с буквы А. Эти языки спроектированы так, чтобы быть максимально однозначными и подходят для компьютеров. обрабатывать.

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

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

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

Контекст решает все

Так что же мешает компьютерам стать такими же способными, как люди, в понимании естественного языка? Часть проблемы заключается в изменчивости и сложности наших предложений. Рассмотрим этот отрывок из рецензии на фильм. «Меня заманили посмотреть на это обещанием остроумного кусочка старомодного веселья и интриги. Я был обманут. “

Хотя он начинается с некоторых потенциально положительных слов, он оказывается резко негативным отзывом. Предложения, подобные этому, могут быть несколько интересными для нас, но компьютеры склонны делать ошибки, пытаясь их проанализировать. Но есть более серьезная проблема, которая делает НЛП сложнее, чем вы думаете. Взгляните на это предложение «Диван не прошел через дверь, потому что он был слишком узким».

Что оно относится к? Ясно, что «это» относится к двери.

Теперь рассмотрим небольшую вариацию этого предложения. «Диван не пролезал в дверь, потому что был слишком широк». Что означает «это» в данном случае? Вот диван. Подумай об этом. Чтобы понять правильное значение или семантику предложения, вы имплицитно применили свое знание о физическом мире, что широкие вещи не проходят через узкие вещи.

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

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

Давайте посмотрим на обычный конвейер НЛП. Он состоит из трех этапов: обработка текста, извлечение признаков и моделирование.

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

Обработка текста

Рассмотрим подробнее обработку текста. Первый вопрос, который приходит на ум, — зачем нам обрабатывать текст? Почему мы не можем кормить его напрямую? Чтобы понять это, подумайте, откуда мы взяли этот текст.

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

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

После того, как вы получили обычный текст, может потребоваться дополнительная обработка. Например, использование заглавных букв обычно не меняет значения слова. Мы можем преобразовать все слова в один и тот же регистр, чтобы они не обрабатывались по-разному.

Знаки препинания, которые мы используем для обозначения пауз и т. д., также могут быть удалены. Некоторые общеупотребительные слова в языке часто помогают обеспечить структуру, но не добавляют смысла. Например, a, and, the, of, are и так далее.

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

Извлечение признаков

Хорошо. Теперь у нас есть чистый нормализованный текст. Можем ли мы ввести это в статистическую модель или модель машинного обучения? Не совсем. Давайте посмотрим, почему. Текстовые данные представлены на современных компьютерах с использованием кодировки, такой как ASCII или Unicode, которая сопоставляет каждый символ с числом. Компьютер хранит и передает эти значения в виде двоичных чисел, нулей и единиц. Эти числа также имеют неявный порядок. 65 меньше 66, что меньше 67. Но означает ли это, что А меньше В, а В меньше и С? Нет. На самом деле, это было бы неправильным предположением и могло бы ввести в заблуждение наши алгоритмы обработки естественного языка.

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

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

Однако для статистических моделей вам нужно какое-то числовое представление. Даже в этом случае вы должны думать о конечной цели. Если вы пытаетесь выполнить задачу на уровне документа, такую ​​как обнаружение спама или анализ настроений, вы можете использовать представления для каждого документа, такие как набор слов или doc2vec.

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

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

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

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

Возможности безграничны.