本篇博客主要基于微软亚洲研究院段楠老师的《智能问答》第四章 知识图谱问答 进行整理。
知识图谱问答,又称 Knowledge-based QA 或 KBQA,是一种基于结构化知识库(即知识图谱)的智能问答方法。给定自然语言问题,该类方法基于知识图对问题进行理解,并根据问题理解的结果从知识图谱中查找或推理出问题对应的答案。
知识图谱问答分为**基于语义分析的方法(Semantic Parser)和基于答案排序的方法(Information Retrieval)**两类。基于语义分析的方法是首先将输入问题转化为知识图谱能够理解和执行的结构化查询(即语义表示),然后在知识图谱上直接执行该结构化查询得到问题对应的答案。基于答案排序的方法是首先基于输入问题从知识图谱中快速找到少量答案候选,然后采用排序模型对不同答案候选进行打分,并选择得分最高的答案候选集合作为问题对应的答案。
基于语义分析的方法(Semantic Parser)
给定知识图谱和自然语言问题,基于语义分析的知识图谱问答方法通过如下两步完成问答任务:①使用语义分析器将问题转化为机器能够理解和执行的语义表示。②使用该语义表示作为结构化查询语句查询知识图谱,并将查询得到的实体集合作为答案返回。由于语义表示结果的正确与否直接决定答案的对错,因此该类问答方法的核心任务就落在语义分析任务上,即如何生成自然语言问题对应的语义表示。
这里把语义分析方法分为基于文法的语义分析方法和基于神经网络的语义分析方法两类。
基于文法的语义分析方法通过三步完成语义分析任务:第一步,从带有语义表示的标注数据中抽取符合特定文法的语义分析规则集合。该集合中每条规则至少包含自然语言和语义表示两部分对应的信息;第二步,采用基于动态规划的解析算法(例如CYK 算法和 ShiftReduce算法)产生输入句子对应的语义表示候选集合。该类算法按照自底向上(CYK)或自左向右(Shift-Reduce)的方式,合并相邻两个短语对应的语义表示生成较长短语对应的语义表示,直至覆盖全句时终止;第三步,基于标注数据训练排序模型,对不同语义表示候选进行打分,并返回得分最高的语义表示候选作为结果。
基于神经网络的语义分析方法将语义分析任务看做是一个端到端的序列生成任务,并采用类似神经机器翻译(NMT)的方法,完成从自然语言(源语言)到语义表示(目标语言)的转换任务。
接下来将介绍四种不同的语义分析方法,前三种方法分别基于三种不同的文法:CCG、SCFG和DCS,最后一种方法基于NMT技术。
终结符与非终结符:
终结符,通俗的说就是不能单独出现在推导式左边的符号,也就是说终结符不能再进行推导/分解。不是终结符的都是非终结符。非终结符可理解为一个可拆分元素,而终结符是不可拆分的最小元素。
1 基于CCG的语义分析
组合范畴文法(combinatory categorial grammar,CCG)[1,2]是一种类型驱动的文法。本小节将从三个方面介绍基于CCG的语义分析方法,包括 CCG语义分析规则、CCG语义分析算法以及CCG语义分析的模型训练。
CCG语义分析规则由词汇部分、句法类型和语义类型三部分信息构成。这里使用一个例子说明上述三部分信息的含义和作用:
border是CCG语义分析规则中的词汇部分。该部分信息对应一个自然语言单词或短语,用于在语义分析中匹配输入的自然语言句子。
(S\NP)/NP是CCG语义分析规则中的句法类型。该部分信息由五种句法类型(S、N、NP、ADJ和PP)和两种连接符(/和\)组成。其中,S表示句子,N表示名词,NP 表示名词短语,ADJ表示形容词,PP表示介词短语,/和\用于判断相邻两个句子片段是否能够合并以及如何进行合并。例如,(S\NP)/NP 表示当前片段需要先从右边(由/指示)合并一个类型为NP的短语,再从左边(由\指示)合并另一个类型为NP的短语,才能完成分析任务并生成全句对应的分析结果。
λ x . λ y . B o r d e r ( x , y ) \lambda x.\lambda y.Border(x,y) λx.λy.Border(x,y)是CCG语义分析规则中的语义类型。该部分信息通常使用 λ − \lambda- λ−算子表示词汇部分对应的语义表示。
Zettlemoyer和 Collins提出一种基于统计的CCG语义分析规则获取方法[3]。该方法首先定义函数 GENLEX(S,MR),该函数负责返回从句子S及对应语义表示MR中抽取出来的 CCG 语义分析规则候选集合:
{
x
:
=
y
∣
x
∈
W
(
S
)
,
y
∈
C
(
M
R
)
}
\{x := y|x\in W(S),y\in C(MR)\}
{x:=y∣x∈W(S),y∈C(MR)}.其中,W(S)表示S中包含的连续单词序列集合,C(MR)表示从MR 中抽取出来的语义表示片段集合。如果W(S)中包含n 个元素,C(MR)中包含m个元素,那么抽取出来的CCG语义分析规则候选数目就是
n
×
m
n\times m
n×m个。这里,下表给出C(MR)的从MR中抽取类型部分用到的全部十条规则:
例如,给定句子 Utah borders Idaho 及语义表示 borders(utah,idaho),根据上表中的规则能够抽取得到如下类型部分:
由于上述语义表示并未包含单个参数部分(双参数谓词),因此规则2、3、6、9、10并未被使用。
在组合x:=y的过程中,由于x和y是通过枚举方式进行配对的,因此会产生大量不合理的规则候选。针对上述问题,该工作采用一种迭代优化方法对规则候选集合进行过滤和选择,该方法通过在标注数据上循环执行PARSE函数和ESTIMATE 函数 T轮完成。
- P A R S E ( S i , M R i ) PARSE(S_i,MR_i) PARSE(Si,MRi)函数基于规则集合 λ = Λ 0 ∪ G E N L E X ( S i , M R i ) \lambda = \Lambda_0 \cup GENLEX(S_i,MR_i) λ=Λ0∪GENLEX(Si,MRi)和 θ ˉ t − 1 \bar{\theta}^{t-1} θˉt−1对 S i S_i Si进行语义分析,并返回能够正确生成 M R i MR_i MRi所用到的规则子集 λ i \lambda_i λi。其中, Λ 0 \Lambda_0 Λ0表示一个少量高质量的初始CCG语义分析规则集合, θ ˉ t − 1 \bar{\theta}^{t-1} θˉt−1表示第t-1轮训练得到的规则权重向量。当对标注数据集中每个 ( S i , M R i ) (S_i,MR_i) (Si,MRi)标注对都完成上述操作后,更新生成第t轮迭代对应的规则集合 Λ t = Λ 0 ∪ ( ⋃ i = 1 n λ i ) \Lambda_t = \Lambda_0 \cup (\bigcup\limits_{i=1}^n\lambda_i) Λt=Λ0∪(i=1⋃nλi)。
-
E
S
T
I
M
A
T
E
(
Λ
t
,
θ
ˉ
t
−
1
,
D
)
ESTIMATE(\Lambda_t,\bar{\theta}^{t-1},D)
ESTIMATE(Λt,θˉt−1,D)函数基于
Λ
t
\Lambda_t
Λt和
θ
ˉ
t
−
1
\bar{\theta}^{t-1}
θˉt−1,使用随机梯度下降(SGD)算法在标注数据上最大化下述似然函数
O
(
θ
ˉ
)
O(\bar{\theta})
O(θˉ),从而更新生成第t轮的权重向量
θ
ˉ
t
\bar{\theta}^{t}
θˉt.
T表示能够正确生成 M R i MR_i MRi的CCG 语义分析树, P ( M R i , T ∣ S i ; θ ˉ ) P(MR_i,T|S_i;\bar{\theta}) P(MRi,T∣Si;θˉ)可以进一步分解为:
f ˉ ( M R i , T , S i ) \bar{f}(MR_i,T,S_i) fˉ(MRi,T,Si)函数将每个 ( M R i , T , S i ) (MR_i,T,S_i) (MRi,T,Si)三元组映射到一个特征向量。 该方法将CCG语义规则被用到的次数作为特征,因此 θ ˉ \bar{\theta} θˉ中对应位置的值可以看成是该特征的权重。当T轮训练迭代完成后,返回 Λ T \Lambda_T ΛT和 θ ˉ T \bar{\theta}^T θˉT作为最终的CCG语义分析规则集合。
CCG语义分析算法采用自底向上的CYK算法,对输人句子进行语义分析。该过程中,下述四类基本操作用于完成相邻片段的语义表示合并任务。
-
应用(application)操作。该操作包含下述两条合并规则:
第一条规则表示如果左右两个相邻短语片段对应的CCG 类型分别是B:g和A\B:f,那么二者能够进行合并,合并后短语对应的CCG类型为A:f(g).第二条规则与第一条规则类似,只是方向不同;(:前是句法类型,后是语义类型) -
组合(composition)操作。该操作包含下述两条合并规则:
和应用操作不同,组合操作合并的是两个函数类型语义表示,而应用操作合并的是一个函数类型语义表示和一个实体类型语义表示; -
类型转化(type shifting)操作。该操作通过在语义分析过程中添加或减少信息来保证语义分析能够顺利完成。例如,句子 flights boston to new york(从波士顿到纽约的航班)省略了单词from,其省略的语义信息可以通过 type shifting方式扩展生成回来。
上例中使用的type shifting 规则是 N P : c ⟹ N N : λ f . λ x . f ( x ) ∧ p ( x , c ) NP:c \Longrightarrow N\N:\lambda f.\lambda x.f(x) \land p(x,c) NP:c⟹NN:λf.λx.f(x)∧p(x,c)。句子American Airlines from New York 对应的CCG语义分析过程如下:
上例中使用的type shifting 规则是KaTeX parse error: Undefined control sequence: \lambdax at position 27: …rightarrow N:f(\̲l̲a̲m̲b̲d̲a̲x̲.true).该规则将函数f(x)从短语 from New York 对应的语义表示中移除了。 -
并列(coordination)操作。该操作采用交操作或并操作,对满足并列关系的相邻短语片段进行合并。
本小节介绍了一种最基本的 CCG语义分析方法[3]。该研究方向在近年来出现很多相关工作,分别从不同角度推进基于CCG的语义分析研究。Kwiatkowski等人提出改进的规则抽取方法用于抽取规则模板[4],能够提升CCG句法分析器的鲁棒性。Zhang、Clark 等人使用基于 Shift-Reduce 的语义分析算法[5-7],能够提升CCG语义分析器的处理速度。Artzi 等人使用AMR(abstract meaning representation)替换 λ − \lambda- λ−算子表示 CCG语义分析规则中的语义类型[8].Reddy等人基于CCG分析结果提出一种基于图的语义分方法[10],用于知识图谱问答任务。
- 小插曲
在CCG中,句子没有单一的结构,就像在其他语法模型中一样。这里用一个维基百科的例子直观的感受一下。
例子地址:https://en.wikipedia.org/wiki/Combinatory_categorial_grammar
Given a sentence:the dog bit(咬) John
2 基于SCFG的语义分析
基于同步上下文无关文法(synchronous context-free grammar, SCFG)的语义分析规则具有如下形式:
X
→
⟨
α
,
β
⟩
X \rightarrow \langle \alpha,\beta\rangle
X→⟨α,β⟩
α
\alpha
α表示自然语言部分,
β
\beta
β表示
α
\alpha
α对应的语义表示部分,X表示当前规则的类型和
α
,
β
\alpha,\beta
α,β均允许包含非终结符,并且满足如下三个条件:①
α
\alpha
α和
β
\beta
β中的非终结符数目相同②
α
\alpha
α中每个非终结符对应一个规则类型③
α
\alpha
α和
β
\beta
β中的非终结符存在一一对应的关系。下面通过四条 SCFG语义分析规则实例进行具体说明。
- PERSON → \rightarrow → <Tom Hanks,/m/0bxtg>。 该规则将自然语言短语 Tom Hanks 映射到语义表示/m/0bxtg,并指明规则类型是 PERSON.
- FILM → \rightarrow → <movies, λ x . T y p e ( x , F i l m ) \lambda x.Type(x,Film) λx.Type(x,Film)>。该规则将自然语言短语 movies 映射到语义表示 λ x . T y p e ( x , F i l m ) \lambda x.Type(x,Film) λx.Type(x,Film),并指明规则类型是 FILM.
- FILM → \rightarrow →<starred by P E R S O N 1 PERSON_1 PERSON1, λ x . S t a r r e d B y ( x , # 1 ) \lambda x.StarredBy(x,\#_1) λx.StarredBy(x,#1)>.该规则将自然语言短语 starred by P E R S O N 1 PERSON_1 PERSON1映射到语义表示 λ x . S t a r r e d B y ( x , # 1 ) \lambda x.StarredBy(x,\#1) λx.StarredBy(x,#1)并指明规则类型是FILM. P E R S O N 1 PERSON_1 PERSON1和 # 1 \#_1 #1是(对应的)非终结符,脚注表示非终结符之间的对应关系。在使用SCFG规则进行语义分析的过程中,如果某个规则的自然语言部分包含一个非终结符并且该非终结符(的类型)和另一个规则的类型相同,那么这两个规则可以进行合并(比如规则3和规则1)。
- FILM → \rightarrow → < F I L M 1 F I L M 2 FILM_1FILM_2 FILM1FILM2, # 1 ∧ # 2 \#_1 \land \#2 #1∧#2>。给定两个相邻的 FILM类型非终结符(规则2、3的自然语言部分),该规则通过交操作( ∧ \land ∧)对二者对应的语义表示进行合并(规则2、3的语义表示部分)。
给定上述四条规则,这里用一个简单的例子介绍基于SCFG的语义分析是如何工作的。给定自然语言问题 movies starred by Tom Hanks(Tom Hanks主演的电影),首先使用规则1 和规则2将问题中的短语 Tom Hanks 和 movies分别映射到语义表示/m/0bxtg 和
λ
x
.
T
y
p
e
(
x
,
F
i
l
m
)
\lambda x.Type(x,Film)
λx.Type(x,Film)。由于规则1的类型是 PERSON,规则3中自然语言部分包含相同类型(PERSON类型)的非终结符,因此可以对规则1和规则3进行合并,生成短语 starred by Tom Hanks对应的语义表示
λ
x
.
S
t
a
r
r
e
d
B
y
(
x
,
/
m
/
0
b
x
t
g
)
\lambda x.StarredBy(x,/m/0bxtg)
λx.StarredBy(x,/m/0bxtg)。在这个合并过程中,使用规则1中(自然语言部分)Tom Hanks对规则3中(自然语言部分)非终结符
P
E
R
S
O
N
1
PERSON_1
PERSON1进行替换,使用规则1中(语义表示部分)/m/0bxtg对规则3中(语义表示部分)非终结符
#
1
\#_1
#1进行替换。最后,规则4通过合并 movies和starred by Tom Hanks 的语义表示,生成整个问题的语义表示
λ
x
.
T
y
p
e
(
x
,
F
i
l
m
)
∧
S
t
a
r
r
e
d
B
y
(
x
,
/
m
/
0
b
x
t
g
)
\lambda x.Type(x,Film) \land StarredBy(x,/m/0bxtg)
λx.Type(x,Film)∧StarredBy(x,/m/0bxtg).下图给出上述过程的图形化描述:
和CCG语义分析方法类型一样,SCFG 语义分析方法也包含下述三个任务:SCFG语义分析规则获取、SCFG语义分析的算法以及SCFG 语义分析的模型训练。
常见的规则获取方法分为如下两类:
第一类方法基于知识图谱(结构化)和文本形式的语料(非结构化)抽取短语级SCFG语义分析规则。首先,基于给定知识图谱中的一个谓词p和所有满足该谓词的实体对,对语料中的句子进行实体回标,并保留至少包含一个实体对的句子。然后,对每个保留下来的句子,将回标实体对之间的上下文c看作是谓词p对应的自然语言表示。该过程基于如下假设:如果满足谓词p的两个实体同时出现在一个句子中,那么该句子的上下文c很有可能在描述该谓词p.例如,给定谓词 FounderOf 和 满足该谓词的一个实体对<Bill Gates,Microsoft>,首先对句子 Bill Gates is the founder of Microsoft 进行实体回标,并抽取出谓词 FounderOf 对应的上下文短语(自然语言表示)is the founder of.然后,根据谓词和上下文短语的对应关系以及回标实体的类型,生成如下四条SCFG语义分析规则。
- PERSON → \rightarrow → <Bill Gates,Bill Gates>
- ORGANIZATION → \rightarrow → <Microsoft,Microsoft>
- PERSON → \rightarrow → <is the founder of O R G A N I Z A T I O N 1 ORGANIZATION_1 ORGANIZATION1, λ x . F o u n d e r O f ( x , # 1 ) \lambda x.FounderOf(x,\#_1) λx.FounderOf(x,#1)>
- ORGANIZATION → \rightarrow → < P E R S O N 1 PERSON_1 PERSON1 is the founder of, λ x . F o u n d e r O f ( # 1 , x ) \lambda x.FounderOf(\#_1,x) λx.FounderOf(#1,x)>
最后,基于全部抽取结果对应的统计信息,对每个(c,p)对进行置信度打分,并基于置信度较高的 { ( c i , p i ) } \{(c_i,p_i)\} {(ci,pi)}集合生成带有权重信息的SCFG语义分析规则。
第二种方式基于搜索引擎查询日志抽取句子级 SCFG 语义分析规则。首先,使用知识图谱对日志中的查询问题进行实体链接,并保留仅包含一个实体(提及)的查询问题。然后,将保留下来问题中的实体替换为对应的非终结符(即该实体在知识图谱中的类型,如把Bill Gates替换为Person),生成句子级问题模板。最后,对高频问题模板进行人工谓词标注,得到句子级SCFG语义分析规则。例如,给定查询问题 who is founder of Microsoft,按照上述过程能够抽取出来的SCFG规则是:PERSON → \rightarrow → <who is founder of O R G A N I Z A T I O N 1 ORGANIZATION_1 ORGANIZATION1, λ x . F o u n d e r O f ( x , # 1 ) \lambda x.FounderOf(x,\#_1) λx.FounderOf(x,#1)>.
上述两种规则抽取方法各具特点:方法一通过自动的方式进行规则抽取,抽取结果是短语粒度的规则。从不同句子中抽取出来的SCFG规则能够通过组合的方式对未见过的问句进行语义分析,因此基于该类规则构建的语义分析器鲁棒性更好。但由于该类方法抽取得到的规则中包含噪音并且数目通常很大,因此无法直接进行人工标注;方法二通过自动加人工的方式进行规则抽取,抽取结果是句子粒度的规则。每个规则都来自于一个完整的查询问题,一旦和输入问题匹配成功,对应生成的语义表示质量很高,因此在实际产品中这类规则的使用最多。不过,该类规则一旦和输入问题匹配失败,整个语义分析就失败了。
和基于CCG的语义分析算法相同,基于 SCFG的语义分析算法采用自底向上的 CYK 算法进行语义分析,并将每个SCFG语义分析树对应的模型得分表示成一组特征的加权求和。不同特征的权重通过在标注数据上使用梯度下降算法得到[10-12]
3. 基于DCS的语义分析
依存组合语义(dependency-based compositional semantics,DCS)[13]是由斯坦福提出的一种语义表示方法。
DCS拥有和 λ − \lambda- λ−算子类似的表示能力,但该形式语言的定义更贴近知识图谱的存储结构。关于DCS相关的部分概念(包括连接、交、并、否定和特殊的高阶函数操作)再上一篇博客中已经介绍过了,这里再介绍一种特殊的操作--桥接。
桥接(bridging)操作把两个独立的语义表示片段连接起来。在语义分析过程中,句子中不同片段对应的语义表示可能无法直接进行合并。为了保证语义分析能够尽量完成,需要尽可能连接这些离散的语义表示片段,这就是引入桥接操作的目的。当然,并不是任意两个语义表示片段都能够通过桥接操作建立联系,对于那些在知识图谱中存在谓词关联并满足上述类型约束的语义表示片段,可以采用桥接操作将二者连接起来。该操作主要针对语义分析中经常遇到的表达省略问题。DCS采用三种桥接技术:
- 第一种桥接操作作用于一个一元语义表示u(实体),将其转化为类型为t的语义表示b.u。该操作中谓词b需要满足的条件是:其右端的宾语实体类型必须是t.
- 第二种桥接操作作用于两个类型分别为 t 1 t_1 t1和 t 2 t_2 t2的一元语义表示 u 1 u_1 u1和 u 2 u_2 u2,将其转化为类型为 t 1 t_1 t1的语义表示 u 1 ⊓ b . u 2 u_1\sqcap b.u_2 u1⊓b.u2。该操作中谓词b需要满足的条件是:其左右两端的两个实体类型必须是 t 1 t_1 t1和 t 2 t_2 t2,这是因为只有类型相同的两个一元语义表示才能够通过交操作( ⊓ \sqcap ⊓)进行合并。
- 第三种桥接操作作用于两个语义表示
b
1
.
b
2
.
u
′
b_1.b_2.u'
b1.b2.u′和u,将其转化为语义表示
b
1
.
(
b
2
.
u
′
⊓
b
.
u
)
b_1.(b_2.u'\sqcap b.u)
b1.(b2.u′⊓b.u).该操作需要满足的条件是:①谓词b左右两端的两个实体类型必须是t和
t
1
t_1
t1②u的类型必须是t ;③谓词
b
2
b_2
b2的类型必须是
(
∗
,
t
1
)
(*,t_1)
(∗,t1)、*表示 u’的类型。下图给出采用桥接操作进行语义分析的例子。
语义表示 Type.University ⊓ \sqcap ⊓Education.BarackObama中的谓词Education 在输入问题 Which college did Obama go to?中并没有显示的对应。由于 Type.University 对应的类型是 University,BarackObama 对应的类型是 Person,而谓词 Education 左右两端的实体类型分别为Person 和 University,可以应用第二类桥接操作引入谓词 Education 对 Type.University 和 BarackObama 进行合并,生成类型为University 的语义表示。
与基于CCG和SCFG的语义分析算法类似,基于DCS的语义分析算法采用自底向上的CYK算法生成输入问题对应的语义表示候选集合。
基于DCS的语义分析模型采用对数线性形式对不同语义表示候选进行打分:
该模型的训练采用弱监督(weak supervision)的方式。该方法基于训练数据中每个问题的答案从该问题对应的语义表示候选中进行正例选择,即保证每个正例(语义表示)都能基于知识图谱推导出正确答案。然后,基于该类标注出来的正例和余下的负例进行特征权重更新,使得每个问题的正例语义表示候选对应的得分尽可能比负例候选对应的得分高。
DCS语义分析器用到的特征包含下述几类:对齐特征,包括自然语言短语 r 1 r_1 r1在抽取中对应的实体对数目 F ( r 1 ) F(r_1) F(r1)、谓词 r 2 r_2 r2在知识库中对应的实体对数目 F ( r 2 ) F(r_2) F(r2)、 F ( r 1 ) F(r_1) F(r1)和 F ( r 2 ) F(r_2) F(r2)交集中包含的实体对数目;词汇特征,表示 r 1 r_1 r1和 r 2 r_2 r2作为对齐对的可能性;文本相似度特征,表示 r 1 r_1 r1是否是 r 2 r_2 r2的前缀、子集、后缀或者完全相等;跳词特征,DCS 允许语义分析过程中跳过一些停用词或系统无法识别的单词或短语。跳词特征用来表示生成某个语义表示究竟忽略了多少问题中出现的单词。直观上,该特征值越大,说明对应的语义表示候选越不可靠,因为它忽略了问题中出现的很多单词;问题词特征,该特征基于规则方式,将一些经常出现的问题词短语映射到对应的知识库谓词上面去。例如,where 可以映射到 Type.Location上去、how many可以映射到Count 上去等;操作特征,该特征表示在生成当前语义表示候选过程中,使用到的交操作、合并操作和桥接操作的数目。
总体来说,基于CCG、SCFG 和DCS 的语义表示方法具有相同的系统模块,包括语义规则的抽取、语义分析算法和语义分析模型训练。三种方法最大的不同在于使用的形式语言表示各具特点。这三类方法都需要借助特定的文法作为桥梁连接自然语言和语义表示。
4. 基于NMT(神经机器翻译)的语义分析
如果把自然语言对应的语义表示看成是一种特殊的语言,那么语义分析任务可以看成是一个翻译任务:将自然语言序列(源语言)翻译到对应的语义表示序列(目标语言)。
本小节介绍基于神经机器翻译(neural machine translation,NMT)技术的语义分析方法。给定自然语言问题
q
=
x
1
,
.
.
.
,
x
∣
q
∣
q=x_1,...,x_{|q|}
q=x1,...,x∣q∣,基于 NMT的语义分析方法使用“编码器-解码器”框架将q转化为对应的语义表示
a
=
y
1
,
.
.
.
,
y
∣
a
∣
a=y_1,...,y_{|a|}
a=y1,...,y∣a∣:
y
t
y_t
yt表示第t时刻生成的语义表示单元,
y
<
t
=
y
1
,
.
.
.
,
y
t
−
1
y_{<t}=y_1,...,y_{t-1}
y<t=y1,...,yt−1表示到第t时刻前已经生成的语义表示序列,
P
(
y
t
∣
y
<
t
,
q
)
P(y_t|y_{<t},q)
P(yt∣y<t,q)表示基于问题q和
y
<
t
y_{<t}
y<t生成
y
t
y_t
yt的概率。编码器(encoder)负责将输入问题q转化为向量表示,解码器(decoder)负责将q的向量表示转化为对应的语义表示a.
编码器采用一个 RNN 网络,将问题q中每个单词
x
i
x_i
xi都转化为一个隐状态向量
h
i
h_i
hi,该过程对应的数学描述如下:
上式给出基于 LSTM的编码器实现(这些式子对应LSTM单元中各种门的计算过程),
x
k
x_k
xk表示问题q中第k个单词,
f
k
,
i
k
,
o
k
f_k,i_k,o_k
fk,ik,ok分别表示第k个LSTM单元对应的遗忘门、输入门和输出门,
c
k
c_k
ck表示第k个编码单元对应的信息,
h
k
h_k
hk表示
x
k
x_k
xk对应的隐层向量表示,
W
f
,
W
i
,
W
o
,
W
,
U
f
,
U
i
,
U
o
,
U
W_f,W_i,W_o,W,U_f,U_i,U_o,U
Wf,Wi,Wo,W,Uf,Ui,Uo,U对应不同参数矩阵。
解码器采用另一个RNN网络,基于问题q的向量表示进行语义表示序列的生成,该过程对应的数学描述如下:
y
∣
q
∣
+
t
y_{|q|+t}
y∣q∣+t表示输出序列a中生成的第t个符号,
h
∣
q
∣
+
t
h_{|q|+t}
h∣q∣+t表示
y
∣
q
∣
+
t
y_{|q|+t}
y∣q∣+t对应的隐向量,
∣
q
∣
+
t
|q|+t
∣q∣+t代表隐向量表示的索引从输入端开始,
c
∣
q
∣
+
t
c_{|q|+t}
c∣q∣+t表示上下文向量,它在解码过程中根据当前已经生成的内容不断变化,其由
h
∣
q
∣
+
t
−
1
h_{|q|+t-1}
h∣q∣+t−1和编码器中的全部隐向量共同决定(注意力机制,
h
∣
q
∣
+
t
−
1
h_{|q|+t-1}
h∣q∣+t−1作为query,编码器中的全部隐向量作为key和value,query和key计算分数,再通过softmax转换为权重,再和value做一个加权求和,得到上下文向量。解码过程中,每一时刻的query是变化的,所以生成的上下文向量也是再不断的变化)。(下面的式子就是attention机制的计算过程)
解码器中在第t时刻输出的语义表示单元由下述方式决定:
上述操作基于
h
∣
q
∣
+
t
h_{|q|+t}
h∣q∣+t和
W
o
W_o
Wo参数矩阵,使用softmax操作从词汇表中选择概率最大的单元作为第t时刻的输出。每个语义表示序列的前后端分别对应两个特殊符号和,用来表示起始和结束位置。解码器一旦在某一时刻生成,则生成过程结束。
上述过程是端到端的序列-序列(Seq-to-Seq)生成模型,该模型也是神经机器翻译的典型做法。但对于语义分析任务来说,语义表示中往往存在层次化概念(例如括号可以表示一个谓词的作用范围等),而Seq-to-Seq模型并没有任何机制保证输出(生成)序列具有层次化的特性。
Seq-to-Tree模型对上述问题进行了改进,在该模型中,语义表示序列不是按从左到右的方式进行的(依次生成),而是按照从左向右加上自顶向下二者相结合的方式进行的。
下图给出一个Seq-to-Tree 的具体示例。 在编码器完成问题编码后,解码器会按照逐层的方式进行语义表示序列的生成。 对于每层生成的语义表示序列,其中允许包含一个或多个非终结符,每个非终结符表示此处需要进一步解码,生成一个语义表示子序列。该解码过程一直执行到没有任何非终结符生成为止。在上述层次化生成过程中,每个非终结符对应的向量表示会被作为条件,用于生成其对应的语义表示子序列。