基于kbqa 的复旦大学论文解释 learning question answering over QA corpora and knowledge bases(二)

本文深入探讨了在知识图谱构建中,如何使用EM算法进行参数估计,特别是针对隐变量处理的方法,以及似然函数的优化过程。文章详细解析了从建立似然线性关系到最大似然估计的全过程,包括参数估计、EM算法的应用以及实施细节。

我们表示第i项其中,,所以,所以我们建立了QA与X的似然线性关系,

                                                                                   (13)

最大似然估计QA就是等价最大似然估计X,(2)通过边际化联合概率,得到,基于总体的模板t和谓语p,似然如公式(14),我们阐述整个过程如图4,                                                             (14)

可以说公式14是整个论文核心我们只要计算每一个分量。让整个似然概率最大化,这就是整个论文的目标。

4.2   Parameter Estimation

         目标:在这一章我们评估,通过最大化公式14,我们把分布作为参数,它对应的似然估计为,把作为因此我们有评估的如下:

                                                         (15)           

其中            

                                           (16)

Intuition of EM Estimation:    我们注意到一些变量,例如谓语predicate和tenmplates在构建的模型中是隐变量,因此促使我们使用EM算法来评估参数,EM算法是寻找参数的最大似然估计的经典方法,在统计模型中,并且适用于不可观测变量。我们最后的目标就是最大似然完整的数据,由于涉及到求和以及计算的复杂性,因此我们利用他的下界【7】,这里不再赘述由于时间因素,感兴趣可以去看这篇文献,例如Q-function。为了定义Q-function,我利用完整数据的似然估计,EM算法通过迭代最大化的下界,在第s步迭代,

zaiE-STEP对于给定的参数,计算,在M-STEP。评估参数(在下一次的迭代参数),这个参数是的最大化下界。

         Likelihood of Complete Data: 直接的最大化计算比较复杂,由于具有求和操作,如果我们知道每一个可观测的数据的完整数据,例如知道template和predicate,则估计变得容易了,因此我们队每一个可观察的三元组引入一个隐变量,隐变量是predicate和template对例如,预示这是由predicate和template共同产生,之所以把他两个放在一起,是由于他们之间不是相互独立的,因此,,使用谓语以及模板生成这个概率,

          用,Z和X构成一个完整的数据,可观察的完整数据似然估计如下

                               :                                                  (17)

其中

                                                                         (18)

                                                                     (19)

正如在3,2章讲的,f()可以在评估P(p|t)之前单独计算,所以我们可以把他当做已知的因子。

        Q-function:替代直接优化,而是定义一个Q-function在等式(20),是全部观察数据似然的期望,因此是第s步的估计,根据理论1当把作为一个常数,提供一个下界,所以我们尝试优化

      

                                                                       (20)

仔细去理解这一个,基于问题,实体以及value下的,并且已知的条件下的,谓语p与模板t同时发生的条件概率,数据实话,这个概率的构造我也是一直没明白其中的原理,还需要作者去说明构造的原理何在。但是我猜想,回顾上边的一句话,直觉上,如果我们知道每一个观测数据的完整的三元组(q,e,v),并且由三元组所产生的t和p,估计变得容易,当然了,应为t和p都知道了,条件概率自然就知道了,但是不知道理解的是否有误,(所以作者引入隐变量z=(p,t)),但是作者这句话有待考究,is the probability that x i is generated    with predicate p and template t.在google翻译为是由t和p,

p是x产生的概率使用谓词P和模板T。正确理解应该是p是x使用p和t产生的概率。

 

但是对比公式(20)和公式(17)会发现仅仅多个概率公式,一定是

       作者定义了一个原理(下界文献【10】)

其中仅仅依赖与中可以视为一个常数。假设在作者的解析下以上我们都能够理解下界是怎么构造的(当然,我是不懂怎么构造的)。

以上是我对作者构造下界的粗俗理解,至于是否有客观的理论,有待考究,反正就是多了一个条件概率

但是并不影响实现最后的结果,

  In E-step, 我们计算我么计算公式(20)中的每一个

                                                  (21)

              相当于已知参数,求这个概率的期望值

In M-step, 最大化Q-function ,用的则是拉格朗日来获取:

           

 这个概率有点像softmax,其实就是对于当前实际pt这样的概率进行归一化更新。具体算法说明白的比较清楚,在4.3章将会有比较详细的解释。

    4.3 Implementation   

        首先进行初始化,为了避免变为0,需要对于所有的是一个均匀分布,使得,主要是看公式23怎么解释,是关键。这个也影响我好长时间,

分子是存在i 使得,重点大概意思就是一定存在问题,一个实体对应的谓语对应这个概念,也就是模板,模板可能对应多个问题数据,但是一定存在,分母理解最重要,刚才看了一下自己实现的代码,想起来了,怎么会出现一个问题对应多个谓语呢,不管这些,作者的意思英嘎就是同一个templates可能对应多个谓语,由于是上万训练数据集,所以可能是的,有什么理解错的,请指正,具体请看我实现的代码。

E-step: 我们枚举所有的数据集通过公式(21)来计算,计算复杂度为

      以下仅为个人理解,根据我的代码在理解一边,由于长时间忘记了,复杂度为m,比较容易理解,因为有m个数据集,每一个数据集计算 ,我们已经初始化了参数,所以对于公式

