我用一个简单的实体创建了这样的LUIS话语: 客户abc的订单处理中
其中abc替换为简单实体vf_NARCName
在机器人中,当我输入类似问题时: 客户动物皮肤病医院的订单正在处理
这里的客户名称是动物皮肤病医院,之间用空格隔开,那么当我通过LUIS Rest API获取数据时,我得到的是Animal作为实体值,而不是动物皮肤病医院,有时也没有实体值返回>
{
"query": " orders in process for customer Animal Dermatology Service",
"topScoringIntent": {
"intent": "OrderDetails_2a598c9b-7cb5-4113-9aca-435b55bbe19e",
"score": 0.7547371
},
返回数据
{
"query": "how many orders are currently in process for customer Animal Dermatology Service",
"topScoringIntent": {
"intent": "OrderDetails_2a598c9b-7cb5-4113-9aca-435b55bbe19e",
"score": 0.6452578
},
"entities": []
}
但是,如果我只查询动物,则返回正确的数据
返回数据
{
"query": "how many orders are currently in process for customer Animal",
"topScoringIntent": {
"intent": "OrderDetails_2a598c9b-7cb5-4113-9aca-435b55bbe19e",
"score": 0.8928922
},
"entities": [
{
"entity": "animal",
"type": "vf_NARCName",
"startIndex": 54,
"endIndex": 59,
"score": 0.500023663
}
]
}
答案 0 :(得分:6)
您的LUIS应用本质上需要更多关于实体发生方式的说明。
我要说,策略1.)可能是最有用的,但是请列出您可能会包括的其他选项,以帮助您进行实体检测。
如First Tutorial in the documentation“构建应用程序”部分下所述,请确保您包括:
和您应该注意的变体:
最后一点可能是您应该包括的更多示例。因此,请检查您包含vf_NARCName
实体的语音,这些实体的长度不仅是1个单词,而且可能是2或3个甚至更长,如果在您的应用中是可能的。
在docs describing what Phrase Lists are状态下,
短语列表包括一组值(单词或短语),它们 属于同一类,必须得到类似的对待
这是您可以帮助向LUIS发送另一个信号以帮助检测您的vf_NARCName
实体的另一种方式。
有关如何添加词组列表here的教程。
此处为Pattern.any docs状态,
使用pattern.any实体从话语中提取数据,其中 话语格式正确,数据的结尾可能在哪里 容易与话语中的其余单词混淆
因此,如果您知道潜在的vf_NARCName
实体的实体字数非常长,则可以从使用Pattern.any实体中受益。
例如,也许您将“ The Department of People Who like Really Long Names, But Hate Novels
”作为vf_NARCName
实体。 LUIS可能很难确定该实体的确切位置,但是可以使用Pattern.any来完成。
答案 1 :(得分:0)
训练数据的数量和类型似乎有问题。您必须为LUIS提供足够的样本,以便能够了解vf_NARCName
的值可以由一个单词或一系列单词组成。
在这种情况下,我建议您尝试建立一个短语列表,例如“ CompanyNames”,并提供一些多样化的示例,例如“ Animal Dermatology Service”,“ Animal Dermatology”以及其他可能涉及客户名称的真实示例提交给生产中的机器人。
您可以在此处阅读有关词组列表的更多信息: https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-how-to-add-features
过去我也遇到过同样的问题,有两件事可以帮助您,很多训练数据和短语列表。