自然语言处理中的自然语言句子级分析技术,可以大致分为词法分析、句法分析、语义分析三个层面。
-
词法分析:第一层面的词法分析 (lexical analysis) 包括汉语分词和词性标注两部分。
-
句法分析:对输入的文本句子进行分析以得到句子的句法结构的处理过程。
-
语义分析 (semantic parsing):语义分析的最终目的是 理解句子表达的真实语义。语义角色标注是实现浅层语义分析的一种方式。在一个句子中,谓词是对主语的陈述或说明,指出「做什么」、「是什么」或「怎么样,代表了一个事件的核心,跟谓词搭配的名词称为论元。语义角色是指论元在动词所指事件中担任的角色。主要有:施事者(Agent)、受事者(Patient)、客体(Theme)、经验者(Experiencer)、受益者(Beneficiary)、工具(Instrument)、处所(Location)、目标(Goal)和来源(Source)等。
以上示例表示,「遇到」是谓词(Predicate,通常简写为「Pred」),「小明」是施事者(Agent),「小红」是受事者(Patient),「昨天」是事件发生的时间(Time),「公园」是事情发生的地点(Location)。
语义角色标注(Semantic Role Labeling,SRL)以句子的谓词为中心,不对句子所包含的语义信息进行深入分析,只分析句子中各成分与谓词之间的关系,即句子的谓词(Predicate)- 论元(Argument)结构,并用语义角色来描述这些结构关系,是许多自然语言理解任务(如信息抽取,篇章分析,深度问答等)的一个重要中间步骤。
基于语块(chunk)的 SRL 方法
基于语块的 SRL 方法将 SRL [1] 作为一个序列标注问题来解决。序列标注任务一般都会采用 BIO 表示方式来定义序列标注的标签集,我们先来介绍这种表示方法。在 BIO 表示法中,B 代表语块的开始,I 代表语块的中间,O 代表语块结束。通过 B、I、O 三种标记将不同的语块赋予不同的标签,例如:对于一个由角色 A 拓展得到的语块组,将它所包含的第一个语块赋予标签 B-A,将它所包含的其它语块赋予标签 I-A,不属于任何论元的语块赋予标签 O。
从上面的例子可以看到,根据序列标注结果可以直接得到论元的语义角色标注结果,是一个相对简单的过程。这种简单性体现在:(1)依赖浅层句法分析,降低了句法分析的要求和难度;(2)没有了候选论元剪除这一步骤;(3)论元的识别和论元标注是同时实现的。这种一体化处理论元识别和论元标注的方法,简化了流程,降低了错误累积的风险,往往能够取得更好的结果。
深度双向 LSTM(DB-LSTM)SRL 模型
与基于语块的 SRL 方法类似,在本文中我们也将 SRL 看作一个序列标注问题,不同的是,我们只依赖输入文本序列,不依赖任何额外的语法解析结果或是复杂的人造特征,利用深度神经网络构建一个端到端学习的 SRL 系统。
循环神经网络(Recurrent Neural Network)是一种对序列建模的重要模型,在自然语言处理任务中有着广泛地应用。不同于前馈神经网络(Feed-forward Neural Network),RNN 能够处理输入之间前后关联的问题。LSTM 是 RNN 的一种重要变种,常用来学习长序列中蕴含的长程依赖关系,这里我们就使用 LSTM 来解决 SRL 问题。
在 SRL 任务中,输入是「谓词」和「一句话」,目标是从这句话中找到谓词的论元,并标注论元的语义角色。如果一个句子含有 n 个谓词,这个句子会被处理 n 次。一个最为直接的模型是下面这样:
-
构造输入;
-
输入 1 是谓词,输入 2 是句子;
-
将输入 1 扩展成和输入 2 一样长的序列,用 one-hot 方式表示;
-
one-hot 方式的谓词序列和句子序列通过词表,转换为实向量表示的词向量序列;
-
将步骤 2 中的 2 个词向量序列作为双向 LSTM 的输入,学习输入序列的特征表示;
-
CRF 以步骤 3 中模型学习到的特征为输入,以标记序列为监督信号,实现序列标注;
大家可以尝试上面这种方法。这里,我们提出一些改进,引入两个简单但对提高系统性能非常有效的特征:
-
谓词上下文:上面的方法中,只用到了谓词的词向量表达谓词相关的所有信息,这种方法始终是非常弱的,特别是如果谓词在句子中出现多次,有可能引起一定的歧义。从经验出发,谓词前后若干个词的一个小片段,能够提供更丰富的信息,帮助消解歧义。于是,我们把这样的经验也添加到模型中,为每个谓词同时抽取一个「谓词上下文」片段,也就是从这个谓词前后各取 n 个词构成的一个窗口片段;
-
谓词上下文区域标记:为句子中的每一个词引入一个 0-1 二值变量,表示它们是否在「谓词上下文」片段中;
修改后的模型如下(下图是一个深度为 4 的模型结构示意图):
-
构造输入;
-
输入 1 是句子序列,输入 2 是谓词序列,输入 3 是谓词上下文,从句子中抽取这个谓词前后各 n 个词,构成谓词上下文,用 one-hot 方式表示,输入 4 是谓词上下文区域标记,标记了句子中每一个词是否在谓词上下文中;
-
将输入 2~3 均扩展为和输入 1 一样长的序列;
-
输入 1~4 均通过词表取词向量转换为实向量表示的词向量序列;其中输入 1、3 共享同一个词表,输入 2 和