NATURAL LANGUAGE PROCESSING ОБРАБОТКА ЕСТЕСТВЕННОГО ЯЗЫКА

NATURAL LANGUAGE PROCESSING ОБРАБОТКА ЕСТЕСТВЕННОГО ЯЗЫКА Edu.Vsu.Ru

Голосовой поиск, виртуальные ассистенты, генераторы текстов — все это когда-то казалось фантастикой. Технология NLP воплотила их в жизнь. Разбираемся, как она устроена и работает на практике.

Natural Language Processing, или обработка естественного языка, — технология на стыке компьютерной лингвистики, машинного и глубокого обучения. Она позволяет компьютеру распознавать и воспроизводить человеческую речь. N LP разбивает текст на более мелкие части, которые машина сможет легко понять.

NLP решает большой набор задач, который можно разбить по уровням (в скобках). Среди этих задач, можно выделить следующие:

  • Распознавание текста, речи, синтез речи (сигнал);
  • Морфологический анализ, канонизация (слово);
  • POS-тэгирование, распознавание именованных сущностей, выделение слов (словосочетание);
  • Синтаксический разбор, токенизация предложений (предложение);
  • Извлечение отношений, определение языка, анализ эмоциональной окраски (абзац);
  • Аннотация документа, перевод, анализ тематики (документ);
  • Дедубликация, информационный поиск (корпус).

Обработка естественного языка сейчас не используются разве что в совсем консервативных отраслях. В большинстве технологических решений распознавание и обработка «человеческих» языков давно внедрена: именно поэтому обычный IVR с жестко заданными опциями ответов постепенно уходит в прошлое, чатботы начинают все адекватнее общаться без участия живого оператора, фильтры в почте работают на ура и т.д. Как же происходит распознавание записанной речи, то есть текста? А вернее будет спросить, что лежит в основе соврменных техник распознавания и обработки? На это хорошо отвечает наш сегодняшний адаптированный перевод – под катом вас ждет лонгрид, который закроет пробелы по основам NLP. Приятного чтения!

NATURAL LANGUAGE PROCESSING ОБРАБОТКА ЕСТЕСТВЕННОГО ЯЗЫКА

Что такое Natural Language Processing?

Natural Language Processing (далее – NLP) – обработка естественного языка – подраздел информатики и AI, посвященный тому, как компьютеры анализируют естественные (человеческие) языки. N LP позволяет применять алгоритмы машинного обучения для текста и речи.

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

Сегодня у многих из нас есть смартфоны с распознаванием речи – в них используется NLP для того, чтобы понимать нашу речь. Также многие люди используют ноутбуки со встроенным в ОС распознаванием речи.

Since their introduction in 2017, Transformers have quickly become the dominant architecture for achieving state-of-the-art results on a variety of natural language processing tasks. If you’re a data scientist or machine learning engineer, this practical book shows you how to train and scale these large models using HuggingFace Transformers, a Python-based deep learning library.

Transformers have been used to write realistic news stories, improve Google Search queries, and even create chatbots that tell corny jokes. In this guide, authors Lewis Tunstall, Leandro von Werra, and Thomas Wolf use a hands-on approach to teach you how Transformers work and how to integrate them in your applications. You’ll quickly learn a variety of tasks they can help you solve.

Время на прочтение

Привет! Меня зовут Иван Смуров, и я возглавляю группу исследований в области NLP в компании ABBYY. О том, чем занимается наша группа, можно почитать здесь
. Недавно я читал лекцию про Natural Language Processing (NLP) в Школе глубокого обучения
– это кружок при Физтех-школе прикладной математики и информатики МФТИ для старшеклассников, интересующихся программированием и математикой. Возможно, тезисы моей лекции кому-то пригодятся, поэтому поделюсь ими с Хабром.

Поскольку за один раз все объять не получится, разделим статью на две части. Сегодня я расскажу о том, как нейросети (или глубокое обучение) используются в NLP. Во второй части статьи мы сконцентрируемся на одной из самых распространенных задач NLP — задаче извлечения именованных сущностей (Named-entity recognition, NER) и разберем подробно архитектуры ее решений.

