使用UNIT配置训练数据的技巧总结
188******76 发布于2020-04-28 浏览:5575 回复:4
3
收藏
最后编辑于2020-08-18

智能对话系统的搭建,最为核心的部分是模型的搭建与效果的优化,这篇文章将以配置"订票"与"发短信"的需求为例,讲解在百度大脑UNIT平台具体的配置训练数据的过程。

以user开头的是词槽;以kw开头的是特征词。(具体命名不影响最终效果,重要的是配置训练数据的格式)

下面是我配置智能对话机器人总结出的五个注意事项,分享给各位开发者:

  1. 不要直接将汉字配置到模版片段中
  2. 避免出现每个模版只有一个模版片段的情况
  3. 每个模版片段不要包含多条关键信息
  4. 避免出现某个模版里所有模版片段都为必须匹配或非必须匹配
  5. 通配符可以用,但是尽量用的少一些

除此之外,这里再给大家安利一下我比较喜欢的对话模板规范(习惯):

  1. 利用好对话模板里的描述,写清楚这条模板能匹配的句式
  2. 充分利用平台资源,使用AI Studio检验成果

————————————————————————————————————————————————————

1.不要直接将汉字配置到模版片段中
这里我做一个错误的示范:

给[D:user_receiver][D:kw_send][D:kw_message],内容是[D:user_content]

这是发短信的一条模板片段,句式是:

给小明发短信,内容是我现在开会,不方便接电话

我们知道,"给"是一个动词,"内容是"的后面可以判断出短信的内容,因此他们都属于特征词,所以我们应该把他们变成特征词,而不是直接使用中文

除此之外,既然是片段,那我们就应该把一句话拆开去理解,也就是下面所说的,避免把较长的话当作模板片段

2.避免出现每个模版只有一个模版片段的情况
既然是片段,当然要把长句子拆分

像这样的配置,是不建议的,也是必须要避免的!

不过,这不是说模板片段要多放几个长句子!

3.每个模版片段不要包含多条关键信息
下面的配置方式是糟糕的配置方式:

讲到这里,你应该明白我想要表达的意思了吧?

回到刚刚那个"给某人发短信,内容是xxx"的例子,我们逐一拆解句子,找出句子里的特征词和词槽:

分析一下,不难看出这里的"某人"是我们要找的词槽,短信的内容也是词槽

剩下的信息都是特征词,说白了,就是帮助我们判断句子意图和词槽的词语

因此,这句话就可以拆分成:

给某人 ----确定词槽(短信接受人)
发短信 ----确定意图(意图为发短信,而不是删除短信)
内容是xxx ----确定词槽(短信内容)

一个长句拆分成三个短句,能提高模型的泛化能力,如果用户说:“发短信给小明,内容是xxx”,那么这个对话模板一样能识别出来

4.避免出现某个模版里所有模版片段都为必须匹配或非必须匹配

上面这样的方式是不建议的

在配置对话模板之前,我们一定要明确目标,哪些特征词和词槽是一定要匹配的,哪些特征词可以通过多轮对话取得,没有必要把所有模板片段都设置为必须匹配或者非必须匹配,我们只需要根据我们要配置的句式来决定必须或非必须,下面举个例子:

订一张明天早上从北京出发到广西的Z6列车的学生票

很明显,这句话的意图是订票,我们没有必要一开始就把所有词槽都填充上去,因为用户很有可能会说:“我要订票”

想象自己去到售票大厅,是不是应该先向售票员表达自己的意图,然后再说去哪里,买几等座等等,因此,这里我们只需要把"订票"这个特征词作为必须匹配的模板片段即可:

5.通配符可以用,但是尽量用的少一些

这句话能匹配的句式是:“帮我叫(店名)的外卖”,用上通配符,虽然可以匹配到词槽,但是换个说法:“请帮我叫一份肯德基的全家桶套餐”,那么本来应该匹配的词槽就可能被通配符匹配

——————————————————————————————————————————————————————————————————————————————————

下面是我比较喜欢的配置对话模板的规范(习惯):

1.利用好对话模板里的描述,写清楚这条模板能匹配的句式

对比一下两种方式:

是不是觉得第二种的思路比较清晰?

第一种就像是代码里没有注释一样,看不出这条模板的作用,能匹配哪些语句,因此,描述写的清晰,对开发者来说,能起到事半功倍的作用

2.充分利用平台资源,使用AI Studio检验成果
虽然搭建智能对话机器人不需要任何代码基础,但是在检验效果时,需要用到一些代码,这里用到的是Python2的环境,不会搭建环境,抑或是没有编程基础的同学,可以试一试下面的方式:

打开paddlepaddle,搜索百度unit技能测试或直接打开链接:(https://aistudio.baidu.com/aistudio/projectdetail/284472)

把client_id, client_secret, bot_id改成自己的,另外,query验证集也要改成自己项目的query:

修改后,在终端输入python send_query.py后回车即可查看效果:

收藏
点赞
3
个赞
共4条回复 最后由wangwei8638回复于2020-08-18
#5wangwei8638回复于2020-08-18

学习了 

0
#4188******00回复于2020-05-06

可以详细讲解一下多轮对话的配置吗?

 

0
#3幸福8村回复于2020-04-29

讲解很详细,但是并不会降低业务人员配置的难度,可否把您列的这些规则,准则,都融入产品中,帮助业务人员合理配置,而不是靠一个人的经验,谢谢

0
X
#2xmkeyun回复于2020-04-29

看了之后,关于词槽和意图方面的设计,少走半里路

0
TOP
切换版块