来计算并不太难,因为我们可以计算出来,由于根据章节3.2,以及初始化参数的每一个参数都是常量。

M-step: 对于每一个,我们计算,由于我们需要枚举所有的tempaltes和predicates,所以计算复杂度为,下一步,我们直接枚举常数项的templates和predicates对于每一个样本,所以时间复杂度减小到

       注意到仅仅是的三元组才需要考虑,由于公式18 和19 意味着:

 

就可以删减枚举的模板,意味着我们仅仅枚举通过概念化问题中q i的实体e i得到的templates,由于实体e i的对应概念是整个概率的上界,很明显可以被考虑一个常数,意味着仅仅谓语predicate连接了,其实,在知识库中,一旦实体和谓语确定,基本value已经确定,所以以上基本上是废话。

再把伪代码跌上来,基本上就完成了自己的代码实现与论文对应的关系。以后的章节,由于自己觉着不靠谱。并且没有太大技术含量,没有用到深度学习任何模型,并且使用性不是太强,接下来将结合代码讲解伪代码。

 

 

 

 

 

 

       

                                                                   

基于提供的引用,知识库问答(KBQA)在处理复杂问题时通常涉及构建问题分解树(Question Decomposition Tree, QDT),这种方法能够将复杂问题逐步拆解为多个简单子问题,并通过组合这些子问题的答案来生成最终答案。以下是对该方法的详细解析: ### 1. 问题分解树的构建 构建QDT的过程通常分为两个主要步骤: - **原子表示生成**:首先生成复杂问题的原子表示,即QDT的叶节点。这些原子表示是可以通过知识库直接回答的简单问题。 - **非叶节点生成**:在获得原子表示后,进一步生成QDT中的非叶节点。这些节点代表了对多个子问题答案的组合逻辑。 每个节点的生成都伴随着一个确定性分数,该分数基于生成每一步的可能性[^3]。具体来说,可以使用基于BART的问题分解器来生成原子表示,并输出生成的可能性。 ### 2. 基于信息检索的方法与语义句法分析方法的结合 复杂KBQA任务中,两种主流方法分别是: - **基于语义句法分析(SP-based)的方法**:这类方法利用自然语言处理技术解析问题的语义和句法结构,从而生成QDT。例如,通过依存句法分析识别问题中的主谓宾结构,并据此构建树状分解。 - **基于信息检索(IR-based)的方法**:这类方法则侧重于从知识库中检索相关信息以支持问题的分解和回答。例如,通过关键词匹配和实体链接技术找到相关事实,并根据这些事实推导出QDT的结构[^1]。 ### 3. 问题生成与答案组合 在QDT的每个非叶节点上,需要根据其原子表示和参照关系生成对应的问题文本。这一过程通常使用基于BART的问题生成器实现。生成的问题随后通过知识库进行回答,而各个子问题的答案则被组合起来以形成最终答案[^3]。 ### 4. 实例说明 假设用户提出的问题是:“列出所有由史蒂文·斯皮尔伯格执导并且主演为汤姆·汉克斯的电影。” - **原子表示**:这个问题可以被分解为两个原子问题:“史蒂文·斯皮尔伯格执导的电影有哪些?” 和 “汤姆·汉克斯主演的电影有哪些?” - **非叶节点生成**:接下来,系统会生成一个非叶节点,表示对这两个原子问题答案的交集操作。 - **答案组合**:最终答案是两个原子问题答案的交集,即同时满足两个条件的电影列表。 ### 5. 应用场景 QDT方法广泛应用于需要处理复杂查询的知识库问答任务中,例如: - **智能客服**:通过分解用户提出的复杂问题,快速从知识库中获取准确答案。 - **搜索引擎优化**:提高搜索引擎理解复杂查询的能力,从而提供更精准的搜索结果。 - **学术研究**:用于评估摘要的事实一致性等任务中,确保生成的内容与原始数据一致[^2]。 ### 示例代码 以下是一个简单的Python示例,展示如何使用递归函数模拟QDT的构建过程: ```python def build_qdt(question): # 模拟问题分解器 if is_atomic(question): return {"type": "leaf", "question": question, "answer": query_knowledge_base(question)} sub_questions = decompose_question(question) children = [build_qdt(sub_q) for sub_q in sub_questions] # 模拟答案组合逻辑 combined_answer = combine_answers([child["answer"] for child in children]) return { "type": "non_leaf", "question": question, "children": children, "answer": combined_answer } # 辅助函数 def is_atomic(q): # 判断问题是否为原子问题 return len(q.split()) < 5 def decompose_question(q): # 简单的问题分解逻辑 return q.split("并且") def query_knowledge_base(q): # 模拟知识库查询 return f"Answer to '{q}'" def combine_answers(answers): # 简单的答案组合逻辑 return " & ".join(answers) # 测试 complex_question = "列出所有由史蒂文·斯皮尔伯格执导并且主演为汤姆·汉克斯的电影" qdt = build_qdt(complex_question) print(qdt) ``` 上述代码展示了如何将复杂问题分解为原子问题,并通过递归构建QDT。实际应用中,问题分解和答案组合的逻辑会更加复杂,并可能依赖深度学习模型如BART来实现。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值