博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
智能聊天机器人语料库的设计编写(一)——Dialogflow
阅读量:6452 次
发布时间:2019-06-23

本文共 3192 字,大约阅读时间需要 10 分钟。

工作快一年,平时做的并不是什么太有技术含量的事情,但突然有一天突发奇想,很想把工作中的一些东西记录下来,于是打算开始在这里记录,当做平时的工作总结吧。

大学毕业一年,目前在一家小型公司进行人工智能聊天机器人的对话设计工作。平时 主要使用的智能对话工具主要包括 Google 的 Dialogflow,以及 AIML 文件编写两种方式。

今天首先想写的是 Dialogflow 这种智能聊天设计工具。

Dialogflow 的基本用法:一问一答,Training Phrase 和 Response

Dialogflow 是一个设计智能聊天对话的网站,使用时需要连接外网。且普遍用于英语对话的设计。

Dialogflow 的使用方法十分简单,主要包括 Agent、Intent、Entity 三部分。Agent 就是存放同一个话题中所有对话的域,可以统一导出成 Json 包的形式保存。一个 Agent 中的对话语句以 Intent 的形式训练出来。每个 Intent 相当于一条语句,对应聊天者的一个意图,训练对话语句时,首先需要新建一个 Agent,Agent 的名字之能是英文数字或下划线,且不能有空格。紧接着我们新建一个 Inent,Intent 名称设定的要求更宽泛一点,它允许有空格。然后,在 Intent 中的 Training Phrase 中输入我们预先设定的可能会说的话,并可以在下方的 Response 一栏中写出对应的回答,如,在 Training Phrase 中输入‘Hello’,按下回车,就会形成一条预定输入,然后在 Response 中输入‘Hi’,这样,当我们在页面右边的 train 面板中输入‘Hello’时,界面就会返回‘Hi’,这就相当于完成了一次简单的对话。

Response 中,一条语句就是一个回复,如果在 Response 中设定了多个语句,那么在输出时,就可以随机出现 Response 中的一句作为回复输出。

Entity:关键词匹配实现泛化

当然,如果每次对话都需要精确地将每一句可能会说到的话都列举出来,那么显然智能的含量就会大打折扣,于是,在 Dialogflow 中,就存在一种最重要的训练方式,使用 Entity 泛化。

我们可以预先在最左侧 Entity 一栏中添加我们所需的聊天单词的分类。如,我们可以添加一类叫做 sports 的 Entity,并在其中加入 basketball、 football、 baseball 等运动单词。之后就可以去 Intent 中进行训练。利用 Entity, 我们就可以只需对某一类句式进行训练,只需一句话,就可以对多句话做出回答。如,‘I like basketball’。按下回车后,系统会自动识别 basketball 这个单词,并关联出其所在的 Entity 显示在下方。这样,之后如果在 右侧 Train 一栏中输入‘I like football’ 或 ‘I like baseball’ 等,都可以输出这个 Intent 中的 Response 的内容。当然,在训练时,有时系统并不会自动显示出语句中相关单词带有的 Entity,这时,我们可以自己设定,只需要在训练成功的语句上双击相应的单词,界面上就会自动显示可以添加的 Entity 分类,点击选择就可以了。

Dialogflow 中为我们预先提供了很多常用的 Entity,如时间,数字,日期等,这些 Entity 在使用时,无需我们手动添加相应的 Entity 内容,系统会在你输入相关单词进行训练时,自动识别并为你添加训练语句中带有的预设 Entity。

Entity 在设定时,每一个 Entity 都对应一个 value,这是 Entity 在系统中被识别使用的值,且可以在 Response 中返回和继承,我们可以在 Response 中使用 $+Entity 的名称来拿到并输出 Entity 的值,同时,为了提高 Entity 匹配到的几率,更大程度上解决有歧义的单词的输入麻烦,也为了满足多种情况下相匹配同一个 Entity 的需求,我们在设定 Entity 时,可以在后面设定很多个同义项,这样,在匹配 sport 这个词时,我们不仅可以输入 basketball,同时也可以输入 sports,以方便我们的使用。

