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 语音平台的机器学习架构。
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 年 1 月,我们复制了 2017 年夏季发布的学术基准。在本文中,作者评估了 API.ai(现为 Dialogflow、Google)、Luis.ai(微软)、IBM Watson 和 Rasa NLU 的性能。为了公平起见,我们使用了 Rasa NLU 的更新版本,并将其与 Snips NLU 的最新版本(均为深蓝色)进行了比较。
在上图中,计算了多个 NLU 提供商的意图分类和槽位填充的 F1 分数,并对前面提到的学术基准中使用的三个数据集进行了平均。所有基本结果都可以在这里找到。
要了解如何使用 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 国际许可提供。有关 Geonames 的许可和保证,请参阅:https://creativecommons.org/licenses/by/4.0/legalcode。