基于论坛多轮数据的应答结果预测
发布时间:2019-06-07 浏览次数:57
作者:徐安、彭雨、徐露露
摘 要
目前,机器人的自动回复已经应用到各行各业当中,而本文主要研究的是如何使得机器能够在我们给定一个多轮对话的场景下,能够正确和快速的从标准答案库中选择出最符合我们提问的回答。本文的讨论基于某ubuntu论坛所提供的90多万条对话交流数据。我们期望通过训练,机器学习模型能够在我们给出每一组对话的最后一句话以外的对话数据时,使得对话的最后一句话和前文的匹配程度最大。本文主要探讨了TF-IDF模型和Sequential Matching Network(SMN)模型,一种专门用于解决多轮对话预测问题的深度学习模型,在自动问答这一场景下的表达能力。我们在50万条的对话数据上进行训练,并在1万多条的数据上进行预测。我们使用了recall@K这一指标来反映模型的好坏。从最终的实验结果中可以看出,深度学习模型比TF-IDF模型具有更好的预测能力,其recall@5 达到了90%,证明了SMN模型在这一场景下的能力。
关键词 多轮对话;TF-IDF;门控循环神经网络;卷积神经网络;序列多轮对话模型
Prediction of Response based on Ubuntu Corpus
An Xu, Yu yan Peng, Lu lu Xu
Abstract
Nowadays , Robot’s automaticresponse has been applied in all walks of life. What we research in this paperis about how to build a machine to be able to search the most applicableresponse, from a standard response database correctly and quickly, in amulti-turn dialogue. The dialogue data we used in this paper are received froma Ubuntu Forum, which contains about 900,000 dialogues. After training, themodel can predict the most probability answer which is its original response fromall provided 10 options. We mainly compare the capability of TF-IDF andSequential Matching Network (SMN), SMN is a deep learning model used to predictresponse in multi-turn dialogue. The training is implemented on about 500,000dialogues and the testing dataset is about 10,000 dialogues.We choose recall@Kto evaluate the representation of SMN. In conclusion, SMN has better predictive ability than TF-IDF,its recall@5 reached 90%, proving the ability of the SMN model in thisscenario.
Keywords multi-turn dialog; TF-IDF; GRU; Convolution;Sequential Matching Network (SMN)
阿尔法狗完胜围棋国手柯洁,富士康进行大规模的机器换人,特斯拉无人驾驶汽车问世等,从无人驾驶汽车到医疗看护等公共服务,机器人的概念已经并不陌生。近两年随着互联网、大数据的发展,人工智能已经潮流,机器人已经在电子商务、休闲
娱乐和个人助理等领域得到广泛应用,帮助人们解决一些简单的问题,机器人中的智能问答机器人更是成为其中的明星产品。
智能问答机器人又称会话代理或智能代理,可以模仿人类的对话,人工智能支持其通过提供人机交互服务。它还可以嵌入众多社交平台,如Facebook Messenger、Slack、Text Messages等,具备强大的社会性。不同的技术应用到智能问答机器可以为客户带来不同的客户体验,比如生动有趣的用户界面增强了人机交互的趣味性。智能服务机器人通过应用到多个行业终端,包括金融、零售、展会、银行等,智能机器人已经不简单是用来博眼球而已,它是可以被切实地应用到广泛的生活场景中。在应用最成熟的银行,智能机器人通过语音识别来回答顾客的问题,不仅可以担任迎宾、信息查询等功能,还可以对客户展开推荐理财产品的营销工作,它在提供与人的高频交互服务中,已经为银行业带来40%的营销成功率。理论上机器人的自动接待、自主应答的功能可以让机器人在没有人工的干涉下完成与顾客的交互,针对不同情况下的客户需求,灵活地为客户提供高效率、高价值的服务。
尽管智能机器人因为功能实用、操作简单,迎合了劳动力市场需求,它的应用领域也已经遍布多个工作和生活场景,但是因为技术的限制,目前智能机器人的自主应答功能只能解决客户的简单需求,当在复杂的应用场景里,需要面对大量不同的复杂客户需求时,这时需要与客户进行多伦对话才能帮助客户解决实际问题,智能机器人还无法提供这样的精确的服务。当顾客向机器人发送了多伦复杂问题,机器人给的回答一般都是答非所问的,不仅不能帮助客户解决问题,而且会浪费客户的时间和消耗客户的耐心,增加了丢失客户的风险。在服务机器人的市场规模越来越大的情况下,提高技术水平,增强智能机器人的自主应答的准确性,完善客户体验,提供高质量的服务,为实现企业的用户体验和成本控制的双赢是十分必要的。
如背景所言,我们希望希望研究的任务为在给定和自动回复机器人的一段交互式的对话信息后,我们期望机器人仍旧能给出正确的回复,即在给出一段交互式的上下文对话后,我们期望机器人能够在候选的答案中,预测出每个答案与我们问题所匹配的概率,并返回预测匹配程度最高的答案。
对于这样一个任务的研究,我们需要准备如下形式的数据:
其中的每一条数据,将由三部分组成:
•第一部分为一段对话
•第二部分为对应的一个可能的回复ri
•第三部分为这个回复是否是该对话的真实回答,是一个0-1变量。
•其中,y = 1 的数据为前面对话的真实应答, y = 0 的对话为从数据中随机挑选的应答
基于这样的数据集,我们的任务可以清晰的定义为对于每一对{s,r} , 我们的模型需要学习的是g(s,r) , 使得其能够计算response 和 上下文s 的匹配程度
特征权重用于衡量某个特征项在文档表示中的重要程度或者区分能力的强弱。权重计算的一般方法是利用文本的统计信息,主要是词频,给特征项富裕一定的权重。TF-IDF权重法[1]是最为常用的权值计算方法,它同时考虑了词条的频率信息和词条的文档信息。利用词条的逆向文档频率(IDF)对词
频进行加权处理。它的基本思想是,特征项在文档中出现的频率越高,则它对文档的重要程度越大。同时,特征项在多个不同文档中出现,即它的文档频率大,则该特征项含有的类别区分信息较少,它的重要程度就越低。它的计算公式如下:
而使用TF-IDF方法完成该问题的流程如下图所示:
图1 TF-IDF 解决多轮对话问题流程图
首先我们会通过TF-IDF方式为所有的问题和答复抽取特征向量;这里值得注意的是,TF-IDF方法没有办法考虑到提问过程中的多轮对话这一特性,所以在对问题抽取tf-idf特征时,需要将问题视为一个单独的长句;
然后,我们计算问答和所有备选的最后一句回答之间的余弦相似度,并选择余弦相似度所反映的最相似的那个回复作为我们实际对话场景中的答案。
传统的利用循环神经网络解决这类问题的思路中,往往只是单纯的将前面的多轮度化视为一个长句子,而并没有考虑到多轮对话的信息交互,也没有分别考虑到多轮对话中每一句和答案句子的联系。序列匹配神经网络(Sequential Matching Network)[2]是近期提出的一种专门用于解决多轮对话相应问题的一种神经网络。该网络不仅从单词的维度和句子的角度两个方面分别考虑了前面提问部分和应答部分之间的联系,还同时分别的考虑到了多轮对话中,每句话和答案的联系,并且考虑了多伦对话之间的联系,能更好的处理该类问题。其网络结构图如下:
图2 SMN 模型示意图
从上述网络结构图中我们可以看出,模型主要分为三个阶段,下面分别对这三个阶段进行描述。
第一阶段,对于任意一组对话,我们可以对每一个
和
进行单词与单词(word-word)以及句子与句子(sentence-sentence)之间的建模,具体的做法是,首先用门循环控制单元(GRU)[3]对每一条句子横向扫描,得到同一时刻t中每条句子内每个单词的隐藏状态,作为这条语句的隐藏状态,然后计算每一对
和
的隐藏状态的相似值,这一相似矩阵代表的就是句子与句子之间的相似性;其过程如下图所示:
图3 计算每一对
和
的隐藏状态的相似值(sentence-sentence)
同时我们对每一对
和
用词嵌入向量(Word Embedding)的方法进行编码,再用同之前相似的方法,计算它们的表示向量之间的相似矩阵,这一相似矩阵代表的则是单词与单词之间的相似性。其过程如下:
图4 计算每一对
和
的隐藏状态的相似值(word-word)
随后,我们将上述得到的两个相似矩阵进行堆叠,堆叠之后的结果送到卷积层和最大池化层中进行信息的凝集和降维,第一阶段的输出结果是n个一维向量,它们表示了每一对
和
之间的相似状态。其过程示意图如下:
图4 通过卷积抽取特征
第二阶段,我们将第一阶段得到的n个表示相似状态的一维向量再用门循环控制单元(GRU)对它们进行扫描,但不同于第一阶段,此时我们是对其纵向扫描,这样是为了建立对话依次递进时间维度上的模型。
图5 纵向GRU扫描获得最终特征向量
第三阶段,将第二阶段中经过第二次GRU得 到的隐藏向量对其进行建模,输出response被选中的概率,或者说是它与上下文的匹配程度。response被选中的概率的计算方式如下,
原论文中作者选择了3种方式对隐藏向量进行建模,如下所示:
其中第(1)种方法是使用最后一个时刻的hidden state 作为最终表示;第(2)、(3)种方法都是使用 hidden states 的加权结果最为最终表示。区别在于第(2)种使用外部的、静态的权值;第(3)种使用网络内部的、动态调节的权值。
对于三种计算方式,作者分别比较了各自的效果。
本文所使用的数据来自ubuntu的公共数据集[4],数据集由93万多个对话记录组成,内容主要来自于论坛的求助、讨论贴。由于本文主要是预测多伦对话的数据应答结果,所以入选数据集的内容的谈话轮数均大于等于3轮,即针对每个话题,讨论者之间至少展开3轮的问答。
为研究每个话题的谈论轮数的分布情况,对每个话题的谈论情况进行描述性统计分析。图一从X轴“Number of Utterances”的分布的范围得知,每个话题的对话轮数在3至22之间,且进行5轮左右谈论的话题最多,18轮左右探讨的话题最少,所有话题平均进行10轮左右的讨论,且对话轮数的分布规律近似指数分布。
图6话题谈论次数分布图
针对每轮的对话,为了大致了解对话的问答情况,对谈论的问题和答案的内容进行了句子长度的统计分析。图二、图三对每轮的谈话分别从问题和答案的长度的角度进行了简单的描绘,谈话问题的长度在1至175个词之间,每个问题平均有11个词,一个词长度的问题最多,谈话答案的长度在1至171个词之间,每个答案平均有21个词,大多数答案都有20个词左右,对话的简单问题较多,复杂的问题和答案较少。
图7 问题长度分布图
图8 答案长度分布图
为了大致了解谈话的内容,我们采用了绘制词云的方式来查看对话的大致情形,所绘制的词云大体如下。图中大致反应了如下几个特征:
首先,词汇“can’t”、“don’tknow”等词汇出现的次数,较多,可以看出大部分的对话确实是一种问答的形式;
其次,我们可以看到,类似于“apt-get”、“install”、“try sudo”一类的词汇也频繁出现,可以看到许多的问题是通过安装相关依赖来解决的。
最后,我们可以看到许多像“path”等linux系统关键字出现,所以在对话记录中包含了许多linux相关的知识。若后期能够针对性的提取对话的主题,对于linux知识的学习将有很大的帮助。
图9词云统计结果图
由于我们所拿到的数据并不能直接用于建模,所以我们首先会对数据进行一定的预处理。大致的处理流程如下:
我们拿到的原始数据大致形式如下。可以看到,原始数据的对话并未切分,且存在大量的网页链接,数字等等,所以,需要对其进行处理。
图10 原始数据展示
首先,由于我们所研究的是多轮对话数据,所以首先需要使用NLTK工具包将我们所获取的每一条记录切分成若干句对话
其次,在论坛的提问中,我们会遇到大量的数字,网址等特殊信息,为了不是一般性,我们将所有的数字用__number__ 替代, 所有的网页我们都使用了__url__ 进行替代,另外,我们将所有的单词都转换成了小写的形式。
随后,我们去除了各种特殊的标点符号,并通过NLTLK提供的分词方法进行分词,最后获得了分词的结果。再去除一定的停用词后,我们生成词典,并将每个词转化为其在词典中的索引,以供建模。
最终,我们所生成的英文词典的词一共有26万多的词汇。经过处理后的数据展示如下:
图11 清洗数据展示
在完成了数据的清洗后,我们进行了数据集合的划分。我们首先选去了50万轮对话用于模型的训练。在训练集合的构造过程中,我们对每轮对话,选择最后一句作为前面的句子的答案。同时,为了构建负例样本,对于每一个对话,我们随机的从数据中挑选其他的对话的最后一句话作为我们对话的错误回答。由此,我们构建了我们的训练集。其中包含了100万条对话数据。
测试集合的构建我们采用了类似的方法。我们一共选取了1万条对话数据构建测试集合中的正样本,并采用和训练集合相似的思路生成负例样本。但是为了更好的反应模型的能力,测试集合中的正负样本比例我们调整到1:9。
由于深度学习模型对数据的形式有一定的要求,所以在完成了把词转化为索引的操作后,我们还需要将所有的训练数据进行对齐,使得我们的深度学习模型一次可以接受多条训练数据进行训练。对齐的示意图如下:
图12 数据对齐过程展示
在我们的这一场景中,主要需要进行的对齐操作有:
1.对话长度的补齐。深度学习模型要求我们送入模型的对话的每一句的长度为一个固定值,而我们的真实数据如前文所述,句子的长度是不固定的。所以,我们首先需要统一每一句话的长度,这里,我们规定每一句话的长度为50个单词,对于长度不及50个单词的句子,我们会用特殊的字符<pad>进行填补,对于长度超过50的句子,我们会采取截断的方式处理。
2.对话论述的对齐。深度学习模型同样需要我们的每条数据均为某一固定的对话轮数。根据我们之前对数据进行的统计,我们在这里确认对话的轮数为10轮。对于长于10轮对话,我们会选择最后的10轮对话。而对于对话轮数不足10轮的对话,我们也会进行相应的填充。
在数据预处理、数据对齐之后,我们通过PyTorch构建SMN模型,并在ubuntu论坛上进行训练和预测。模型在P100显卡上训练了100轮,
训练的具体参数如下:
• max_utte_len = 50
• max_cont_len = 10
• min_word_count = 2
• epochs = 100
• train_batch_size = 2048
• 使用glove预训练词向量进行初始化
另外,为了获得更好的训练效果,我们使用GloVe来初始化训练过程中的词向量,最终训练过程中的loss和 准确率变化如下:
表1 训练中间结果展示
| Nth Epoch | Loss | Accuracy |
| 10 | 0.0673 | 0.1020% |
| 50 | 0.0451 | 0.6280% |
| 90 | 0.0319 | 0.6490% |
在我们的训练过程中,我们发现使用了预先训练的词向量能有效的加速训练。在经过了60个epoch的训练后,模型在测试集合上的准确性基本已经确定。
在提取了TF-IDF向量及训练了SMN模型后,我们运用这两种方法在测试集上进行了测试。
由于在这一情景中,我们需要判断的是模型对候选答案的排序的能力,所以这里我们采用 recall@K这一衡量指标来反应模型的好坏。举例而言,recall@5 表示的是当返回10个回复时,真实回复排在前5的占比有多少。
我们在测试集合上的测试结果如下:
图13数据对齐过程展示
从图中我们可以看出,深度学习的效果要远远好于TF-IDF方法,在各个K下SMN模型的recall均比TF-IDF高出约20%。而 SMN的recall@5已经可以达到90%多,即若对10个候选答案返回排名前5的答案,命中正确答案的次数占到了90%。另外可以看到TF-IDF分析的准确率并不能达到很高,可能是由于TF-IDF更倾向于返回答案中出现了和提问中相思词汇的情形,但是并不能很好的理解句子的含义,所以在回答的过程中存在一定的困难。
本文采用了TF-IDF与Sequential Matching Model 两种方法对多轮对话数据进行了建模,并在测试集合上分析了两种方法的效果。最终可以看到深度学习在处理这类问题是具有较为优越的表现。
总的来说,我们可以看到,TF-IDF 更倾向于回复那些出现了问题中关键词的答案,而深度学习模型相比之下更加能够“理解”问题,并作出正确的回复。
在整个训练流程中,我们遇到了如下的问题:
1 数据量过大。我们所使用的ubuntu数据集一共是有90多万条对话数据,这导致我们在词典构建、数据清洗以及数据对齐、模型训练的各个阶段都很难把数据完整的读入内存中, 这迫使我们对预处理程序进行了大量的优化,并将许多的处理转化为流式处理的形式。
2 tf-idf 值计算困难。为了更好地理解tf-idf 特征向量的计算流程,我们自主实现了tf-idf的计算。而在整个过程中,涉及到了大量的稀疏矩阵的处理技巧。
3 深度学习模型对超参数敏感。在我们实际的训练过程中,发现深度学习模型对超参数的设定非常敏感,比如像预先设定的对话长度和对话轮数等等。一组好的参数能很快的收敛并取得很高的准确率。反之训练的结果很不理想。
4深度学习模型对优化算法敏感。我们发现,相比于图像数据的训练,文本数据的训练对优化方法非常敏感,使用SGD优化的优化速度慢,且不易收敛,而使用Adam的优化方法能更快速,更好的达到更优的解。
5深度学习训练中,使用预先训练好的词向量能够加速收敛。在实验过程中,我们最终采用了GloVe方法初始化我们的词向量,这一改进使得模型的收敛速度大幅的加快,且准确率有一定的提升。
在本次试验中,我们采用TF-IDF、SMN两种不同的模型在ubuntu论坛数据上进行建模,并在预留的测试数据集上测试两种模型的检索并放回正确答案的能力,并最终发现深度学习模型的效果是优于TF-IDF模型的。
另外,我们在整个流程中,通过采用流式处理、稀疏矩阵等多种方法,对我们的代码进行了优化,使得我们的代码可以应对海量的数据。
在接下来的工作中,我们可以进一步尝试以下几个思路:
1 尝试使用seq2seq[5]的方式,直接基于用户的交互式对话数据自动生成相应的答案。在自动回复对的更多应用场景中,利用机器更加智能的生成回复,可能更是一个我们需要研究的内容。
2 尝试通过对深度学习进行调参和优化提升精度。在我们的实验过程中,我们发现深度学习的超参数非常关键,而由于时间关系我们尝试的超参数的组合过多,在未来,我们可以进一步的对超参数进行调整。
3 尝试从更多的维度进行数据的分析。在这个数据集合中仍然蕴含着许多的信息,比如对于每个问题的正确的回复等。进一步的挖掘这些信息对于我们掌握linux的相关知识是非常关键的。所以对于该数据集合仍可以尝试通过使用LDA,主题提取等分析方法做进一步的分析。
参考 文 献
[1] Yu Wu†, Wei Wu‡, Chen Xing♦, ZhoujunLi†∗, Ming Zhou. Sequential Matching Network: A New Architecture for Multi-turnResponse Selection in Retrieval-Based Chatbots. arXiv preprint arXiv:1612.01627
[2] Chung, J., Gulcehre, C., Cho, K., &Bengio, Y. (2014). Empirical evaluation of gated recurrent neural networks onsequence modeling. arXiv preprint arXiv:1412.3555
[3] Ryan Lowe*∗, Nissan Pow*, Iulian V.Serban† and Joelle Pineau*. The Ubuntu Dialogue Corpus: A Large Dataset forResearch in Unstructured Multi-Turn Dialogue Systems.arXiv preprint arXiv:1506.08909
[4]llya Sutskever, Oriol Vinyals, Quoc V. Le,Sequence to Sequence Learning with NeuralNetworks。arXiv preprint arXiv:1409.3215
[5] 宗成庆《统计自然语言处理》 第2版. 清华大学出版社,2013
,
附录.
[1]1.
[2]1. Yu Wu†, Wei Wu‡, Chen Xing♦, Zhoujun Li†∗, Ming Zhou.
Sequential Matching Network: A New Architecture for Multi-turn
Response Selection in Retrieval-Based Chatbots. arXiv preprintarXiv: 1612.01627
[3]2. Chung, J., Gulcehre, C., Cho, K., & Bengio, Y. (2014).Empirical evaluation of gated recurrent neural networks on sequence modeling.arXiv preprint arXiv:1412.3555
[4]1. Ryan Lowe*∗, Nissan Pow*,Iulian V. Serban† and Joelle Pineau*. The Ubuntu Dialogue Corpus: A LargeDataset for Research in Unstructured Multi-Turn Dialogue Systems. arXivpreprint arXiv: 1506.08909
[5]1. llya Sutskever, Oriol Vinyals, Quoc V. Le,Sequence to Sequence。Learning with Neural Networks。arXiv preprint arXiv: 1409.3215
