Alexa自定义插槽,可以使用任何单词或短语

时间:2018-02-04 20:30:14

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

可以将哪些样本添加到自定义广告位以使其接受任何字词或短语?

1 个答案:

答案 0 :(得分:2)

<强>更新

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

来自Announcements

  

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

问题

在周末努力开发城市词典技能以提高我的Alexa技能时,我遇到了一个我认为很多技能开发人员可能会遇到的问题。

<强> TL; DR

即,您如何在自定义插槽上训练Alexa,以便能够获得您给予的任何价值?

首次尝试

起初我在自定义插槽样本中添加了大约5个单词,如bae,boo,发送它。但是我很快发现这个技能只适用于那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": []
    }
}

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

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

在Skills Builder界面中保存和构建之后。这只允许我的技能捕获单字槽值。我尝试以相同的方式生成10000个单词,并将它们添加为自定义插槽的样本,但是没有识别出两个单词和三个单词短语,并且该技能无法获得短语的定义;

  

发货

解决方案;

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

以下是使用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
...

保存&amp;建立。

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