Sequential Match Network: A New Architecture for Multi-turn Response Selection in Retrieval-based Ch

来源:互联网 发布:5位电话 知乎 编辑:程序博客网 时间:2024/04/30 02:06

论文链接: https://arxiv.org/pdf/1612.01627.pdf

Paper总结笔记:
这里写图片描述
论文提出了一个基于检索的多轮闲聊架构
闲聊模型一般分为生成模型和检索模型,目前关于检索模型的闲聊还停留在单轮对话中,本文提出了基于检索的多轮对话闲聊。

多轮对话不仅要考虑当前的问题,也要考虑前几轮的对话情景。多轮对话的难点主要有两点:1.如何明确上下文的关键信息(关键词,关键短语或关键句)。 2.在上下文中如何模拟多轮对话间的关系。
现有检索模型的缺陷:在上下文中容易丢失重要信息,因为它们首先将整个上下文表示为向量,然后将该上下文向量与响应sentence向量进行匹配。

为了避免信息丢失,SMN在开始时将候选回复sentence与上下文中的每条语句进行匹配,并将匹配的每对中重要信息编码入匹配向量(注:这是CNN阶段,解决上上述难点1);然后按照话语的时间顺序,对匹配向量进行堆积,以对其关系进行建模(注:即构建GRU2,解决上述难点2)。 最后的匹配阶段就是计算这些堆积的匹配向量。

具体流程说明:
1、首先通过tf-idf抽取出前n-1轮的关键词,通过关键词检索出候选responses
2、将每条response和 utterance的每条 sentence做匹配:通过模型GRU1分别构造word2word和sentence2sentence的向量矩阵。这两个矩阵会在word级别和segment级别获取重要的匹配信息。
3、获取到的两个矩阵通过连续的convolution和pooling操作得到一个matching vector。通过这种方式,可以将上下文进行多个粒度级别的supervision识别并获取重要信息,再通过最小损失matching计算。
4、获取到的matching vector再通过GRU2计算得到context和response的分数。

注:sentence_level计算(copy):
MH233 2017年5月15日
这里计算句子之间的相似度,先计算了两句话每个word之间的相似度(类似于cosine similarity的概念),再计算句子之间的相似度,这里采取的策略应该是叫Bilinear吧(?)还有一种叫做Tensor的相似度计算方法(https://arxiv.org/abs/1511.08277 ),一直解释不清楚两个指标的物理含义。。 另,在得到相似度矩阵之后,使用了CNN结构进行特征提取,这样和直接进行k-max pooling相比有什么不同和优势?
wumark 2017年5月15日
是的,这个是bilinear的相似度计算。bilinear的物理含义你可以理解为,x和y不在一个空间,我们首先需要两个空间的变换矩阵W,让x变到y的空间,之后再在同一个空间做dot。tensor我认为是bilinear的一个扩展,bilinear只会给x,y计算出一个实数值,而tensor可以给x,y计算出一个相似度向量。tensor需要更多的参数,更大的计算量,往往tensor会比bilinear取得更好一些的效果。在这个任务下,CNN比单做k-max pooling是要好的,我做过这个实验。可能是因为CNN可以考虑到相邻词的信息吧。k-max pooling在输入是GRU产出hidden state乘出来的相似度矩阵时候经常会有一些不太好的结果,例如 美丽 的,如果你求k-max很有可能美丽和的都取出来了,因为“的”完全承袭了美丽的hidden state。不过我没有尝试过在convolution之后用k-max pooling,我觉得可能会让效果更好。
mev 2017年5月16日
sequence的相似度计算使用bilinear会比cosine相似度好吗,有没有相关的工作介绍呢,不知道词的相似度使用bilinear计算的话效果会不会好一点
wumark 2017年5月16日
https://arxiv.org/pdf/1611.01747.pdf A COMPARE-AGGREGATE MODEL FOR MATCHING TEXT SEQUENCES 大家都是在不同数据集上进行测试,感觉好像没有一个特别统一的标准。这篇文章的工作就比较扎实,比较了不同相似度算法在很多数据集上的好坏。
mev 2017年5月16日
非常感谢
MH233 2017年5月15日
谢谢,解释的很深刻!完美的解决了我的疑惑。

阅读全文
0 0