【问题标题】:Alexa custom slot that takes any word or phrase接受任何单词或短语的 Alexa 自定义插槽
【发布时间】:2018-02-04 20:30:13
【问题描述】:

可以将哪些示例添加到自定义槽以使其接受任何单词或短语?

【问题讨论】:

    标签: alexa alexa-skills-kit alexa-skill alexa-slot


    【解决方案1】:

    更新

    这个解决方案已经过时,引入了短语槽,例如。 AMAZON.SearchQuery.

    来自Announcements

    短语槽旨在提高语音识别的准确性 您不能在其中包含大多数可能值的技能 创建交互模型时的插槽。第一个可用的插槽 此类别是 AMAZON.SearchQuery 旨在提供改进的 让您能够从用户那里收集通用语音。

    问题

    在周末致力于开发城市词典技能以完善我的 Alexa 技能后,我遇到了一个我认为很多技能开发人员可能会遇到的问题。

    TL;DR

    也就是说,您如何在自定义插槽上训练 Alexa 以获取您赋予它的任何价值?

    第一次尝试

    起初,我在自定义插槽示例中添加了大约 5 个单词,例如 bae、boo、ship it。但我很快发现该技能只适用于这 5 个单词,并且对于该列表之外的单词,我不会调用我的 lambda 函数。

    然后我用了

    from nltk.corpus import words
    import json, random
    
    words_list = random.shuffle(words.words()[:1000])
    
    words_list = [word.lower() for word in words_list]
    words_list = list(set(words_list))
    values = []
    for word in words_list:
        value = {}
        value['id'] = None
        value['name'] = {}
        value['name']['value'] = word
        value['name']['synonyms'] = []
        values.append(value)
    print(json.dumps(values))
    

    上面的代码使用了nltk,你可以用pip install nltk安装它,根据你在代码编辑器下找到的模式生成1000个单词,它会产生一千个这样的单词;

    {
        "id": null,
        "name": {
            "value": "amblygeusia",
            "synonyms": []
        }
    }
    

    我在 values 下复制并粘贴了这些,您可以在 Skills Builder 页面的 Code Editor 下找到整个文件。

      "languageModel": {
        "types": [
          {
            "name": "phrase", //my custom slot's name
            "values": [...] //pasted the thousand words generated here
    ...
    

    在 Skills Builder UI 中保存和构建之后。这仅允许我的技能捕获单个单词槽值。我尝试以相同的方式生成 10 000 个单词并将它们添加为自定义槽的示例,但是无法识别两个单词和三个单词的短语,并且该技能无法获得短语的定义,例如;

    发货

    解决方案;

    对我有用并且效果很好的是生成两个单词样本。尽管所有示例都是两个词,但该技能随后能够识别单个词值甚至三个词值。

    这是使用 nltk 执行此操作的代码;

    from nltk.corpus import words
    import json, random
    
    words_list = random.shuffle(words.words()[:1000])
    
    words_list = [word.lower() for word in words_list]
    
    words_list = list(set(words_list))
    
    word_pairs = []
    for word in words_list:
        pair = ' '.join(random.sample(words_list, 2))
        word_pairs.append(pair)
    
    word_pairs = list(set(word_pairs))
    for pair in word_pairs:
        value = {}
        value['id'] = None
        value['name'] = {}
        value['name']['value'] = pair
        value['name']['synonyms'] = []
        values.append(value)
    print(json.dumps(values))
    

    我将它放在一个名为 custom_slot_value_geneator.py 的文件中并运行它;

    python3 custom_slot_value_geneator.py | xclip -selection c

    这会生成值并将它们复制到剪贴板。

    然后我将它们复制到值下的代码编辑器中,替换旧值

      "languageModel": {
        "types": [
          {
            "name": "phrase", //my custom slot's name
            "values": [...] //pasted the thousand two word pairss generated here
    ...
    

    保存并构建。

    就是这样!然后,您的技能将能够识别自定义槽的任何单词或短语,无论它是否在您生成的示例中!

    【讨论】:

      猜你喜欢
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多