Вступление
Естественный язык относится к языку, на котором люди общаются друг с другом. Это общение может быть вербальным или текстовым. Например, личные разговоры, твиты, блоги, электронные письма, веб-сайты, SMS-сообщения - все они содержат естественный язык.
Естественный язык невероятно важен для понимания компьютерами по нескольким причинам (среди прочего):
- Его можно рассматривать как источник огромного количества данных, и при грамотной обработке он может дать полезную информацию.
- Его можно использовать, чтобы компьютеры могли лучше общаться с людьми.
Однако, в отличие от людей, компьютеры не могут легко понять естественный язык. Для перевода естественного языка в формат, понятный для компьютеров, требуются сложные приемы и методы. Обработка естественного языка (NLP) - это область приложения, которая помогает нам достичь этой цели. НЛП относится к техникам и методам автоматического манипулирования естественным языком. Обработка естественного языка широко используется для машинного обучения, обобщения информации, взаимодействия человека с компьютером и многого другого.
Эта статья содержит краткий обзор областей применения НЛП, важных задач и концепций НЛП, а также некоторых очень удобных инструментов НЛП. Остальная часть статьи организована следующим образом:
Области применения НЛП
- Машинное обучение
- Взаимодействие человека с компьютером
- Извлечение информации
- Обобщение
Процессы и концепции НЛП
- Лемматизация
- Стемминг
- POS-теги
- Признание именованных сущностей
- Мешок слов подход
- TF-IDF
- N граммов
Инструменты НЛП
- Python NLTK
- Python Scikit Learn
- TextBlob
- СПАСИБО
- Стэнфордское НЛП
Области применения НЛП
НЛП в настоящее время используется во множестве областей для решения сложных проблем.
Машинное обучение
НЛП используется в сочетании с методами машинного обучения для выполнения таких задач, как обнаружение эмоций, анализ настроений, распознавание диалогов , классификация спама и т. Д. Методы машинного обучения требуют данных для обучения алгоритмов.
Естественный язык в форме твитов, блогов, веб-сайтов, чатов и т. Д. Является огромным источником данных. НЛП играет очень важную роль в сборе данных, преобразовывая естественный язык в формат, который может использоваться методами машинного обучения для обучения алгоритмов.
Классификация спама - классический пример использования НЛП в машинном обучении. Под классификацией спама понимается процесс классификации электронных писем как «спам или ветчина» на основе содержимого электронного письма. Например, электронное письмо «Здравствуйте, поздравляю, вы выиграли 100000000 долларов» можно классифицировать как «спам», а другое электронное письмо «Согласно нашему обсуждению, пожалуйста, найдите приложенный протокол собрания» можно классифицировать как «ветчина».
Инструменты и методы НЛП помогают преобразовывать текст этих электронных писем в векторы функций, которые могут использоваться приложениями машинного обучения для обучения алгоритма, а затем предсказывать новый экземпляр электронной почты как спам или радиолюбитель.
Взаимодействие человека с компьютером
Взаимодействие человека с компьютером эволюционировало от простого взаимодействия с мышью и клавиатурой на рабочем столе до более естественного взаимодействия с использованием речи и жестов. Например, Alexa от Amazon и Siri от Apple - два ярких примера такого взаимодействия, когда люди используют речь для взаимодействия с системой и выполнения различных задач. Другой пример естественного взаимодействия
- домашняя страница Google, где вы можете выполнять поисковые операции с помощью речи. В основе такого взаимодействия лежит обработка естественного языка.
Извлечение информации
Еще одна важная задача НЛП - извлечь из документов полезную информацию, которую можно использовать для разных целей. Например, публично торгуемые компании обязаны публиковать финансовую информацию и предоставлять ее своим акционерам. НЛП можно использовать для извлечения финансовой информации из документов такого типа для автоматического сбора информации о том, как обстоят дела в компании (или отрасли).
При тщательном изучении информация, извлеченная из этих источников, может помочь компаниям принять соответствующие решения. Например, если компания не показала хорошие результаты в прошлом квартале, вы можете использовать NLP, чтобы определить это, а затем автоматически продать свои акции из их акций.
Обобщение
Не всякая информация в текстовом документе полезна, поэтому мы можем избавиться от всякой ерунды и читать только то, что важно. Резюмирование относится к сжатию документа таким образом, чтобы он содержал только ключевую информацию, оставляя после себя все ненужные.
Например, вместо того, чтобы читать многостраничную новость, вы можете использовать резюмирование для извлечения только важной информации о любом новостном событии, о котором идет речь. Или краткое изложение может быть сделано как предварительный просмотр статьи, чтобы помочь вам решить, хотите ли вы прочитать полный текст или нет.
Важные концепции НЛП
В этом разделе мы изучим некоторые из наиболее распространенных концепций НЛП.
Токенизация
Токенизация относится к разделению предложения на блоки слов. Обычно токенизация - это первая задача, выполняемая в конвейере обработки естественного языка. Токенизация может выполняться на двух уровнях: уровне слова и уровне предложения.
На уровне слов токенизация возвращает набор слов в предложении.
Например, при разметке предложения «Я голоден» возвращается следующий набор слов:
Words = ['I', 'am', 'feeling', 'hungry']
На уровне предложения токенизация возвращает фрагмент предложений в документе. Например, рассмотрим документ со следующим текстом.
«Париж - столица Франции. Он расположен на севере Франции. Это красивый город».
Токенизация на уровне предложения в приведенном выше документе вернет набор следующих предложений:
- S1 = "Париж - столица Франции"
- S2 = "Он расположен на севере Франции"
- S3 = "Это красивый город"
Остановить удаление слова
Стоп-слова на естественном языке - это слова, не содержащие полезной информации в данном контексте. Например, если вы разрабатываете механизм обнаружения эмоций, такие слова, как «есть», «я» и «это», не передают никакой информации, связанной с эмоциями.
Например, в предложении «Я чувствую себя сегодня счастливым» первые два слова «я» и «есть» можно удалить, поскольку они не предоставляют никакой информации, связанной с эмоциями. Однако слово «я» может быть важно по другим причинам, например, для определения того, кто чувствует себя счастливым. Универсального списка стоп-слов для удаления не существует, поскольку некоторые из них действительно могут иметь ценность - это просто зависит от вашего приложения.
В НЛП каждое слово требует обработки. Поэтому удобно, что в нашем тексте есть только те слова, которые важны в данном контексте. Это экономит время обработки и приводит к более надежному механизму НЛП.
Стемминг и лемматизация
Построение относится к процессу удаления суффиксов из слов в попытке нормализовать их и уменьшить их до неизменяемой части. Например, сокращение слов «вычислительный», «вычисляемый», «вычислительный» приведет к «вычислению», поскольку это неизменяемая часть слова. Основание оперирует отдельными словами и не принимает во внимание контекст слова. Однако у comput нет семантической информации.
С другой стороны, лемматизация выполняет аналогичную задачу, но при определении слов учитывает контекст. Лемматизация более сложна, поскольку она выполняет поиск в словаре для получения точного слова, содержащего семантическую информацию.
Слово «говорящий» будет сокращено до «говорить» как при выделении корней, так и при лемматизации. С другой стороны, для слова «хуже» лемматизация вернет «плохо», поскольку лемматизатор принимает во внимание контекст слова. Здесь лемматизация будет знать, что «хуже» является прилагательным и является второй формой слова «плохо», поэтому она вернет последнее. С другой стороны, стемминг вернет слово «хуже» как есть.
Стемминг и лемматизация очень полезны для поиска семантического сходства между разными фрагментами текста.
Части речи (POS)
Еще одна важная задача НЛП - присвоить словам части речевых тегов. Для построения осмысленного и грамматически правильного предложения важную роль играют части речи. Расположение и совпадение различных частей речи в слове делают его грамматически и семантически понятным. Кроме того, части речи также являются неотъемлемой частью идентификации контекста. Маркировка POS помогает решить эти задачи.
Тегер POS маркирует слова соответствующими частями речи. Например, «ноутбук, мышь, клавиатура» помечены как существительные. Точно так же «есть, играть» - это глаголы, в то время как «хорошо» и «плохо» помечены как прилагательные.
Хотя это может показаться простой задачей, на самом деле это не так. Для многих слов вы можете просто использовать поиск в словаре, чтобы узнать, что такое слово POS, но многие слова имеют разные значения и, следовательно, могут быть разными POS. Например, если вы встретите слово «ветер», будет ли это существительное или глагол? Это действительно зависит от контекста, поэтому вашему устройству для тегов POS необходимо в какой-то степени понимать контекст.
Различный набор тегов POS используется разными библиотеками NLP. Список тегов Stanford POS является одним из таких списков.
Признание именованных сущностей
Распознавание именованных объектов относится к процессу классификации объектов по предопределенным категориям, таким как человек, местоположение, организация, транспортное средство и т. Д.
Например, в предложении «Сундар Пичаи, генеральный директор Google беседует в Вашингтоне». Типичный распознаватель именованных сущностей вернет следующую информацию об этом предложении:
- Сундар Пичай -> Человек
- Генеральный директор -> Должность
- Google -> Организация
Важным применением распознавания именованных сущностей является моделирование тем, при котором с помощью информации об объектах в тексте тема документа может быть обнаружена автоматически.
Подход с мешком слов
Пакет слов относится к методологии, используемой для извлечения функций из текстовых документов. Затем эти функции можно использовать для различных задач, например для обучения алгоритмов машинного обучения.
Подход, основанный на словах, прост. Он начинается с создания словаря всех уникальных слов, встречающихся во всех документах обучающего набора. Этот словарь служит вектором признаков для обучающего набора. Например, рассмотрим следующие четыре документа.
- D1 = "Я рад вашему успеху"
- D2 = "Прошу прощения за вашу потерю"
- D3 = "Он сожалеет, что не пришел"
Словарь или построение вектора признаков с использованием вышеуказанных документов будет выглядеть следующим образом:
я являюсь счастливый для ваш успех Извините потеря Он не могу прийти
В обучающий набор вставляется по одной строке для каждого документа. Для каждого атрибута (слова) в строке вставляется частота слова в соответствующем документе. Если слово не существует в документе, для этого добавляется 0. Данные обучения для документов выше выглядят следующим образом:
Документ я являюсь счастливый для ваш успех Извините потеря Он не могу прийти
D1 1 1 1 1 1 1 0 0 0 0 0 D2 1 1 1 1 1 1 0 0 0 D3 0 0 0 1 0 0 1 0 2 1 1
Таблица 1: Функции обучения, содержащие частоты терминов каждого слова в документе
Это называется подходом с использованием словарного запаса, поскольку последовательность слов в документе не принимается во внимание. Например, обучающий пример, построенный с использованием предложения «Извините, я вас потерял», будет в точности похож на «Я сожалею о вашей потере». В этом подходе значение имеет только употребление слова.
TF-IDF
TF-IDF означает «частота термина, умноженная на частоту документа». Интуиция, лежащая в основе расчета значений TF-IDF, заключается в том, что тем словам, которые чаще встречаются в одном документе и реже встречаются во всех документах, следует придавать больший вес, поскольку они более важны для классификации. Чтобы понять TF-IDF, давайте рассмотрим тот же пример, который мы изучили в предыдущем разделе. Предположим, у нас есть эти три документа D1, D2 и D3:
- D1 = "Я рад вашему успеху"
- D2 = "Прошу прощения за вашу потерю"
- D3 = "Ему жаль, но он не может прийти"
TF-IDF - это комбинация двух значений: TF (Term Frequency) и IDF (Inverse Document Frequency).
Частота термина означает, сколько раз слово встречается в документе. В документе D1 термин «счастливый» встречается один раз. Точно так же термин «успех» также встречается один раз. В D2 «он» встречается дважды, поэтому частота термина для «он» равна 2 для D2. Здесь важно отметить, что частота употребления слова рассчитывается для каждого документа.
В некоторых сценариях, где длина документов различается, частота употребления терминов для конкретного слова рассчитывается как:
Term frequence = (Number of Occurences of a word)/(Total words in the document)
Однако для простоты мы будем использовать только количество вхождений слова в документ. Таблица 1 содержит частоту использования всех слов в документах D1, D2 и D3.
Частота обратного документа для конкретного слова относится к общему количеству документов в наборе данных, деленному на количество документов, в которых существует это слово. В документах D1, D2 и D3 слово «ваш» встречается в D1 и D2. Так что ЦАХАЛ за «свой» будет 3/2.
Чтобы уменьшить влияние уникальности, обычно регистрируют значение IDF. Окончательная формула IDF конкретного слова выглядит так:
IDF(word) = Log((Total number of documents)/(Number of documents containing the word))
Попробуем найти значение IDF для слова «счастливый». У нас есть три документа, то есть D1, D2 и D3, и слово «счастливый» встречается только в одном документе. Таким образом, значение IDF для "счастливого" будет:
IDF(happy) = log(3/1) = log(3) = 0.477
Наконец, термин TF-IDF является результатом значений TF и IDF для определенного термина в документе.
Для «счастливого» значение TF-IDF будет 1 x 0,477 = 0,477.
Таким же образом значение IDF для слова «ваш» будет 0,17. Обратите внимание, что «ваш» встречается в двух документах, поэтому он менее уникален, следовательно, более низкое значение IDF по сравнению со «счастливым», которое встречается только в одном документе.
Такой анализ может быть полезен для таких вещей, как поиск или категоризация документов (например, автоматическая маркировка).
N-граммы как функции
N-граммы относятся к набору совпадающих слов. Интуиция, лежащая в основе подхода N-граммы, заключается в том, что слова, встречающиеся вместе, предоставляют больше информации, чем слова, встречающиеся по отдельности. Рассмотрим, например, следующее предложение:
S1 = "Manchester united is the most successful English football club"
Здесь, если мы создадим набор функций для этого предложения с отдельными словами, он будет выглядеть так:
Features = {Manchester, United, is, the, most, successful, English, Football, Club}
Но если мы посмотрим на это предложение, мы увидим, что «Манчестер Юнайтед» вместе дает больше информации о том, что сказано в предложении, а не если вы изучите слова «Манчестер» и «Юнайтед» по отдельности.
N-граммы позволяют нам учитывать вхождение слов при обработке содержания документа.
В N-граммах N означает количество совпадающих слов. Например, давайте пересмотрим фразу «Манчестер Юнайтед - самый успешный английский футбольный клуб». Если мы попытаемся построить 2-граммы из этого предложения, они будут выглядеть так:
2-Grams(S1) = ('Manchester United', 'United is', 'is the', 'the most', 'most successful', 'successful English', 'English Football', 'Football club')
Теперь, если вы посмотрите на эти N-граммы, вы увидите, что по крайней мере три N-грамма передают значительную часть информации о предложении, например, «Манчестер Юнайтед», «Английский футбол», «Футбольный клуб». Из этих N-граммов мы можем понять, что предложение касается «Манчестер Юнайтед», футбольного клуба в английском футболе.
Вы можете получить любое количество N-граммов. Количество N-граммов для
предложения S
содержащего X
слов, равно:
N-gram(S) = X - (N-1)
Набор N-граммов может быть полезен для таких мыслей, как автозаполнение / автокоррекция и языковые модели. Создание N-граммы из огромного корпуса текста предоставляет много информации о том, какие слова обычно встречаются вместе, и поэтому позволяет вам предсказать, какое слово будет следующим в предложении.
В этом разделе мы рассмотрели некоторые основные концепции и процессы обработки естественного языка. Внедрение этих процессов вручную является обременительным и требует много времени. К счастью, доступно множество программных библиотек, которые автоматизируют эти процессы. Краткий обзор некоторых из этих библиотек представлен в следующем разделе.
Некоторые полезные инструменты НЛП
Ниже приведены некоторые из наиболее часто используемых инструментов НЛП. Все эти инструменты обеспечивают большинство основных функций НЛП; однако они различаются по своей реализации и лицензированию.
Python NLTK
Python Natural Language Toolkit (NLTK) - безусловно, самый популярный и полный инструмент обработки естественного языка. Реализованный на Python, NTLK имеет все основные возможности обработки естественного языка, такие как выделение корней, лемматизация, распознавание именованных сущностей, теги POS и т. Д. Если Python является вашим предпочтительным языком, не ищите ничего, кроме Python NLTK.
Scikit Learn
Scikit-learn - еще одна чрезвычайно полезная библиотека Python для обработки естественного языка. Хотя Scikit Learn в первую очередь ориентирован на задачи машинного обучения, он также содержит большинство основных возможностей обработки естественного языка, и его не следует упускать из виду.
Ресурс : Научитесь использовать Scikit Learn from Python для учебного курса по науке о данных и машинному обучению
Textblob
Хотя с помощью Python NLTK можно выполнить почти любую задачу NLP, освоение сложного синтаксиса и функций NLTK может занять много времени. Textblob - это простая в использовании библиотека NLP, построенная на основе NLTK и шаблона с менее крутой кривой обучения. Textblob настоятельно рекомендуется для абсолютных новичков в обработке естественного языка в Python или для тех, кто больше заботится о достижении конечного результата, чем о том, как работают внутренние компоненты.
СПАСИБО
Textblob и NLTK очень хороши для образовательных целей и изучения того, как работает NLP. Они содержат множество вариантов для выполнения одной задачи. Например, если вы пытаетесь обучить POS-теггер на своих собственных данных, вам следует выбрать такие библиотеки, как NLTK и Textblob. С другой стороны, если вы хотите создать что-то из наилучшего сочетания функций, spaCy - лучший вариант. spaCy быстрее и точнее, чем NLTK и Textblob. Одним из недостатков spaCy является то, что в настоящее время он поддерживает только английский язык, в то время как NLTK поддерживает несколько языков.
Стэнфордское НЛП
Если вам нравятся инструменты обработки естественного языка на основе Java, вам следует выбрать Stanford NLP. Stanford NLP - это библиотека NPL с лицензией GPL, способная выполнять все фундаментальные задачи NLP, например, токенизацию, со-ссылки, стемминг и т. Д. Она также настолько высокого качества, что используется во многих исследовательских работах, так что вы, вероятно, услышите о это довольно часто в академическом мире. Стэнфордское НЛП хорошо то, что оно поддерживает несколько языков, таких как китайский, английский, испанский, французский и т. Д.
Учить больше
В этой статье дается краткий обзор многих основных задач и концепций НЛП. Хотя мы рассмотрели довольно много основных областей НЛП, нам еще предстоит многому научиться.
Есть много ресурсов, если вы хотите быстро ознакомиться с такой развивающейся областью, как НЛП. Лично я бы порекомендовал онлайн-курс, такой как Data Science: обработка естественного языка в Python для начинающих NLP или обработка естественного языка с глубоким обучением в Python, если вы немного более продвинуты.
В следующих статьях мы углубимся в эти концепции и увидим, как их на самом деле можно использовать и реализовать в Python.