【发布时间】:2018-02-04 20:30:13
【问题描述】:
可以将哪些示例添加到自定义槽以使其接受任何单词或短语?
【问题讨论】:
标签: alexa alexa-skills-kit alexa-skill alexa-slot
可以将哪些示例添加到自定义槽以使其接受任何单词或短语?
【问题讨论】:
标签: alexa alexa-skills-kit alexa-skill alexa-slot
更新
这个解决方案已经过时,引入了短语槽,例如。 AMAZON.SearchQuery.
短语槽旨在提高语音识别的准确性 您不能在其中包含大多数可能值的技能 创建交互模型时的插槽。第一个可用的插槽 此类别是 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
...
保存并构建。
就是这样!然后,您的技能将能够识别自定义槽的任何单词或短语,无论它是否在您生成的示例中!
【讨论】: