NLP

Обработка естественного языка Natural language processing (NLP) – это сфера искусственного интеллекта, которая занимается применением алгоритмов машинного обучения и лингвистики для анализа текстовых данных. Цель NLP – понимание и воспроизведение естественного человеческого языка.

История

В 1954 году IBM проводит исследование в области машинного перевода с русского на английский (Джорджтаунский эксперимент) [1]. Система, которая состояла из 6 правил, перевела 60 предложений с транслитерированного (записанным латинским алфавитом) русского на английский. Авторы эксперимента заявили, что проблема машинного перевода будет решена через 3-4 года. Несмотря на последующие инвестиции правительства США прогресс был низкий. В 1966 году после отчета ALPAC о кризисе в машинного перевода и вычислительной лингвистики поток инвестиций уменьшается.

В 60-xх появилась интерактивная система с пользователем – SHRDLU [2]. Это был парсер с небольшим словарем, который определяет главные сущности в предложении (подлежащее, сказуемое, дополнение).

В 70-х годах В. Вудс предлагает расширенную систему переходов (Augmented transition network) – графовая структура, использующая идею конечных автоматов для парсинга предложений [3].

После 80-хх для решения NLP-задач начинают активно применяться алгоритмы машинного обучения (Machine Learning). Например, одна из ранних работ опиралась на деревья решений (Decison Tree) для получения создания системы с правилами if-else. Кроме того, начали применяться статистические модели.

В 90-х годах стали популярны n-граммы [3]. В 1997 году была предложена модель LSTM (Long-short memory), которая была реализована на практике только в 2007 [4]. В 2011 году появляется персональный помощник от Apple – Siri. Вслед за Apple остальные крупные IT-компании стали выпускать своих голосовых ассистентов (Alexa от Amazon, Cortana от Microsoft, Google Assistant). В этом же году вопросно-ответная система Watson от IBM победила в игре Jeopardy!, аналог “Своей игры”, в реальном времени [5].

На данный момент благодаря развитию Deep Learning, появлению большого количества данных и технологий Big Data методы NLP применяются во многих задачах, начиная от распознавания речи и машинного перевода, заканчивая написанием романов [6].

Терминология NLP

  1. Токен– текстовая единица, например, слово, словосочетание, предложение и т.д. Разбиение текста на токены называется токенизацией.
  2. Документ– это совокупность токенов, которые принадлежат одной смысловой единице, например, предложение, абзац, пост или комментарий.
  3. Корпус– это генеральная совокупность всех документов.
  4. Нормализация– приведение слов одинакового смысла к одной морфологической форме. Например, слово хотеть в тексте может встречаться в виде хотел, хотела, хочешь. К нормализации относится стемминг и лемматизация.
  5. Стемминг– процесс приведения слова к основе. Например, хочу может стать хоч. Для русского языка предпочтительней лемматизация.
  6. Лемматизация– процесс приведения слова к начальной форме. Слово глотаю может стать глотать, бутылкой – бутылка и т.д. Лемматизация затратный процесс, так как требуется работать со словарем.
  7. Стоп-слова– те слова, которые не несут информативный смысл. К ним чаще всего относятся служебные слова (предлоги, частицы и союзы).

ML-библиотеки для обработки естественного языка

  1. pymorphy2– морфологической анализатор для российского и украинского текстов. В нем присутствует лемматизатор.
  2. PyMystem3– аналог pymorhy2 от Яндекса.
  3. nltk– большой инструмент для работы с текстами. Предоставляет токенизатор, лемматизатор, стемминг, стоп-слова (в том числе и для русского языка).
  4. spacy– аналог nltk, но многие функции работают быстрее. Также как и nltk, плохо работает с русским языком. Однако, могут использоваться специальные модели ru2 или spacy russiantokenizer.
  5. scikitlearn– самая популярна библиотека машинного обучения, которая также пересоставляет способы обработки текстов, например, TFIDF.
  6. gensim– библиотека предоставляет методы векторизации слов.
  7. deeppavlov– фреймфворк для разработки чатботов и персональных помошников.
  8. yargy– парсер для извлечения сущностей в текстах на русском языке.

 

Подробнее про обработку текста читайте в нашей отдельной статье  «4 метода векторизации текстов».

Источники

  1. https://ru.wikipedia.org/wiki/Джорджтаунский_эксперимент
  2. https://ru.wikipedia.org/wiki/Расширенная_сеть_переходов
  3. https://ru.wikipedia.org/wiki/N-грамма
  4. https://ru.wikipedia.org/wiki/LSTM
  5. https://ru.wikipedia.org/wiki/IBM_Watson
  6. https://openai.com/blog/better-language-models/#sample1