【聊天机器人】机器学习构建chatbot
一、智能问答:
深度学习是生成时模型,输入一个句子,生成一个句子
机器学习是判别是模型,输入一个句子,判断它的label
1、工程角度考虑:
(1)结构设计清晰、模块化
(2)功能分析、解耦(互相不干扰)、部件可插拔与拓展

2、算法与机器学习角度考虑:
(1)算法简答,数据(特征)驱动
(2)场景化与垂直领域
客服问答问题是非常长尾的,我们只需要解决大部分问题即可。

二、预备知识
用Q匹配Q,比较两个句子相似度。(深度学习里可以用Q匹配A,因为有长时记忆。)
1、检索与匹配
(1)知识库(存储了问题与回答内容)
(2)检索:搜索相关问题
(3)匹配:对结果进行排序
2、编辑距离匹配
应用:拼写纠错、智能补全。对词的输入形式无要求
(1)编辑距离/Levenshtein距离:
是指两个字符串之间,由一个转成另一个所需要的最少编辑操作次数。如,用户问题Q,与已有的Q1…QN的编辑距离,选择编辑距离小的Qi对应的Answer,作为回复。
(2)允许的编辑操作包括:
- 将一个字符替换成另一个字符(S)
- 插入一个字符(T)
- 删除一个字符(D)

动态规划的处理方式:

(3)Python 使用Levenshtien库 计算编辑距离。
Python在string 类型中,默认的 utf-8 编码下,一个中文字符是用三个字节来表示的。用unicode。
# -*- coding:utf-8 -*-
import Levenshtein
texta = u'聊天机器人'
textb = u'聊天·机器人'
print Levenshtein.distance(texta,textb)
(4)编辑距离缺点:认为所有词是同等重要的。
你喜欢什么书、你喜欢什么电影。编辑距离为3,非常小。但却是2个意思的句子。解决方法TF-IDF。
3、关键字匹配:TF-IDF\text-rank:
利用关键词,进行距离的比对。认为比平等的对待每一个词进行比对更有意义。
4、词义匹配:
如,你喜欢什么资料;你喜欢什么文档。认为资料和文档是近似的意思。此时采用TF-IDF则认为相关度低。解决方法:词向量
NLTK wordnet库:近义词表。判断哪些词关系是接近的
自己构建近义词表:利用word2vec对分词后的中文进行学习。从中文中IF-IDF抽取核心词汇,将每个词转化为N维向量,利用N维的向量,比较词汇之间的相似度。
5、场景匹配:
给一句话,判断属于哪个分类。判断用户所问的问题是属于什么场景。按场景匹配可以加快匹配速度。
如,奥巴马的年龄?——利用机器学习等方法判断属于不同场景的概率——属于人物分类的概率最高——再进行词向量或TF-IDF等匹配
三、Chatterbot聊天机器人应用
每个部分都设计了不同的“适配器”(Adapter)
1、含义:
ChatterBot是一个基于机器学习的聊天机器人引擎,构建在python上,主要特点是可以自可以从已有的对话中进行学(记忆)习(匹配)。
2、匹配:机器人应答逻辑 => Logic Adapters(可以先用朴素贝叶斯判断属于哪个模块)
- Closest Match Adapter:字符串模糊匹配(编辑距离)。文字匹配。设定一个confidence
- Closest Meaning Adapter:借助nltk的WordNet,近义词评估。含义匹配。
- Time Logic Adapter:处理涉及时间的提问。
- Mathematical Evaluation Adapter:涉及数学运算。
3、存储:存储器后端 => Storage Adapters
- Read Only Mode:只读模式,当有输入数据到chatterbot的时候,数据库并不会发生改变
- Json Database Adapter:用以存储对话数据的接口,对话数据以Json格式进行存储。(生产环境下一般不用Json,因为速度太慢了)
- Mongo Database Adapter:以MongoDB database方式来存储对话数据
4、输入:输入形式 => Input Adapters
- Variable input type adapter:允许chatter bot接收不同类型的输入的,如strings,dictionaries和Statements(命令行)
- Terminal adapter:使得ChatterBot可以通过终端进行对话
- HipChat Adapter:使得ChatterBot 可以从HipChat聊天室获取输入语句,通过HipChat 和 ChatterBot 进行对话
- Speech recognition:语音识别输入,详见chatterbot-voice
5、输出:输出形式 => Output Adapters
- Output format adapter:支持text,json和object格式的输出
- Terminal adapter
- HipChat Adapter
- Mailgun adapter:允许chat bot基于Mailgun API进行邮件的发送
- Speech synthesis:TTS(Text to speech)部分,详见chatterbot-voice
如果适配器得出的值一样,则按照顺序选择第一个;适配器得出的值不同,哪个置信度高就选哪个。也可以用朴素贝叶斯进行适配器的而选择。
短对话的chatterbot,用户只基于上一句话,进行问答。与上下文无关,
