如何识别列表实体中 sub-list 的名称?
How to recognize name of sub-list within list entity?
我有一个由 Microsoft Bot Framework 提供支持的聊天机器人,它使用 LUIS 服务进行自然语言识别。受支持的用例之一是允许用户列出他们的工单。由于可以有多种不同类型的工单,其中一项功能请求是支持按类型过滤这些工单,例如 - orders、incidents,等等
在 LUIS 中,我创建了名为 ticketType 的 list 实体,其中 sub-lists 表示各个票证类型及其同义词:
接下来,我创建了名为 listTickets 的意图,我在其中提供了以下样本话语:
最后,我还为 listTickets 创建了模式,以 加强 识别:
现在,在训练和测试我的模型后,一切正常。好吧,几乎...... ticketType 实体被正确识别,但我无法根据我的 sub-lists 区分各个票证类型,如此处的测试结果所示:
问题
如何正确训练我的 LUIS 模型并正确创建 ticketType 实体,以便 LUIS 也正确识别 sub-list?像 ticketType::order
和 ticketType::incident
?
我也读过 entity roles,但这似乎不适合我的情况,因为:
根据示例,它更适用于以下情况:同一实体在话语中多次使用,角色用于根据其位置区分各个实体。
理论上我可以使用角色,但是我必须用每一种可能的 sub-list 组合来训练我的 listTickets 意图,以确保一切正确标记。在这种情况下,模式仍然有意义吗?
我建议您在网络聊天或您将使用的任何渠道中对此进行测试。我根据你的模型创建了一个 LUIS 模型,当 运行 通过网络聊天时,你正在寻找的信息很容易获得。
在我的测试中,我在上一步中将 "Display my request" 作为话语传递给了机器人。如您所见,"request" 是 "order" 的同义词,可在 "ticketType" 中找到(根据您的设计)。我能够从 recognizerResult
以及标准化值(即 "sublists")中提取特定实体。
希望得到帮助!
const recognizerResult = await this.recognizer.recognize(stepContext.context);
let intent = await LuisRecognizer.topIntent( recognizerResult );
console.log('1', intent )
console.log('2', recognizerResult.entities );
console.log('3', recognizerResult.entities.ticketType );
console.log('4', recognizerResult.luisResult.entities );
1 listTicket
2 { '$instance': { ticketType: [ [Object] ] },
ticketType: [ [ 'order' ] ] }
3 [ [ 'order' ] ]
4 [ { entity: 'request',
type: 'ticketType',
startIndex: 11,
endIndex: 17,
resolution: { values: [Array] } } ]
我有一个由 Microsoft Bot Framework 提供支持的聊天机器人,它使用 LUIS 服务进行自然语言识别。受支持的用例之一是允许用户列出他们的工单。由于可以有多种不同类型的工单,其中一项功能请求是支持按类型过滤这些工单,例如 - orders、incidents,等等
在 LUIS 中,我创建了名为 ticketType 的 list 实体,其中 sub-lists 表示各个票证类型及其同义词:
接下来,我创建了名为 listTickets 的意图,我在其中提供了以下样本话语:
最后,我还为 listTickets 创建了模式,以 加强 识别:
现在,在训练和测试我的模型后,一切正常。好吧,几乎...... ticketType 实体被正确识别,但我无法根据我的 sub-lists 区分各个票证类型,如此处的测试结果所示:
问题
如何正确训练我的 LUIS 模型并正确创建 ticketType 实体,以便 LUIS 也正确识别 sub-list?像 ticketType::order
和 ticketType::incident
?
我也读过 entity roles,但这似乎不适合我的情况,因为:
根据示例,它更适用于以下情况:同一实体在话语中多次使用,角色用于根据其位置区分各个实体。
理论上我可以使用角色,但是我必须用每一种可能的 sub-list 组合来训练我的 listTickets 意图,以确保一切正确标记。在这种情况下,模式仍然有意义吗?
我建议您在网络聊天或您将使用的任何渠道中对此进行测试。我根据你的模型创建了一个 LUIS 模型,当 运行 通过网络聊天时,你正在寻找的信息很容易获得。
在我的测试中,我在上一步中将 "Display my request" 作为话语传递给了机器人。如您所见,"request" 是 "order" 的同义词,可在 "ticketType" 中找到(根据您的设计)。我能够从 recognizerResult
以及标准化值(即 "sublists")中提取特定实体。
希望得到帮助!
const recognizerResult = await this.recognizer.recognize(stepContext.context);
let intent = await LuisRecognizer.topIntent( recognizerResult );
console.log('1', intent )
console.log('2', recognizerResult.entities );
console.log('3', recognizerResult.entities.ticketType );
console.log('4', recognizerResult.luisResult.entities );
1 listTicket
2 { '$instance': { ticketType: [ [Object] ] },
ticketType: [ [ 'order' ] ] }
3 [ [ 'order' ] ]
4 [ { entity: 'request',
type: 'ticketType',
startIndex: 11,
endIndex: 17,
resolution: { values: [Array] } } ]