NATURAL LANGUAGE PROCESSING ОБРАБОТКА ЕСТЕСТВЕННОГО ЯЗЫКА

NLP (Natural Language Processing, обработка естественного языка) — это направление в машинном обучении, посвященное распознаванию, генерации и обработке устной и письменной человеческой речи. Находится на стыке дисциплин искусственного интеллекта и лингвистики.

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

Процесс машинного понимания с применением алгоритмов обработки естественного языка может выглядеть так:

  1. Речь человека записывается аудио-устройством.
  2. Машина преобразует слова из аудио в письменный текст.
  3. Система NLP разбирает текст на составляющие, понимает контекст беседы и цели человека.
  4. С учетом результатов работы NLP машина определяет команду, которая должна быть выполнена. 

Почему решать задачи NLP сложно?

Формулировки задач не очень сложные, однако сами задачи вовсе не являются простыми, потому что мы работаем с естественным языком. Явления полисемии (многозначные слова имеют общий исходный смысл) и омонимии (разные по смыслу слова произносятся и пишутся одинаково) характерны для любого естественного языка. И если носитель русского хорошо понимает, что в теплом приеме
мало общего с боевым приемом
, с одной стороны, и теплым пивом
, с другой, автоматической системе приходится долго этому учиться. Почему « Press space bar to continue
» лучше перевести скучным « Для продолжения нажмите пробел
», чем « Бар космической прессы продолжит работу
».

  • Полисемия: остановка (процесс или здание), стол (организация или объект), дятел (птица или человек).
  • Омонимия: ключ, лук, замок, печь.

    image

  • Другим классическим примером сложности языка является местоименная анафора. Например, пусть нам дан текст « Дворник два часа мел снег, он был недоволен
    ». Местоимение «он» может относиться как к дворнику, так и к снегу. По контексту мы легко понимаем, что он – это дворник, а не снег. Но добиться, чтобы компьютер это тоже легко понимал, непросто. Задача местоименной анафоры и сейчас решена не очень хорошо, активные попытки улучшить качество решений продолжаются.
  • Еще одна дополнительная сложность – это эллипсис. Например, « Петя съел зеленое яблоко, а Маша – красное
    ». Мы понимаем, что Маша съела красное яблоко. Тем не менее, добиться, чтобы машина тоже поняла это, непросто. Сейчас задача восстановления эллипсиса решается на крошечных корпусах (несколько сотен предложений), и на них качество полного восстановления откровенно слабое (порядка 0.5). Понятно, что для практических применений такое качество никуда не годится.

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

