如何定义不是列表的自定义插槽类型?

the*_*iko 30 amazon alexa-skills-kit amazon-echo

我正在玩Alexa技能套件(用于Amazon Echo),并希望创建一种将意图发送到AWS Lambda函数的技能,该函数只会向我发送电子邮件.

示例话语将是这样的:

MemoIntent take a memo {myMemo}
MemoIntent to take a memo {myMemo}
MemoIntent send a memo {myMemo}
Run Code Online (Sandbox Code Playgroud)

这样我就可以说"Alexa,请我的秘书拿一份备忘录,提醒我今天回家的路上去商店"然后会收到我的Lambda函数的电子邮件说:"提醒我去我今天回家的路上."

这个myMemo插槽是自由形式的 - 此时只需要一两句话,但是我没有在文档中找到很多关于如何为这样的东西编写模式的帮助.我目前最好的猜测是:

错误:您的请求出现问题:未知的广告位名称"{myMemo}".发生在样本'MemoIntent中,在第1行上记下备忘录{myMemo}'.

我正在使用文档不鼓励的AMAZON.LITERAL插槽类型,但它也没有提供任何关于如何进行此操作的建议.而且,就像我提到的那样,它失败了.

这是失败的架构:

{
    "intents": [
        {
            "intent": "MemoIntent",
            "slots": [
                {
                    "name": "myMemo",
                    "type": "AMAZON.LITERAL"
                }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

Jus*_*zon 24

文字与其他插槽类型不同,因为您必须提供示例话语中的培训,如官方文档中所述:https: //developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/alexa -skills-KIT-相互作用模型参考

示例话语句法

示例话语将用户可以与您定义的意图对话的短语进行映射.它们使用以下格式在纯文本文件中写为行:

IntentName  this is a sample utterance with no slots
IntentName  this is a sample utterance containing a {SlotName}
IntentName  this is a sample utterance containing a {SlotName} and {AnotherSlotName}
Run Code Online (Sandbox Code Playgroud)

请注意,上述格式适用于除AMAZON.LITERAL之外的所有插槽类型.对于AMAZON.LITERAL,您还需要指定一个示例槽值:

IntentName  this is a sample utterance containing a {slot value|SlotName} using LITERAL
Run Code Online (Sandbox Code Playgroud)

或者,使用自定义插槽可以在定义大量样本自定义插槽值后提供插槽.在这种情况下,您将创建一个名为myMemo的新自定义插槽,其中包含自定义插槽名称的类型,例如MY_MEMO.您的自定义插槽值将填充潜在值(这些值不是它将接收的唯一值),例如:

walk the dog
eat more bacon
go to the store on the way home
Run Code Online (Sandbox Code Playgroud)

  • 它仍然不适合我.我创建了一个名为"Lead Name"的自定义插槽类型,并为其输入了几个新的行分隔值.如果使用其中一个指定值,则Alexa可以工作,但不是随机名称.我错过了什么? (5认同)
  • 我看到同样的事情,并得出结论,与其潜在的未来竞争对手(谷歌现在和siri)相比,alexa现在非常有限.你基本上不能要求alexa为你写任何东西(电子邮件,推文,facebook帖子)这样的架构.同时,在siri你可以做到.. (5认同)
  • LITERAL类型正在被弃用......不幸的是,与竞争对手相比,Alexa看起来更加有限. (4认同)
  • @samiles是的,我只是设法证实了这一点.在我接受任何句子之前,我必须添加相当多的样本句子,但它似乎确实有效.虽然看起来很奇怪 - 不得不弥补很多垃圾来充当通配符. (4认同)
  • 这只是触及我需要的东西......我需要看到`my_memo`示例......任何人都知道我在哪里可以找到它? (4认同)
  • 那是对的!它们不是严格匹配或枚举值,因此它们作为训练数据提供Alexa听到的更好的重量.使用上面的例子,'walk the cat'仍然会被听到并显示为customSlot.value,但Alexa听到"吃更多烘焙"的情况可能会调整它所听到的内容,因为'吃更多的培根'可能是一个更理想的用户请求. (2认同)

Mar*_*uef 5

我们目前正在开发一个人工智能(用于 Alexa),它应该能够回答各种各样的问题。用户能够说出应在后端分析的复杂问题,这一点非常重要。如果 Alexa 由于有限的话语和插槽类型而提前放弃它们,我们将无法提供此类服务。

目前,我们正在试验以下方法。(请记住,我们的实验基于德语。其他语言的行为可能会有所不同。)

1. 每个词类的自定义槽类型

我们为以下词类定义了自定义槽类型

  • 审问(什么、谁、什么时候)
  • 项目(网络安全、暗网、恶意软件)
  • 动词(是,有,可以)
  • 形容词(流行的、廉价的、不安全的)
  • 代词(那个,他,她)

2. 句子结构的示例话语

然后我们为具有示例话语的句子定义了可能的结构

QuestionIntent {Interrogation}
QuestionIntent {Item}
QuestionIntent {Verb}
QuestionIntent {Adjective}
QuestionIntent {Interrogation} {Verb} {Item}
QuestionIntent {Interrogation} {Verb} {Item} {Adjective}
QuestionIntent {Interrogation} {Verb} {Pronoun} {Item}
QuestionIntent {Interrogation} {Verb} {Pronoun} {Pronoun} {Item}
QuestionIntent {Interrogation} {Verb} {Pronoun} {Item} {Preposition} {Item}
QuestionIntent {Interrogation} {Verb} {Adjective} {Item}
QuestionIntent {Interrogation} {Verb} {Pronoun} {Adjective} {Item}
QuestionIntent {Interrogation} {Item} {Verb}
QuestionIntent {Interrogation} {Item} {Verb} {Adjective}
QuestionIntent {Interrogation} {Item} {Verb} {Pronoun} {Adjective}
QuestionIntent {Item} {Verb} {Interrogation}
QuestionIntent {Verb} {Item} {Verb}
QuestionIntent {Verb} {Adjective} {Item} {Verb}
Run Code Online (Sandbox Code Playgroud)

3.后端NLP分析

然后我们对后端提交的词做NLP分析。接收到的数据如下所示:

"intent": {
      "name": "QuestionIntent",
      "slots": {
        "Item": {
          "name": "Item",
          "value": "darknet"
        },
        "Preposition": {
          "name": "Preposition"
        },
        "Adjective": {
          "name": "Adjective"
        },
        "Verb": {
          "name": "Verb",
          "value": "is"
        },
        "Interrogation": {
          "name": "Interrogation",
          "value": "what"
        },
        "Pronoun": {
          "name": "Pronoun",
          "value": "the"
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

有些词可能会丢失,有些词可能会听错。在这种情况下,我们记住早期交流中的主题并用这些“填充”缺失的单词。例如:What is {it}?What is {Darknet}?

我们正在试验一个广泛的插槽类型列表。但这会增加听错的风险(英语中的一个很好的例子是write and right,幸运的是它们没有被分配到同一个词类)。所以我们转向了一个非常狭窄的方法。这些列表仅包含 AI 可以处理并存储在知识库中的单词。例如,项目列表不包含单词ponyunicorn。我们希望这会产生更好的结果(不那么令人困惑的答案)。

没有用话语结构定义的复杂句子使用起来非常混乱。例如,如果一个句子包含 2 个以上的动词(这可能是建立时态所必需的)。但是到目前为止,只要用户的行为有一定程度的礼貌,我们的方法就会产生具有良好准确性的结果。

但最终:不幸的是,目前无法口述具有无限量不同单词和句子结构的备忘录之类的内容。