一种基于模糊依存关系匹配的问答模型构建方法

来自专栏猿论4 人赞了文章

0 前言

基于传统机器学习方法构建问答模型的主要工作是构建适合当前任务的特征工程,在《中文自然语言处理建模过程中的特征工程》一文中,我们介绍了很多可提取的特征以及提取方法,主要的特征集中在句法分析上。我们都知道,句法分析是NLP中的关键底层技术之一,也是构建特征工程时经常用到的,其基本目标是确定句子的句法结构或者句子中辞汇之间的依存关系。

句法分析分为句法结构分析(syntactic structure parsing)和依存关系分析(dependency parsing)。句法结构分析以其目的不同分为成分结构分析(constituent structure parsing)或者短语结构分析(phrase structure parsing),成分结构分析以获取整个句子的句法结构为目的,而短语结构分析以获取完全短语结构为目的;依存关系分析则以获取局部成分之间的依存关系为目的。

《Question Answering Passage Retrieval Using Dependency Relations》中通过对问题(question)和包含候选答案的句子(Sentence)间的依存关系的分析,提出了一种基于模糊依存关系匹配的问答模型的构建方法。实验模型在不同数据集下,相比基于词匹配和基于严格依存关系的模型效果要更好。分析这篇论文发现,在某些任务中,模糊依存关系可以作为特征工程的一部分,所以记录下来,以便未来建模需要。

1 背景

传统问答系统定位答案的过程

  • 定位相关的文档
  • 定位文档中答案可能所在的段落
  • 在备选段落中精确定位,找到答案

这种传统问答系统定位答案的方法并非一蹴而就,而是在不断缩小答案可能所在的范围。在这个过程中需要每一步都准确无误,否则一步错而步步错。但段落的定位是而这种方法的重点和难点,如果连可能包含答案的段落都找错了,那肯定不会找到正确的答案了。相反如果段落定位准确,即使答案的精确定位错误也不影响大局(可直接返回段落作为答案),因为有研究表明,一个段落足以包含回答问题所需要的信息,且用户也更倾向于模型给出的答案是一个段落,理由是一个段落可以提供完整的答案上下文,有助于理解答案的含义。当然研究肯定不是只止步于此,精确地回答问题依旧是问答系统或机器阅读理解的最终目的。

在基于依存关系匹配来回答问题之前,就出现了基于词匹配来回答问题。这种方法通过分析问题句与候选答案句之间辞汇来定位答案所在句子,这种方法过于追求句子间辞汇的匹配而忽视了词之间的依存关系,比如,图1展示了一个问题和四个候选答案句,其中S1为正确答案句,但分析这四个句子可发现,词匹配最多的并不是S1

图 1 基于词匹配方法的例子

还有一种方法是基于依存关系匹配方法,但是匹配要求较为严格,对于语义相同但表述不同的情况也视为匹配失败。但在实际应用中,在问题句和答案句的句法分析树中,核心词之间相似的关系往往有不同的表述方式,严格匹配容易把正确的当成错误的,即模型召回率低。

2 基于模糊依存关系匹配的问答模型构建方法

我们首先介绍了如何从依存关系树中提取关系路径并对其进行配对。然后计算两条关系路径的匹配分数,匹配分数包含了两条路径中单个关系的映射分数。

2.1 依存关系的提取-依存关系树

依存关系树的构建工具有很多,详情可见《你需要知道的几个好用的中文词法分析工具》。《Question Answering Passage Retrieval Using Dependency Relations》使用了Minipar来构建依存关系树,图2展示了在图1中问题句和答案句S1的依存关系树。

图 2 依存关系树

在提取两个句子的依存关系时,需注意以下几点:

  • 虽然依赖关系是有向链接,但我们忽略了关系的方向;
  • 路径长度不能超过预定义的阈值(7),其目的是排除异常长的路径,因为Minipar只能可靠地解决附近的依赖关系;
  • 如果两个词属于相同的块(通常是名词短语或动词短语),我们忽略了它们之间的关系路径(这是由MiniPar确定的),比如

『28』和『28 percent』

  • 为了确定依赖关系的相关性,对于两个句子,提取出主要节点(node),并匹配它们在两个句子中的依赖关系,node的类型一般为名词、动词和形容词

在依存关系树中,我们可以提取出主要节点的依存路径,如图3所示。

图 3 主要节点的依存路径

Minipar有42个主要的依存关系,比如subj (subjective) 表示主观关系;mod (modifying) 表示修饰关系;pcomp-n (nominal complement of a preposition) 表示介词的名词补充。

2.2 模糊依存关系匹配分数计算

以图3为例,我们需要计算问题句question的依存关系路径(<subj>-<head, whn, prep, pcomp-n>-<gen>)和答案句S1的依存关系路径(<pcomp-n, mod, i>-<obj, mod, pcomp-n>-<gen>)间的匹配分数,注意到这里的node是一样的。

我们将候选答案句子的关系路径的匹配分数看作是从问题句中的对应路径转换到候选答案句的关系路径的概率。计算公式如下。(这里有个小思考:两个关系路径的最小编辑距离应该也可以作为模型特征工程的一部分

其中,P_s表示候选答案句的依存关系路径,其长度为nP_Q表示问题句的依存关系路径,其长度为mRel_(s)_i表示P_s中第i个关系,Rel_(Q)_ai则为在P_Q中对应的关系;P_t(Rel_(s)_i | Rel_(Q)_j)表示两种依存关系转换的概率。这里假设每一种关系都可以转换成另一种关系,所以P_t(Rel_(s)_i | Rel_(Q)_j)是大于0,小于等于1的值,当P_t(Rel_(s)_i | Rel_(Q)_j)=1时,表示Rel_(s)_iRel_(Q)_j是一样的,那么自己匹配自己时,其匹配概率是100%。

分析语料库,在实际依存关系匹配中,我们不需要匹配两个句子所有的依存关系路径,而是只要从关系路径中的每个关系中找到对应路径中最可能映射的关系来计算匹配分数即可。于是公式可简化为:

其中,A_i表示最有可能映射的关系组合。

最终的匹配分数计算公式为:

到这,我们只需要得到P_t(Rel_(s)_i | Rel_(Q)_j)就能计算最终的匹配分数,两种依存关系的相关性通过依存关系路径的双向共现量(bipartite co-occurrences)来测量,计算公式如下所示:

其中,

为一个分段函数,当依存关系Rel_(Q)_jRel_(S)_i在依存关系路径中都出现了,那么其值为1,否则为0γ是两条依存关系路径长度之和的倒数。|Rel_(Q)_j|为所有问题句的依存关系路径中包含依存关系Rel_(Q)_j的个数;|Rel_(S)_i|为所有答案句的依存关系路径中包含依存关系Rel_(S)_i的个数。

从计算过程中,我们可以看出,如果问题句的长度越长,依存关系路径也可能越长,那么在一定程度上其包含的信息越多,得到正确答案的概率就越大。

作者: 死磕自己的研究僧

链接:imooc.com/article/28118

来源:慕课网

本文原创发布于慕课网 ,转载请注明出处,谢谢合作


推荐阅读:

打造个人品牌 so easy !_慕课手记

记一次tablayout的tabView偷偷自带padding的问题

腾讯云SpringBoot部署 + HTTPS配置

tensorflow.js前端机器学习利器(1)-hello tfjs

移动开发者最爱的9个优秀Android代码编辑器


推荐阅读:
相关文章