Естественный язык - это язык, на котором мы пишем, говорим и понимаем. Почти все известные в мире языки подпадают под действие естественных языков. Обработка естественного языка - это задача обработки письменных форм языка и обеспечения их понимания компьютером.

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

Сегментация предложений

Преобразование в нижний регистр

Токенизация слов

Удаление знаков препинания, специальных символов и игнорируемых слов

Лемматизация / стемминг

Создание модели пакета слов / модели TF-IDF

Поговорим о каждом из них по отдельности.

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

Обратите внимание, что сегментация предложений зависит от характера документа и типа границ предложения, которых придерживается документ. Например, в одном документе текст можно разделить на предложения на основе «.» или точка в другом документе, текст может быть разделен на основе символа новой строки или «\ n». Таким образом, перед тем, как приступить к сегментации предложения, важно просмотреть свой документ и найти разумную границу предложения, прежде чем пытаться сегментировать предложения.

На рисунке выше показан пример того, как spacy помогает выполнить сегментацию предложений, разделив данный текст на 2 предложения с помощью точки.

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

Одним из хороших контрпримеров, где преобразование в нижний регистр может привести к потере важной информации, является проблема распознавания именованных сущностей (NER). Идентификация именованных сущностей становится намного более сложной задачей для системы, если все слова в предложении переводятся в нижний регистр. Даже библиотеки, такие как spacy и т. Д., Не могут точно идентифицировать именованные объекты, если все слова преобразованы в нижний регистр. Таким образом, важно понять нюансы вашей проблемы, прежде чем пытаться вводить все слова в документе в нижний регистр.

Следующая задача, которую необходимо понять, - это токенизация Word. Токенизация - это процесс разделения предложения на слова. Это сделано для того, чтобы мы могли понять синтаксическую и семантическую информацию, содержащуюся в каждом предложении (корпуса). Таким образом, мы расшифровываем релевантность предложения, анализируя его слово за словом, тем самым убеждаясь, что не происходит потери информации. Можно выполнить токенизацию предложения на основе различных эвристик или границ слов, таких как пробел, табуляция и т. Д. Один из таких примеров показан ниже.

Как видите, spacy определяет границы слов и помогает токенизировать данный текст.

Затем мы удаляем знаки препинания, чтобы убедиться, что у нас нет «,», «.» в нашем списке токенов. Это важно для нескольких типов задач, потому что мы обычно не заботимся о пунктуации при обработке естественного языка с использованием алгоритмов машинного или глубокого обучения. Таким образом, их удаление кажется разумным решением. Можно либо удалить знаки препинания, просматривая список токенов, либо удалить их из каждого предложения с самого начала. Последний показан ниже.

Следующим шагом обычно является удаление специальных символов, таких как «! @ # $% ^ & *», из списка токенов, полученных после токенизации. Это делается по мере необходимости и сильно зависит от типа проблемы, которую вы пытаетесь решить. Например, вы могли бы пытаться обнаружить твиты в данном корпусе, и удаление специальных символов, таких как '@', может не помочь вам в ваших усилиях, поскольку люди обычно используют '@' в твитах. Ниже показан фрагмент кода, который помогает удалить любые специальные символы из предложения (с использованием библиотеки регулярных выражений python: re), если этого требует ваша проблема.

Еще один важный шаг - удаление игнорируемых слов. Стоп-слова - это наиболее часто встречающиеся слова на любом языке. Для удобства предположим, что английский является нашим основным языком. Некоторые из наиболее распространенных стоп-слов: «in», «and», «the», «a», «an», и т. Д. Это важный шаг, потому что вам не нужна ваша модель. тратить время на слова, которые не несут какого-либо значимого значения, а игнорируемые слова практически никогда не содержат никакого значения сами по себе. Их можно очень легко удалить из предложения или списка токенов без большой потери информации, тем самым ускоряя процесс обучения вашей модели. Таким образом, почти всегда рекомендуется удалить их, прежде чем пытаться обучать модель.

На приведенном изображении показано, как это сделать с помощью nltk.

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

Лемматизация использует морфологический анализ и словарь для определения базовой словоформы (или леммы), в то время как Stemming обычно обрезает окончания слов, такие как «ing», «s», и т. Д. В надежде найти базовое слово. . На изображении ниже показана разница между ними.

Как вы можете видеть, лемматизатор на изображении выше правильно определяет, что слово «корпус» имеет базовую форму «корпус», в то время как Stemmer не может этого определить. Однако стеммер правильно определяет «рок» как базовую форму для «качание». Таким образом, использование либо лемматизации, либо стемминга, либо того и другого в значительной степени зависит от требований вашей задачи.

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

Приведенный выше код сначала берет корпус, содержащий 4 предложения. Затем он использует sklearn’s CountVectorizer для создания модели мешка слов. Другими словами, он создает модель, которая содержит информацию о том, сколько раз каждое уникальное слово в корпусе (которое мы получаем с помощью vectorizer.get_feature_names ()) встречается в каждом предложении. Ради легкомыслия я добавил столбец Предложение, который помогает нам понять, какое значение счетчика соответствует какому предложению. Кроме того, последняя строка кода создает файл bow.csv, который содержит все вышеупомянутые счетчики, соответствующие всем словам, как показано ниже.

Другая такая модель называется моделью обратной частоты документа (TF-IDF).. Эта модель находит компромисс между периодичностью термина (TF) и обратной частотой документа (IDF). Частота термина - это количество раз, когда каждое слово встречается в данном текстовом корпусе или документе (как показано на иллюстрации модели «Мешок слов»). Обратная частота документа - это обратная величина, обратная тому, сколько раз слово встречается в документах в корпусе. Другими словами, если частота термина определяет, насколько распространено слово, функция Inverse Document Frequency определяет, насколько редко встречается слово.

Теперь давайте посмотрим, как это сделать на Python.

Приведенный выше код сначала берет корпус, содержащий 4 предложения. Затем он использует sklearn’s TfidfVectorizer для создания модели TF-IDF, которая содержит их значения TF-IDF. Далее код создает файл tfidf.csv, который содержит уникальные слова корпуса в виде столбцов вместе с соответствующими им значениями TF-IDF в виде строк, чтобы помочь понять идею, лежащую в основе создания модели. Пример типа создаваемого файла показан ниже.

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

Полный код этой статьи доступен здесь. Обратите внимание, что каждая ячейка в записной книжке jupyter может запускаться независимо (из-за операторов импорта для конкретных ячеек для легкомыслия), и вы можете импортировать все в верхней части кода только один раз вместо импорта несколько раз!

Я надеюсь, что эта статья помогла вам понять, как использовать естественный язык, и однажды начать свой путь к овладению НЛП!

Спасибо за внимание!

P.S. Если у вас есть какие-либо вопросы или вы хотите, чтобы я писал по какой-то конкретной теме, прокомментируйте их ниже.

Ссылки:

  1. Обработка речи и языка, 3-е издание, авторы Дэн Джурафски и Джеймс Х. Мартин
  2. Sklearn: https://scikit-learn.org/stable/
  3. Spacy: https://spacy.io/
  4. NLTK: https://www.nltk.org/