聊天机器人-项目准备

文章目录

  • 聊天机器人-项目准备
  • 走进聊天机器人
    • 学习目标
    • 1. 目前企业中的常见的聊天机器人
      • 2. 常见的聊天机器人怎么实现的
        • 2.1 问答机器人的常见实现手段
        • 2.2 任务机器人的常见实现思路
        • 2.3 闲聊机器人的常见实现思路
    • 3. 企业中的聊天机器人是如何实现的
      • 3.1 阿里小蜜-电商智能助理是如何实现的
        • 3.1.1 主要交互过程
        • 3.1.2 技术架构
        • 3.1.3 检索模型流程(小蜜还用了其他的模型,这里以此为例)
      • 3.2 58同城智能客服帮帮如何实现的
        • 3.2.1 58客服体系
        • 3.2.2 58智能客服整体架构
        • 3.2.3 业务咨询服务流程
          • 大致流程
          • 使用融合的模型
        • 3.2.4 58的闲聊机器人
        • 3.2.5 解决不了转人工服务
  • 需求分析和流程介绍
    • 目标
    • 1. 需求分析
    • 2. 效果演示
    • 3. 实现流程
      • 3.1 整体架构
      • 3.2 闲聊模型
      • 3.4 问答模型
  • 环境准备
    • 目标
    • 1. Anaconda环境准备
    • 2. fasttext安装
    • 3. pysparnn安装
  • 语料准备
    • 目标
    • 1. 分词词典
      • 1.1 词典来源
      • 1.2 词典处理
      • 1.3 对多个词典文件内容进行合并
    • 2. 准备停用词
      • 2.1 什么是停用词?
      • 2.2 停用词的准备
      • 2.3 手动筛选和合并
    • 3. 问答对的准备
      • 3.1 现有问答对的样式
      • 3.2 excel中问答对的处理
    • 4. 相似问答对的采集
      • 4.1 采集相似问答对的目的
      • 4.2 手动构造数据
  • 文本分词
    • 目标
    • 1. 准备词典和停用词
      • 1.1 准备词典
      • 1.2 准备停用词
    • 2. 准备按照单个字切分句子的方法
    • 3. 完成分词方法的封装

走进聊天机器人

学习目标

  1. 知道常见的bot的分类
  2. 知道企业中常见的流程和方法

1. 目前企业中的常见的聊天机器人

  1. QA BOT(问答机器人):回答问题

    1. 代表 :智能客服、
    2. 比如:提问和回答
  2. TASK BOT (任务机器人):帮助人们做事情
    1. 代表:siri
    2. 比如:设置明天早上9点的闹钟
  3. CHAT BOT(聊天机器人):通用、开放聊天
    1. 代表:微软小冰

2. 常见的聊天机器人怎么实现的

2.1 问答机器人的常见实现手段
  1. 信息检索、搜索 (简单,效果一般,对数据问答对的要求高)

    关键词:tfidf、SVM、朴素贝叶斯、RNN、CNN

  2. 知识图谱(相对复杂,效果好,很多论文)

    在图形数据库中存储知识和知识间的关系、把问答转化为查询语句、能够实现推理

2.2 任务机器人的常见实现思路
  1. 语音转文字
  2. 意图识别、领域识别、文本分类
  3. 槽位填充:比如买机票的机器人 使用命令体识别填充 从{位置}到{位置}的票2个位置的
  4. 回话管理、回话策略
  5. 自然语言生成
  6. 文本转语音
2.3 闲聊机器人的常见实现思路
  1. 信息检索(简单、能够回答的话术有限)
  2. seq2seq 和变种(答案覆盖率高,但是不能保证答案的通顺等)

3. 企业中的聊天机器人是如何实现的

3.1 阿里小蜜-电商智能助理是如何实现的

参考地址:https://juejin.im/entry/59e96f946fb9a04510499c7f

3.1.1 主要交互过程

从图可以看出:

  1. 输入:语音转化为文本,进行理解之后根据上下文得到语义的表示
  2. 输出:根据语义的表是和生成方法得到文本,再把文本转化为语音输出
3.1.2 技术架构

可以看出其流程为:

  1. 判断用户意图
  2. 如果意图为面向目标:可能是问答型或者是任务型
  3. 如果非面向目标:可能是语聊型
3.1.3 检索模型流程(小蜜还用了其他的模型,这里以此为例)

通过上图可知,小蜜的检索式回答的流程大致为:

  1. 对问题进行处理
  2. 根据问题进行召回,使用了提前准备的结构化的语料和训练的模型
  3. 对召回的结果进行组长和日志记录
  4. 对召回的结果进行相似度计算,情感分析和属性识别
  5. 返回组装的结果

