首先是AI社区UNIT板块里官方发的的:
【小白终结帖】UNIT开发者必备学习资料大集合
视频可以不看,但是这篇帖子一定要看,满满的都是干货!
帖子上有的内容,这里就不重复了,下面是配置智能对话机器人的五个注意事项:
不要直接将汉字配置到模版片段中避免出现每个模版只有一个模版片段的情况每个模版片段不要包含多条关键信息避免出现某个模版里所有模版片段都为必须匹配或非必须匹配通配符可以用,但是尽量用的少一些
除此之外,这里再给大家安利一下我比较喜欢的对话模板规范(习惯):
利用好对话模板里的描述,写清楚这条模板能匹配的句式充分利用平台资源,使用AI Studio检验成果
不要直接将汉字配置到模版片段中
这里我做一个错误的示范:
给[D:user_receiver][D:kw_send][D:kw_message],内容是[D:user_content]
这是发短信的一条模板片段,句式是:
给小明发短信,内容是我现在开会,不方便接电话
我们知道,"给"是一个动词,"内容是"的后面可以判断出短信的内容,因此他们都属于特征词,所以我们应该把他们变成特征词,而不是直接使用中文
除此之外,既然是片段,那我们就应该把一句话拆开去理解,也就是下面所说的,
避免把较长的话当作模板片段
避免出现每个模版只有一个模版片段的情况
既然是片段,当然要把长句子拆分
像这样的配置,是不建议的,也是必须要避免的!
不过,这不是说模板片段要多放几个长句子!
每个模版片段不要包含多条关键信息
下面的配置方式是糟糕的配置方式:
讲到这里,你应该明白我想要表达的意思了吧?
回到刚刚那个"给某人发短信,内容是xxx"的例子,我们逐一拆解句子,找出句子里的特征词和词槽:
分析一下,不难看出这里的"某人"是我们要找的词槽,短信的内容也是词槽
剩下的信息都是特征词,说白了,就是帮助我们判断句子意图和词槽的词语
因此,这句话就可以拆分成:
给某人 ----确定词槽(短信接受人)发短信 ----确定意图(意图为发短信,而不是删除短信)内容是xxx ----确定词槽(短信内容)
一个长句拆分成三个短句,能提高模型的泛化能力,如果用户说:“发短信给小明,内容是xxx”,那么这个对话模板一样能识别出来
避免出现某个模版里所有模版片段都为必须匹配或非必须匹配
像这样的对话模板:
上面这样的方式是不建议的
在配置对话模板之前,我们一定要明确目标,哪些特征词和词槽是一定要匹配的,哪些特征词可以通过多轮对话取得,没有必要把所有模板片段都设置为必须匹配或者非必须匹配,我们只需要根据我们要配置的句式来决定必须或非必须,下面举个例子:
订一张明天早上从北京出发到广西的Z6列车的学生票
很明显,这句话的意图是订票,我们没有必要一开始就把所有词槽都填充上去,因为用户很有可能会说:“我要订票”
想象自己去到售票大厅,是不是应该先向售票员表达自己的意图,然后再说去哪里,买几等座等等,因此,这里我们只需要把"订票"这个特征词作为必须匹配的模板片段即可:
通配符可以用,但是尽量用的少一些
这句话能匹配的句式是:“帮我叫(店名)的外卖”,用上通配符,虽然可以匹配到词槽,但是换个说法:“请帮我叫一份肯德基的全家桶套餐”,那么本来应该匹配的词槽就可能被通配符匹配
利用好对话模板里的描述,写清楚这条模板能匹配的句式
对比一下两种方式:
是不是觉得第二种的思路比较清晰?
第一种就像是代码里没有注释一样,看不出这条模板的作用,能匹配哪些语句,因此,描述写的清晰,对开发者来说,能起到事半功倍的作用
充分利用平台资源,使用AI Studio检验成果
虽然搭建智能对话机器人不需要任何代码基础,但是在检验效果时,需要用到一些代码,这里用到的是Python2的环境,不会搭建环境,抑或是没有编程基础的同学,可以试一试下面的方式:
根据提示登陆,并创建应用:
完成后即可看到对应的应用:
client_id 填写 API Keyclient_secret 填写 Secret Keybot_id 填写当前机器人的ID
上面三个要保存下来,接下来打开AI Studio,进入项目创建一个新项目:
因为UNIT提供是python2的代码,因此这里我们选择python2
进入项目后,上传代码和验证query:
点击send_query.py文件即可进入编辑界面,找到123行-125行的代码:
把client_id, client_secret, bot_id改成自己的,另外,query验证集也要改成自己项目的query:
第135行的文件名也需要修改成自己测试集的名称
下面给大家演示一下效果,在终端输入python send_query.py后回车:
这样就可以看到这个对话技能的效果了,这个项目我已经公开,大家直接Fork即可:
百度unit技能测试(/aistudio/projectdetail/284472)