nlp что это такое в программировании
Обработка естественного языка
Mar 14 · 9 min read
Обработка естественного языка или NLP (от англ. Natural language processing) — одна из самых известных областей науки о данных. За последнее десятилетие она приобрела большую популярность как в промышленных, так и в академических кругах.
Но правда в том, что NLP — это далеко не новая область. Стремление человека к тому, чтобы компьютеры понимали наш язык, существовало с момента их создания. Да, те старые компьютеры, которые с трудом могли запустить несколько программ одновременно, всё же успели познакомится со сложностью естественных языков.
Естественный язык — э то любой человеческий язык, такой как английский, арабский, русский и т. д. Насколько трудно сделать так, чтобы компьютер понимал естественные языки, зависит от их структуры. Более того, когда мы говорим, то часто по-разному произносим слова, наши акценты отличаются, независимо от того, используем ли мы родной язык или иностранный. Мы также часто склонны «жевать» слова во время разговора, чтобы быстрее донести мысль, не говоря уже обо всех сленговых словах, которые появляются каждый день.
Цель этой статьи — пролить свет на историю естественной обработки языка и её подразделы.
Начало развития NLP
Естественная обработка языка — это междисциплинарная область на стыке информатики и лингвистики. Существует бесконечное количество способов, чтобы соединить слова и составить из них предложение. Конечно, не все эти предложения будут грамматически правильными или даже иметь смысл.
Люди могут их различать, но компьютер — нет. Более того, нереально загрузить в него словарь со всеми возможными предложениями на всех возможных языках.
На ранних этапах учёные предлагали разделять любое предложение на набор слов, которые можно обрабатывать индивидуально, что гораздо проще, чем обрабатывать предложение целиком. Этот подход аналогичен тому, с помощью которого обучают новому языку детей и взрослых.
Когда мы только начинаем учить язык, нас знакомят с его частями речи. Для примера возьмём английский язык. В нём есть 9 основных частей речи: существительные, глаголы, прилагательные, наречия, местоимения, артикли и др. Эти части речи помогают понять назначение каждого слова в предложении.
Однако недостаточно знать категорию слова, особенно для тех, которые могут иметь более одного значения. Например, слово «leaves» может быть формой глагола « to leave» (англ. уходить) или формой множественного числа существительного «leaf» (англ. лист).
Поэтому компьютерам необходимо базовое понимание грамматики, чтобы обращаться к ней в случае замешательства. Таким образом появились правила структуры фраз.
Они представляют собой набор правил грамматики, по которым строится предложение. В английском языке оно образуется с помощью именной и глагольной группы. Рассмотрим предложение: « Anne ate the apple» (англ. Энн съела яблоко). Здесь « Anne» — это именная группа, а « ate the apple» — это глагольная группа.
Различные предложения формируются с использованием разных структур. По мере увеличения количества правил структуры фраз можно создавать дерево синтаксического анализа, чтобы классифицировать каждое слово в конкретном предложении и прийти к его общему значению.
Всё это отлично работает, если предложения просты и ясны. Но проблема в том, что они могут быть достаточно сложными, или в них могут использоваться не совсем однозначные слова или неологизмы. В этом случае компьютерам будет сложно понять, что имелось в виду.
Подразделы NLP
Обработка текста
Чат-боты — один из хорошо известных примеров NLP. Изначально чат-боты были основаны на системе правил. Это означало, что специалисты должны были закодировать сотни, а возможно, и тысячи правил структуры фраз, чтобы чат-бот корректно ответил на данные, которые вводит человек. Таким примером является Eliza. Это чат-бот, разработанный в 1960-х годах и пародирующий диалог с психотерапевтом.
Сегодня большинство чат-ботов и виртуальных помощников создаются и программируются с использованием методов машинного обучения. Эти методы основываются на многочисленных гигабайтах данных, собранных во время разговоров между людьми.
Чем больше данных будет передано модели машинного обучения, тем лучше будет работать чат-бот.
Распознавание речи
Чат-боты про то, как компьютеры понимают письменный язык. А что насчёт устной речи? Как компьютеры могут превратить звук в слова, а затем понять их значение?
Распознавание речи — второй подраздел обработки естественного языка. Это тоже совсем не новая технология. Она была в центре внимания многих исследователей в течение последних десятилетий. В 1970-х годах в Университете Карнеги-Меллона была разработана Harpy. Это была первая компьютерная программа, которая понимала 1000 слов.
В то время компьютеры не были достаточно мощными для распознавания речи в реальном времени, если только вы не говорили очень медленно. Это препятствие было устранено с появлением более быстрых и мощных компьютеров.
Синтез речи
Синтез речи во многом противоположен распознаванию речи. С помощью этой технологии у компьютера появилась возможность издавать звуки или произносить слова.
Первым в мире устройством для синтеза речи считается VODER (англ. Voice Operating Demonstrator — модель голосового аппарата). Оно было разработано Гомером Дадли из компании Bell Labs в 1930-х годах. У VODER было ручное управление. С тех пор многое изменилось.
В системах распознавания речи и чат-ботах предложения разбиваются на фонемы. Чтобы произнести определенное предложение, компьютер сохраняет эти фонемы, преобразовывает и воспроизводит.
Такой способ соединения фонем был и остаётся причиной того, что речь компьютера звучит очень роботизировано, поскольку на границах сшивки элементов часто возникают искажения.
Конечно, со временем звучание стало лучше. Использование современных алгоритмов в новейших виртуальных помощниках, таких как Siri, Cortana и Alexa, подтверждает то, что мы далеко продвинулись. Однако их речь по звучанию по-прежнему немного отличается от человеческой.
Заключение
Обработка естественного языка — общее название области, которое охватывает множество подразделов. Во всех них обычно используют модели машинного обучения, в основном нейросети, и данные множества разговоров между людьми.
Поскольку человеческие языки постоянно и стихийно развиваются, а компьютеру нужны чёткие и структурированные данные, при обработке возникают определённые проблемы и страдает точность. Кроме того, методы анализа текстов сильно зависят от языка, жанра, темы — всегда требуется дополнительная настройка. Однако сегодня многие задачи обработки естественного языка всё же решаются с применением глубокого обучения нейронных сетей.
Обработка естественного языка или NLP (англ. Natural Language Processing) — направление на стыке информатики и лингвистики, которое даёт возможность компьютерам понимать человеческий, т. е. естественный язык. Сейчас это одна из самых популярных областей науки о данных. Однако она существует с момента изобретения компьютеров.
Именно развитие техники и вычислительной мощности привело к невероятным достижениям в сфере NLP. Технологии синтеза и распознавания речи становятся такими же востребованными, как и технологии, работающие с письменными текстами. Разработка виртуальных помощников, таких как Siri, Alexa и Cortana, свидетельствует о том, насколько далеко продвинулись учёные.
Так что же необходимо знать, чтобы начать заниматься естественной обработкой языка? Нужна ли степень по информатике?
Чтобы стать специалистом по NLP, никакие степени не понадобятся. Всё, что вам потребуется, это изучить и попрактиковать определённые навыки, а также создать несколько проектов, чтобы подтвердить свои знания.
В начале пути в сфере обработки естественного языка может быть сложно. Объём информации в интернете огромен и может сбивать с толку или вести не туда. Я, как человек, который сам через это прошёл, решила написать статью и поделиться коротким и чётким руководством для старта.
1. Основы лингвистики
По сути, NLP — это про изучение языков. Разработчик пытается объяснить компьютеру, как понимать мудрёную письменную и устную речь человека.
Я занялась NLP, потому что меня всегда интересовали языки и то, как они образовывались и развивались с течением времени. Однако говорить на каком-то языке не означает полностью понимать его логику.
Чтобы иметь прочную основу для начала работы в NLP, необходимо полностью осознавать базовую логику языка, которому вы пытаетесь «научить» компьютер. Этот язык не обязательно должен быть вашим родным. Вы даже можете выучить новый при разработке проекта для его анализа.
Я не имею в виду, что нужно получать степень по лингвистике или что-то в этом роде. Я пытаюсь сказать, что понимание того, как языки решают различные проблемы, может оказаться полезным при разработке и анализе приложений для NLP. Более того, зная о межъязыковом влиянии, вы можете создавать многоязычные приложения.
Я рекомендую начать изучение основ лингвистики для обработки естественного языка с книги Эмили М. Бендер «Основы лингвистики для естественной обработки языка» (англ. Emily M. Bender Linguistic Fundamentals for Natural Language Processing ).
2. Манипуляции со строками
«Язык», на котором вы пытаетесь анализировать и создавать приложения, обычно имеет форму строк. Даже если это приложение для распознавания речи, она всё равно преобразовывается в текст перед анализом.
Поэтому первый шаг, который вам нужно освоить перед погружением в основные техники NLP, — это манипуляции со строками с использованием любого языка программирования.
Если у вас нет опыта программирования, то рекомендую начать с Python. Он широко используется в различных областях науки о данных, включая NLP. Если у вас уже есть опыт программирования на других языках, то освоить манипуляцию со строками не составит труда.
3. Регулярные выражения
После того, как вы освоите операции со строками с помощью встроенных функций на выбранном вами языке программирования, следующим шагом будут регулярные выражения.
Это один из самых мощных и эффективных методов обработки текста. У регулярных выражений своя терминология, условия и синтаксис. Некоторые разработчики рассматривают их как мини-язык программирования. Они помогут обобщить правила и сделать приложения для обработки тестов более эффективными.
4. Очистка данных
Качество результата работы зависит от входных данных. Поэтому важно, чтобы они были подготовлены наилучшим образом. Этот навык применим не только к проектам по NLP, но и ко всем областям науки о данных. Однако подходы к очистке данных различаются в зависимости от задач и целевых результатов.
При подготовке текста к обработке и анализу мы обычно удаляем все знаки препинания. Это помогает улучшить вариативность слов в тексте. Также существуют различные типы слов, например стоп-слова, которые можно удалить для более эффективного анализа.
Три основных шага очистки текста для NLP:
5. Анализ текста
Наконец-то мы подошли к разделу навыков непосредственно из обработки естественного языка. Получив чистый набор данных, вы будете готовы создавать модели и начинать анализировать текст. Но для этого вам нужно немного знать терминологию из NLP.
Вот пять основных навыков и их значение:
6. Основы машинного обучения
Воспользовавшись основными навыками обработки языка, мы получаем корпус — набор данных после очистки текста и выполнения других основных задач NLP. Далее его необходимо проанализировать и извлечь полезную информацию. Для этого понадобится алгоритм машинного обучения.
Давайте рассмотрим два наиболее часто используемых алгоритма:
7. Оценочные метрики
Это очень важный пункт, о котором обычно забывают. Каждый раз, когда вы применяете модель машинного обучения к данным, необходимо оценивать её результаты. Для каждой модели нужны свои метрики.
Вот некоторые из них:
Более подробную информацию вы можете узнать в материалах лекции из Массачусетского университета в Амхерсте (материалы на англ. яз.).
8. Глубокое обучение
Глубокое обучение полезно для определённых задач, требующих нелинейности пространства признаков. Оно предоставляет улучшенные модели с более высокой точностью и качественными результатами.
Один из самых часто используемых методов глубокого обучения в NLP — рекуррентные нейронные сети. К счастью, нет необходимости знать, как реализовать этот алгоритм или множество других, благодаря открытым библиотекам, таким как Keras и Scikit-learn, написанным на языке Python.
А что действительно нужно сделать, так это научиться эффективно использовать алгоритм, изучая его способ работы и узнавая, какие он даёт результаты.
9. Создание проектов
У меня этот шаг под номером 9, но его необходимо выполнять параллельно со всеми предыдущими шагами. Всегда сразу применяйте свои знания на практике. Это единственный способ проверить, насколько вы их усвоили.
При этом, чем больше вы знаете, тем более крутые приложения вы можете создавать. Вот несколько идей, которые можно опробовать, когда у вас будет достаточно знаний.
Таких идей ещё много. Дерзайте.
10. Научные статьи
Все подразделы науки о данных являются активными областями исследований. Как специалисту по данным в целом и специалисту по обработке естественного языка в частности, вам необходимо быть в курсе последних разработок в этой сфере. Единственный способ это сделать — следить за недавно опубликованными научными статьями о NLP.
Мне удобно создавать оповещения в Google Академии о новых публикациях по конкретным темам, которые меня интересуют: я получаю электронное письмо, как только они выходят.
Заключение
Иногда изучение нового навыка или получение новых знаний — довольно сложная задача. Но если не бросать это на полпути, а продолжать практиковаться и постоянно расширять базу знаний, вы достигнете своей цели.
«Мы можем делать всё, что захотим, если будем придерживаться этого достаточно долго», — Хелен Келлер.
Освоение обработки естественного языка может быть трудной задачей из-за огромного количества информации в интернете. Я надеюсь, что эта статья поможет вам сориентироваться в процессе обучения и сделает его немного проще.
Две сущности нейролингвистического программирования
NLP компьютерное и НЛП психологическое
Нейролингвистическое программирование (НЛП) является областью знаний, возникшей изначально в двух отраслях науки: Computer Science и Психологии. В Computer Science NLP означает Natural Language Processing, в психологии — нейролингвистическое программирование. Это не совсем одно и тоже, но как минимум близко. Близко, как единство противоположностей. Обладая одинаковым названием и задачами по изучению структур языка, работ посвящённых исследованию их связи и возможности перекрёстного использования техник крайне мало. Психологическое НЛП, по моему скромному мнению, продвинулось в изучении структур языка существенно дальше, чем стемминг и лемматизация, которые применяются в большинстве задач компьютерного NLP. В этой статье я освящу основные наработки психологического НЛП для компьютерного NLP, намечу пути, как с помощью психологического НЛП создавать State of the Art нейросети NLP. Для сокращения широты методов NLP ограничим эту область до области, где для целей NLP применяются нейросети.
Психологическое НЛП было представлено Ричардом Бендлером и Джоном Гриндером. Самой известной книгой по НЛП является книга «Структура магии». Я конечно имею в виду психологическое НЛП, не удивляйтесь и не пугайтесь. Показательно, что названием первого тома этой книги является: «Книга о языке и психотерапии». Если мы опустим слово «психотерапия», мы обнаруживаем много сведений о языке, вполне применимых для техники.
Нейронная сеть это упрощённая мыслительная модель, по крайней мере мы надеемся на это. Нечто общее между ними безусловно есть, как минимум слово «нейро». В то же время, психологическое НЛП тоже является не полноценным психоанализом. Серьёзные психологи обзывают НЛП «психология для чайников» — кому не дано читать Зигмунда Фрейда, читают Ричарда Бендлера и Джона Гриндера.
применение «упрощённой психологии» к «упрощённой модели мозга» заслуживает обсуждения
Я буду освещать перенос методов из психологического НЛП в техническое: сейчас это востребовано, мне поставят лайки, кто-нибудь напишет комменты, девушки будут узнавать меня «это популярный технический блоггер!». Однако, перенос технических разработок НЛП в область психологии возможен и, для целей развития общества, ИМХО, более важен. Собственно этим примерно занимаются те, кто исследует Big Data: получая данные о поведении масс, они регулярно формируют психологические и социологические модели. К сожалению, редко кто может осуществить перевод наработок на язык психологов, социологов, популяризовать результаты в их среде.
Базовые пресупозиции НЛП для нейронной сети
Сначала немного абстракций. Методы будут в нижних разделах.
Одной из основ психологического НЛП является понятие базовых пресупозиций: аксиом на базе которых формируется данная область (почти как в геометрии). С точки зрения computer science, термин «пресупозиция» может занять достойное место в Эмбединге, в начале вашей неросети. Если бы у меня было больше времени, я непременно бы провёл исследование, не является ли слово «пресупозиция» камнем преткновения в текстовом корпусе, стоит ли он там во главе угла.
Могут ли базовые пресупозиции НЛП применяться к Нейронной сети?
Ниже я привожу базовые пресупозиции психологического НЛП и расшифровываю их значения для нейросети. Специалисты по computer science прочитав могут понять, с чем приходится иметь дело и как пропустить это через свой keras.layers.Embedding. Трактовка для нейросети субъективна и не претендует на полноту.
Пресупозиция НЛП | Трактовка для нейросети |
Карта — не территория | Феномен переобучения постоянно подтверждает это |
Любое поведение мотивировано позитивным намерением; для любого поведения существует контекст, в котором оно ценно. | Нейросеть ценна в контексте, в котором она создаётся. Внутри этого контекста она показывает лучший результат. |
Позитивная ценность человека абсолютна, а вот ценность и пригодность внутренних и/или внешних поведений может быть подвергнута сомнению. | Ценность нейросети для самой себя также абсолютна. А вот в продакшине её ценность подвергается сомнению постоянно. |
Способность изменять процесс восприятия реальности часто полезнее изменения содержания воспринимаемой реальности. | Привнесение новых фичей даёт результат лучше, чем усложнение сети. Это часто подтверждается на соревнованиях Kaggle, но, однако, не всегда: CNN может давать результат при сокращении признаков. |
Все различения, касающиеся окружающей среды и собственного поведения, на которые способны человеческие существа, можно и полезно представить в терминах визуального, аудиального, кинестетического, обонятельного и вкусового восприятия. | В нейросеть можно подать только текст, фото (видео) или закодированные фичи (аудио кодирует информацию). В общем, умельцы как не пытаются загрузить в сеть что-то «оттуда», у них не получается… |
Все ресурсы, нужные людям для изменения, у них уже есть. | Для повышения качества работы нейросети можно придумать сколь угодно мудрёную комбинацию слоёв (вспомним BERT). Если железо это потянет… |
Обратная связь вместо неудачи — все результаты и поведения являются достижениями, позволяют они достигнуть желаемого результата в данном контексте или нет. | Пресупозиция выражается в обучении с подкреплением: у неё нет эмоций, любую неудачу сеть воспринимает как опыт. |
Смысл коммуникации в ответе, который вы получаете. | Сеть создаётся чтобы получить ответ: от объекта исследований или от мироздания. |
Вот мы проектируем нейронную сеть. Практикуем диалог со вселенной:
— у нас неудача: сеть работает, но плохо. – ответ вселенной:
— «смысл коммуникации в ответе, который вы получаете.». Т.е. задача в таком виде не решается, нужно что-то менять. – ещё вопрос:
— что именно менять? – ответ вселенной:
— «Способность изменять процесс восприятия реальности часто полезнее изменения содержания воспринимаемой реальности». Т.е. меняйте фичи…
Подходы к обработке текста в НЛП
Спустимся же на землю, вернёмся к основной задаче, ради которой уважаемый читатель читателей читает этот материал. Что в психологическом НЛП есть для работы с текстом?
НЛП содержит множество конструкций для работы с текстом, которые пока не алгоритмизированы.
на текущем этапе удалось вспомнить 5 моделей НЛП пригодных для применения в компьютере. По каждой из конструкций НЛП написаны книги. В двух словах объяснить, что такое метамодель, не получится. В этой статье постараюсь дать отсылку к источникам и прикинуть, что это может быть для NLP компьютерного.
1. Модель языка и метамодель
Описание >>
Краткое описание: метамодель представляет собой модель изменений уровней абстракции в языке, а также и произвольную трактовку понятий разными людьми. Например, слово «любовь» можно понимать по разному: слово «секс» для многих является разновидностью любви, для кого-то это разные вещи. Метамодель это не теория а вопросная техника, позволяющая пробиться к скрытым за словами понятиям, стоящим в голове человека.
Нейронка которая бы повышала / понижала / смещала уровни абстракции текста стала бы революцией! В продакшине эта нейронка могла бы дополнить имеющиеся диалоговые модели: современные чат-боты не умеют работать в выбранном контексте, подстраиваться под терменологию человека. Кто-то под словом «счастье» понимает, что это когда много любви, кто-то, когда много еды, а программист понимает, что счастье — это когда вокруг компьютеры и все пентиумы. Как чат-бот может определить истинное значение слова «счастье» для собеседника?
Нейронка кстати не будет супер сложной: надо собрать корпус текста, разметить его по уровням абстракции и смещения области значений, поиграть с сетями похожими на архитектуры сетей-переводчиков. Переведём конкретный корпус в абстрактный, потом обратно.
2. Нейрологические уровни (Чарлз Дилтс)
Описание >>
Краткое описание: все понятия языка разделяются на 7 уровней. Каждый следующий логический уровень — от миссии к окружению — должен соответствовать предыдущему. Список уровней и картинки есть по ссылке.
Логические уровни являются уточнением метамодели, вносящую в уровни абстракции дополнительный порядок: она не сферическая в вакууме, каждый уровень абстракции имеет свою цель и задачу (предназначение), уровни становятся связанными между собой.
Сетей на основе логических уровней можно придумать множество. Первым вариантом на ум приходит сеть, выделяющая уровень более высокого порядка из текста, который содержит описание сущности в понятиях выбранного логического уровня. Например: бизнес-процесс является описанием на языке нейрологического уровня «место / действие». А компетентностная модель это описание на языке уровня «способность / возможность». Сеть, строящая компетентностную модель по описанию бизнес-процесса, будет стоить очень дорого.
Сделать такую сеть реально: нужны корпуса текста, размеченные по логическим уровням, мощности для работы с архитектурой энкодер/декодер.
3. Метапрограммы
Описание >>
Краткое описание: метапрограммы — основные фильтры восприятия человека. Программами их назвали психологи, не программисты. Человек не мыслит «вообще»: он концентрируется на чём-то, выбирает «фильтр» через который он воспринимает это что-то, далее он отрабатывает по алгоритму ту информацию, которую он получил через фильтр и производит некоторый вывод и управляющие воздействие. В НЛП выделяется 7-10 основных фильтров восприятия, метапрограмм. Список метапрограмм различный для разных культур, частей социума, может изменяться во времени.
Нейронка, которая бы делала выводы не в целом, а в разрезе конкретного объекта с применением фильтра восприятия, могла бы стать основой «сильного» интеллекта. Набор сетей, каждая из которых обучена для работы по одной из метапрограмм и комитет, выбирающий какую из них применить к реальности, дали бы возможность ИМХО сети стать более автономной и, возможно, получить какую-то адаптивность в физическом мире.
Метапрограмма | Сеть определяет |
Активный-Рефлексивный | Выбор как лучше поступать: активно или рефлексивно |
ВО-ВНЕ времени | Тут сложно |
Сортировка | Сортировка неструктурированной информации по неясным параметрам |
Мотивы | Что делать? |
Ориентация во времени | Будущее или прошлое? |
Предпочитаемая модальность | Выбор признаков |
Стремление-избегание | Делаем или уходим |
Размер разбивки | Умная кластеризация |
Референция | Навязывать правила или играть по правилам |
Способы мышления | Выбор метапрограммы |
Фокус сравнения | Выбор фичей для сравнения |
Как видим, построить каждую из таких сетей это задача для института. Для каждой метапрограммы будет сетка масштаба ResNet50, обученная на ImageNet. Эту сеть делала корпорация несколько лет. И это не полный список метапрограмм для лишь одной культуры! Но эффект может быть поразителен: глядишь, собрав 20-30 таких сетей в ансамбль, получим что-то действительно умное.
4. Раскрутки
Описание >>
Краткое описание: раскрутки это техника, в основе которой лежит игра с фильтрами восприятия. Меняя фильтры восприятия собеседника мы выходим на эмоциональный план, получив доступ к нелогическим планам сознания и интересным психологическим эффектам.
Раскрутки это по сути применение навыков работы с метапрограммами. И да, если мы лишь вообразим, что мы сделали сети для предыдущего пункта, то их применение может быть эпохальным и воистину эпическим…
5. Двойная и тройная спираль
Описание >>
Краткое описание: не смотря на то что тройная спираль это техника, за неё стоит чёткая речевая конструкция — вложенность логических постановок выделенная тоном даёт доступ к эмоциональным и нелогическим планам человека.
Тройную спираль можно моделировать и / или хотя бы выявлять в речи. Это не станет революцией. Но будет полезно для понимания структуры материалов в прессе. А ещё лучше для систем, которые текст генерируют: разнообразие литературных стилей невозможно без двойной и тройной спирали.
Перспектива разработок сетей по моделям психологического НЛП
Интерес к разработкам масштаба, изложенного в предыдущем разделе, может быть либо у крупных игроков, либо у энтузиастов-любителей. Для Армии, усилить мозги робота Фёдора за счёт нейросетей созданных по моделям НЛП, может быть весьма привлекательным. Также есть перспектива разработки моделей, усиливающих BERT и XLNet – работа с метамоделью и логическими уровнями могли бы помочь создать крутейших чат-ботов, способных болтать на любые темы с кем угодно.
Для коммерческих организаций, которые озабочены вопросом распознавания параметров накладных для автоматизации учёта фиатных валют, это мало интересно. Задача повысить кол-во ноликов на счетах, которые ведутся в компьютере их фактического хозяина, с помощью нейронных сетей не решается.