首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定义非列表的自定义槽类型?

如何定义非列表的自定义槽类型?
EN

Stack Overflow用户
提问于 2015-12-01 22:15:58
回答 5查看 20.3K关注 0票数 30

我正在玩的Alexa技能工具包(亚马逊回声),并希望创造一个技能,将发送意图的AWS Lambda功能,这将只是电子邮件的东西给我。

样本话语应该是这样的:

代码语言:javascript
复制
MemoIntent take a memo {myMemo}
MemoIntent to take a memo {myMemo}
MemoIntent send a memo {myMemo}

这样我就可以说出这样的话:"Alexa,让我的秘书拿一份备忘录,提醒我今天回家的路上去商店“,然后收到Lambda功能的电子邮件,上面写着:”提醒我今天回家的路上去商店。“

myMemo插槽是自由格式的--在这一点上,只要一两句话就可以了,但我在文档中找不到多少帮助,说明如何为这样的东西编写模式。我目前最好的猜测是:

错误:您的请求出现了问题:未知槽名“{myMemo}”。发生在第1行的示例“MemoIntent采取备注{myMemo}”中。

我使用的是AMAZON.LITERAL插槽类型,这是文档所不鼓励的,但它也没有给出任何其他方法的建议。而且,就像我说过的,它失败了。

下面是失败的架构:

代码语言:javascript
复制
{
    "intents": [
        {
            "intent": "MemoIntent",
            "slots": [
                {
                    "name": "myMemo",
                    "type": "AMAZON.LITERAL"
                }
            ]
        }
    ]
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-12-04 00:29:37

文字与其他插槽类型不同,因为您必须提供示例语言方面的培训,如正式文档:https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/alexa-skills-kit-interaction-model-reference中所提到的那样。

样本话语语法

示例语句映射用户可以与您定义的意图对话的短语。它们以纯文本文件中的行形式编写,使用以下格式:

代码语言:javascript
复制
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}

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

代码语言:javascript
复制
IntentName  this is a sample utterance containing a {slot value|SlotName} using LITERAL

或者,使用自定义插槽将允许您在定义了许多示例自定义插槽值之后提供插槽。在这个场景中,您将创建一个名为myMemo的新的自定义槽,其类型为自定义槽名,如MY_MEMO。您的自定义槽值将使用潜在值填充(这些值并不是它将接收的唯一值),例如:

代码语言:javascript
复制
walk the dog
eat more bacon
go to the store on the way home
票数 23
EN

Stack Overflow用户

发布于 2017-08-24 09:14:00

我们目前正在开发一个AI (为Alexa),它应该能够回答各种各样的问题。非常重要的是,用户能够表达复杂的问题,需要在后台进行分析。如果Alexa因为有限的话语和插槽类型而提前放弃,我们就不能提供这样的服务。

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

1.每个字类的自定义插槽类型

我们为下列word类定义了自定义槽类型

  • 审讯(什么,谁,何时)
  • 项目(网络安全、黑网络、恶意软件)
  • 动词(是,有,可以)
  • 形容词(受欢迎的,廉价的,不安全的)
  • 代词(他,她)

2.句子结构的样本话语

然后,我们定义了带有样本语句的句子的可能结构。

代码语言:javascript
复制
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}

3.后端中的非线性规划分析

然后对后端提交的单词进行NLP分析。收到的数据如下所示:

代码语言:javascript
复制
"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"
        }
      }
    }

有些话可能会丢失,另一些可能会被误解。在这种情况下,我们记住了以前交流中的话题,并用这些“填补”了缺失的单词。例如:What is {it}?What is {Darknet}?

我们正在试验一大串插槽类型的列表。但这增加了误听某事的风险(英语中一个很好的例子是书面和正确,幸运的是,它们没有分配给同一个单词类)。所以我们转向了一种非常狭窄的方法。该列表只包含可由人工智能处理并存储在知识库中的单词。例如,项目列表不包含“小马”或“独角兽”字样。我们希望这能带来更好的结果(不那么让人困惑)。

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

但最后:不幸的是,在目前,不可能口授像备忘录一样的不同的单词和句子的结构。

票数 5
EN

Stack Overflow用户

发布于 2017-12-15 09:21:42

我尝试了另一种方法。

我创建了一个自定义槽类型,其值列表如下所示。

代码语言:javascript
复制
wordOne
wordOne wordTwo
wordOne wordTwo wordThree
wordOne wordTwo wordThree wordFour
wordOne wordTwo wordThree wordFour wordFive

可以根据需要使用任意长的字符串继续该列表。

我的猜测是,Alexa在尝试填充插槽时,在一个插槽类型的值中对分隔的单词进行定位,以匹配它所听到的内容。

我有相当成功的抓取整个句子在一个插槽与这个定制插槽类型。虽然我从来没有试过它的意图,不仅仅是插槽的话语。

但如果你把你的意图分开也许会奏效。也许是这样的。

代码语言:javascript
复制
StartMemoIntent take a memo
StartMemoIntent to take a memo
StartMemoIntent send a memo
StartMemoIntent record a memo
StartMemoIntent listen to my memo
RecordMemoIntent {memo}

但是,你必须小心,如果你没有足够的样本来表达你的其他意图,它可能会混淆你的意图。

如果你把足够的样本话语,至少7-8,与StartMemoIntent,它应该没有问题,采取正确的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34031245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档