基于概念化的短文本理解
预备知识
Probase
Probase是一个概念知识图谱,包含数百万的词,每个词表示一个实体、一个概念,或者两者都是。同时,它包含两种最主要的关系,即isA关系(如Barack Obama isA President)和isAttributeOf关系(population isAttributeOf country)。
isA关系存在于实体与概念之间,可以通过下式来计算一个实体属于某个概念的典型性:
P
∗
(
c
∣
e
)
=
n
(
e
,
c
)
∑
c
n
(
e
,
c
)
(
1
)
P^{*}(c \mid e)=\frac{n(e, c)}{\sum_{c} n(e, c)} (1)
P∗(c∣e)=∑cn(e,c)n(e,c)(1)
其中,n(e, c)是在语料中“e is c”这样的句子出现的频率。
概念聚类
Probase包含数百万个概念,一个实体可以对应到很多概念。例如,“tiger”这个实体可以对应到animal、exotic animal、jungle animal等概念。将这些概念全部归纳为一个animal概念有助于降维,从而减轻计算负担,并且使得实体之间的相似度得到更好的衡量,进而为推断提供便利
作者采用k-Medoids聚类算法将这些概念聚为5000个簇,如animal、exotic animal、jungle animal等概念全部聚为一个animal概念簇。相应地,每一个实体被映射到概念簇,而不是原来的单个概念上。一个实体e对应到一个概念簇c的典型度定义为:
P
(
c
∣
e
)
=
∑
c
∗
∈
c
P
∗
(
c
∗
∣
e
)
(
2
)
P(c \mid e)=\sum_{c^{*} \in c} P^{*}\left(c^{*} \mid e\right) (2)
P(c∣e)=c∗∈c∑P∗(c∗∣e)(2)
属性
属性是根据如下的模板从语料中挖掘出来的:
the<attr>of(the/a/an)<term>(is/are/was/were/…)
此处<attr>表示待抽取的属性,<term>表示一个概念(如国家)或一个实体(如中国)
例如, “the capital of China”可以得到“capital”是“China”的一个属性,然后因为“China”是属于Country这个概念的,因此“capital”也是Country的一个属性。
属性的典型度如下式表示
P
(
c
∣
a
)
=
f
(
n
c
∗
,
a
,
n
e
1
,
a
,
⋯
,
n
e
k
,
a
)
(
3
)
P(c \mid a)=f\left(n_{c^{*}, a}, n_{e_{1}, a}, \cdots, n_{e_{k}, a}\right) (3)
P(c∣a)=f(nc∗,a,ne1,a,⋯,nek,a)(3)
其中,nc*,a表示属性a与一个概念c以上述句式出现的频率,nei, a表示属性a与一个实体ei以上述句式出现的频率,并且ei是属于概念c的一个实体
概念化
将短文本(如搜索引擎中的查询关键字)所包含的实体映射到概念空间上,从而支持机器进行进一步的计算。以一个搜索引擎中的查询来说,概念化就是要推断出该查询所包含的词最有可能对应的概念,如查询“watch harry potter”。“harry potter”可以指各种概念,包括book、movie和character等。但在该查询中,它最有可能对应的概念是movie。
概念化步骤
概念化分为两步,第一步为离线构建,第二步为在线查询。
- 首先构建出一个关于词汇的知识库,将非实体词,包括动词、形容词,以及实体和常见属性等对应到相关的概念上
- 将一个短文本中包含的词语、相关的概念,用步骤一种构建的词汇库将它们之间的关系用一个图模型来表示,然后采用基于随机游走的算法来得到对应的概念。
离线构建词汇知识库
词汇知识库的构建主要是为了得到如下两个概率:
P(z|t)
:这个概率表示,给定一个词语t,它的词性z(包括动词、形容词、实体或者实体的属性)出现的概率是多少。例如,当“watch”在一段语料中出现时,它有0.8374的几率是动词,P(verb|watch)=0.8374。
P(c|t, z)
:这个概率表示,当一个词语t以词性z出现时,它与概念c有关的概率是多少。例如,P(movie|watch, verb)这个概率指的是当watch作为一个动词出现时,它与movie相关的概率。
这两个概率主要通过统计网络上的文档得到,首先使用斯坦福的自然语言处理工具Stanford Parser对文档进行分词和词性标注,然后从中提取出动词和形容词,再根据解析出的依赖关系,与Probase相结合,找出这些动词和形容词作用的对象,以及它们在Probase中对应的实体或概念。
P(z|t)
由下式得到
P ( z ∣ t ) = n ( t , z ) n ( t ) ( 4 ) P(z \mid t)=\frac{n(t, z)}{ n(t)} (4) P(z∣t)=n(t)n(t,z)(4)
n(t, z)表示在语料中词语t以词性z出现的次数,n(t)是词语t出现的总次数
求P(c|t, z)
时,由于词性z可能是实体、属性、动词或形容词,需分别对这几种情况进行讨论:
- 当z是实体时,
P(c|t, z=instance)
就退化成P(c|e),就可以用式(2)求概率了:
P ( c ∣ t , z = i n s t a n c e ) = P ( c ∣ e ) ( 5 ) P(c \mid t,z=instance)=P(c \mid e) (5) P(c∣t,z=instance)=P(c∣e)(5)
- 当z是属性时,P(c|t, z=attribute)就退化成P(c|a),就可以用式(3)求概率了:
P ( c ∣ t , z = a t t r i b u t e ) = P ( c ∣ a ) ( 6 ) P(c \mid t,z=attribute)=P(c \mid a) (6) P(c∣t,z=attribute)=P(c∣a)(6)
- 当z是动词或形容词在这种情况下,首先挖掘出动词/形容词与实体之间的关系,再通过实体作为桥梁(如下图所示),得到动词/形容词和概念之间的联系
同样根据共现关系来求得在词语t在词性为z时的概率,具体式7所示
P ( e ∣ t , z ) = n z ( e , t ) ∑ e ∗ n z ( e ∗ , t ) ( 7 ) P(e \mid t, z)=\frac{n_{z}(e, t)}{\sum_{e^{*}} n_{z}\left(e^{*}, t\right)} (7) P(e∣t,z)=∑e∗nz(e∗,t)nz(e,t)(7)
通过实体作为桥梁就可以得到最终想要的概率,如式8和式9所示
P ( c ∣ t , verb ) = ∑ e ∈ c P ( c , e ∣ t , verb ) = ∑ e ∈ c P ( c ∣ e , t , verb ) × P ( e ∣ t , verb ) = ∑ c ∈ c P ( c ∣ e ) × P ( e ∣ t , verb ) ( 8 ) \begin{aligned} P(c \mid t, \text { verb }) &=\sum_{e \in c} P(c, e \mid t, \text { verb }) \\ &=\sum_{e \in c} P(c \mid e, t, \text { verb }) \times P(e \mid t, \text { verb }) \\ &=\sum_{c \in c} P(c \mid e) \times P(e \mid t, \text { verb }) \end{aligned} (8) P(c∣t, verb )=e∈c∑P(c,e∣t, verb )=e∈c∑P(c∣e,t, verb )×P(e∣t, verb )=c∈c∑P(c∣e)×P(e∣t, verb )(8)
P ( c ∣ t , adjective ) = ∑ c ∈ c P ( c ∣ e ) × P ( e ∣ t , adjective ) ( 9 ) P(c \mid t, \text{ adjective })=\sum_{c \in c} P(c \mid e) \times P(e \mid t, \text { adjective }) (9) P(c∣t, adjective )=c∈c∑P(c∣e)×P(e∣t, adjective )(9)
其中P(c|e)由式(2)给出,P(e|t, verb)和P(e|t,adjective)由式(7)给出。
在计算完以上概率之后,就可以得到一个语义网络了,其中顶点代表词,包括实体、概念、属性、动词、形容词。下图显示了语义网络中围绕“watch”的一个子图。
语义网络中的顶点可以分为两种,一种是概念词(以矩形表示),另一种是非概念词(以椭圆表示)。顶点之间包含三种关系:①实体与概念之间的isA关系,②动词/形容词/属性与概念之间的关联关系,以及③概念之间的关联关系。
这三种关系的权重确定可分为两种情况。第一种情况是非概念词和概念词之间的关系,用P(c|t)表示,对应前两种关系, 计算方式如式10。第二种情况,对应第三种关系,体现了两个概念之间的相关程度,如product和company就是两个紧密联系的概念,用P(c1|c2)表示,计算方式如式11。
P ( c ∣ t ) = ∑ z P ( c ∣ t , z ) × P ( z ∣ t ) ( 10 ) P(c \mid t)=\sum_{z} P\left(c \mid t,z\right) \times P(z \mid t) \text { } (10) P(c∣t)=z∑P(c∣t,z)×P(z∣t) (10)
P ( c 2 ∣ c 1 ) = ∑ e i ∈ c 1 , e j ∈ c 2 n ( e i , e j ) ∑ c ∈ C ∑ e i ∈ c 1 , e j ∈ c n ( e i , e j ) ( 11 ) P\left(c_{2} \mid c_{1}\right)=\frac{\sum_{e_{i} \in c_{1} , e_{j} \in c_{2}} n\left(e_{i}, e_{j}\right)}{\sum_{c \in C} \sum_{e_{i} \in c_{1} , e_{j} \in c} n\left(e_{i}, e_{j}\right)} (11) P(c2∣c1)=∑c∈C∑ei∈c1,ej∈cn(ei,ej)∑ei∈c1,ej∈c2n(ei,ej)(11)
式11中n(ei, ej)是概念c1和概念c2包含的无歧义实体的共现次数,分母用来进行归一化。
查询理解
查询概念化的算法包括三个组成部分:第一部分对查询进行分词,第二部分利用分好的词构建语义子图,第三部分执行迭代算法找出各个词最可能对应的概念。
1.分词。首先将一个查询分为一组词,记为T={t1, t2, …}。把Probase作为词典,可以识别出一个查询中出现的词,并且只考虑最长子串,也就是说,如果一个词完全包含在另一个词中,那么只取最长的那个子串作为一个词。在某些情况下,得到的词会有部分重叠,如“new york times square”可以解析为“new york”和“times square”的组合,也可以解析成“new york times”与“square”的组合,在这种情况下,两种分词都被认为是有效的,在下文构建语义子图时,两种分词产生的结果都将作为顶点包含在图中。 分完词后,同时去掉连词和介词,因为对概念化不重要。
- 构建语义子图。 步骤一中得到的词可以对应到离线构建好的语义网络中的一些顶点,每个顶点又与一些概念相关联,把这些词、相关概念和相互之间的边从整个大的语义网络中抽取出来,就成为该查询对应的语义子图。下面显示了查询“new york times square”和“cheap disney watch”对应的子图
-
执行迭代算法,使用多轮随机游走的方法来为每一个词找到最可能对应的概念,每一轮随机游走中又包含若干次迭代。
在第一轮随机游走中,用向量E表示边的权重,向量Vn表示在随机游走的第n次迭代时顶点的权重。也就是说,在一轮随机游走的若干次迭代过程中,边的权重是不变的,而顶点的权重会随着传播而改变。具体来说,边的权重被初始化为
E [ e ] = { P ( c ∣ t ) e : t → c P ( c 2 ∣ c 1 ) e : c 1 → c 2 ( 12 ) \boldsymbol{E}[e]=\left\{\begin{array}{ll} P(c \mid t) & e: t \rightarrow c \\ P\left(c_{2} \mid c_{1}\right) & e: c_{1} \rightarrow c_{2} \end{array}\right. (12) E[e]={P(c∣t)P(c2∣c1)e:t→ce:c1→c2(12)其中P(c|t)和P(c2|c1)分别由式(10)和式(11)得到。
顶点的权重被初始化为:
V
0
[
v
]
=
{
1
/
∣
T
∣
v
是一个词
0
v
是一个概念
(
13
)
\boldsymbol{V}^{0}[v]=\left\{\begin{array}{ll} 1 /|T| & v \text { 是一个词 } \\ 0 & v \text { 是一个概念 } \end{array}\right. (13)
V0[v]={1/∣T∣0v 是一个词 v 是一个概念 (13)
其中|T|是该查询中词个数。
每一轮随机游走采用带重启的随机游走[149]来传播权重, 采用下式来更新迭代过程中的参数:
V
n
=
(
1
−
α
)
E
′
×
V
n
−
1
+
α
V
0
(
14
)
\boldsymbol{V}^{n}=(1-\alpha) \boldsymbol{E}^{\prime} \times \boldsymbol{V}^{n-1}+\alpha \boldsymbol{V}^{0} (14)
Vn=(1−α)E′×Vn−1+αV0(14)
其中E′是将向量E写为矩阵的形式,由式(12)得到
完成一轮随机游走之后,顶点的权重就变为新的向量,再根据下式更新由词指向概念的各条边的权重
E
[
e
]
←
(
1
−
β
)
×
V
n
[
c
]
+
β
×
E
[
e
]
e
:
t
→
c
(
15
)
\boldsymbol{E}[e] \leftarrow(1-\beta) \times \boldsymbol{V}^{n}[c]+\beta \times \boldsymbol{E}[e] e: t \rightarrow c (15)
E[e]←(1−β)×Vn[c]+β×E[e]e:t→c(15)
调整完边的权重之后,又开始新一轮随机游走。上述过程将重复若干次,直到算法收敛, 算法收敛时,通过下式计算词t对应的概念
p
(
c
∣
t
,
q
)
=
E
(
t
→
c
)
∑
c
i
E
(
t
→
c
i
)
t
∈
q
(
16
)
p(c \mid t, q)=\frac{\boldsymbol{E}(t \rightarrow c)}{\sum_{c_{i}} \boldsymbol{E}\left(t \rightarrow c_{i}\right)} \quad t \in q (16)
p(c∣t,q)=∑ciE(t→ci)E(t→c)t∈q(16)