论文概要
论文地址,论文发表于 2014 年。 建立一个能够回答任何问题的计算机是人工智能的一个长期目标。这一领域一个重要的发展时大规模知识库的建立,如 Freebase 和 DBPedia,它们存储了大量的通用信息。它们由三元组的形式构成一个数据库,通过各种关系和格式连接成实体对。那么回答问题被定义为给定一个用自然语言表达的查询语句(一个查询语句的例子:中国的首都在哪?)从知识库中检索正确的实体或实体集的任务。 最近,通过将问题映射为逻辑形式或者类似数据库查询的方法取得了富有希望的进展。虽然这种方法可能有效,但是缺点是要采用大量的人为标记的数据或者需要工作人员定义词汇表和语法。 本文采用一种激进的学习方式,将问题映射为向量(无法人为解释)的特征表示。并且将重点放在回答一些基于比较宽泛的主题的简单事实性问题。这项任务的难点来自词汇的多样性,而不是句法的复杂性。 该方法采用随机梯度下降,然后使用 fine-tuning 进行训练。经验表明该模型能够捕获一些有意义的信号,且这是唯一一种能够在弱标记数据上训练的方法。
论文内容介绍
相关工作
- 大规模的问答历史悠久,主要由 TREC tracks(Voorhees 2000) 发起,这是第一个成功地将问题转换为查询的问答系统。将问题转换为查询之后,又将查询提供给 web 搜索引擎,然后从返回的页面或片段中取出答案(Kwok 2001, Banko 2002)。这种方法需要大量的人工操作来处理查询,然后解析和搜索结果。
- 大型 KBs 的出现,如 FreeBase 和 DBPedia(论文地址已在第一章给出),改变了上述状况,但是也带来巨大的挑战。语言的多样性以及 KBs 规模的庞大,使得需要通过监督学习来处理大量的带标签的数据。最早的方法是基于手写模板的 KBs 开放问答,然而对于日新月异 KBs(增加/删除三元组和实体) 还不够成熟。之后开始尝试使用较少的监督情况下学习 KBs 和自然语言之间的联系,但是这项工作实际上在解决信息提取的问题(Mintz M 等 2009,Hoffmann R 等 2011,Lao N 等 2012,Riedel S 等 2013)。以上以及本文未提及到的这些通过直接或者间接的监督机器学习来获得更多表现力的解决办法实际上是为了避开标签数据过多的问题。
- 近年来,有一种基于语义解析器(Cai Q 等 2013,Berant J 等 2013,Kwiatkowski T 等 2013)的新的问答系统被提出,它只具有少量标记数据。但仍需要耗费大量精力去仔细设计词汇,语法和知识库。
- 所以本文(2014 年)提出了基于嵌入式的问答模型。据我们所知,这是以前从未尝试过的。
开放域问答
本文使用 Fader 2013 的问答框架,并使用了相同的数据。
任务定义
我们将回答问题的任务看作为:给定一个问题 q,对应的答案由 KB 中的三元组 t 给出。这意味着我们的问题由一组三元组 t 提供对问题及其答案的解释,例如: > q: What environment does a dodo live in?(渡渡鸟生活在什么样的环境中?) > t: (dodo.e, live-in.r, makassar.e) > q: What are the symbols for Hannukah?(光明节的象征是什么?) > t: (menorah.e, be-for.r, hannukah.e) > q: What is a laser used for?(极光可以用来做什么?) > t: (hologram.e,be-produce-with.r,laser.e)
这里每个问题我们只给出一个 t,但是实际上它可以有很多,所以上文说是一组三元组。本文其余部分,使用 \(\kappa\)(读作 kappa) 代表 KB ,使用 \(\epsilon\) 代表 KB 中的实体或者关系。问题的词表用 V 表示,\(n_V\) \(n_{\epsilon}\)分别表示 V 和 \(\epsilon\) 的大小。 我们的模型在于函数 S(·),它可以为 question-answer triple pairs (q,t) 打分。因此,找到问题 q 的 top-ranked 的答案 \(\hat{t}\)(q) 直接由以下公式得出: \[ \hat{t}(q) = arg \max_{t' \in \kappa}S(q, t') \] 为了处理多个答案,我们将结果呈现为排完序的列表并对其评分,而不是直接采用最前面的预测结果。 使用评分函数可以直接查询 KB,而不需要在语义分析系统中一样为问题定义一个中间的结构化逻辑表示。我们的目标是学习 S(·),余下将讲述用于训练的数据的创建步骤。
用于训练的数据
待续
Embedding-based model
模型使用了词嵌入(2019 年了,应该谁都知道了,不做解释)。
Question-KB Triple Scoring
我们的框架关注的是函数 S(q,t) 的学习,该函数的目的是对一个问题 q 和 一个来自 \(\kappa\) 的三元组 t 进行打分。该评分方法受到了先前工作 labeling images withwords 的启发(Weston 2013),我们采用该方法将图片和标签替换成了问题和三元组。直观来讲就是: 有点难翻译,故给出原文: > Intuitively, it consists of projecting questions, treated as a bag of words(and possibly n-grams as well), on the one hand, and triples on the other hand,into a shared embedding space and then computing a similarity measure (the dot product in this paper) between both projections. > 大致意思,将问题和三元组使用词袋模型(也可以是 n-gram 模型)投射到共享的嵌入空间,然后计算二者的相似度(本文使用点积的方式)。
那么评分函数为: \[ S(q,t) = f(q)^Tg(t) \] 其中 f(·) 将问题中的单词映射到 \(\mathbb{R}^{\kappa}\),\(f(q) = V^T \Theta(q)\)。V 是关于 \(\mathbb{R}^{n_v \times \kappa}\) 包含所有词嵌入 v 的矩阵。\(\Theta(q)\)是 q(\(\in \{0,1\}^{n_v}\)) 的二进制(稀疏)表示。同样,g(·) 将 KB 三元组中的实体和关系映射到 \(\mathbb{R}^{\kappa}\),\(g(t) = W^T\Psi(t)\),W 是关于 \(\mathbb{R}^{n_e \times \kappa}\) 包含所有实体和关系的嵌入 w 的矩阵,\(\Psi(t)\) 是 t(\(\in \{0,1\}^{n_e}\)) 的二进制(稀疏)表示。
注:上一段太长了,解释一下。f(q) 就是词向量,g(t) 就是实体和关系的向量(下一段原文写到 g(t) 是将三元组中的嵌入全部相加)。
将单词表示为词袋模型似乎有一点局限性,但是由于我们特定的设置,语法都很简单,因此含有的信息十分有限,所以词袋模型应该也能带来不错的性能。当然也有反例,比如 What are cats afraid of ?vs.What are afraid of cats ? 这将会有不同的答案。不过这种情况十分罕见。未来考虑将 parse tree features 或者 semantic role labels 作为输入放入嵌入模型中。 与以前的工作(Weston 2013)不同的是,在我们的模型中,实体出现三元组的不同侧面(左右侧)时,实体并非拥有相同的嵌入。KB 中的关系并不是对称的,所以会出现三元组中左侧和右侧的实体是不同的情况。由于 g(·) 是将三元组中的所有成分相加,所以每一个实体我们都需要两个嵌入。 这样就可以很容易地对任何三元组进行评分: \[ \hat{t}(q) = arg \max_{t' \in \kappa}S(q, t') = arg \max_{t' \in \kappa}(f(q)^Tg(t')) \] 接下来花了好几段讲怎么训练。
Fine-tuning the Similarity between Embeddings
由于受到数据大小的限制,需要使用微调来改进性能。
论文总结
通读论文之后还是有点搞不清论文是怎么训练的,后来看了一下 CCF ADL100 刘康老师的 PPT ,感觉有点理解了,以下是训练步骤: 1. 输入自然语言表达的问题,比如:姚明的老婆的是哪里人? 2. 使用 entity linking(论文中貌似没有这步,我在看 PPT 时也是一知半解,好在前几天我刚好在一篇论文中看到了这个 entity linking!博客地址,entity linking 源于Yang and Chang, 2015)找到 main entity,main entity 周围的 entity 均是候选 entity。如下图,姚明是 main entity,姚明周围的实体都算作候选 entity,比如叶莉、火箭队、上海等。 3. 计算问题和候选 entity 的相似度,其中问题由词向量表示,候选 entity 是一个三元组的形式,难以直接用词向量表示,方法是将三元组中的三个对象分别用词向量表示,然后将三个词向量相加。这样就得到了问题的词向量和 entity 的词向量,点乘获得相似度。 4. 由于候选 entity 不一定只有一个,所以可以获得多个相似度。进行排序即可获得最相似的候选 entity。
以上的训练步骤并不是论文中的训练步骤,只是我为了给自己加深映像写的,具体的训练步骤在原论文第 4 节,具体在 4.1。