小言_互联网的博客

11步,教你创建深度学习聊天机器人

559人阅读  评论(0)

全文共4687字,预计学习时长9分钟

创建一款聊天机器人时,目标应该是令其仅需最少的人类干预甚至无需人类干预。这一目标可通过两种方法实现。

第一种方法是,客服团队接收来自人工智能的建议,以改进客户服务方式。第二种方法是应用一款深度学习聊天机器人,它能自行处理所有对话,无需客服团队。

聊天机器人的力量如此之大,以至于仅一年内,Facebook Messenger上聊天机器人的数量就从10万个增长到了30万个。诸多受欢迎的品牌,如万事达卡,也都迅速推出了自己的聊天机器人。

但是,在深入了解品牌如何利用聊天机器人之前,需要先搞清楚深度学习机器人到底是什么。

什么是深度学习机器人?

深度学习聊天机器人通过“深度学习”这一过程从零开始学习。在此过程中,聊天机器人通过机器学习算法被创造出来。深度学习机器人从自身数据和人与人的对话中学习一切内容。

图源Pinterest

聊天机器人经过训练后,对于文本有其自己的意识,可以教它如何与人类交谈。也可以用电影对白或剧本教学。然而,人类对话是创造最佳深度学习聊天机器人的首选方式。请记住,所拥有的数据越多,机器学习的效果越好。

既然已经知道了深度学习聊天机器人是什么,接下来试着理解如何构建一款深度学习聊天机器人。

构建一款深度学习聊天机器人

1.准备数据

任何机器学习相关流程的第一步都是准备数据。至少有数以千计客服与客户之间的历史对话,才足够用来训练聊天机器人。

这些对话应尽可能的详细且多样化,以便为深度学习聊天机器人提供充足的数据点。这一特定过程叫做本体构建。此步骤中,唯一的目标应是收集尽可能多的对话。

2.数据重构

开发者可以根据数据源判断是否需要这一步骤。如果数据没有被很好地分离,则需将数据重构为一个个独立观察行。

这些观察也可叫做“消息-回复对”,它们将被添入分类器中。

此步骤旨在确定/明确对话中的回复方。所有接下来发生的对话都可用作文本指标,以助预测回复。

创建消息-回复对时可能需要设置一些限制条件,比如:

对话应仅发生于两人之间——这样可以清楚地知道消息是发给谁的。一分钟之内发送的几条消息可以合并为一条。只有五分钟内发送的回复才可以与相应的消息配对。

重构过后,消息-回复对看起来可能像这样:

嗨,最近如何?没啥特别的,最近一直下雨。今天我好累。我也是。我今天忙成狗。

一旦积累了上面这种数据,就需要对数据进行清理。要移除网址、图片来源信息、停用词等等。

图源Medium

3.预处理

下一步是进行预处理。这一步中需要为机器学习添加语法,以便聊天机器人正确理解拼写错误。

此步骤还涉及到令牌化、词干化和词形化的过程。这使得对话对聊天机器人来说具有可读性。这一步骤中还可以使用免费的NTLK工具。

在预处理的最后一步,可以为机器人创建对话分析树作为参考。

4.选择机器人类型

完成本体构建和预处理后,需要选择所要创建的聊天机器人类型。

有以下两种主要类型:

· 生成式——在生成模型中,聊天机器人无需任何类型的预定义储存库。这种形式十分高级,聊天机器人能利用深度学习回复询问。

· 检索式——此种形式下,聊天机器人拥有应对不同询问的回复储存库。需要根据问题选择合适的回复,机器人会遵从这一模式。

检索模型很少出错,因其完全基于检索数据。然而,它自身有局限性——过于死板,而且回复也很不人性化。

相反地,深度学习聊天机器人可以轻松地根据客户的问题和需求改变回复风格。然而,即使是这类聊天机器人也无法完美地模仿人类对话。

聊天机器人的生成模型也很难完善,由于该领域的知识相当有限。事实上,深度学习聊天机器人尚未通过图灵测试。

虽然在询问较为简单时检索式聊天机器人非常有用,但应对复杂询问则需要生成式聊天机器人,尤其是在聊天机器人需要记录先前消息内容的情况下。

检索式聊天机器人只能回答简单直接且易于回答的询问。

5.生成词向量

当频繁使用一些词汇时(比如LOL——大笑,和 LMAO——笑死我了,这类网络用语),就需要用到词向量。它们是社交媒体上常用的词汇,但很少存在于数据集中。

虽然使用预训练过的向量更容易,但是当有些词不在其他的词向量列表中时,就需要创建自己的词向量。

想要生成自己的词向量,需要采用Word2Vec模型的方法。Word2Vec模型是根据单词如何出现在句子中来创建词向量的。

具有相似上下文的词在向量空间中会被放置的更近。可以使用Python脚本训练Word2Vec模型。或者使用TensorFlow Seq2Seq函数也会达到相同效果。

6.构建Seq2Seq模型

想要构建Seq2Seq模型,可以使用Tensorflow。为此,需要使用与此类似的Python脚本。

遵循代码并尝试为深度学习聊天机器人创建Python脚本。此模型最重要的部分就是Tensorflow中的embedding_rnn_seq2seq()函数。