3.2 58同城智能客服帮帮如何实现的

参考地址:http://www.6aiq.com/article/1536149308075?p=1&m=0

3.2.1 58客服体系

58的客服主要用户为公司端和个人端,智能客服主要实现自动回答,如果回答不好会转到人工客服,其中自动回答需要覆盖的问题包括:业务咨询、投诉建议等

3.2.2 58智能客服整体架构

整体来看,58的客服架构分为三个部分

  1. 基础服务,实现基础的NLP的功能和意图识别
  2. 应用对话部分实现不同意图的模型,同时包括编辑运营等内容
  3. 提供对外的接口

3.2.3 业务咨询服务流程

大致流程

KB(knowledge base)-bot的流程大致为:

  1. 对问题进行基础处理
  2. 对答案通过tfidf等方法进行召回
  3. 对答案通过规则、深度神经网络等方法进行重排序
  4. 返回答案排序列表
使用融合的模型

在问答模型的深度网络模型中使用了多套模型进行融合来获取结果

  1. 在模型层应用了 FastText、TextCNN 和 Bi-LSTM 等模型
  2. 在特征层尝试使用了单字、词、词性、词语属性等多种特征

通过以上两个模型来组合获取相似的问题,返回相似问题ID对应的答案

3.2.4 58的闲聊机器人

58同城的闲聊机器人使用三种方法包括:

  1. 基于模板匹配的方法
  2. 基于搜索的方式获取(上上图)
  3. 使用seq2seq的神经网络来实现

3.2.5 解决不了转人工服务

​ 智能客服解决不了的可以使用人工客服来实现



需求分析和流程介绍

目标

  1. 能够说出实现聊天机器人的需求
  2. 能够说出实现聊天机器人的流程

1. 需求分析

在黑马头条的小智同学板块实现聊天机器人,能够起到智能客服的效果,能够为使用app的用户解决基础的问题,而不用额外的人力。

但是由于语料的限制,所以这里使用了编程相关的问题,能够回答类似:python是什么python有什么优势等问题

2. 效果演示

3. 实现流程

3.1 整体架构

整个流程的描述如下:

  1. 接受用户的问题之后,对问题进行基础的处理
  2. 对处理后的问题进行分类,判断其意图
  3. 如果用户希望闲聊,那么调用闲聊模型返回结果
  4. 如果用户希望咨询问题,那么调用问答模型返回结果

3.2 闲聊模型

闲聊模型使用了seq2seq模型实现

包含:

  1. 对数据的embedding
  2. 编码层
  3. attention机制的处理
  4. 解码层

3.4 问答模型

问答模型使用了召回和排序的机制来实现,保证获取的速度的同时保证了准确率

  1. 问题分析:对问题进行基础的处理,包括分词,词性的获取,词向量的获取
  2. 问题的召回:通过机器学习的方法进行海选,海选出大致满足要求的相似问题的前K个
  3. 问题的排序:通过深度学习的模型对问题计算准确率,进行排序
  4. 设置阈值,返回结果



环境准备

目标

  1. 能够使用anaconda创建虚拟环境
  2. 能够安装fasttext
  3. 能够安装pysparnn

1. Anaconda环境准备

  1. 下载地址:https://mirror.tuna.tsinghua.edu.cn/help/anaconda/

  2. 下载对应电脑版本软件,安装

    1. windows :双击exe文件
    2. unix:给sh文件添加可执行权限,执行sh文件
  3. 添加到环境变量

    1. windows安装过程中勾选
    2. unix:export PATH="/root/miniconda3/bin:$PATH"
  4. 创建虚拟环境

    1. conda create -n 名字 python=3.6(版本)
    2. 查看所有虚拟环境: conda env list
  5. 切换到虚拟环境

    1. conda activate 名字
  6. 退出虚拟环境

    1. conda deactivate 名字

2. fasttext安装

文档地址:https://fasttext.cc/docs/en/support.html

github地址:<https://github.com/facebookresearch/fastText

安装步骤:

  1. 下载 git clone https://github.com/facebookresearch/fastText.git
  2. cd cd fastText
  3. 安装 python setup.py install

3. pysparnn安装

文档地址:https://github.com/facebookresearch/pysparnn

安装步骤:

  1. 下载:git clone https://github.com/facebookresearch/pysparnn.git
  2. 安装:python setupy.py install


语料准备

目标

  1. 准备分词词典
  2. 准备停用词
  3. 准备问答对
  4. 爬虫采集相似问题

1. 分词词典

最终词典的格式:

