意图样本话语(训练短语)结构 - 哪个最好?
Intent sample utterance (training phrase) structure - which is best?
3/28/19 更新:Google 的 Nick 在 DialogFlow 方面的回答做得很好。如果也能从 ASK 团队得到答案,那就太好了!
我们有一个语音应用程序可作为 Alexa 技能和 Google 操作(使用 DialogFlow)。对于 ASK 和 DialogFlow,我们的意图示例话语/训练短语结构为:
前导载体短语 {主槽} 尾随短语
有很多前导短语和很多尾随短语。短语很短。这些词组最多有6个词,大多数有3个词。并非所有示例话语都具有前导短语和尾随短语。这些组合有 100 多个样本话语。
我想知道我们是否应该为{leading phrase} 和{trailing phrase} 创建新的槽值。然后用当前样本话语中的相应短语填充它们中的每一个。然后把sample utterances从现在的100+改成只有这4个:
{主广告位}
{前导短语} {主要位置}
{主槽} {尾随短语}
{前导短语} {主槽} {尾随短语}
我认为我们会通过这种方式获得更好的日志记录,而且看起来更干净。但我对此很紧张。对两个平台进行此更改对 NLU 准确性的预期影响是什么?更好的?更差? ASK 对此的最佳实践建议是什么? DialogFlow 的最佳实践建议是什么?
@尼克-
感谢您在下面的回答。让我解释一下,看看我是否理解 - 如果实体被独占使用,影响是:
1) 如果用户说出与已知实体组合完全匹配的内容,则识别效果会更好。
2) 如果用户说出的短语与已知实体不匹配,则与未使用实体时的相同情况相比,意图的匹配度不会那么高。这可能会导致未选择意向。
这是正确的吗?
我不确定话语与实体组合不完全匹配但很接近的情况。结果是(与不使用实体时相比)意图匹配的频率较低吗?也许你可以澄清你的说法 "If the user is going to prefix or suffix a phrase, and it's irrelevant, it will help Dialogflow's ML matching by fuzzy matching the intent based on similar phrases."
也许一个例子会有所帮助。让我们比较一下这两个训练短语:
'tell me about {main slot} with french fries'
{leading slot} {main slot} {trailing slot}
其中:
{主槽}包含'hamburger'
{leading slot} 包含 'tell me about' 但不包含 'tell us about'
{trailing slot} 包含 'with french fries'
现在假设用户话语是 "tell us about hamburger with french fries"。使用 slots/entities?
与此意图匹配的可能性更大还是更小?
如果您在实体中定义所有内容,它可以使它更准确,因为 Dialogflow 将实施一些偏差来识别正确的实体(或完全忽略此意图)。
然而,使用实体实际上只需要用于你真正感兴趣的词汇。如果用户要为短语添加前缀或后缀,而它是无关紧要的,这将有助于 Dialogflow 的 ML 通过模糊匹配根据相似的短语匹配意图。
根据您的问题,您似乎在某种程度上确实关心这些短语,因此使用实体可能是一个不错的选择,并且比 100 个单独的训练短语更容易维护。
3/28/19 更新:Google 的 Nick 在 DialogFlow 方面的回答做得很好。如果也能从 ASK 团队得到答案,那就太好了!
我们有一个语音应用程序可作为 Alexa 技能和 Google 操作(使用 DialogFlow)。对于 ASK 和 DialogFlow,我们的意图示例话语/训练短语结构为:
前导载体短语 {主槽} 尾随短语
有很多前导短语和很多尾随短语。短语很短。这些词组最多有6个词,大多数有3个词。并非所有示例话语都具有前导短语和尾随短语。这些组合有 100 多个样本话语。
我想知道我们是否应该为{leading phrase} 和{trailing phrase} 创建新的槽值。然后用当前样本话语中的相应短语填充它们中的每一个。然后把sample utterances从现在的100+改成只有这4个:
{主广告位}
{前导短语} {主要位置}
{主槽} {尾随短语}
{前导短语} {主槽} {尾随短语}
我认为我们会通过这种方式获得更好的日志记录,而且看起来更干净。但我对此很紧张。对两个平台进行此更改对 NLU 准确性的预期影响是什么?更好的?更差? ASK 对此的最佳实践建议是什么? DialogFlow 的最佳实践建议是什么?
@尼克- 感谢您在下面的回答。让我解释一下,看看我是否理解 - 如果实体被独占使用,影响是:
1) 如果用户说出与已知实体组合完全匹配的内容,则识别效果会更好。
2) 如果用户说出的短语与已知实体不匹配,则与未使用实体时的相同情况相比,意图的匹配度不会那么高。这可能会导致未选择意向。
这是正确的吗?
我不确定话语与实体组合不完全匹配但很接近的情况。结果是(与不使用实体时相比)意图匹配的频率较低吗?也许你可以澄清你的说法 "If the user is going to prefix or suffix a phrase, and it's irrelevant, it will help Dialogflow's ML matching by fuzzy matching the intent based on similar phrases."
也许一个例子会有所帮助。让我们比较一下这两个训练短语:
'tell me about {main slot} with french fries'
{leading slot} {main slot} {trailing slot}
其中:
{主槽}包含'hamburger'
{leading slot} 包含 'tell me about' 但不包含 'tell us about'
{trailing slot} 包含 'with french fries'
现在假设用户话语是 "tell us about hamburger with french fries"。使用 slots/entities?
与此意图匹配的可能性更大还是更小?如果您在实体中定义所有内容,它可以使它更准确,因为 Dialogflow 将实施一些偏差来识别正确的实体(或完全忽略此意图)。
然而,使用实体实际上只需要用于你真正感兴趣的词汇。如果用户要为短语添加前缀或后缀,而它是无关紧要的,这将有助于 Dialogflow 的 ML 通过模糊匹配根据相似的短语匹配意图。
根据您的问题,您似乎在某种程度上确实关心这些短语,因此使用实体可能是一个不错的选择,并且比 100 个单独的训练短语更容易维护。