7.追踪进程

创建了Seq2Seq模型后,需要追踪训练过程。从某种意义上说,这部分充满乐趣,因为可以看到深度学习聊天机器人的训练过程。

应该通过输入字符串在循环中的不同点测试聊天机器人。在输出中会获得无填充和非EOS令牌。

起初,大多数回复都是空白,因为聊天机器人只会输出填充和EOS令牌。接下来,聊天机器人将开始使用输入数据中频繁出现的短小的输出字符串,如LOL,进行回复。

慢慢地,聊天机器人将开始形成自己的回复并给出更长更完整的句子。随着时间的推移,答案的结构和语法都会变得越来越好。

8.添入应用

Seq2Seq模型准备就绪并经过测试后,在人们可以与其互动的应用中启动它。为便于解释,此处以Facebook Messenger为例,因为这是添加聊天机器人最简便的应用之一。

第一步是设置Heroku服务器,下载Heroku toolbelt即可。接下来,需要安装Node,创建一个新文件夹,然后启动一个新的Node项目。还必须安装其他全部Node dependencies。这可以通过以下方式完成:

npm install express request body-parser –save
The next step is to create an index.js file and authenticate the bot
 by:
‘use strict’
const express = require(‘express’)
const bodyParser = require(‘body-parser’)
const request = require(‘request’)
const app = express()
app.set(‘port’, (process.env.PORT || 5000))
// Process application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({extended: false}))
// Process application/json
app.use(bodyParser.json())
// Index route
app.get(‘/’, function (req, res) {
            res.send(‘Hello world, I am a chat bot’)
})
// for Facebook verification
app.get(‘/webhook/’, function (req, res) {
            if (req.query[‘hub.verify_token’] === 
‘my_voice_is_my_password_verify_me’) {
                        res.send(req.query[‘hub.challenge’])
            }
            res.send(‘Error, wrong token’)
})
// Spin up the server
app.listen(app.get(‘port’), function() {
            console.log(‘running on port’, app.get(‘port’))
})
Create a file and name it Procfile.Paste the following in it:
web: node index.js
After committing all the code with Git, you can create a new Heroku
 instance by:
git init
git add .
git commit –message “hello world”
heroku create
git push heroku master

需要按照此推文中(https://shanebarker.com/blog/facebook-messenger-chatbot/)提到的方式设置Facebook应用程序。之后,设置聊天机器人并自定义内容。可以按照此处教程(https://github.com/jw84/messenger-bot-tutorial),它会帮助快速完成设置。

9.部署TensorFlow模型

聊天机器人已准备就绪,现在要将所有内容放在一起并部署TensorFlow模型。需要使用Flask服务器进行部署,因为TensorFlow和Node之间没有很多良好的接口。

深度学习聊天机器人的Express应用程序与Flask服务器进行交互。

获取Flask服务器代码:https://github.com/adeshpande3/Chatbot-Flask-Server

获取深度学习聊天机器人的index.js文件:https://github.com/adeshpande3/Facebook-Messenger-Bot/blob/master/index.js

10.测试深度学习聊天机器人

构建深度学习聊天机器人的最后一步是进行实时测试。前往Facebook并找到个人页面。只需向个人页面发送消息,聊天机器人就会开始回复。但首次回复时,聊天机器人可能回复得有点慢,因为服务器需要时间启动。

然后就可以在查看深度学习聊天机器人回复消息时表现如何了。

如果回复不准确或有语法问题,则可能需要向聊天机器人添加更多数据集。

11.改善方法

在与深度学习聊天机器人交流后,将深入了解如何提高其性能。

可以对聊天机器人进行如下更改:

添加更多数据集以帮助其从更多对话中更好地学习。这有助于提高其会话技能,并帮助它对询问提供更好的多种回复。还需要处理编码器和解码器消息完全不相关的情况。例如,如果某人有一天与聊天机器人进行了对话,然后在第二天就完全不相关的主题开始另一个对话,那么机器人应该知道。要依据实际情况有针对性地训练机器人。使用双向长短期记忆(LSTMs)、分组和注意力机制。还应该考虑调整超参数,例如LSTM层数、LSTM单位、训练迭代、优化器选择等。

总结

深度学习聊天机器人能从对话中学习并最终帮助解决顾客的询问。目标应该是尽可能彻底地对其进行训练,以提高准确性。

虽然开发深度学习聊天机器人不像开发检索式聊天机器人那么容易,但它可以帮助自动回复大多数客户的支持需求。

确保花费了足够的时间和精力用于重构数据并将其置入消息-回复对中。预处理是开发一款可靠的深度学习聊天机器人的关键。

在设计此聊天机器人时,一些Python知识是必需的,会使用TensorFlow,Express和Node也是必要技能。

留言 点赞 关注

我们一起分享AI学习与发展的干货
欢迎关注全平台AI垂类自媒体 “读芯术”

(添加小编微信:dxsxbb,加入读者圈,一起讨论最新鲜的人工智能科技哦~)


转载:https://blog.csdn.net/duxinshuxiaobian/article/details/101279964
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场