词语 词性(不要和jieba默认的词性重复)

1.1 词典来源

  1. 各种输入法的词典

    例如:https://pinyin.sogou.com/dict/cate/index/97?rf=dictindex

    例如:https://shurufa.baidu.com/dict_list?cid=211

  2. 手动收集,根据目前的需求,我们可以手动收集如下词典

    1. 机构名称,例如:传智传智播客,黑马程序员
    2. 课程名词,例如:python,人工智能+pythonc++

1.2 词典处理

输入法的词典都是特殊格式,需要使用特殊的工具才能够把它转化为文本格式

工具名称:深蓝词库转换.exe

下载地址:https://github.com/studyzy/imewlconverter

1.3 对多个词典文件内容进行合并

下载使用不同平台的多个词典之后,把所有的txt文件合并到一起供之后使用

2. 准备停用词

2.1 什么是停用词?

对句子进行分词之后,句子中不重要的词

2.2 停用词的准备

常用停用词下载地址:https://github.com/goto456/stopwords

2.3 手动筛选和合并

对于停用词的具体内容,不同场景下可能需要保留和去除的词语不一样

比如:词语哪个,很多场景可以删除,但是在判断语义的时候则不行

3. 问答对的准备

3.1 现有问答对的样式

问答对有两部分,一部分是咨询老师整理的问答对,一部分是excel中的问答对,

最终我们需要把问答对分别整理到两个txt文档中,如下图(左边是问题,右边是答案):

Excel中的问答对如下图:

3.2 excel中问答对的处理

Excel中的问答对直接使用pandas就能够处理

python_qa_path = "./data/Python短问答-11月汇总.xlsx"
def load_duanwenda():import pandas as pdret = pd.read_excel(python_qa_path)column_list = ret.columnsassert '问题' in column_list and "答案" in column_list,"excel 中必须包含问题和答案"for q,a in zip(ret["问题"],ret["答案"]):q = re.sub("\s+"," ",q)q = q.strip()print(q,a)

4. 相似问答对的采集

4.1 采集相似问答对的目的

后续在判断问题相似度的时候,需要有语料用来进行模型的训练,输入两个句子,输出相似度,这个语料不好获取,所以决定从百度知道入手,采集百度知道上面的相似问题,如下图所示:

上面采集的数据会存在部分噪声,部分问题搜索到的结果语义上并不是太相似

4.2 手动构造数据

根据前面的问答对的内容,把问题大致分为了若干类型,对不同类型的问题设计模板,然后构造问题,问题模块如下:

templete = [
#概念
["{kc}","什么是{kc}","{kc}是什么","给我介绍一下{kc}","{kc}可以干什么","能简单说下什么是{kc}吗","我想了解{kc}"],#课程优势
["{kc}课程有什么特点","{jgmc}的{kc}课程有什么特点","{jgmc}的{kc}课程有什么优势","为什么我要来{jgmc}学习{kc}","{jgmc}的{kc}课程有什么优势","为什么要到{jgmc}学习{kc}","{jgmc}的{kc}跟其他机构有什么区别?","为什么选择{jgmc}来学习{kc}?"],#语言优势
#["{kc}","什么是{kc}","{kc}是什么","给我介绍一下{kc}","{kc}可以干什么","能简单说下什么是{kc}吗"],
#特点
["{kc}有什么特点","{kc}有什么优势","{kc}有什么亮点","{kc}有那些亮点","{kc}有那些优势","{kc}有那些特点","{kc}的亮点是什么","{kc}的优势是什么","{kc}的特点是什么"],
#发展前景
["{kc}的发展怎么样?","{kc}的前景怎么样?","{kc}的发展前景如何?","{kc}的未来怎样","{kc}的前景好么" ],
#就业
["{kc}好就业么","{kc}就业机会多么","{kc}的岗位多吗","{kc}工作好找吗","{kc}的市场需求怎么样","{kc}的就业环境怎么样"],
#就业方向
["{kc}学完以后能具体从事哪方面工作?","{kc}的就业岗位有哪些?","{kc}课程学完应聘哪方面工作?","{kc}可以从事哪方面工作?",],
#用途
["{kc}学完可以做什么","{kc}能干什么","学{kc}能干什么","能举例说下{kc}能做什么吗?","{kc}毕业了能干什么","{kc}主要应用在什么领域"],
#就业薪资
["{kc}学完工资多少","学完{kc}能拿多少钱","{kc}的就业薪资多少","{kc}就业的平均是工资多少"],
#学习难度
["{kc}简单么","{kc}容易么","{kc}课程容易么","{kc}上手快么","{kc}课程难么"],
#校区
["在那些城市开设了{kc}","哪里可以学习{kc}","学习{kc}可以去那些城市","{kc}在哪里开班了"],
#学费
["{kc}学费","{kc}多少钱","{kc}的学费多少","{kc}是怎么收费的?","学习{kc}要花多少钱","{kc}是怎么收费的","{kc}课程的价格","{kc}课程的价格是多少"],
#适合人群
["什么人可以学{kc}","哪些人可以学{kc}","学习{kc}有什么要求","学习{kc}需要那些条件","没有基础可以学{kc}吗","学历低可以学习{kc}吗?","成绩不好可以学习{kc}吗?","什么样的人适合学习{kc}?"],
#学习时间
["{kc}需要学多久","{kc}需要多久才能就业","{kc}需要学习多长时间","{kc}的学时是多少","{kc}的课时是多少","{kc}课时","{kc}课时长度","{kc}的课程周期?","0基础学{kc}多久能才就业"],
#学习内容
["{kc}学什么","{kc}学习那些内容","我们在{kc}中学习那些内容","在{kc}中大致都学习什么内容"],
#项目内容
["{kc}的项目有哪些","{kc}有哪些项目","{kc}上课都有哪些实战","{kc}做什么项目?","{kc}项目有多少个?","{kc}课程中有项目吗?"],
#学习某课程的好处
["为什么要学习{kc}?","学习{kc}有哪些好处?","学习{kc}的理由?","为什么我要来学习{kc}"],
#上课时间
["上课时间","你们那边每天的上课时间是怎样的呢?"],
#英语要求
["学习{kc}对英语有要求么","来{jgmc}学习对英语有要求吗?"]
]