另外,一个 Intent 中包含的 Entity 的数量不可过多,我曾经因为要对相应的单词数量进行识别以确定语言等级,所以计划给每句话的主谓宾都加上了 Entity,由此就会导致系统紊乱,出现匹配不到或匹配错误等问题。

Follow-up:为相关语句添加上下文

在 Dialogflow 中还有一个上下文的设定,就是 Intent 界面中最上面的 Follow-up。我们可以在主界面点击 Intent 为他添加 Follow-up Intent,也可以在 Intent 语句训练界面直接在 context 中输入 相关上下文的 Intent 的名称。这样,我们在进行父 Intent 的对话时,匹配到后就可以直接进入 Follow-up 对话中继续进行下面的对话,且 Follow-up Intent 尤其生效的生存周期,也就是 Context 前面显示的数字,在这个时间段内,我们的对话将一直保持在当前的对话环境中,不会匹配到别的 Intent 去。

在添加 Follow-up 时,会有许多个选项,我们可以选择普通 Intent,也可以使用 Yes 或 No 判断,从而实现语句树形分支。当对一个问题的回答因 yes or no 不同时,可以走向不同的 Follow-up Intent。

Action:扩展用标记文本输入

在 Intent 中还有一个 Action 的空档,在我的工作中,Action 主要被我用于填写一些标识符以供程序扩展,连接实现外部相应的功能,至于其更多的用处,我并没有使用到。

Dialogflow 中预置的 Agent

Dialogflow 中,系统为我们预先训练好了许多个实用 Agent,有闹钟,Small-talk 等等,有时,我们可以直接使用这些 Agent 用于我们自己的对话,方便快捷。

当然,在训练 Intent 时我们也会发现,在每个 Intent 中都有内置的 Small-Talk 开关,如果想在这个 Intent 中也可以匹配到 Hi,Hello 等日常打招呼用语时,我们便可以打开此开关。

Dialogflow Agent 的数量限制

Dialogflow 的使用需要用 Google 账号登录,且每个账号最多可设置十个到十二个 Agent,所以,如果你想真对多个不同的话题进行聊天,为了创建多个 Agent,你就需要多个 Google 账号,或申请 Google Cloud 空间了。

Dialogflow 匹配阀值的设置

在 Dialogflow Agent 的设置界面,我们可以根据需要设置相应的匹配阀值,来调节匹配的概率和精确度。

Dialogflow Agent 的导出和导入

Dialogflow 中的 Agent 可以导出为一个 Json 包,同时也可以将预置的 Json 包导入到 新的 Agent,同样在设置栏中可以找到。

更多

在我看来,Dialogflow 更多的是供个体开发者或普通用户体验或开发,并不适用于太大规模的软件开发使用。匹配的精确度根据个人的需求会有很大的不同,且由于匹配和训练都是在网页上完成,且需要连接外网,在实际应用中会根据网络状况存在不同程度的延时,影响开发和使用。

当然,Dialogflow 自己的官网也有相应的解释说明文档,使用时可以参考查看。

如有读者,感谢阅读。

转载地址:http://vagwo.baihongyu.com/

你可能感兴趣的文章
用设计模式去掉没必要的状态变量 —— 状态模式
查看>>
linux安装elasticsearch及遇到的各种问题
查看>>
健忘的正则
查看>>
[转]CMake快速入门教程:实战
查看>>
IntelliJ IDEA创建JavaWeb工程及配置Tomcat部署
查看>>
Markdown用法
查看>>
求最大值及其下标
查看>>
Request header is too large
查看>>
轮播插件swiper.js?
查看>>
网路流24题总结
查看>>
BZOJ-3732 Network 图论 最小生成树 倍增
查看>>
python之文件操作
查看>>
15 个 Android 通用流行框架大全
查看>>
Entity Framwork CodeFirst 学习笔记五:数据库映射的默认配置和设置
查看>>
ant 执行java文件,java文件中含中文,显示乱码
查看>>
IE8兼容@media和mp4视频的解决方案
查看>>
第二周总结
查看>>
ASP.NET完整打包卸载更新攻略(By Installshield 2010)
查看>>
[120_移动开发Android]006_android开发之数据存储之sdcard访问
查看>>
[若有所悟]IT小兵总结IT人特点及挽留IT人才的九大策略
查看>>