任务型对话意图 & 槽位设计
我们将对话分为任务型对话与开放型对话两类,顾名思义,任务型对话就是满足用户需求,达成用户希望完成的任务;而开放型对话典型代表就是聊天,可能过程中并没有特别明确的任务,而是开放型的闲聊。在人机对话交互中占据主流的还是任务型对话,这里我们讲解一下这种对话交互中,意图与槽位的设计方法。
意图和槽位的概念我们在 人机对话交互基础概念(2) 中都有详细说明,这里主要说明意图和槽位设计流程,如下:
意图与槽位设计流程意图拆分
意图是对用户表达的一句话的判断,判断用户希望完成什么样的任务,我们需要将意图拆分成 逻辑独立且不能细分的类别,举例来说,对 “闹钟” 这个垂类,我们就可以根据两个维度拆分成多个意图:
表 1 意图拆分
意图类型 | 创建意图 | 删除意图 | 查询意图 | 修改意图 |
---|---|---|---|---|
闹钟 Alarm | Alarm 创建 | Alarm 删除 | Alarm 查询 | Alarm 修改 |
计时器 Timer | Timer 创建 | Timer 删除 | Timer 查询 | Timer 修改 |
日程 Calendar | Calendar 创建 | Calendar 删除 | Calendar 查询 | Calendar 修改 |
待办事项 To-do-List | To-do-List 创建 | To-do-List 删除 | To-do-List 查询 | To-do-List 修改 |
用户表达富集
在完成意图拆分后,我们需要针对每个意图,富集用户表达。为保证表达的真实性,最好使用线上用户日志进行富集,如果没有,可以通过 “众包” 的方式让多人参与用户表达的富集,以保证表达形式的多样性。
富集集合理想情况是分为两种,一种为模拟真实用户需求的集合,我们称为 “真实集合”;第二种为产品策略希望后续满足的集合,我们称为 “难度集合”,用 “真实集合” 评估真实效果,用 “难度集合” 指导策略优化的方向。
槽位设计
针对用户完成的富集集合,我们需要进行下一步,就是槽位设计。在一个意图中总有那么一些关键信息,是需要深刻理解才能完成用户的指令的,例如用户希望订一个飞机票,就有很多必要信息需要知道。
这些关键信息中,最核心的内容,我们可以设计成槽位,以便做专门的识别,也就是将用户表达的槽位内容,识别为结构化的信息,例如时间、地理位置等等。这样的识别结果会帮助我们完成任务。
被设计成槽位的信息需要遵循以下几个原则:
- 槽位需要被解释(可选)
- 槽位是核心信息,有特定含义,需要在任务执行时使用
- 槽位可以被清晰识别
下面举几个例子:
闹钟
必填槽位是时间,如果用户没有表达清楚,我们会追问澄清,此外重复周期、内容和提醒方式是非必填槽位,对于非必填槽位来说用户表达了我们会识别,但如果没有表达我们并不会追问。
表 2 闹钟槽位设计
槽位描述 | 类型 | 字段名 | 举例 | 槽位类型 |
---|---|---|---|---|
时间 | 必填 | remind_time | 明天下午2点 | 时间日期 |
重复周期 | 非必填 | repeat | 每周一 | 重复时间 |
内容 | 非必填 | title | 开会 | Null |
提醒方式 | 非必填 | remind_type | 短信提醒 | 提醒方式列表 |
天气
必填槽位是时间和城市,但如果用户没有表达(天气怎样?),我们会使用当前时间和当前用户位置默认填充对应槽位,因此必填槽位不一定需要追问澄清,此外 “区县” 和 “省” 作为补充信息,可以校正位置信息,参考 “中国重名的城市”。
表 3 天气槽位设计
槽位描述 | 类型 | 字段名 | 举例 | 槽位类型 |
---|---|---|---|---|
时间 | 必填 | time | 今天 | 时间日期 |
城市 | 必填 | loc_city | 北京 | 城市 |
区县 | 非必填 | loc_county | 海淀区 | 区县 |
省 | 非必填 | loc_province | 河北 | 省 |
航班订票
订票服务很复杂,这里几乎所有涉及的槽位都是必填槽位,需要在订票时明确,从这里可以看到,同样的一种 “槽位类型” 的内容,可以赋予不同槽位名称,只因为在这个表达中,特定槽位代表特殊的含义。其中有些槽位比如 “货币类型” 会有默认值,可以接受用户不表达,如果不表达默认填为人民币。
表 4 航班订票槽位设计
槽位描述 | 类型 | 字段名 | 举例 | 槽位类型 |
---|---|---|---|---|
起始地 | 必填 | loc_from_city | 北京 | 城市 |
目的地 | 必填 | loc_to_city | 上海 | 城市 |
起飞时间 | 必填 | time_from | 明天晚上8点 | 时间日期 |
到达时间 | 必填 | time_to | 周三晚上8点 | 时间日期 |
航空公司 | 必填 | air_company | 海南航空 | 航空公司 |
航空机型 | 必填 | airplane | 大型飞机 | 机型 |
座舱类型 | 必填 | airplane_class | 经济舱 | 座舱类型 |
最低价格 | 必填 | price_low | 2000 | 数字 |
最高价格 | 必填 | price_high | 五千 | 数字 |
货币类型 | 必填 | currency | 人民币 | 货币类型 |
乘机人数 | 必填 | customer_num | 3 | 数字 |
乘机人姓名 | 必填 | customer_name | 王天 | null |
可以看到,以上的槽位列表中都罗列了 “槽位类型”,这个就是帮助解释槽位内容的解释器,可以将槽位内容解释成结构化数据。
意图和槽位设计就介绍到这里,具体的实践细节还需要大家自己在实践中不断摸索,这部分内容的设计可以说是产品人员参与整个对话设计环节中的关键步骤,也是考验产品人员对业务熟悉程度至关重要的部分。