Что такое NLP?

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

  • Первая и самая исторически важная задача – это машинный перевод. Ей занимаются очень давно, и есть огромный прогресс. Но задача получения полностью автоматического перевода высокого качества (FAHQMT) так и остается нерешенной. Это в каком-то смысле мотор NLP, одна из самых больших задач, которой можно заниматься.

    image

  • Вторая задача — классификация текстов. Дан набор текстов, и задача – классифицировать эти тексты по категориям. Каким? Это вопрос к корпусу.

    Первый и один из самых важных с практической точки зрения способов применения — классификация писем на спам и хам (не спам).

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

    Третий классический вариант применения задачи текстовой классификации — сентиментный анализ. Например, классификация отзывов на положительные, отрицательные и нейтральные.

    NATURAL LANGUAGE PROCESSING ОБРАБОТКА ЕСТЕСТВЕННОГО ЯЗЫКА

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

  • Третья задача – извлечение именованных сущностей, NER. Мы выделяем в тексте участки, которые соответствуют заранее выбранному набору сущностей, например, надо найти в тексте все локации, персоны и организации. В тексте «Остап Бендер — директор конторы “Рога и Копыта”» вы должны понять, что Остап Бендер – это персона, а “Рога и Копыта”– это организация. Зачем эта задача нужна на практике и как ее решать, мы поговорим во второй части нашей статьи.
  • NATURAL LANGUAGE PROCESSING ОБРАБОТКА ЕСТЕСТВЕННОГО ЯЗЫКА
    С третьей задачей связана четвертая — задача извлечения фактов и отношений (relation extraction). Например, есть отношение работы (Occupation). Из текста «Остап Бендер — директор конторы “Рога и Копыта”» ясно, что наш герой связан профессиональными отношениями с “Рогами и Копытами”. То же самое можно сказать множеством других способов: «Контору “Рога и Копыта” возглавляет Остап Бендер», или «Остап Бендер прошел путь от простого сына лейтенанта Шмидта до главы конторы “Рога и Копыта” ». Эти предложения отличаются не только предикатом, но и структурой.

    Примерами других часто выделяемых отношений являются отношения купли/продажи (Purchase and Sale), владения (Ownership), факт рождения с атрибутами — датой, местом и т. д. ( Birth) и некоторые другие.

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

    image

  • Две следующие задачи, возможно, самые хайповые. Это вопросно-ответные и диалоговые системы (чат-боты). Amazon Alexa, Алиса – это классические примеры диалоговых систем. Чтобы они нормально работали, должно быть решено много задач NLP. Например, текстовая классификация помогает определить, попадаем ли мы в один из сценариев goal-oriented чат-бота. Допустим, «вопрос о курсах валют». Relation extraction нужно для определения заполнителей шаблона сценария, а задача ведения диалога на общие темы (“болталки”) поможет нам в ситуации, когда мы не попали ни в один из сценариев.

    Вопросно-ответные системы — тоже понятная и полезная вещь. Вы задаете машине вопрос, машина ищет ответ на него в базе данных или корпусе текстов. Примерами таких систем могут являться IBM Watson или Wolfram Alpha.

  • Еще один пример классической задачи NLP — саммаризация. Формулировка задачи простая — на вход система принимает текст большого размера, а выходом служит текст меньшего размера, каким-то образом отражающий содержание большого. Например, от машины требуется сгенерировать пересказ текста, его название или аннотацию.

    image

  • Еще одна популярная задача – argumentation mining, поиск обоснования в тексте. Вам приводят факт и текст, вам нужно найти обоснование данного факта в тексте.

Это безусловно не весь список задач NLP. Их десятки. По большому счету, все, что можно делать с текстом на естественном языке, можно отнести к задачам NLP, просто перечисленные темы на слуху, и у них есть наиболее очевидные практические применения.

Python-библиотека NLTK

NLTK (Natural Language Toolkit) – ведущая платформа для создания NLP-программ на Python. У нее есть легкие в использовании интерфейсы для многих языковых корпусов
, а также библиотеки для обработки текстов для классификации, токенизации, стемминга
, разметки
, фильтрации и семантических рассуждений
. Ну и еще это бесплатный опенсорсный проект, который развивается с помощью коммьюнити.

Мы будем использовать этот инструмент, чтобы показать основы NLP. Для всех последующих примеров я предполагаю, что NLTK уже импортирован; сделать это можно командой import nltk

Как решают задачи NLP

В отличие от обработки изображений, по NLP до сих пор можно встретить статьи, где описываются решения, использующие не нейросетки, а классические алгоритмы типа SVM
или Xgboost
, и показывающие результаты, не слишком сильно уступающие state-of-the-art решениям.

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

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

Известные проекты

ChatGPT

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

Алиса

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

Навыки Алисы

LegalRules

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

За счет автоматизации можно ускорить разработку и сократить расходы на лицензирование рабочих мест и поддержку сервиса.

Чтобы использовать LegalRules, не нужно глубоко разбираться в IT и даже изучать английский. Писать код можно на русском языке.

LegalRules

Webiomed

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

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

Коротко о том, как Webiomed помогает отечественной медицине:

Webiomed

СКАН-Интерфакс

СКАН — система управления репутацией от российского информационного агентства «Интерфакс». Она предназначена для менеджеров по коммуникациям и PR, специалистов по безопасности и оценке рисков.

Система умеет многое:

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

У системы более 65 тысяч источников. Каждый день в базу данных СКАН поступает более 300 тысяч публикаций.

