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 年夏季發布的學術基準。為了公平起見,我們使用了 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。