人工智能之聊天机器人

目录

第1章引言

选题背景

人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。

研究意义

聊天机器人(chatterbot)是一个用来模拟人类对话或聊天的程序。"Eliza"和 "Parry"是早期非常著名的聊天机器人。它试图建立这样的程序:至少暂时性地让一个真正的人类认为他们正在和另一个人聊天。设计目标

问题分析

设计一个聊天机器人需要:

  1. 浏览器前端:为用户提供友好的机器聊天页面;

  2. 机器聊天API服务:前后端通过异步的HTTP调用实现通讯,前端将对话请求提交给机器对话Web服务,完成后将结果返回前端进行展示;

  3. 机器聊天后端:使用tf-seq2seq进行机器聊天模型训练,得到对应语言的模型文件。然后通过Python命令可以进行句级的聊天,机器聊天API服务调用该命令。

逻辑功能架构

如图1-1 所示: 图1-1 功能架构

第2章机器学习

准备

  1. 配置好一台ubuntu14.04的虚拟机,安装python3.4以及pip3等工具。

  2. 下载已经训练好的机器聊天模型。

http://drive.google.com/file/d/1mVWFScBHFeA7oVxQzWb8QbKfTi3TToUr/view

  1. 下载https://github.com/bshao001/ChatLearner的文件。

  2. 然后解压出ChatLearner文件夹和Result文件夹,并将Result模型放进ChatLearner中的DATA目录下。 图2-1 准备

配置环境

更新pip

将pip版本更新到最新,才好进行之后的安装。

代码如图: 图2-2 更新pip

安装Tensorflow

用官方文档的安装步骤速度太慢,我们换成阿里云的进行安装。

码如图:

图2-3 tensorflow安装代码

设置环境变量PYTHONPATH

需要指向项目根目录,其中有chatbot,Data和webui文件夹。如果 命令行中运行python,则必须具有该环境变量,否则会导致模 导入错误

图2-3 设置环境变量

安装nltk

NLTK是一个比较优秀的自然语言处理工具包,是我们聊天机器人需要 较重要的一个工具。

代码如图:

图2-4 nltk安装代码

下载 Punkt Tokenizer Models

代码如下:

图2-5 PTM图

图2-6 punkt解压图

使用以训练的模型预测

切换到ChatLearner/chatbot目录下,执行botui.py文件。开始机器聊天。

如图:

图2-7 调用训练模型

第3章Web界面

分析与设计

想要用户体验良好,我们就需要一个好用的web界面给用户使用,屏蔽掉底层,这样用户才能简单的使用我们的产品。

设计如下:

需要一台windows,以及安装好python3,django 1.11,和requests库

安装python,前往https://www.python.org/ 下载python3.5 然后安装。

Django采用pip安装,打开windows的cmd,输入pip install django==1.11即可

Requests库采用同样的pip方法,即可顺利安装

然后用IDE pycharm来编写web程序

大概的架构如下图所示:

图3-1 web架构图

前端HTML

前端的HTML代码可以使用bootstrap 结合自己写的,然后采用AJAX提交方式,这样用户体验更好。

代码如下:

图3-2 前端html代码

Ajax可以实现动态不刷新(局部刷新)

就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息。

Ajax的提交方式代码很简单,就像下面这样,就能实现简单的ajax提交

图3-3 ajax代码

Django views 代码

django 里面主要就是两个view层,一个是首页,也就是聊天界面,另一个就是接受数据,然后返回机器人聊天信息。Django层是对用户输入的数据进行处理,以及发送给机器学习端,起到一个桥梁的作用。

代码如下:

图3-4 django代码

第4章Docker部署

准备

需要三台装好ubuntu-server 16.04的虚拟机或者物理机

三台机器都装好docker-ce,以及docker swarm

Docker-ce是安装docker客户端和服务端,docker swarm是docker的一种简单的集群方案

安装docker

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台

  • 首先更新系统
1
sudo apt update && upgrade –y
  • 添加apt源信息
1
2
3
4
5
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
  • Add Docker's official GPG key(添加docker gpc key):
1
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • 添加docker-ce源
1
2
3
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb\_release -cs) \
  • 安装docker
1
2
sudo apt-get update
sudo apt-get install docker-ce
  • .检查docker是否安装成功
1
sudo docker info

如果出现了如下信息,那就是成功了

图4-5 安装成功

  • 检测是否安装好docker swarm
1
sudo docker swarm --help

打印出如下信息就是成功了 图4-6 成功信息

部署

  • 由于多机部署出现点问题,这里我们用单机部署

理想的部署方式如下:

图4-7 部署架构

这里nginx负载均衡采用nginx,方案采用轮询,部署在docker里面,下面的三台web服务器也是部署在docker里面,web服务器采用nginx + uwsgi + django这种方案,这样django也能支持大并发。而Tensorflow 聊天系统我们采用单独的虚拟机部署,应为这个太耗资源,用容器部署感觉性能不够。所以我们采用这个框架。

时间关系,我们只做了一台web服务器,自动部署能自动部署,但是docker的初衷是为服务,这个方案不太好。应该采用分体式部署web服务器。

部署方式我们小组采用的docker-compose自动部署,

Compose 是一个用户定义和运行多个容器的 Docker 应用程序。在 Compose 中你可以使用 YAML 文件来配置你的应用服务。然后,只需要一个简单的命令,就可以创建并启动你配置的所有服务。

使用 Compose 基本会有如下三步流程:

在 Dockfile 中定义你的应用环境,使其可以在任何地方复制。

在 docker-compose.yml 中定义组成应用程序的服务,以便它们可以在隔 离的环境中一起运行。

最后,运行dcoker-compose up,Compose 将启动并运行整个应用程序。

  • docker-compose 自动部署代码

    docker自动部署文件目录如下:

图4-8 docker自动部署文件目录

docker-compose.yml文件内容如下

图4-9 docker-compose.yml

首先是部署ngxin 负载均衡服务器,dockerfile代码 图4-10 nginx dockerfile

然后django web服务器的dockerfile: 图4-11 django dockerfile文件

第5章测试和总结

测试和调试

测试目的

检测聊天机器人是否能够正常的工作

测试方法

部署好nginx负载均衡以及web服务器和机器学习后,我们打开浏览器,输入http://192.168.56.100/tranweb/

我们就能看见这个界面

图5-1 web UI

系统测试结果

如输入以下信息,成功返回聊天信息

图5-2 聊天调试方法

成功开始进行英语对话