基于条件知识库(CKB)的对话问答系统--论文阅读笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuchonge/article/details/72784187

本文是‘’Learning to Extract Conditional Knowledge for Question Answering using Dialogue‘’论文的阅读笔记。最近开始看QA方面的一些论文,刚入门,很多东西都不太懂,感觉很吃力,慢慢坚持吧==

传统的基于知识库(KB)的问答系统,有三元组 (Subject, predicate, Object)组成,缺点在于当前面两者相同但是条件不同是,其会给出相同的答案。不能灵活地根据问题给出正确的答案。比如下图,虽然两个问题都是要升级win10,但win xp 和win 8是作为两个不同的条件,严重的影响着最终的答案:
这里写图片描述

所以本文提出了一种基于条件的知识库的问答系统,表示为(Subject,Predict, Object|Condition),就是在元十三元祖的基础上加了条件的限定。这样一来,我们就可以更灵活的做出回答。但是本文的模型仍有很大的限制,当用户的提问不满足回答条件时,对话系统会提示用户补全问题方可进行回答。如下图所示:
这里写图片描述

接下来看一下算法流程图,主要包括下面6步:

  1. pattern mining
  2. pattern aggregation
  3. condition and pattern representation learning
  4. conditions and patterns clustering
  5. CKB construction
  6. dialogue model construction
    如下图所示:
    这里写图片描述
    接下来我们分步介绍其各个模块的功能和原理:

1 pattern mining

这一步主要是挖掘出训练集中的pattern,并提取条件。这部分的原理没搞太明白,大概意思是使用一种自举模式学习的方法(bootstrapped pattern-learning),用的是SPIED-Learn系统框架==。使用种子字典从未标记的文本中学习条件,种子字典由先前的主语和当前主语共同构成。然后pattern从标记的条件中学习。举例说明,假设当前主语为windows_10,windows_xp为条件,然后我们就可以学习到一个pattern,接下来再使用这个pattern去学习别的条件词:
这里写图片描述
上面所提到的种子库是通过下面这种方法构建的,首先去除问题中的无用词,比如“how to,how do i”等。揭晓来使用词性标注的方法,对问题进行切分,然后剩下来的部分则被添加到种子库中。最后学习到pattern之后,就使用‘SLOT0’将条件词进行替换,这样就可以继续学习别的条件词。

2 pattern aggregation

这部分比较简单,就是进行pattern得聚合。将相同pattern和不同condition的聚合为一类。比如:
这里写图片描述
最终的聚类结果如下图所示:
这里写图片描述

3 condition and pattern representation learning

这一部分是比较核心的算法,通过word2vec的方法,将condition和pattern表示为词向量的形式。这里分为下面三个部分:
1,condition embedding model:
在原始skip-gram模型的基础上加上condition-pair信息,用如下计算公式表示,Ck和Cm是模型学习的condition的词向量,
这里写图片描述
这里写图片描述
这里写图片描述
2,pattern embedding model:
这一部分是给pattern建模,将其映射到一个向量空间,Vk和Vm是pattern的词向量表示,这里我们单纯的对pattern建模,不结合skip-gram模型。如下所示:
这里写图片描述
3,alignment model
前面学习到了condition和pattern的embedding向量,但是由于是分开学习的,所以会被映射到两个空间当中,并没有什么联系。这里引入alignment模型,用于将二者联系在一起。思路和上面的方法一样,也是求condition和pattern的共现次数。 如下图所示:
这里写图片描述
这样我们的模型最终可以表示为上面三个模型的合集,将目标函数定义为:

J = Jc + Jp + Ja

最终学习到的向量空间使用t-SNE工具可视化之后效果如下,可见最终意思相近的condition和pattern在向量空间中的距离也十分接近。
这里写图片描述

4 condition and pattern clustering

这里做聚类的目的是将意图相近的pattern和有相同答案的condition聚合在一起,文中提出了一种基于embedding词向量的协同聚类算法。使用X-sim的分层聚类算法作为算法的主要框架。伪代码如下所示:
这里写图片描述

5 Conditional Knowledge Base Construction

这部分就是使用前面所有的工作进行条件知识库的构建(CKB)。上面的一步完成之后我们就获得了pattern和condition的聚类,然后就可以遍历所有的类别构成CKB,如下图所示:
这里写图片描述
这里需要注意的是,作者提出了“MISSING PERCENTAGE OF SLOT”的概念,就是pattern中的SLOT会丢失,或者不重要。作者提出了三种,第一种是只在一个cluster中包含的直接去除,第二种是十分重要以至于大部分人都不会遗忘的,第三种是对答案不会造成很大影响且基本上没有用户会提到的。

6 Dialogue Model Construction

上面我们已经构建好了条件知识库CKB,接下来就是用到实际的对话系统中。包含下面两个步骤:

  1. 寻找问题中的pattern,如果发现问题中丢失了pattern中关键的condition,则跳到第二步
  2. 提示用户输入condition,并提供一个候选集

至此,就将论文的主要算法部分介绍完毕。其实也就是一个很浅显的理解和笔记而已,因为第一次接触QA,所以很多地方理解不深而且也不知道真正的问题是什么==可能新手就这样吧、

阅读更多

没有更多推荐了,返回首页