使用Keras/TensorFlow模型构建属于你的Chatbot API

640?wx_fmt=jpeg

很多人认为,构建自己的聊天机器人(或助手)并不复杂。各种聊天机器人平台正在使用分类模型来识别用户意图。显然,在现有平台上构建聊天机器人时,会得到强有力的提升。为什么不自己使用类似的模型,构建一个独属于你的聊天机器人呢?构建时我们可能力遇到以下挑战:

1、对用户输入进行分类以识别意图(使用机器学习可以解决,利用带有TensorFlow后端的Keras)

2、保持背景。这部分的工作主要是编程,没有机器学习的相关内容。我们使用的是Node.js后端逻辑来跟踪对话上下文(在上下文中,通常不需要对用户意图进行分类-用户输入被视为chatbot问题的答案)

使用了Python库列表实现的程序功能,Keras深度学习用于构建分类模型。Keras在TensorFlow后端上运行训练。Lancaster词干库用于不同的单词形式:

640?wx_fmt=png

要学习的Chatbot意图和模式在普通的JSON文件中定义,没有必要使用庞大的词汇量,我们的目标是为特定域构建聊天机器人。也可以用小词汇创建分类模型,它将能够识别为训练提供的一组模式。

640?wx_fmt=png

在我们开始分类模型训练之前,需要先建立词汇量,处理模式以构建词汇表。每个单词都用于生成通用词根,这样做将有助于覆盖更多用户输入组合:

640?wx_fmt=png

这是词汇创作的输出,有9个类和82个词汇单词:

640?wx_fmt=png

训练不会基于单词的词汇运行,因为单词对机器没有意义。我们需要将单词翻译成包含0/1的数组的单词。数组长度等于词汇量大小,当来自当前模式的单词位于给定位置时,将设置1:

640?wx_fmt=png

训练数据X(模式转换为数组[0,1,0,1,...,0])Y(意图转换为数组[1,0,0,...,0],会有单个1用于意图数组)。该模型使用基于三层的Keras构建。实验结果表明,三层提供了良好的结果(但这一切都取决于训练数据)。分类输出将是多类数组,这将有助于识别编码的意图。使用softmax激活生成多类分类输出(结果返回0/1的数组:[1,0,o,...,0]此集标识编码的意图):

640?wx_fmt=png

使用SGD优化器编译Keras模型:

640?wx_fmt=png

拟合模型-执行训练并构建分类模型,在批量大小为5的200次迭代中执行训练:

640?wx_fmt=png

该模型已建成,现在可以定义两个辅助函数,函数有助于将用户句子翻译成数组0/1

的单词:

640?wx_fmt=png

看看这个例子,将句子翻译成一个单词:

640?wx_fmt=png

当函数从chatbot词汇表中的句子中找到一个单词时,它将1设置为数组中的相应位置。该数组将被发送以由模型分类从而识别它所属的意图:

640?wx_fmt=png

将训练好的模型保存到pickle文件中是一个很不错的做法,以便能够重用它来通过Flask REST API进行发布:

640?wx_fmt=png

在通过Flask REST API发布模型之前,总是可以运行额外的测试,使用model.predict函数对用户输入进行分类,并根据计算的概率,返回意图(可以返回多个意图):

640?wx_fmt=png

句子分类的例子:

classy_local('Fetch blood result for patient')

意图正确计算:

640?wx_fmt=png

要通过REST端点发布相同的功能,可以将其包装到Flask API中:

640?wx_fmt=png

已经解释了如何实现分类部分。在帖子开头引用的GitHub repo中,您将找到如何维护上下文的完整示例。上下文由用JavaScript编写并在Node.js后端运行的逻辑维护。必须在意图列表中定义上下文流,一旦意图被分类并且后端逻辑找到上下文的开始 - 我们进入循环并询问相关问题。高级上下文处理的全部内容取决于后端实现(这超出了现阶段机器学习的范围)。

Chatbot用户界面:

640?wx_fmt=png


640?wx_fmt=jpeg

长按二维码 ▲

订阅「架构师小秘圈」公众号

如有启发,帮我点个在看,谢谢↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值