Snips NLU (естественное понимание языка) — это библиотека Python, которая позволяет извлекать структурированную информацию из предложений, написанных на естественном языке.
За каждым чат-ботом и голосовым помощником стоит общая технология: понимание естественного языка (NLU). Каждый раз, когда пользователь взаимодействует с ИИ, используя естественный язык, его слова необходимо перевести в машиночитаемое описание того, что они имели в виду.
Механизм NLU сначала определяет намерение пользователя (так называемое намерение), затем извлекает параметры (называемые слотами) запроса. Затем разработчик может использовать это для определения подходящего действия или ответа.
Давайте возьмем пример, чтобы проиллюстрировать это, и рассмотрим следующее предложение:
«Какая будет погода в Париже в 9 вечера?»
При правильном обучении механизм Snips NLU сможет извлекать структурированные данные, такие как:
{
"intent" : {
"intentName" : " searchWeatherForecast " ,
"probability" : 0.95
},
"slots" : [
{
"value" : " paris " ,
"entity" : " locality " ,
"slotName" : " forecast_locality "
},
{
"value" : {
"kind" : " InstantTime " ,
"value" : " 2018-02-08 20:00:00 +00:00 "
},
"entity" : " snips/datetime " ,
"slotName" : " forecast_start_datetime "
}
]
}
В этом случае выявленным намерением является searchWeatherForecast
, и были извлечены два слота: местоположение и дата и время. Как видите, Snips NLU делает дополнительный шаг помимо извлечения объектов: он их разрешает. Извлеченное значение даты и времени действительно было преобразовано в удобный формат ISO.
Прочтите сообщение в нашем блоге, чтобы получить более подробную информацию о том, почему мы создали Snips NLU и как он работает внутри. Мы также опубликовали статью об arxiv, в которой представлена архитектура машинного обучения Snips Voice Platform.
pip install snips - nlu
В настоящее время у нас есть готовые двоичные файлы (колеса) для snips-nlu
и его зависимостей для MacOS (10.11 и более поздних версий), Linux x86_64 и Windows.
Для любой другой архитектуры/ОС snips-nlu можно установить из исходного дистрибутива. Для этого перед запуском команды pip install snips-nlu
необходимо установить Rust и setuptools_rust.
Snips NLU использует внешние языковые ресурсы, которые необходимо загрузить перед использованием библиотеки. Вы можете получить ресурсы для определенного языка, выполнив следующую команду:
python -m snips_nlu download en
Или просто:
snips-nlu download en
Список поддерживаемых языков доступен по этому адресу.
Самый простой способ проверить возможности этой библиотеки — через интерфейс командной строки.
Во-первых, начните с обучения NLU с помощью одного из образцов наборов данных:
snips-nlu train path/to/dataset.json path/to/output_trained_engine
Где path/to/dataset.json
— это путь к набору данных, который будет использоваться во время обучения, а path/to/output_trained_engine
— это место, где обученный механизм должен сохраняться после завершения обучения.
После этого вы можете начать интерактивный анализ предложений, выполнив:
snips-nlu parse path/to/trained_engine
Где path/to/trained_engine
соответствует месту, где вы сохранили обученный движок на предыдущем шаге.
Вот пример кода, который вы можете запустить на своем компьютере после установки snips-nlu, получения англоязычных ресурсов и загрузки одного из примеров наборов данных:
>> > from __future__ import unicode_literals , print_function
>> > import io
>> > import json
>> > from snips_nlu import SnipsNLUEngine
>> > from snips_nlu . default_configs import CONFIG_EN
>> > with io . open ( "sample_datasets/lights_dataset.json" ) as f :
... sample_dataset = json . load ( f )
>> > nlu_engine = SnipsNLUEngine ( config = CONFIG_EN )
>> > nlu_engine = nlu_engine . fit ( sample_dataset )
>> > text = "Please turn the light on in the kitchen"
>> > parsing = nlu_engine . parse ( text )
>> > parsing [ "intent" ][ "intentName" ]
'turnLightOn'
Он обучает механизм NLU на образце набора данных о погоде и анализирует запрос о погоде.
Вот список некоторых наборов данных, которые можно использовать для обучения механизма Snips NLU:
В январе 2018 года мы воспроизвели академический тест, опубликованный летом 2017 года. В этой статье авторы оценили производительность API.ai (теперь Dialogflow, Google), Luis.ai (Microsoft), IBM Watson и Rasa NLU. Справедливости ради мы использовали обновленную версию Rasa NLU и сравнили ее с последней версией Snips NLU (обе темно-синего цвета).
На рисунке выше оценки F1 как по классификации намерений, так и по заполнению слотов были рассчитаны для нескольких поставщиков NLU и усреднены по трем наборам данных, использованным в упомянутом выше академическом тесте. Все основные результаты можно найти здесь.
Чтобы узнать, как использовать Snips NLU, обратитесь к документации пакета. В ней содержится пошаговое руководство по настройке и использованию этой библиотеки.
При использовании Snips NLU ссылайтесь на следующую статью:
@article { coucke2018snips ,
title = { Snips Voice Platform: an embedded Spoken Language Understanding system for private-by-design voice interfaces } ,
author = { Coucke, Alice and Saade, Alaa and Ball, Adrien and Bluche, Th{'e}odore and Caulier, Alexandre and Leroy, David and Doumouro, Cl{'e}ment and Gisselbrecht, Thibault and Caltagirone, Francesco and Lavril, Thibaut and others } ,
journal = { arXiv preprint arXiv:1805.10190 } ,
pages = { 12--16 } ,
year = { 2018 }
}
Пожалуйста, присоединяйтесь к форуму, чтобы задавать вопросы и получать отзывы от сообщества.
Пожалуйста, ознакомьтесь с Правилами внесения взносов.
Эта библиотека предоставляется Snips как программное обеспечение с открытым исходным кодом. См. ЛИЦЕНЗИЮ для получения дополнительной информации.
Встроенные объекты snips/city, snips/country и snips/region основаны на программном обеспечении Geonames, которое доступно по международной лицензии Creative Commons Attribution 4.0. Лицензию и гарантии на географические имена можно найти по адресу: https://creativecommons.org/licenses/by/4.0/legalcode.