NATURAL LANGUAGE PROCESSING ОБРАБОТКА ЕСТЕСТВЕННОГО ЯЗЫКА

Чтобы языковые модели максимально качественно выполняли сложные запросы пользователей, их необходимо постоянно развивать. Работать над этими задачами команде СКАНа помогают во время обучения студенты онлайн-магистратуры «Управление IT-продуктом» МФТИ и Skillfactory. Один из свежих кейсов — исследование рынка и поиск точек роста для сервиса. Чтобы справиться с этой бизнес-задачей, ребята глубоко погрузились в продукт, изучили работу западных аналогов и провели опрос среди пользователей.

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

VeraVoice

Сервис воспроизводит речь знаменитостей. В его основе — целый ансамбль нейросетей, благодаря которому VeraVoice может озвучить любой текст любым голосом.

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

https://youtube.com/watch?v=WyU-gJ2NTGc%3Ffeature%3Doembed

Суммаризатор

Такого помощника точно не хватало в школе. Суммаризатор сокращает тексты и передает их суть без потери смысла. Будет особенно полезен ученым, студентам, редакторам, авторам и блогерам. В общем, всем, кто изучает большие объемы информации и хочет иметь под рукой главные тезисы из материалов.

Можно бесплатно использовать демо сервиса в интерфейсе Swagger.

Суммаризатор

IBM Watson

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

Google Переводчик

Каждый месяц его используют более 500 млн людей по всему миру. Переводчик обрабатывает больше 100 млрд слов в день. N LP-технологии, встроенные в систему, позволяют компьютеру понимать смысл человеческой речи.

Gerwin.io

Вот пример описания товара от Gerwin:

NATURAL LANGUAGE PROCESSING ОБРАБОТКА ЕСТЕСТВЕННОГО ЯЗЫКА

Papercup

Платформа для AI-дубляжа. В библиотеке собрано более 100 реалистичных голосов — можно подобрать идеальный для своей задачи. Дублирование видео с помощью искусственного интеллекта в 4 раза быстрее и на 80% дешевле. Платформа поможет с озвучкой текста для YouTube, стриминга и бизнес-задач компании.

Так Papercup справился с озвучкой на испанском:

https://youtube.com/watch?v=QInRSphhXhs%3Ffeature%3Doembed

Кто использует NLP

Приложения NLP окружают нас повсюду. Это поиск в Google или Яндексе, машинный перевод, чат-боты, виртуальные ассистенты вроде Siri, Алисы, Салюта от Сбера и пр. N LP применяется в digital-рекламе, сфере безопасности и многих других.

Технологии NLP используют как в науке, так и для решения коммерческих бизнес-задач: например, для исследования искусственного интеллекта и способов его развития, а также создания «умных» систем, работающих с естественными человеческими языками, от поисковиков до музыкальных приложений. 

Pipeline NLP

Этот способ работы с признаками, который более-менее одинаков для всех задач.

Когда речь идет о языке, основная единица, с которой мы работаем, это слово. Или более формально «токен». Мы используем этот термин, потому что не очень понятно, что такое 2128506 — это слово или нет? Ответ не очевиден. Токен обычно отделен от других токенов пробелами или знаками препинания. И как можно понять из сложностей, которые мы описали выше, очень важен контекст каждого токена. Есть разные подходы, но в 95% случаев таким контекстом, который рассматривается при работе модели, выступает предложение, включающее исходный токен.

Многие задачи вообще решаются на уровне предложения. Например, машинный перевод. Чаще всего, мы просто переводим одно предложение и никак не используем контекст более широкого уровня. Есть задачи, где это не так, например, диалоговые системы. Тут важно помнить, о чем систему спрашивали раньше, чтобы она могла ответить на вопросы. Тем не менее, предложение — тоже основная единица, с которой мы работаем.

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

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

  • эмбеддинги
  • символьные признаки
  • дополнительные признаки, специальные для конкретной задачи или языка

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

