持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情
导语
在KBQA中,经常使用lambda-DCS作为一种logical form的表达方式,本篇博客将记录对论文Lambda Dependency-Based Compositional Semantics的学习笔记。
摘要
本文提出了一种新的形式化语言——lambda dependency-based compositional semantics(lambda DCS),用于表示语义分析中的逻辑形式。通过消除变量和隐式地进行存在量化,lambda DCS逻辑形式通常比lambda演算中的逻辑形式更紧凑。
1 简介
语义解析(Semantic Parsing)是将自然语言语句转化为逻辑形式(logical form)的任务,例如lambda calculus。本文介绍了一种更为简洁的表达方式,lambda DCS,首先,我们来看一个例子:
- Utterance: “people who have lived in Seattle”
- Logical form (lambda calculus): λx.∃e. PlacesLived (x, e) ∧ Location(e, Seattle )
- Logical form (lambda DCS): PlacesLived.Location.Seattle
可以看到,lambda DCS试图移除变量的显式使用。这使得它类似于基于依赖的组合语义(DCS) ,但DCS仅限于树结构的逻辑形式,因此不像lambda演算那样具有表现力。另一方面,Lambda DCS在必要时从Lambda演算中借用了变量和Lambda抽象的使用,以处理诸如回指等现象。
Lambda DCS是在Freebase中构建自然语言界面的背景下设计的, Freebase是一个大型图数据库,其逻辑形式是数据库查询。因此,我们将专注于表示名词短语或wh-问句的语义。此外,我们将只讨论形式语言的语义,而不是将自然语言语句映射到lambda DCS的组合语义。最后,本文假设读者已经对自然语言中的lambda表达式有了基本的了解。
2 定义
假设表示所有的实体集合,表示所有的属性集合,那么一个知识库(Knowledge Base)中即,它可以可视化为一个有向图,其中节点是知识图谱中的实体,边表示知识图谱中的关系。设表示变量集合。
设[condition]表示一个条件语句,例如表示当且仅当其参数等于3时返回true的函数。现在我们将通过具体的例子来介绍lambda DCS中的每一种结构,并通过提供到等价的lambda演算形式的正式转换来提供它们语义的正式定义。记为是对应于λ DCS形式z的λ演算形式。在下面的定义中,设x, y表示在其他任何地方都没有使用的新变量。
Unary base case
最简单的lambda DCS形式是单个实体。例如,
表示包含西雅图的单例集。在lambda表达式中等价的函数是:
一般来说,对于, e是一种一元逻辑形式,表示当其参数等于e时返回true的指示函数:
Binary base case
下一个例子为:
它表示一组成对的人及其出生地:
一般来说,对于属性, p是一个二元逻辑形式,表示一个函数,将两个参数映射到p是否成立:
Join
lambda DCS中最核心的操作是连接(join)。例如,“出生在西雅图的人”用lambda DCS表示为
其对应的 lambda calculus为:
一般来说,对于二元逻辑形式b和一元逻辑形式u,我们有b.u是一元逻辑形式,表示:
Join的关键特征是对b和u共享的参数y进行隐式存在量化。从数据库的角度来看,这只是对关系b和u的第二个参数和u的第一个(也是唯一的)参数进行连接,然后将连接后的变量投影出来。
当二进制文件串联起来时,lambda DCS的优势更加明显。例如,考虑“those who had children born in Seattle”:
其lambda calculus即
这里,Children(x, y)表示x是否有孩子y, PlaceOfBirth (y, Seattle)表示y是否出生在西雅图。
一个逻辑形式对应于知识库k上的一个链式结构图模式,即那些可以通过这一系列的属性到达实体e的所有实体。通俗来说,就是指可以通过这k条链条形式的边到达e的所有起始节点的集合。
Intersection
"The set of scientists born in Seattle"的lambda DCS为:
其对应的lambda calculus为:
一般来说,对于两个一元数和, $u_1⊓u 2是一个一元逻辑形式表示:
从图模式的角度来看,交集允许树型结构的图模式,其中分支点对应于交叉点。
Union
交集对应于合取,而并对应于析取。lambda dc中包含“Oregon, Washington and Canadian provinces”的集合:
其对应的lambda calculus为:
一般来说,对于两个一元数和, $u_1⊓u 2是一个一元逻辑形式表示:
Negation
否定是非常简单的。下面是lambda DCS中“states not bordering California”:
其对应的lambda calculus为:
一般来说,对于一元u,
Higher-order functions
高阶函数作用于实体集合,而不是单个实体。这包括聚合(计数、找到最小值/最大值)、最高级(取argmin/argmax)和广义量化。在lambda DCS中,这些以自然的方式实现。
例如,在lambda DCS中,按区域划分的州的数目和面积最大的州表示如下:
其对应的lambda calculus为:
一般来说,对于聚合运算符A(例如count)和一元u,我们有:
对于最高级运算符S(例如argmax)、一元u和二元b:
Lambda abstraction
到目前为止,我们的lambda DCS逻辑形式在两方面受到了限制:
- 从根本上说,我们的逻辑形式是树形结构的,因为当前逻辑形式的不同部分可以交互的唯一方式是通过一个隐式表示的重叠变量。非树结构的逻辑形式对于处理边界回指很重要,为了捕获这种现象,我们将引入一个称为mu抽象(mu abstraction)的结构。
- 我们所有的组合操作都创建了一元数组。然而,像argmax这样的高阶操作需要一个二进制文件来提供比较函数,该函数可以是非原子的。为了组合地构造二进制文件,我们引入了lambda抽象,它通常不同于lambda演算中的lambda抽象,尽管两者在某些情况下是一致的。
让我们从一个捆绑回指的例子开始:“those who had a child who influenced them”。在lambda DCS中,我们使用mu抽象:
这里,μx只是添加了一个约束,即Children的第一个参数必须绑定到Influenced的第二个参数。在lambda calculus中,这个表达式是:
让我们考虑一个具有组合比较功能的最高级:“person who has the most children”。在lambda DCS中,我们使用lambda抽象来构建一个新的二进制逻辑形式,表示人对及其子女的数量:
我们在这里使用反向操作符转换b的参数。其对应的lambda calculus为:
一般来说,对于变量和一元变量u,我们定义变量的转换、mu抽象和lambda抽象如下:
注意,应用于一元函数时,lambda抽象产生二进制逻辑形式,而mu抽象产生一元逻辑形式。