其中大括号的内容kc表示课程,jgmc表示机构名称

接下来,需要完成两件事

  1. 最终我们会把前面准备好的课程字典和机构名称字典中的词语放入大括号中
  2. 把kc相同的内容构造成相似问题


文本分词

目标

  1. 完成停用词的准备
  2. 完成分词方法的封装

1. 准备词典和停用词

1.1 准备词典

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rG28mQpF-1612258037446)(…/images/2.1/词典.png)]

1.2 准备停用词

stopwords = set([i.strip() for i in open(config.stopwords_path).readlines()])

2. 准备按照单个字切分句子的方法

def _cut_by_word(sentence):# 对中文按照字进行处理,对英文不分为字母sentence = re.sub("\s+"," ",sentence)sentence = sentence.strip()result = []temp = ""for word in sentence:if word.lower() in letters:temp += word.lower()else:if temp != "": #不是字母result.append(temp)temp = ""if word.strip() in filters: #标点符号continueelse: #是单个字result.append(word)if temp != "": #最后的temp中包含字母result.append(temp)return result

3. 完成分词方法的封装

lib 下创建cut_sentence.py文件,完成分词方法的构建

import logging
import jieba
import jieba.posseg as psg
import config
import re
import string#关闭jieba log输出
jieba.setLogLevel(logging.INFO)
#加载词典
jieba.load_userdict(config.keywords_path)
#单字分割,英文部分
letters = string.ascii_lowercase
#单字分割 去除的标点
filters= [",","-","."," "]
#停用词
stopwords = set([i.strip() for i in open(config.stopwords_path).readlines()])def cut(sentence,by_word=False,use_stopwords=False,with_sg=False):assert by_word!=True or with_sg!=True,"根据word切分时候无法返回词性"if by_word:return _cut_by_word(sentence)else:ret = psg.lcut(sentence)if use_stopwords:ret = [(i.word,i.flag) for i in ret if i.word not in stopwords]if not with_sg:ret = [i.word for i in ret]return retdef _cut_by_word(sentence):# 对中文按照字进行处理,对英文不分为字母sentence = re.sub("\s+"," ",sentence)sentence = sentence.strip()result = []temp = ""for word in sentence:if word.lower() in letters:temp += word.lower()else:if temp != "": #不是字母result.append(temp)temp = ""if word.strip() in filters: #标点符号continueelse: #是单个字result.append(word)if temp != "": #最后的temp中包含字母result.append(temp)return result


