本文为《Amazon Alexa 语音设计指南》系列译文的第二篇,enjoy~
第二章 用户说什么
人类对话,即实时合理的意图交换。关于如何表达以及如何从对话中提取内涵,其实难度超乎我们的想象,你需要非常认真,并且有意识的去设计Alexa和用户之间的对话。良好的语音体验可以允许用户通过不同的方式去表达意图。
对话界面是由每一个以用户提问为起始,以Alexa回答为结束的对话轮(turn)组成的。对于很多人来说,这是一种全新的交互模式。所以在设计之初,请先确保你的用户能够参与到对话当中来。
确保在搭建技能之前完成流程设计
你希望用户从你的技能中体验和感受到什么?这是在一开始就要明确的问题。一旦你已经定义好了技能(skill)的目的(purpose)、写好了脚本(script),并且完成了流程(flow)设计(见第一章),你就可以着手设计意图和表达方式了。
设计意图
意图(Intent)就是用户能通过你的技能去完成的事情。你的技能可能是帮人计划旅行、获取某种状态、讲笑话,或者打怪兽,而这些也就是意图。关于如何定义技能的意图,请看上一章。
永远不要相信人们会把你预期的意图精确的描述出来。当用户可以说“计划旅行”时,他也许会图方便的直接说“计划去夏威夷的旅行”,尽量把用户可能会说的句子、短语和单词最大范围的呈现出来,这样才能保证用户可以更好的使用你的技能。
下面是关于对话意图的例子:
使用内置意图
每个Alexa技能都需要提供“取消”、“停止”、“帮助”的能力。除此之外,还有其他的指令比如“重复”“播放”“下一个”等,都包含在内置意图库(built-in intent library)中。内置意图(built-in intent)是Alexa本身配置好的能力。比如,“帮助”意图,对于用户使用这一类命令,你无需再做特殊说明。如果你的技能需要增加一些内置意图,也可以自定义扩展内置意图 (extend built-in intents)。
定义表达方式
表达方式(utterance)是用户会对Alexa所说的话。由关键词命令(keyword command);自然词汇,如赘词(filler word)【译者注:可以理解为汉语中的“的”“了”“是”等虚词】;以及可变信息的槽(slot)组成。设计语音体验最重要的部分就是定义用户的表达范围。
为了提供良好的体验,你需要从那些只言片语或者模棱两可的语句碎片中整理出完整的命令。为了保证覆盖率,你需要考虑到语句非常细微的变化甚至是误读的情况。比如,当你在设计和“开关”有关的话题时,需要提供“打开”、“开启”、“启动”等同义词,虽然他们其实表达的是同样的意思。
one-shots:one-shot的表达是指用户一口气把触发技能所需的信息全部都提供完整了。一般用在触发技能时或技能之中。
部分信息(partial information):基于达成某项意图所需的全部信息,用户通常会只给出一些不完整的信息。这就会带来多轮(Multi – turn),以便搜集补全完整信息。
处理过度回答(over- answering)
有些时候,虽然Alexa只问了一个问题,但用户会给出超出这个问题的回答。比如Alexa问到一个出发日期,用户可能不但回答了出发日期,也回答了出发地点。用户甚至可能给出了所需的其他信息,比如说抵达的城市,还有要旅行的方式,然而却没有给出Alexa询问的日期。
在设计对话的时候,需要重视这种情况。更多信息参考 (Dialog Interface Reference)和(Plan My Trip tutorial)
处理用户纠正(correction)
当用户觉得Alexa出错了,或当他们改变主意的时候,他们会去试图去纠正这些错误。比如说,一个用户可能会在他上一句表达后面跟上“不是的…”或者“我说的是…”。要恰如其分的处理这些问题。
确保能够覆盖宽泛、多样化的表达方式
为了保证你的技能顺利的执行,比较好的标准是为每个意图提供三十个,或者更多的表达方式,甚至对于一些很简洁的意图,也需要提供足够的表达方式。你不需要做到百分之百的覆盖,但是例子越多越好。同时,计划在迭代中持续增加表达方式以便不断的提升技能的体验。
增加多样化表达方式的一些技巧
当用户说:“我要制定一个行程。”Alexa接下来需要收集到的信息包括出发地,到达地,旅行时间,旅行的方式。
这是一个和家人朋友玩角色扮演的绝好机会,通过这种对话扮演,你可以得到多种多样的对话方式。
(1)one-shot方式
考虑用户一次性说出所有信息的表达方式。
(2)部分信息的方式
考虑用户一般会给你较少的信息。这一点至关重要,因为用户很少会一次性把所有信息都提供给你。
定义槽
一句话中可变的部分就是槽(slot),比如说城市名称或者日期。槽在任务-信息型(task-and information-focused)的技能中非常常见。你需要设计表达方式中的槽,并且从内置目录中给槽位匹配赋值,或者自己给槽位赋值。
在下面的例子中{to city}和{traveldate}就是槽:
“I’d like to go to {toCity}”
“book a trip for {travelDate}”
“plan a vacation to {toCity}”
使用内置槽值
使用亚马逊提供的内置槽值可以节省更多时间并且更加准确。为了适配你的技能,你也可以去自定义扩展一些内置的槽值(slot values)。比如说,要增加一个本地区域名称库,你可以扩展AMAZON.US_CITY去添加所有的本地城市和城镇名称。了解更多,请参看 slot values you can extend 。
严格的审查槽值
虽然搜集、复制、粘贴槽值表这种事是比较容易的,但一定要确保认真的审核和编辑这些内容。错误的槽值会带来技能的逻辑错误,并且给用户带来破坏性的体验,你需要注意以下几种情况:
确保排除掉重复的槽值
避免包含与槽位无关的词汇
注意不要拼写错误或有标点格式上的错误:因为槽值可能会包含一些缩略符号,比如“child’s play”【译者注:这种情况中文一般是没有的】,保证编辑文档的时候选择正确的标点格式,参看supported punctuation。
相关阅读
Amazon Alexa 语音设计指南(一):设计流程