Один из самых часто использующихся признаков — часть речи или POS-тег (part of speech). Такие признаки могут быть важны для решения многих задач, например задачи синтаксического парсинга. Для языков со сложной морфологией, типа русского языка, также важны морфологические признаки: например, в каком падеже стоит существительное, какой род у прилагательного. Из этого можно сделать разные выводы о структуре предложения. Также, морфология нужна для лемматизации (приведения слов к начальным формам), с помощью которой мы можем сократить размерность признакового пространства, и поэтому морфологический анализ активно используется для большинства задач NLP.

Когда мы решаем задачу, где важно взаимодействие между различными объектами (например, в задаче relation extraction или при создании вопросно-ответной системы), нам нужно многое знать про структуру предложения. Для этого нужен синтаксический разбор. В школе все делали разбор предложения на подлежащее, сказуемое, дополнение и др. Синтаксический разбор – это что-то в этом духе, но сложнее.

Еще одним примером дополнительного признака является позиция токена в тексте. Мы можем априори знать, что какая-то сущность чаще встречается в начале текста или наоборот в конце.

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

Примеры использования NLTK

  • Разбиение на предложения:
  text = "Предложение.  Предложение, которое содержит запятую.  Восклицательный знак! Вопрос?" 
sents = nltk.sent_tokenize(text)
print(sents)
    output:    
 ['Предложение.', 'Предложение, которое содержит запятую.', 'Восклицательный знак!', 'Вопрос?']
  
  • Токенизация:
  from nltk.tokenize import RegexpTokenizer
sent = "В этом предложении есть много слов, мы их разделим."
tokenizer = RegexpTokenizer(r'\w+')
print(tokenizer.tokenize(sent))
    output:    
 ['В', 'этом', 'предложении', 'есть', 'много', 'слов', 'мы', 'их', 'разделим']
  
  from nltk import word_tokenize
sent = "В этом предложении есть много слов, мы их разделим."
print(word_tokenize(sent))
    output:    
 ['В', 'этом', 'предложении', 'есть', 'много', 'слов', ',', 'мы', 'их', 'разделим', '.']
  
  • Стоп слова:
  from nltk.corpus import stopwords
stop_words=set(stopwords.words('english'))
print(stop_words)
    output:    
 {'should', 'wouldn', 'do', 'over', 'her', 'what', 'aren', 'once', 'same', 'this', 'needn', 'other', 'been', 'with', 'all' .
  
  • Стемминг и лемматизация:
  from nltk.stem.porter import PorterStemmer
porter_stemmer = PorterStemmer()
print(porter_stemmer.stem("crying"))
    output:    
 cri
  
  from nltk.stem.lancaster import LancasterStemmer
lancaster_stemmer = LancasterStemmer()
print(lancaster_stemmer.stem("crying"))
    output:    
 cry
  
  from nltk.stem import SnowballStemmer
snowball_stemmer = SnowballStemmer("english")
print(snowball_stemmer.stem("crying")) 
    output:    
 cri
  
  from nltk.stem import WordNetLemmatizer
wordnet_lemmatizer = WordNetLemmatizer()
print(wordnet_lemmatizer.lemmatize("came", pos="v"))
    output:    
 come
  

Библиотеки для NLP

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

  • Наиболее известная и многофункциональная библиотека для NLP;
  • Большое количество сторонних расширений;
  • Быстрая токенизация предложений;
  • Поддерживается множество языков.
  • Медленная;
  • Сложная в изучении и использовании;
  • Работает со строками;
  • Не использует нейронные сети;
  • Нет встроенных векторов слов.

Библиотека, разработанная по методологии SCRUM на языке Cypthon, позиционируется как самая быстрая NLP библиотека. Имеет множество возможностей, в том числе, разбор зависимостей на основе меток, распознавание именованных сущностей, пометка частей речи, векторы расстановки слов. Не поддерживает русский язык.

  • Самая быстрая библиотека для NLP;
  • Простая в изучении и использовании;
  • Работает с объектами, а не строками;
  • Есть встроенные вектора слов;
  • Использует нейронные сети для тренировки моделей.
  • Менее гибкая по сравнению с NLTK;
  • Токенизация предложений медленнее, чем в NLTK;
  • Поддерживает маленькое количество языков.

Библиотека scikit-learn разработана по методологии SCRUM и предоставляет реализацию целого ряда алгоритмов для обучения с учителем и обучения без учителя через интерфейс для Python. Построена поверх SciPy. Ориентирована в первую очередь на моделирование данных, имеет достаточно функций, чтобы использоваться для NLP в связке с другими библиотеками.

  • Большое количество алгоритмов для построения моделей;
  • Содержит функции для работы с Bag-of-Words моделью;
  • Хорошая документация.
  • Плохой препроцессинг, что вынуждает использовать ее в связке с другой библиотекой (например, NLTK);
  • Не использует нейронные сети для препроцессинга текста.

Python библиотека, разработанная по методологии SCRUM, для моделирования, тематического моделирования документов и извлечения подобия для больших корпусов. В gensim реализованы популярные NLP алгоритмы, например, word2vec. Большинство реализаций могут использовать несколько ядер.

  • Работает с большими датасетами;
  • Поддерживает глубокое обучение;
  • word2vec, tf-idf vectorization, document2vec.
  • Заточена под модели без учителя;
  • Не содержит достаточного функционала, необходимого для NLP, что вынуждает использовать ее вместе с другими библиотеками.

Обучение эмбеддингов

Как эмбеддинги обучаются? Мы пытаемся решить задачу восстановления слова по контексту (или наоборот, восстановления контекста по слову). В простейшем случае мы получаем на вход индекс в словаре предыдущего слова (булев вектор размерности словаря) и пытаемся определить индекс в словаре нашего слова. Делается это с помощью сетки с предельно простой архитектурой: два полносвязных слоя. Сначала идет полносвязный слой из булева вектора размерности словаря в скрытый слой размерности эмбеддинга (т.е. просто умножение булева вектора на матрицу нужной размерности). А потом наоборот, полносвязный слой с softmax из скрытого слоя размерности эмбеддинга в вектор размерности словаря. Благодаря функции активации softmax, мы получаем распределение вероятностей нашего слова и можем выбрать самый вероятный вариант.

NATURAL LANGUAGE PROCESSING ОБРАБОТКА ЕСТЕСТВЕННОГО ЯЗЫКА

Эмбеддингом i-го слова будет просто i-я строка в матрице перехода W.

В используемых на практике моделях архитектура сложнее, но ненамного. Главное отличие в том, что мы используем не один вектор из контекста для определения нашего слова, а несколько (например, все в окне размера 3). Несколько более популярным вариантом является ситуация, когда мы пытаемся предсказать не слово по контексту, а наоборот контекст по слову. Такой подход называется Skip-gram.

Давайте приведем пример применения задачи, которая решается во время обучения эмбеддингов (в варианте CBOW — предсказания слова по контексту). Например, пусть контекст токена состоит из 2 предыдущих слов. Если мы обучались на корпусе текстов про современную русскую литературу и контекст состоит из слов “поэт Марина”, то, скорее всего, самым вероятным следующим словом будет слово “Цветаева”.

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

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

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

Похожие соображения используются и при предобучении для современных архитектур, упомянутых выше — ELMo, ULMFit, BERT. Они тоже используют при обучении неразмеченные данные, и поэтому обучаются на максимально большом доступном корпусе (хотя сами архитектуры, конечно, сложнее, чем у классических эмбеддингов).

Как устроена обработка языков

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

NLP — другой подход. Алгоритмы обучают не только словам и их значениям, но и структуре фраз, внутренней логике языка, пониманию контекста. Чтобы понять, к чему относится слово «он» в предложении «человек носил костюм, и он был синий», машина должна иметь представление о свойствах понятий «человек» и «костюм». Чтобы научить этому компьютер, специалисты используют алгоритмы машинного обучения и методы анализа языка из фундаментальной лингвистики.

Зачем нужны эмбеддинги?

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

  • Во-первых, мы уменьшаем размерность пространства признаков, потому что с непрерывными векторами размерностью несколько сотен работать намного удобнее, чем с признаками-булевыми векторами размерностью 100 тысяч. Уменьшение размерности признакового пространства – это очень важно: оно сказывается на быстродействии, это удобнее для обучения, и поэтому алгоритмы обучаются лучше.
  • Во-вторых, учет близости элементов в исходном пространстве. Слова похожи друг на друга по-разному. И разные координаты эмбеддингов способны ловить эту схожесть. Приведу простой грубый и набивший всем оскомину пример. Эмбеддинг вполне способен уловить, что король отличается от королевы примерно так же, как мужчина от женщины. Или наоборот, король отличается от мужчины, как королева от женщины. Точно так же схожи связи разных стран со своими столицами. Хорошо обученная модель на достаточно большом корпусе способна понять, что Москва отличается от России тем же, чем Вашингтон от США.

image

Но не нужно думать, что такая векторная арифметика работает надежно. В статье
, где были введены эмбеддинги, были примеры, что Ангела относится к Меркель примерно так же, как Барак к Обаме, Николя к Саркози и Путин к Медведеву. Поэтому полагаться на эту арифметику не стоит, хотя это все равно важно, и компьютеру намного проще, когда он знает эту информацию, пусть она и содержит неточности.

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

Задачи NLP

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

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

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

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

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

Генерация текста и речи
. Противоположная распознаванию задача — генерация, или синтез. Алгоритм должен отреагировать на текст или речь пользователя. Это может быть ответ на вопрос, полезная информация или забавная фраза, но реплика должна быть по заданной теме. В системах распознавания речи предложения разбиваются на части. Далее, чтобы произнести определенную фразу, компьютер сохраняет их, преобразовывает и воспроизводит. Конечно, на границах «сшивки» могут возникать искажения, из-за чего голос часто звучит неестественно.

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

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

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

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

Какие задачи решают NLP-технологии

Самые разные. Языковые модели уже научились:

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

Перейдем от теории к практике — к конкретным проектам, которые существуют благодаря NLP.

Словоформенные эмбеддинги

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

Давайте теперь попытаемся дать строгое определение эмбеддинга. Эмбеддинг – это отображение из дискретного вектора категориальных признаков в непрерывный вектор с заранее заданной размерностью.

Каноничный пример эмбеддинга – это эмбеддинг слова (словоформенный эмбеддинг).

Что обычно выступает в роли дискретного вектора признаков? Булев вектор, соответствующий всевозможным значениям какой-то категории (например, все возможные части речи или все возможные слова из какого-то ограниченного словаря).

Для словоформенных эмбеддингов такой категорией обычно выступает индекс слова в словаре. Допустим, есть словарь размерностью 100 тысяч. Соответственно, каждое слово имеет дискретный вектор признаков – булев вектор размерности 100 тысяч, где на одном месте (индексе данного слова в нашем словаре) стоит единичка, а на остальных – нули.

Почему мы хотим отображать наши дискретные вектора признаков в непрерывные заданной размерности? Потому что вектора размерностью 100 тысяч не очень удобно использовать для вычислений, а вот вектора целых чисел размерности 100, 200 или, например, 300, — намного удобнее.

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

Примеры

Cortana

NATURAL LANGUAGE PROCESSING ОБРАБОТКА ЕСТЕСТВЕННОГО ЯЗЫКА

В Windows есть виртуальный помощник Cortana, который распознает речь. С помощью Cortana можно создавать напоминания, открывать приложения, отправлять письма, играть в игры, узнавать погоду и т.д.

Siri

NATURAL LANGUAGE PROCESSING ОБРАБОТКА ЕСТЕСТВЕННОГО ЯЗЫКА

Siri это помощник для ОС от Apple: iOS, watchOS, macOS, HomePod и tvOS. Множество функций также работает через голосовое управление: позвонить/написать кому-либо, отправить письмо, установить таймер, сделать фото и т.д.

Gmail

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

Dialogflow

NATURAL LANGUAGE PROCESSING ОБРАБОТКА ЕСТЕСТВЕННОГО ЯЗЫКА

Платформа от Google, которая позволяет создавать NLP-ботов. Например, можно сделать бота для заказа пиццы, которому не нужен старомодный IVR, чтобы принять ваш заказ
.


Как обрабатывается текст

Алгоритмы не работают с «сырыми» данными. Большая часть процесса — подготовка текста или речи, преобразование их в вид, доступный для восприятия компьютером.

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

Препроцессинг.
Дальше наступает большой этап предварительной обработки — препроцессинга. Это приведение информации к виду, в котором она более понятна алгоритму. Популярные методы препроцессинга:

  • приведение символов к одному регистру, чтобы все слова были написаны с маленькой буквы;
  • токенизация — разбиение текста на токены. Так называют отдельные компоненты — слова, предложения или фразы;
  • тегирование частей речи — определение частей речи в каждом предложении для применения грамматических правил;
  • лемматизация и стемминг — приведение слов к единой форме. Стемминг более грубый, он обрезает суффиксы и оставляет корни. Лемматизация — приведение слов к изначальным словоформам, часто с учетом контекста;
  • удаление стоп-слов — артиклей, междометий и пр.;
  • спелл-чекинг — автокоррекция слов, которые написаны неправильно.

Методы выбирают согласно задаче.

NATURAL LANGUAGE PROCESSING ОБРАБОТКА ЕСТЕСТВЕННОГО ЯЗЫКА

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

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

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

Алгоритмы обрабатывают, анализируют и распознают входные данные, делают на их основе выводы. Это интересный и сложный процесс, в котором много математики и теории вероятностей. 

Контекстно-зависимые признаки

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

Поэтому сейчас все контекстно-зависимые признаки вычисляются на уровне предложения стандартным образом: с помощью двухсторонних рекуррентных нейросетей LSTM или GRU. Чтобы получить контекстно-зависимые признаки токена из контекстно-независимых, контекстно-независимые признаки всех токенов предложения подаются в Bidirectional RNN (одно- или несколько- слойный). Выход Bidirectional RNN в i-ый момент времени и является контекстно-зависимым признаком i-того токена, который содержит информацию как о предыдущих токенах (т.к. эта информация содержится в i-м значении прямого RNN), так и о последующих (т.к. эта информация содержится в соответствующем значении обратного RNN).

Дальше для каждой отдельной задачи мы делаем что-то свое, но первые несколько слоев — вплоть до Bidirectional RNN можно использовать для практически любых задач.

Такой способ получения признаков и называется пайплайном NLP.

NATURAL LANGUAGE PROCESSING ОБРАБОТКА ЕСТЕСТВЕННОГО ЯЗЫКА

Стоит отметить, что в последние 2 года исследователи активно пытаются усовершенствовать пайплайн NLP — как с точки зрения быстродействия (например, transformer — архитектура, основанная на self-attention, не содержит в себе RNN и поэтому способна быстрее обучаться и применяться), так и с точки зрения используемых признаков (сейчас активно используют признаки на основе предобученных языковых моделей, например ELMo
, или используют первые слои предобученной языковой модели и дообучают их на имеющемся для задачи корпусе — ULMFit
, BERT
).

Заключение

В этой статье были разобраны основы NLP для текста, а именно:

  • NLP позволяет применять алгоритмы машинного обучения для текста и речи;
  • NLTK (Natural Language Toolkit) – ведущая платформа для создания NLP-программ на Python;
  • токенизация по предложениям – это процесс разделения письменного языка на предложения-компоненты;
  • токенизация по словам – это процесс разделения предложений на слова-компоненты;
  • лемматизация и стемминг преследуют цель привести все встречающиеся словоформы к одной, нормальной словарной форме;
  • стоп-слова – это слова, которые выкидываются из текста до/после обработки текста;
  • регулярное выражение (регулярка, regexp, regex) – это последовательность символов, которая определяет шаблон поиска;
  • мешок слов – это популярная и простая техника извлечения признаков, используемая при работе с текстом. Она описывает вхождения каждого слова в текст.

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

Если вы хотите увидеть все описанные концепции в одном большом примере, то вам сюда
.

Оцените статью