聊天机器人-项目准备相关推荐

  1. Rasa 中文聊天机器人项目

    Rasa 中文聊天机器人项目 RASA 开发中文指南系列博文: Rasa中文聊天机器人开发指南(1):入门篇 Rasa中文聊天机器人开发指南(2):NLU篇 Rasa中文聊天机器人开发指南(3):Co ...

  2. 自动聊天机器人项目班

    打造传统NLP聊天机器人 第1课 聊天机器人的基础模型与综述 知识点1:行业与业界综述 实战项目:最简单的Rule-Base聊天机器人 第2课 NLP基础及扫盲 知识点1:NLP基本算法 实战项目:经 ...

  3. 基于pytorch的聊天机器人项目

    写一个闲聊式的聊天机器人,类似微软小冰 代码见 https://github.com/skyerhxx/Chatbot 环境 pytorch1.3 python3.7 cuda10.1 注意pytor ...

  4. 目前最新《自动聊天机器人项目班 [一门课搞定聊天机器人]》

    .打造传统NLP聊天机器人 第1课 聊天机器人的基础模型与综述 知识点1:行业与业界综述 实战项目:最简单的Rule-Base聊天机器人 第2课 NLP基础及扫盲 知识点1:NLP基本算法 实战项目: ...

  5. 软工实践团队项目-智能聊天机器人简介

    "智能聊天机器人"项目 目前已确定的团队人员:张扬.俊彦.韫月.地秀.泽波.李翔.文婧.俞明.加伟(排名不分先后) 队伍已满,没有再招人的打算(#^.^#) 我们的想法 你有用过智 ...

  6. 【NLP实战】如何基于Tensorflow搭建一个聊天机器人

    实战是学习一门技术最好的方式,也是深入了解一门技术唯一的方式.因此,NLP专栏计划推出一个实战专栏,让有兴趣的同学在看文章之余也可以自动动手试一试. 本篇介绍如何基于tensorflow快速搭建一个基 ...

  7. 机器人编程python代码_自己动手开发智能聊天机器人完全指南(附python完整源码)...

    一.前言 人工智能时代,开发一款自己的智能问答机器人,一方面提升自己的AI能力,另一方面作为转型AI的实战练习.在此把学习过程记录下来,算是自己的笔记. 二.正文 2.1 下载pyaiml 下载pya ...

  8. NLP-对话聊天机器人

    课程来在七月在线的自动聊天机器人项目班 课程是2017年出来的,现在看除了一些基本的NLP理论知识,对机器人的理解和工业开发上已经有了很大的改变. 如果对NLP和聊天机器人感兴趣的同学可以可以看看本篇 ...

  9. 基于深度学习的聊天机器人

    基于深度学习的聊天机器人-项目前期知识准备 文章目录 基于深度学习的聊天机器人-项目前期知识准备 一.TensorFlow框架简介 二.NLP基础 1. 常用的神经网络模型 2. 词法分析 3.贝叶斯 ...

最新文章

  1. 菜鸟程序员之Asp.net MVC Session过期异常的处理
  2. 如何聚焦自己的研究方向?一个实例研究
  3. python mysql数据库操作grid控件_Python学习笔记_02:使用Tkinter连接MySQL数据库实现登陆注册功能...
  4. python 阿狸的进阶之路(4)
  5. [XSY] 树与图(树形DP、生成函数、分治NTT、重链剖分)
  6. 为什么虚拟机上一运行就显示程序停止_五分钟学Java:如何学习Java面试必考的JVM虚拟机||CSDN博文精选...
  7. 华米科技将推出首款真无线耳机 支持降噪还能检测心率?
  8. Servlet快速入门和工作原理
  9. java通信方式_java 认知底层的五种通信方式
  10. Android RecyclerView实现长按弹出PopupMenu菜单
  11. GitHub预测2018年开源项目趋势
  12. 进度条制作-GIF动画
  13. 新手简明入门级matlab使用教程
  14. matlab求矩阵 均值、标准差、最大值以及reshape()函数
  15. android intent singletask,android – launchMode =“singleTask”不会创建新任务
  16. 高级电工技术实训考核装置
  17. MathType与Office公式编辑器的差异
  18. nfc加密卡pm3和pm5区别_为了省门禁卡的钱,买了NFC读卡器,到底值不值
  19. k8s 系列之 CoreDNS 解读
  20. 6.3 图解BERT模型:从零开始构建BERT

热门文章

  1. 分享五个使用 JSON 相关方法的小技巧
  2. 100 个网络基础知识普及(上)
  3. 搭建AE脚本开发环境
  4. 工信部原副部长杨学山再次呼吁:智能制造的基础不只是IT
  5. js字符串截取的方法
  6. Mono Develop脚本编辑器介绍
  7. AutoCAD快速入门(三十):打印
  8. 用mysql语句骂人_MySQL中特别实用的几种SQL语句送给大家
  9. 苹果起诉微软侵犯版权 | 历史上的今天
  10. FPGA的PL端使用1G/2.5G Ethernet PCS/PMA or SGMII核实现SFP千兆以太