Создать помощника пользователя с использованием НЛП
Я изучаю курс под названием "Обработка естественного языка" на Coursera, и хотя курс носит информативный характер, мне интересно, отвечает ли данное содержание тому, что я ищу.
По сути, я хочу реализовать текстовую версию Cortana или Siri на данный момент как проект, то есть, где пользователь может вводить команды для компьютера на естественном языке, и они будут обрабатываться и переводиться в соответствующие команды ОС. Мой вопрос
1 ответ
То, что вы хотите создать, можно рассматривать как тщательно ограниченного чат-бота, за исключением того, что вы не пытаетесь вести общий разговор с пользователем, но обрабатываете определенный ввод естественного языка и сопоставляете его с конкретными командами или действиями.
По сути, вам нужен инструмент, который может сопоставлять шаблоны с различными пользовательскими данными, извлекать или, по крайней мере, распознавать различные важные темы или элементы темы, а затем решать, что делать с этими данными.
Вместо того, чтобы вдаваться в абстрактное обсуждение обработки естественного языка, я собираюсь дать рекомендацию. Используйте ChatScript. Это бесплатный инструмент с открытым исходным кодом для создания чат-ботов, который недавно занял первое место в конкурсе чат-ботов Loebner, как это было несколько раз в прошлом:
http://chatscript.sourceforge.net/
Инструмент написан на C++, но вам не нужно прикасаться к исходному коду для создания приложений NLP; просто используйте язык сценариев, предоставляемый инструментом. Несмотря на то, что изначально он был написан для чат-ботов, он превратился в чрезвычайно удобный для программистов инструмент для создания любых видов НЛП-приложений.
Самое главное, вы не ограничены философией инструмента или ограничены рамками, предоставляемыми инструментом. Он обладает всеми возможностями большинства языков сценариев, поэтому вы не окажетесь на большей части пути к завершению своего приложения, а только обнаружите какое-то сокрушительное ограничение на последней миле, которое повредит ваше приложение или, по крайней мере, нанесет серьезный урон.
Он также включает в себя большое количество онтологий, которые могут значительно ускорить ваши усилия по разработке, а встроенный препроцессор выполняет синтаксический анализ частей речи, согласованность ввода и многие другие задачи, важные для написания сценария, которые можно легко обобщить. обрабатывать большие изменения в пользовательском вводе. У этого также есть полный интерфейс к базе данных синхронизации WordNet. В ChatScript есть много других важных функций, которые значительно упрощают разработку NLP, их слишком много, чтобы перечислять здесь. Он может работать вLinux или Windows как сервер, к которому можно получить доступ через сокет TCP-IP.
Вот небольшой и чрезмерно упрощенный пример кода скрипта ChatScript:
# Define the list of available devices in the user's household.
concept: ~available_devices( green_kitchen_lamp stove radio )
#! Turn on the green kitchen lamp.
#! Turn off that damn radio!
u: ( turn _[ on off ] *~2 _~available_devices )
# Save off the desired action found in the user's input. ON or OFF.
$action = _0
# Save off the name of the device the user wants to turn on or off.
$target_device = _1
# Launch the utility that turns devices on and off.
^system( devicemanager $action $target_device )
Выше приведено типичное правило ChatScript. В вашем приложении будет много таких правил. Это правило ищет команды пользователя для включения и выключения различных устройств в доме. Символ # указывает, что строка является комментарием. Вот разбивка головы правила:
- Он состоит из префикса u:. Это сообщает ChatScript правило, согласно которому правило принимает пользовательский ввод в форме оператора или вопроса.
- Он состоит из шаблона соответствия, который является содержимым в скобках. Этот образец соответствия ищет слово поворота в любом месте предложения. Далее он ищет желаемое действие пользователя. Квадратные скобки сообщают ChatScript, что слово должно совпадать или выключаться. Подчеркивание, предшествующее квадратным скобкам, указывает ChatScript захватывать сопоставленный текст, так же, как скобки в регулярном выражении. Токен ~2 является подстановочным знаком с ограниченным диапазоном. Он сообщает ChatScript разрешить до 2 промежуточных слов между словом поворота и набором понятий ~ available_devices. ~ available_devices-набор концепций. Он определен выше правила и содержит набор известных устройств, которые пользователь может включать и выключать. Подчеркивание, предшествующее имени набора понятий, указывает ChatScript захватить имя устройства, указанное пользователем при вводе.
Если шаблон правила соответствует текущему пользовательскому вводу, он "срабатывает", а затем выполняетсятело правила. Содержимое тела этого правила довольно очевидно, и комментарии над каждой строкой должны помочь вам понять, что делает правило, если оно выполнено. Это сохраняет желаемое действие и целевое устройство, захваченное из пользовательского ввода в переменные. (Именам переменных ChatScript предшествует одинарный или двойной знак доллара.) Затем он переводится в операционную систему, чтобы запустить программу с именем devicemanager, которая фактически включит или выключит нужное устройство.
Я хотел бы отметить одну из многих функций ChatScript, которые делают его надежным и промышленным инструментом NLP. Если вы посмотрите выше правила, вы увидите два предложения с префиксом строки, состоящей из символов#!, Это не комментарии, а предложения для проверки. Вы можете запустить ChatScript в режиме проверки. В режиме проверки он найдет все проверочные предложения в ваших скриптах. Затем он будет применять каждое проверочное предложение к правилу, которое следует сразу за ним. Если шаблон правила не соответствует предложению проверки, сообщение об ошибке будет записано в файл журнала. Это делает каждое проверочное предложение крошечным, простым в применении модульным тестом. Поэтому позже, когда вы внесете изменения в свой скрипт, вы можете запустить ChatScript в режиме проверки и посмотреть, не сломали ли вы что-нибудь.