词库和说法

用户说法

Q1.对话设计过程中编写说法有什么小窍门?

A:我们在编写说法时,会碰到很多说法表达意思相同,但文本有个别差异,比如多一个字、少一个字或变一个字的情况,比如“帮我查一下天气”、“给我查一下天气”、“查一下天气”;

为了保证说法的覆盖度,我们通常需要将所有可能的说法都列进来,但这样会造成说法繁多,维护不便;那么,有没有什么办法可以通过一句说法,满足多种问法呢?

下面小编给你介绍一个秘密武器——正则表达式;正则表达式可以通过在说法中增加与、或、扩展等特殊符号,实现一句说法覆盖多种问法;比如[帮我|给我]查一下天气;

具体规则如下:

1. 允许在括号内输入语义槽

a. 括号内仅可输入一个语义槽,且不能出现未标注文字、正则符号“|”

[#时间#]的天气怎样——可以支持

[#日期##时间#]的天气怎样——不能支持

[#日期#|#时间#]的天气怎样 ——不能支持

[我想问下#日期##时间#]的天气怎样——不能支持

b. 填写例句,不支持在括号内进行标注

2. 允许标注但不输出的语义槽

a. 语义槽前缀支持“neg.”,这个前缀表示这个语义槽在语义理解输出的阶段不会进行输出

#neg.句首修饰词##操作##广播##语气词#——不会输出句首修饰词slot

b. 当前不支持其他前缀,也不支持首字符为英文句号

3. 批量上传说法,支持进行整句标注 

4. 前停止符 ^ ,表示不支持自动向前扩展任意文本,包括语气词

a. 仅能放在说法最前面

b. 一个句子只能有一个前停止符

c. 例句标注和pattern,都支持使用前停止符号

5. 后停止符 $ ,表示不支持自动向后扩展任意文本,包括语气词

a. 仅能放在说法最后面

b. 一个句子只能有一个后停止符

c. 例句标注和pattern,都支持使用后停止符号 

6. 通配符

a. 英文句号 . 表示单个字符

导航.#目的地#,表示中间插入一个字符(一个汉字或者一个英文单词)

b. 英文句号+星号 .* 表示0~无穷多字符

导航.*#目的地#,表示中间插入0~无穷字符

c. 英文句号+加号 .+ 表示1~无穷多字符

导航.+#目的地#,表示中间插入1~无穷字符

7. 重复符号

大括号里加数字 {n},表示前面的元素重复n遍;大括号里加数字范围{n,m},表示前面的元素重复n~m遍;最小重复次数为1

a. 重复通配符:

导航.{2,9}#目的地#,表示中间插入2~9个任意字符

b. 重复文本

我要{1,2}导航#目的地#,直接在文本后面加上大括号,表示重复“要”1~2次

c. 重复语义槽

导航#目的地#{1,2},表示对前面的语义槽重复1~2次

8. 词条首字符不能为英文句号,词条中间可以支持英文句号,例如:PM2.5

符号 说明 举例
() 必选符号,表示小括号内的内容必须有 #日期#天气(怎样|怎么样)
[] 可选符号,表示中括号内的内容可有可无 [请问|问一下]#日期#的天气
| 表示多个取其一(仅限于出现在括号内) #日期#的天气(如何|好吗|怎样)
^ 前停止符,表示说法不能向前扩展 ^停止播放
$ 后停止符,表示说法不能向后扩展 提高音量$
. 通配符,表示一个任意字符 导航.#目的地#
.* 通配符,表示0~无穷多字符 导航.*#目的地#
.+ 通配符,表示1~无穷多字符 导航.+#目的地#
{n} 重复符号,表示前面的元素重复n遍 导航.{2}#目的地#
{n,m} 重复符号,表示前面的元素重复n~m遍 我要{1,2}导航#目的地#

Q2.用户说法是什么?怎么快速添加?

A:1、“说法”的概念

用户说法,是用户在与设备对话交互过程中提出的问题,请求或指令。开发者需要在技能开发过程中,尽可能录入所有可能的用户说法。说法足够丰富,可以提高技能命中率。

一个查询星座的技能,说法可能会到上千条:

查看说法的详细介绍:https://www.dui.ai/docs/utterance

2、如何快速添加说法?以下是一些写说法的技巧,请参考:

一句话表达全部可能性:说法太多了,怎么才能用一句话表达一类说法?

正则说法:对话设计过程中编写说法有什么小窍门?

说法扩展:用户说法是否支持模糊匹配,只能穷举吗?

Q3.添加用户说法后下一步做什么?

A:添加说法后,需要对说法进行标注。那么,什么叫做标注?举例说明:

比如「我要去苏州」,将「苏州」两个字标注为一个叫「城市」的语义槽,通过替换绑定词库中的其他城市名,这个说法就可以匹配「我要去上海」、「我要去北京」等说法。
这个动作就叫标注。

那么,为什么需要标注?由于用户说法多种多样不可能穷举,所以需要开发者对用户说法中包含的关键信息进行标注。

您可以参考标注操作说明进行标注。

Q4.说法太多了,怎么才能用一句话表达同一类说法?

A:DUI支持三种形式的说法,如下表:

形式

自然说法

pattern说法

正则说法

例句

播放周杰伦的等你下课

播放#歌手名#的#歌曲名#

[播放 |放一首 |来一首的 ]#歌手名#的#歌曲名#

如果要用一句话表达出所有同类说法,需要三种用法组合使用。

其中:

  1. 自然说法:指用户对设备的平常说法或指令。
  2. pattern说法:在自然说法的基础上,将关键字提取为词库,并关联上对应词库。如上面的例句中,“周杰伦”和“等你下课”分别是词库#歌手名#、#歌曲名#中的词条。
  3. 正则说法:通过正则表达式,将多种说法合并成一种,如下表:

符号

中文描述

功能描述

举例

 |

并列关系,与“( )”或“[ ]”组合

我要去(星湖街|仁爱路)

( )

小括号

括号里的内容必须取一个

我要去(星湖街|仁爱路)

[ ]

中括号

括号里的内容可取可不取

[我要]去(星湖街|仁爱路)

正则符号使用原则:

  1. 所有一律采用英文状态下的;
  2. 说法里只允许出现表格中提到的符号;
  3. 括号“()”“[]”内的文字,不能进行标注,也不能有参数引用“##”。
  4. 括号不能嵌套,即括号内不能再有括号,比如“[()]”;
  5. “|”一定要在括号里面,且“|”左or右不能为空。

更多正则符号的规则和用法,详见:对话设计过程中编写说法有什么小窍门?

Q5.用户说法下面的带颜色的线条是什么意思?

A:线条是说法的标注,每种颜色代表一个标注。

     说法:

   

 

     语义槽:

      

如果要了解说法的标注,请参考:https://www.dui.ai/docs/utterance

Q6.强说法和弱说法实际使用中有什么区别?

A:标注为首轮对话的为强说法,没有标注的为弱说法。

  1. 强说法可以【进入技能&任务】以及进行【技能&任务跳转】;
  2. 弱说法不能【进入技能】,也不能进行【技能跳转】;
  3. 没有对话状态的时候,弱说法是没有语义结果的;只有当对话进入当前任务的时候,弱说法才有语义结果。

举例:「我要去东方明珠」「我要导航」是强说法,「东方明珠」是弱说法。

对话1  user:我要去东方明珠 (进入地图技能-导航任务)
对话2  user:东方明珠 (没有语义结果,不能进入地图技能)
对话3  user:我要导航 (进入地图技能-导航任务)
sys:请问你要去哪
user:东方明珠 (对话已经进入导航任务,所以有语义结果输出)

关联知识:技能需要使用“调用名”来进入,或者通过命中强说法进入。

Q7.用户说法是否支持模糊匹配,只能穷举吗?

A:DUI平台支持说法自动扩展:

1. 由文字和语义槽构成的说法支持前后自动扩展。

说法 扩展说法1 扩展说法2 解析结果
导航去#目的地# 我要导航去#目的地# 导航去#目的地#吧 导航去#目的地#
 

2. 由两个及两个以上语义槽构成的说法支持前后自动扩展。

说法 扩展说法1 扩展说法2 解析结果
#操作##设备# 给我#操作##设备# #操作##设备#看看 #操作##设备#

以下三种类型的说法例外

说法举例
说法特征
是否拓展
我要听故事 无标注或整句标注 仅前后拓展一个语气词
#歌曲名# 全句只有一个语义槽,没有辅助词
翻译#sys.任意文本# 标注时使用了“sys.任意文本”词库

备注:拓展没有字数限制,但DUI平台的说法限制是最长40字。

Q8.意图和意图间语义槽重复了有影响吗?

A:1、不同意图间的语义槽重复,对于语义解析来说没有影响。

2、同一个意图,不允许有相同的语义槽。

3、同一个任务下,语义槽关联的说法,添加/修改时间越晚,语义上会优先命中。

Q9.什么场景下可以用必需语义槽?

A:要了解什么是必需语义槽(required slot),需要先了解一下DUI提供的slot filling功能:

  1. 开发者设置某个参数为必需语义槽:如果用户语音请求中没带该语义槽,则系统提问,要求用户填充该语义槽,此过程成为slot filling
    例如,在【导航】意图里面,语义槽【目的地】设为必需;如果用户说「我要导航」,系统就会提问「你想去哪里?」,要求用户填充该必需语义槽
  2. 要完成所有slof filling过程之后,对话才能进行输出。

所以,如果在某个意图中,某语义槽是完成对话的必要参数,则需要将此语义槽设为必需语义槽,并设置提问,来引导用户进行slot filling。

Q10.怎么调整必需语义槽的命中优先级?

A:将语义槽设置为必需语义槽,那么在必需语义槽每一行的右边都有一个十字符号,可以通过拖拽调整必需语义槽的顺序来设置优先级。如下图:

那么,设置必需语义槽有什么作用?当有多个必需语义槽时,系统会按照语义槽优先级顺序来播报提问。

词库

Q1.为什么有的词库不能导出?

A:1、以sys.开头的词库都是内置词库,这些词库已经预置了大量词条,可以直接使用,不支持导出到本地。

2、系统词库很多是以代码形式开发的词库,无法导出为包含多个词条形式的文件。

3、内置词库(包括DUI所有内置资源)是一种知识产权,目前不对外开放。

Q2.为什么词库一直导入失败?

A:DUI支持两种格式的词库文件导入:Json 或CSV ,CSV格式只支持utf8编码。开发者可以在词库导入界面下载文件模板,进行参考。

如果导入失败,请检查文件格式;如果格式正确,请检查文件内容,对于CSV格式的文件: 

  1. 每一行内容对应一行词条;
  2. 词与词之间用英文逗号隔开,第一个词会被读取为词条取值,之后的为同义词;
  3. 文件名会被读取为词库名。

如果持续失败,请刷新页面重试。因为可能网络连接异常,或登录状态已丢失。

Q3.一个个的写词太麻烦了,有没有可以直接使用的词库?

A:1、DUI系统内置了多个词库,可供开发者直接使用。

2、如何使用这些词库?只需要在技能开发过程中,进行说法的标注,选择系统内置的词库,这些词库就添加到技能里面了。

3、参考:怎么标注?

Q4.为什么清空词库后绑定了这个词库的说法有部分失效了?

A:1、说法有三种:自然说法、pattern说法、正则说法。

形式

自然说法

pattern说法

正则说法

例句

播放周杰伦的等你下课

播放#歌手名#的#歌曲名#

[播放 |放一首 |来一首的 ]#歌手名#的#歌曲名#

详细参考:说法太多了,怎么才能用一句话表达一类说法?

2、如果说法中使用了自然说法,且标注了语义槽,这时DUI是将说法中的关键词作为词库中的词条进行标注的。那么,如果清空词库,这时标注也就失效了,说法可能就不会被对话命中。

3、如果标注失效了,需要重新进行说法的标注。

Q5.为什么导入任务时,提示没有找到词库?

A:如果要通过导入的方式创建新技能,需要先将原技能的词库csv文件,导入到新技能,然后再导入任务文件。可参考:我要怎么复制技能?

Q6.我要怎么为不同的设备设置不同的词库?

A:由开发者在控制台创建,用户在设备上传词条的词库,称之为用户词库。

 

DUI支持三种词库:开发者自定义词库、内置词库、用户词库。优先级从高到低依次为:

     用户词库:

  1. 终端用户在设备端上传的词库,例如联系人等。

    开发者自定义词库:

  1. 开发者创建自定义技能,添加自定义词库,或者往内置词库添加新词条
  2. 继承内置技能,添加自定义词库,或者往技能原有词库添加新词条

     内置词库:

  1. 继承自内置技能的词库
  2. 开发者标注说法时使用的词库

那么,如何设置用户词库?需要两个关键步骤:

  1. 在技能开发时创建好词库,并关联语义槽;
  2. 客户端SDK通过Cinfo接口,上传用户词条到对应词库。
  3. 安卓SDK参考:http://dui.ai/docs/ct_common_Andriod_SDK(3.12更新用户词库)
  4. iOS SDK参考:http://dui.ai/docs/ct_IOSdetail(1.9更新用户词库)

哪些词库支持设备端上传?

  1. 所有自定义词库都支持扩充
  2. 可以在DUI添加词条的内置词库都支持设备端上传
  3. 不能在DUI添加词条的内置词库不支持设备端上传

Q7.怎么才能知道内置词库有什么,用来做什么?

A:1、内置词库作为DUI内置资源,是一种知识产权,目前都不对外开放。

2、但是开发者可以直接使用,请参考文档(内置词库说明)来了解词库具体的用途。

Q8.从原技能导出的任务,为什么导入到新技能提示词库不存在?

A:1、导入技能时,需要先导入任务中包含的词库,然后再导入任务文件;如果导入任务时,找不到任务中标注时用的词库,就会报这个错误。

更多参考:为什么导入任务时,提示没有找到词库? 我要怎么复制技能?

2、不对外开放的词库仅可以应用在内置技能;如果导出的是内置技能,导入到非内置技能,也会导致词库报错。

 

目录

用户说法

Q1.对话设计过程中编写说法有什么小窍门?

Q2.用户说法是什么?怎么快速添加?

Q3.添加用户说法后下一步做什么?

Q4.说法太多了,怎么才能用一句话表达一类说法?

Q5.用户说法下面的带颜色的线条是什么意思?

Q6.强说法和弱说法实际使用中有什么区别?

Q7.用户说法是否支持模糊匹配,只能穷举吗?

Q8.意图和意图间语义槽重复了有影响吗?

Q9.什么场景下可以用必需语义槽?

Q10.怎么调整必需语义槽的命中优先级?

词库

Q1.为什么有的词库不能导出?

Q2.为什么词库一直导入失败?

Q3.一个个的写词太麻烦了,有没有可以直接使用的词库?

Q4.为什么清空词库后绑定了这个词库的说法有部分失效了?

Q5.为什么导入任务时,提示没有找到词库?

Q6.我要怎么为不同的设备设置不同的词库?

Q7.怎么才能知道内置词库有什么,用来做什么?

Q8.从原技能导出的任务,为什么导入到新技能提示词库不存在?