使用CLI生成分派模型时,它不会传递Luis应用程序中的Entities作为参考。这将严重影响调度应用程序的准确性。
例如,对于发话“我的[iPhone]无法正常工作”,iPhone被附加到实体列表名称CellPhoneType。 iPhone,三星,智能手机列表中有三项。
在机器人仿真器中,使用Dispatch,如果我写“我的iPhone无法正常工作”,则调度模型将其按需传递给Luis。但是,如果我写“我的智能手机无法正常工作”,则分发工具会将其发送给QnA Maker。
我检查了模型,并且实体未通过引用传递。我还测试了简单的实体,它们不能很好地工作。
我安装了最新版本的CLI。
这正常吗,这是一个错误吗?是否可以解决此问题?
答案 0 :(得分:0)
因此,在这里要解决的几件事是如何构建LUIS模型以及对调度的期望。 跳到2。)(如果您是正在阅读这篇文章的用户,并且已经拥有在LUIS子模型中很好地工作的实体。 @AlexandreViegas,请阅读第1点),以帮助正确地构建您的LUIS模型以正确检测调度中的意图。
1。使用简单实体+短语列表来利用LUIS的机器学习功能,而不是列表实体
现在看来,您选择使用列表实体并不是到达此处的最佳方法,而不是打算如何使用它。相反,列表实体用于可能具有多种引用同一事物的方式的术语。
何时需要使用列表实体的示例
例如,加利福尼亚州,卡利州,加利福尼亚州和黄金州都是指同一事物(州)的术语。您可以创建一个“州”列表实体,其中包括美国的全部50个州及其昵称。现在,由于这是一个封闭的显式列表,因此使用列表实体时没有没有机器学习-LUIS仅在存在完全匹配的文本时才检测“状态”列表实体。
关于何时要使用列表实体的另一个示例是在学校用“部门”表示。您可能具有“化学”,“ CHEM142”,“化学”等含义,都是指该特定部门,而与学校中的其他部门一样。
为什么要使用简单实体并添加短语列表
您可以参考我写的另一本StackOverflow answer,关于如何创建一个简单的实体并使用短语列表增强该实体的信号。
要完全复制上面链接中给出的答案,实质上,您希望使用一个简单的实体,因此即使您未明确将其包含在CellPhoneType
实体中,LUIS仍可以正确地将其预测为模型。
例如,您可能有一个Phone
意图,用语音将各种单词标记为CellPhoneIntent
实体。
当我进入“测试”面板时,我输入“向日葵”和“月光石”作为手机(可能是将来的某些电话公司以这些名称作为型号来创建手机):
上面您可以看到LUIS正确地预测了Phone
的意图并正确地提取了sunflower
和moonstone
作为CellPhoneType
实体。
但是,如果我输入了英语中不存在的手机的品牌名称(例如Blackberry的“ Z3”或T-Mobile的“ G2X”),LUIS便无法立即使用我们的模型检测到它。 (请参阅2条最近的讲话)。
上面您可以看到发声“ i'd like to order a z3
和“ my g2x is broken
”不能正确预测为Phone
的意图,也无法检测到z3
或g2x
作为CellPhoneType
实体。这就是短语列表的来源。如docs中所指定,短语列表可用于增强手机类型的信号,并添加您的LUIS模型专有的或外来词,例如许多手机模型的“虚构”词。再次,如果需要有关如何创建短语列表的指导,请参考我链接到的StackOverflow答案。
2。查询直接由调度
创建的LUIS模型的端点说明:
上述项目符号的例外情况是,如果您以模式标记了实体
为什么在父LUIS模型中不需要对实体进行标记,是因为当您调用父LUIS模型的端点时,它在后台进行了某种共享调用,因此不需要必须两次对LUIS进行ping操作。
您会在connectedServiceResult
属性中看到从子LUIS模型标记的实体
如何使用父调度LUIS应用程序从子LUIS模型中提取实体
确保同时发布 子LUIS应用和父调度应用。
转到父分发创建的LUIS应用,转到管理>密钥和端点>单击“端点” ,打开浏览器标签,您可以在其中查询URL中的父应用在q=
在q=
之后的URL中键入您的话语,以查看在connectedServiceResult
https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx?verbose=true&timezoneOffset=-360&subscription-key=b7xxxxxxxxxxxxxxxxxxxxxxxxxxxx67&q=my%20iphone%20is%20broken
{
"query": "my iphone is broken",
"topScoringIntent": {
"intent": "l_Reminders",
"score": 0.99594605
},
"intents": [
{
"intent": "l_Reminders",
"score": 0.99594605
},
{
"intent": "None",
"score": 0.002990469
}
],
"entities": [],
"connectedServiceResult": {
"query": "my iphone is broken",
"topScoringIntent": {
"intent": "Phone",
"score": 0.9658808
},
"intents": [
{
"intent": "Phone",
"score": 0.9658808
},
{
"intent": "Calendar.Add",
"score": 0.0142210266
},
{
"intent": "Calendar.Find",
"score": 0.0112086516
},
{
"intent": "None",
"score": 0.009813501
},
{
"intent": "Email",
"score": 0.0025855056
}
],
"entities": [
{
"entity": "iphone",
"type": "CellPhoneType",
"startIndex": 3,
"endIndex": 8,
"score": 0.998970151
}
]
}
}
上面,您可以看到从分发创建的父LUIS应用正确地将发话iphone
中的my iphone is broken
标识为CellphoneType
实体。
注意:您不会在父调度的“测试”面板中看到子LUIS模型的结果,因为UI不会显示connectedServiceResult