一、检索式与生成式聊天机器人对比
1、基于检索的chatterbot
2、基于生成的chatterbot
3、聊天机器人的一些思考:
(1)基于检索的chatterbot
- 根据input和context,结合知识库的算法得到合适回复。
- 从一个固定的数据集中找到合适的内容作为回复
- 检索和匹配的方式有很多种(可以基于机器学习判断属于那种类型的匹配,利用关键字+word2vec进行文本相似度匹配)
- 数据和匹配方法对质量有很大影响
(2)基于生成模型的chatterbot
- 典型的是用seq2seq方法
- 生成的结果需要考虑通畅度和准确度
- 深度学习是学习数据的特征。对于认为很重要的特征,可以最后在全连接层时进行矩阵拼接加入,而不参与特征之间的学习,以免造成影响。
以前者为主,后者为辅;检索方法过程中当模型需要算法是,可以考虑加入深度学习。
4、chatterbot的问题
(1)应答模式的匹配方法太粗暴
- 编辑距离无法捕获深层语义信息
- 核心词+word2vec无法捕获整句话语义(对于我 爱 你和你 爱 我,词向量表示是一样的)
- LSTM等RNN模型能捕获序列信息
- 用深度学习来提高匹配阶段准确率
(2)特定领域+检索+合适的知识库能做到还不错。但开放域比较难
5、转化为机器学习或深度学习能够解决的问题,应该怎么做
(1)匹配本身是一个模糊的场景
转成排序问题
(2)排序问题怎么处理?
转成能输出概率的01分类
(3)数据构建?
需要正样本(正确的答案)和负样本(不对的答案)
(4)Loss function
分类问题采用对数损失(二元的交叉熵损失)
)
二、使用深度学习完成问答:
1、论文
IMPLEMENTING A RETRIEVAL-BASED MODEL IN TENSORFLOW,WILDML BLOG,2016
2、论文框架图
三、深度学习问答数据
1、中文:
Microsoftz做法是,从其他不同的场景里,以相同的概率抽取答案,成为负样本。当前场景的问答作为正样本。
2、Ubuntu对话语料库:
(1)训练集:
- Ubuntu对话数据集,来自Ubuntu的IRC网络上的对话日志
- 训练集1000000条实例,一半是正例(label为1),一半是负例(label为0,负例为随机生成)
- 样本包括上下文信息(context,即Query)和一段可能的回复内容,即Response;Label为1表示Response和Query的匹配,Label为0表示不匹配
- query的平均长度为86个word,而response的平均长度为17个word。
(2)验证集/测试集:
- 每个样本有一个正样本和9个负样本(也称为干扰样本)
- 建模的目标是给正例的得分尽可能高(排序越靠前),而负例的得分尽可能低(有点类似分类问题)
- 语料做过分词、stemmed、lemmatized等文本预处理
- 用NER(命名实体识别)将文本中的实体,如姓名、地点、组织、URL等替换成特殊字符。
(3)评估准则:
- recall@k(在前k个位置,能够找回标准答案的概率有多高)
- 经模型对候选的response排序后,前k个候选中存在正例数据(正确的那个)的占比
- k值越高,指标值越高,对模型性能的要求越松。