Обработка естественного языка или сокращенно НЛП в последнее время привлекла значительное внимание и популярность. Во многом это связано с достижениями алгоритмов НЛП в их способности понимать и генерировать человекоподобный текст. Одним из лучших примеров этого прогресса является выпуск печально известной GPT-3, модели обработки языка, разработанной OpenAI, которая установила новый стандарт возможностей НЛП.

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

Что такое НЛП?

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

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

Проще говоря, цель НЛП – облегчить общение между людьми и компьютерами.

Как работает НЛП?

Хорошо, теперь, когда мы знаем, что такое НЛП, давайте копнем немного глубже и посмотрим, какие методы и концепции делают возможным общение между людьми и компьютерами. Есть много способов построить модель НЛП, но, вообще говоря, мы должны предпринять следующие шаги, чтобы построить модель НЛП:

1. Очистка и стандартизация текстовых данных

2. Предварительная обработка текстовых данных

3. Разработка функций

4. Обучение моделей

5. Развертывание

Очистка и стандартизация текстовых данных:

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

После того, как мы очистили наш текст, следующее, что мы хотим сделать, это стандартизировать наши данные. Есть много способов сделать это, например: преобразование текста в нижний или верхний регистр, выделение/иммунизация текста (приведение слов к их базовой форме), замена слов синонимами и т. д. На данный момент , я буду переводить весь текст в нижний регистр, потому что хочу, чтобы этот пост был максимально простым.

Текст перед:Я прочитал на https/some-news-site/1e$%#r5$6, что в следующем году цена BTC вырастет!!!

Текст после: я читал, что в следующем году цена на BTC вырастет

Предварительная обработка текстовых данных:

Поскольку компьютеры не могут «читать» текст, а могут только понимать и обрабатывать числа, мы должны найти способ преобразовывать текстовые данные в числовые представления, понятные компьютеру. Вот где вступает в действие токенизация. Токенизация — это процесс, который разбивает текст на более мелкие единицы, называемые токенами. После этого каждому токену присваивается номер, который его представляет, и таким образом он может быть обработан компьютером. Токеном может быть практически любая часть текста, например буква, слово или даже целое предложение. GPT-3 даже использует «подслова» в качестве токенов (подслова — это небольшие фрагменты слов, которые можно комбинировать, чтобы сформировать полное слово). Токенизируя текстовые данные, мы можем преобразовать их в числовую форму, которую компьютер сможет анализировать и обрабатывать более эффективно.

После токенизации наших данных мы должны принять очень важное решение: удалять стоп-слова или нет? Прежде чем мы займемся этой проблемой, давайте быстро поговорим о том, что такое стоп-слово:

Проще говоря, стоп-слово — это слово, которое очень часто используется в тексте и не имеет большого значения.

Хотя стоп-слова удаляют довольно часто, это не установлено и не установлено, и мы не должны удалять их в каждом сценарии.

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

Еще одна вещь, которую мы должны иметь в виду, это то, что даже если мы решим удалить стоп-слова, мы должны быть очень осторожны в нашем выборе стоп-слов, потому что мы должны убедиться, что мы не теряем никакой информации и смысл текста.

Например, если мы работаем над проблемой классификации текста, которая пытается разделить хорошие и плохие обзоры продуктов, и у нас есть такой текст:

Вентилятор не работал должным образом! Он не нагревал комнату, как должен! Категорически не рекомендую!

Слова отрицания (не, ни, никогда) считаются стоп-словами в NLTK, spacy и sklearn, что означает, что здесь слово «не» будет удалено большинством библиотек, используемых для предварительной обработки текста. Если мы передадим текст, упомянутый выше, после того, как мы его очистим и предварительно обработаем, мы получим следующий вывод:

ожидается работа вентилятора, рекомендуется тепловая комната

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

Разработка функций:

После того, как мы предварительно обработали наши текстовые данные, пришло время перейти к следующему шагу: разработке функций. Здесь мы собираемся создавать функции из текстовых данных, которые можно использовать для обучения модели машинного обучения. Есть много способов решить эту задачу, некоторые из них: частотно-обратная частота документа (TF-IDF), пакет слов, встраивание слов и многое другое.

Чтобы не усложнять задачу, я приведу пример с векторизатором счета. Работа векторизатора счета заключается в создании матрицы терминов документа (DTM). Матрица терминов документов — это матрица, в которой каждая строка представляет документ, а каждый столбец — термин (токен). Значение в каждой ячейке матрицы представляет собой количество раз, когда термин встречается в документе.

Проще говоря: векторизатор счетчика использует количество каждого уникального термина (лексемы) в данном тексте в качестве своих признаков.

Здесь я должен отметить, что, хотя векторизация Count — это простой и широко используемый метод разработки признаков, он имеет некоторые ограничения, такие как неучет контекста или относительной важности. терминов в документе. Другие методы, такие как термин частотно-обратная частота документа (TF-IDF), устраняют эти ограничения путем взвешивания терминов на основе их относительной важности.

Обучение модели и развертывание:

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

Разреженная матрица — это матрица, в которой большинство элементов равно 0.

Отличным примером модели, которая может обрабатывать разреженные матрицы, является XGBoost.

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

Спасибо, что прочитали эту статью, и было бы очень полезно, если бы вы хлопнули в ладоши! Кроме того, я буду публиковать гораздо больше контента на тему науки о данных, поэтому, если вам нравится то, что вы читаете, подписывайтесь на меня!
Если вы хотите связаться со мной, вы можете сделать это через мой Линкедин!

Авторы изображений для этого поста:
1: https://the-decoder.com/wp-content/uploads/2022/12/midjourney_a_happy_robot_chatting_with_a_human_digital_art-375x250.png
2: https:// preview.redd.it/rdcgembps8f41.png?auto=webp&s=05f784af50fcce988a8fbc808c3ccff0df3eac8a
3:https://mlwhiz.com/blog/2019/02/08/deeplearning_nlp_conventional_methods/
4: https ://cmdlinetips.com/wp-content/uploads/2018/03/Sparse_Matrix.png
5:https://www.researchgate.net/publication/348025909/figure/fig2/AS:1020217916416002@ 1620250314481/Упрощенная структура-XGBoost.ppm