赞
踩
期刊/会议:COLING 2022
事件因果关系识别(ECI)是事件因果关系理解的重要任务,其目的是检测两个给定文本事件之间是否存在因果关系。然而,ECI任务忽略了关键的事件结构和因果关系组件信息,使其难以用于下游应用。在本文中,我们探索了一种新的任务,即事件因果关系提取(ECE),旨在从纯文本中提取因果事件对及其结构化事件信息。ECE任务更具挑战性,因为每个事件可以包含多个事件论元,在事件之间提出细粒度的相关性,以确定因果事件对。因此,我们提出了一种带有双网格标记方案(dual grid tagging scheme)的方法来捕获ECE的事件内和事件间论元相关性。在此基础上,我们设计了一种事件类型增强模型架构来实现双网格标记方案。实验证明了我们的方法的有效性,广泛的分析指出了ECE未来的几个方向。
事件因果关系(Liu et al, 2020;Cao等人,2021)表示两个事件之间的明确因果关系,构成特定的因果事件对。如图1所示,Price Rise事件(全球油价上涨)和Cost Rise事件(国际航运业成本增加)之间存在因果关系。理解这样的事件因果关系可以促进各种下游应用,包括事件预测(Hashimoto等人,2014)、智能搜索(Rudnik等人,2019)和问题回答(Costa等人,2020),这对自然语言理解很重要。
近年来,它引起了事件因果关系识别(ECI)的研究兴趣(Liu et al., 2020; Cao et al.,2021;Zuo et al.,2021a,b, 2020;Tran Phu and Nguyen, 2021),旨在检测两个给定事件之间是否存在因果关系。尽管ECI任务取得了成功,但仍有两个问题未能解决。1)事件结构缺失,ECI中的每个事件仅使用反映其发生的单词或短语来表示,而忽略了显式的事件类型和事件论元(即参与事件的实体)。缺乏这样的事件结构将失去理解事件因果关系的有价值的线索。如图1所示,“oil”在Price Rise-type-cause事件中扮演了Product角色,这意味着对“shipping industry”产生了一个Cost Rise-type-effect事件。2)因果成分缺失(Causality Component Missing), ECI只预测给定事件对之间是否存在因果关系,忽略区分具体的因果事件因果成分。受这些问题的限制,ECI对事件之间的因果关系探究不足,这就需要对事件因果关系的认识进一步提升。
在CCKS(2021)中关于事件因果关系的讨论的激励下,我们制定了一个被称为事件因果关系提取(ECE)的任务。如图1所示,ECE旨在端到端地从纯文本中提取带有结构化事件信息的因果事件对。与ECI相比,ECE阐明了事件因果关系,包括事件结构,即事件类型和论元,以及具体的因果关系组件,使其更有信息性,以支持各种下游应用(Wang et al, 2021a)。
直观地说,可以通过依次抽取结构化事件,然后对它们的因果关系进行分类来实现ECE。不幸的是,这样的范例很容易出现冗余事件对问题,其中不可避免地会提取与因果关系无关的事件,从而混淆因果关系决策。另一个有希望的方向是借用关系三元组提取(RTE)的思想,它们共享类似的任务公式。然而,与以实体为中心的RTE任务相比,以事件为中心的ECE提出了新的挑战:1)事件内论元相关性(Intra-event Argument correlation)。具体而言,ECE侧重于事件,这是一种保持其论元之间相互关联的结构。例如在图1中,Demand Rise事件中的论元“new energy”和“Ammonia fuel”具有很强的语义相关性。虽然RTE侧重于单个实体,因此简单地采用RTE模型无法捕获此类相关性来派生事件结构。2)事件间论元相关性。具体地说,因果事件对中涉及的事件论元通常显示因果关系推断的语义相关性。如图1所示,发生在“worldwide” Region 的事件Pricing_Rise可以暗示发生在“international” region的事件Cost_Rise。结果表明,事件间论元相关性不仅为确定因果关系提供了重要线索,而且有利于可靠的因果事件提取,且因果对之间相互确认。
在本文中,我们提出了一种名为DualCor的有效方法,它利用ECE的双网格标记方案探索了事件内和事件间的论元相关性。具体来说,DualCor包含两个关于事件类型和输入句子的网格标记表,分别派生因果事件的事件结构。在每个表中,DualCor根据不同的事件类型提取结构化的事件论元,自然地考虑到事件内部论元的相关性。此外,在预测原因/结果表中的事件论元时,DualCor还预测它们对应的结果/原因事件论元,作为辅助论元来促进事件论元之间的相关性。通过确认另一个表中的辅助论元,DualCor匹配可靠的因果事件对作为预测。为了实现上述双网格标记方案,我们进一步设计了一种类型感知编码器,该编码器利用基本事件类型信息细化文本表示,以增强论元预测。我们在可感知类型的文本表示上进行双网格标记,以导出最终的因果事件对。总体而言,我们的主要贡献包括:
(1)为了促进对事件因果关系的理解,我们制定了一个新的任务,称为事件因果关系提取(ECE),它继承了ECI,推动了对事件因果关系理解的研究。
(2)我们提出了一种新颖的方法DualCor,以利用ECE的事件内和事件间的论元相关性,并将其作为激励后续研究的基线。
(3)在ECE数据集上的实验反映了DualCor的有效性,广泛的分析显示了未来工作的潜在研究方向。
本文探讨了一种新的ECE任务,旨在从纯文本中提取具有结构化事件信息的因果事件对。现有的事件因果关系研究主要集中在事件因果关系识别上,即预测之前给定的事件对的因果关系。他们可以大致分为三类:(1)早期作品利用语言特征(Riaz and Girju, 2013;Gao等人,2019),因果模式(Hu等人,2017;Do等人,2011)和统计因果关联(Riaz和Girju, 2014)来探索事件之间的因果关系。(2)近期研究人员(Liu et al, 2020;Cao等,2021;Zuo等人,2021a,b, 2020)的主要重点是在有限的训练数据下结合外部知识进行因果关系识别。(3)与上述在单句中进行ECI的工作不同,Tran Phu和Nguyen(2021)关注的是文档级ECI,其中给定的事件分散在多个句子中。尽管取得了成功,但它们都存在事件结构缺失和因果关系缺失的问题。据我们所知,ECE是第一个同时获得结构化事件信息和显式因果关系组件的结构,这可以更好地支持下游应用程序。
除了ECE,关系三元组提取(RTE) (Yu等,2020;Cong等人,2022)有类似的任务公式,其思想实际上来自于ECE。具体来说,RTE检测句子中的实体对,并预测它们之间预定义的关系类型。现有的RTE方法大致可分为两类。(1)传统的联合方法,通过任务分解,通过顺序相关步骤求解RTE (Wei et al, 2020;Y u等,2020;Cong等人,2020)或序列生成(Zeng等人,2018;Nayak和Ng, 2020)。不幸的是,由于多个步骤之间从训练到推断的差距,这些方法都存在暴露偏差(exposure bias)(Wang et al, 2020)问题。(2)统一联合方法,即在一段时间内同时导出三元组的实体和关系,步骤之间不存在级联,从而避免暴露偏差。这些方法以序列标记方式(Zheng et al, 2017)或网格填充方式(Wang et al, 2021b, 2020)解决RTE。然而,以实体为中心的RTE方法似乎难以完成以事件为中心的任务,因为事件在事件内部和事件之间呈现更复杂的论元相关性。
事件因果关系提取(ECE)旨在从纯文本中推导出因果事件对。在这里,一个因果事件对包含一个Cause组件和一个Effect组件,其中每个组件表示具有特定事件类型的事件,其事件论元及其事件角色。给定一段文本,需要一个事件因果关系提取系统来预测其中的所有因果事件对,如图1所示。
本节介绍了我们提出的ECE双网格标记方案,包括标记方案及其解码策略。第5节介绍了模型的具体实现。
一般情况下,我们为因果事件分别构建了两个网格标记表,每个表提取了句子中可能发生的所有事件。在形式上,给定一个 n n n个token句和 m m m个预定义的事件类型,我们分别为原因和结果事件构造两个 m × n m × n m×n的网格表。如图2所示,每行表示同一事件类型中的论元,而每列表示根据事件类型分配给句子中的token的标记。
对于表格中的每一行,我们用一个{Cor-Rol-Bdy}
形式的标签填充它,该标签由三个字段组成,分别是correlation-field
、role-field
和boundary-field
:
(1)对于boundary-field
:
B
d
y
∈
{
S
t
a
,
E
n
d
}
Bdy∈\{Sta, End\}
Bdy∈{Sta,End},我们设计它来表示论元跨度的起始位置和结束位置。例如,在图2(a)中,我们通过匹配Cor-Rol-Sta
和Cor-Rol-End
标记来匹配论元“corn seeds”。
(2)对于role-field
:
R
o
l
∈
{
R
o
l
i
}
i
Rol∈\{Rol_i\}_i
Rol∈{Roli}i (
i
i
i为角色索引),我们设计它来表示一个事件中每个论元的事件角色,从而构成一个事件结构。例如,在图2(a)中,我们根据Price_Rising行中的Cor-Product-Bdy
标签,将论元“corn seeds”确定为Price_Rising类型事件中的Product-role论元。
(3)对于correlation-field
:
C
o
r
∈
{
I
n
t
r
a
,
I
n
t
e
r
}
Cor∈\{Intra, Inter\}
Cor∈{Intra,Inter},我们设计它来表示因果事件对中的事件论元相关性。具体来说,Intra表示一个因果关系组件中属于同一事件的论元,而Inter表示另一个因果关系组件中的论元。例如,在预测原因表中的原因事件时,我们不仅预测具有原因事件类型的原因论元(标记为Intra),还预测潜在的结果论元(标记为Inter),作为因果对匹配中相互确认的辅助论元。图2(a)显示,我们不仅使用Intra为Price_Risetype原因事件预测论元“corn seeds”,而且还使用Inter标记作为影响事件论元预测“corn planting”。通过将论元“corn planting”与effect表中的Intra标记相匹配,我们可以派生一个Price_Rise类型和Profit_Decline类型的事件对。
在标记方案的基础上,该模型可以自然地提取因果关系事件对及其论元。此外,该方案在单独的类型行中学习每种类型的事件论元,允许模型考虑与特定类型信息的内部事件论元相关性。此外,标记方案强制模型从一个因果关系组件中提取论元,感知另一个因果关系组件中的论元,从而捕获事件之间的论元相关性。
在标记方案的基础上,介绍了标记结果的解码策略。具体来说,我们将该过程分解为论元跨度解码、事件结构解码和因果对解码三个步骤。附录A还提供了这三个步骤的图形说明。
步骤1,论元跨度解码。为了推导因果事件的论元范围,我们采用了最接近的起始-结束匹配原则(Wei et al, 2020)。具体来说,对于在同一行中具有相同的correlation-field和role-filed的条目标签,我们根据位置字段将起始位置与最近的结束位置匹配,以获得候选论元跨度。例如,在图2(a)中,这一步应该预测“agriculture products”、“nationwide”、“corn seeds”、“corn planting”和“across the country”作为候选论元范围。
步骤2,事件结构解码。为了获得因果事件的事件结构,我们收集附加到相同事件类型的候选论元范围。具体来说,我们将事件论元与属于同一行的相关字段Intra合并,从而生成结构化的候选事件。例如,在图2(a)中,给定步骤1中的候选论元范围,该步骤应该选择带有Intra标记的“agriculture products”、“nationwide”和“corn seeds”作为price_rising类型的候选原因事件论元。
步骤3,因果对解码。为了获得因果关系对,我们匹配候选因果事件之间的事件间相关论元。具体来说,我们搜索同时关联相关字段Intra和Inter的两个事件表中同时出现的论元,然后确认因果事件论元。例如,在图2(a)中,给定步骤2中的候选事件论元,这一步应该选择“nationwide”和“corn seeds”作为真正的原因事件论元,因为在效果表中也存在带有Inter标记的“nationwide”和“corn seeds”(图2(b))。类似地,该步骤还选择“corn planting”、“across the country”作为profit_decline类型效应事件中的论元。相应地,它预测price_rise类型的原因和profit_decination类型的结果事件对,如图3所示。请注意,尽管“agriculture product”也是步骤2中price_rise类型事件的事件论元候选,但由于effect表中缺乏Inter correlation,因此它不包括在因果关系对中。
使用BERT进行编码。对于一个由
n
n
n个token
{
t
1
,
t
2
,
…
,
t
n
}
\{ t_1,t_2,\ldots,t_n \}
{t1,t2,…,tn}组成的句子,
m
m
m个预定义事件类型
{
e
1
,
e
2
,
…
,
e
m
}
\{ e_1,e_2,\ldots,e_m \}
{e1,e2,…,em},原始的输入句子将改为:
[
CLS
]
e
1
[
M
1
]
e
2
[
M
2
]
…
e
m
[
M
m
]
[
SEP
]
t
1
…
t
n
[
SEP
]
[\text{CLS}]\ e_1\ [\text{M}_1]\ e_2\ [\text{M}_2] \ldots \ e_m\ [\text{M}_m]\ [\text{SEP}] \ t_1 \ldots t_n \ [\text{SEP}]
[CLS] e1 [M1] e2 [M2]… em [Mm] [SEP] t1…tn [SEP]
其中
[
M
j
]
[\text{M}_j]
[Mj]是第
j
j
j个事件类型
e
j
e_j
ej的标记。我们将输入序列输入编码器,并使用输出表示
H
=
h
1
,
h
2
,
…
,
h
n
\mathbf{H} = \mathbf{h}_1, \mathbf{h}_2,\ldots, \mathbf{h}_n
H=h1,h2,…,hn对应的句子作为符号表示。然后,我们将事件类型标记的表示形式收集为事件类型表示形式,表示为
E
=
e
1
,
e
2
,
…
,
e
m
\mathbf{E} = \mathbf{e}_1, \mathbf{e}_2,\ldots, \mathbf{e}_m
E=e1,e2,…,em。
本节首先详细介绍用于生成条目表示的函数,然后介绍如何在两个网格表中应用它。
网格中的每个条目分别为一个token和事件类型之间的关系建模,用于事件论元推断。对于句子中第
j
j
j个事件类型
e
j
e_j
ej和第
i
i
i个token相连接的条目,将
t
i
t_i
ti和
e
j
e_j
ej的语义整合为
g
j
,
i
=
ϕ
(
e
j
,
h
i
)
g_{j,i} = \phi (e_j, h_i)
gj,i=ϕ(ej,hi),通过融合函数
ϕ
\phi
ϕ得到其表示
g
j
,
i
g_{j,i}
gj,i。直观地说,
ϕ
\phi
ϕ可以通过拼接或相加等多种语义融合方式来实现。考虑到相同的事件论元跨度在不同的事件类型中可能发挥不同的作用(Sheng et al, 2021),事件论元的决定以事件类型为条件。因此,
ϕ
\phi
ϕ应该表示事件类型和token之间的条件依赖关系。因此,我们采用条件层归一化(CLN) (Su, 2019)来实现
ϕ
\phi
ϕ。CLN主要基于层归一化(Ba et al, 2016),但它基于先验条件动态计算增益
γ
γ
γ和偏差
β
β
β,而不是直接将它们作为神经网络中的可学习参数。给定事件类型表示
e
j
\mathbf{e}_j
ej为条件,token表示
h
i
\mathbf{h}_i
hi,通过CLN实现融合函数
ϕ
\phi
ϕ为:
ϕ
(
e
j
,
h
i
)
=
CLN
(
e
j
,
h
i
)
=
γ
j
⊙
(
h
i
−
μ
i
σ
i
)
+
β
j
,
γ
j
=
W
γ
e
j
+
b
γ
,
β
j
=
W
β
e
j
+
b
β
\phi(\mathbf{e}_j,\mathbf{h}_i)=\text{CLN}(\mathbf{e}_j,\mathbf{h}_i)=\gamma_j \odot(\frac{\mathbf{h}_i-\mu_i}{\sigma_i})+\beta_j,\\ \gamma_j=\mathbf{W}_{\gamma} \mathbf{e}_j+\mathbf{b}_{\gamma},\\ \beta_j=\mathbf{W}_{\beta} \mathbf{e}_j+\mathbf{b}_{\beta}
ϕ(ej,hi)=CLN(ej,hi)=γj⊙(σihi−μi)+βj,γj=Wγej+bγ,βj=Wβej+bβ
μ
i
∈
R
,
σ
i
∈
R
\mu_i \in \mathbb{R}, \sigma_i \in \mathbb{R}
μi∈R,σi∈R是
h
i
\mathbf{h}_i
hi的均值和方差,
γ
j
∈
R
d
,
β
j
∈
R
d
\gamma_j \in \mathbb{R}^d, \beta_j \in \mathbb{R}^d
γj∈Rd,βj∈Rd指的是条件增益和偏置。通过这种方式,事件类型信息表示为条件信息,因此与token表示集成在一起。
我们使用两个语义融合函数
ϕ
c
\phi^c
ϕc,
ϕ
r
\phi^r
ϕr,分别导出因果网格表的条目表示。每个语义融合函数由一层CLN实现,得到的条目表示为:
g
j
,
i
c
=
ϕ
c
(
e
j
,
h
i
)
=
CLN
c
(
e
j
,
h
i
)
,
g
j
,
i
r
=
ϕ
r
(
e
j
,
h
i
)
=
CLN
r
(
e
j
,
h
i
)
g_{j,i}^c=\phi^c(\mathbf{e}_j,\mathbf{h}_i)=\text{CLN}^c(\mathbf{e}_j,\mathbf{h}_i),\\ g_{j,i}^r=\phi^r(\mathbf{e}_j,\mathbf{h}_i)=\text{CLN}^r(\mathbf{e}_j,\mathbf{h}_i)
gj,ic=ϕc(ej,hi)=CLNc(ej,hi),gj,ir=ϕr(ej,hi)=CLNr(ej,hi)
g
j
,
i
c
,
g
j
,
i
r
g_{j,i}^c,g_{j,i}^r
gj,ic,gj,ir是分别在原因表和结果表中的条目表示为网格标记。
由于每个表中
(
e
j
,
t
i
)
(e_j, t_i)
(ej,ti)可以同时分配多个标签,因此我们对条目表示进行多标签分类。具体来说,全连接网络预测
(
e
j
,
t
i
)
(e_j, t_i)
(ej,ti)的每个标签的概率为:
p
j
,
i
I
=
sigmoid
(
g
j
,
i
I
W
I
+
b
I
)
\mathbf{p}_{j,i}^{\mathcal{I}}=\text{sigmoid}(\mathbf{g}_{j,i}^{\mathcal{I}}\mathbf{W}^{\mathcal{I}}+\mathbf{b}^{\mathcal{I}})
pj,iI=sigmoid(gj,iIWI+bI)
I
∈
{
c
,
r
}
\mathcal{I} \in \{c,r\}
I∈{c,r}为grid field符号,分别表示因果格表,
p
j
,
i
I
\mathbf{p}_{j,i}^{\mathcal{I}}
pj,iI的每个维度表示
(
e
j
,
t
i
)
(e_j, t_i)
(ej,ti)之间出现一个标签的概率。因此,我们采用交叉熵损失作为损失函数:
L
I
=
−
∑
j
=
1
m
∑
i
=
1
n
∑
k
∈
C
I
(
y
j
i
I
=
k
)
l
o
g
(
p
j
,
i
I
[
k
]
)
\mathcal{L}^{\mathcal{I}}=-\sum_{j=1}^m \sum_{i=1}^n \sum_{k \in C} \mathbb{I}(y_{ji}^{\mathcal{I}}=k) log(\mathbf{p}_{j,i}^{\mathcal{I}}[k])
LI=−j=1∑mi=1∑nk∈C∑I(yjiI=k)log(pj,iI[k])
其中
C
C
C是预定义标签的集合,
p
j
,
i
I
[
k
]
∈
[
0
,
1
]
\mathbf{p}^{\mathcal{I}}_{j,i}[k]∈[0,1]
pj,iI[k]∈[0,1]是标签
k
k
k在
(
e
j
,
t
i
)
(e_j, t_i)
(ej,ti)之间的预测概率,
y
j
i
I
y_{ji}^{\mathcal{I}}
yjiI是标签在
(
e
j
,
t
i
)
(e_j, t_i)
(ej,ti)之间的真实标签。
I
\mathbb{I}
I是一个开关函数,当
y
j
i
I
=
k
y_{ji}^{\mathcal{I}}=k
yjiI=k时
I
=
1
\mathbb{I} = 1
I=1,否则
I
=
0
\mathbb{I} = 0
I=0。由式5可知,我们从两个栅格表中分别获得损失,并将其聚合为最终的训练目标:
J
(
θ
)
=
L
c
+
L
r
\mathcal{J}(\theta)=\mathcal{L}^c+\mathcal{L}^r
J(θ)=Lc+Lr
为了进行推断,
p
j
,
i
I
\mathbf{p}_{j,i}^{\mathcal{I}}
pj,iI被转换为标记,其概率超过标量阈值
τ
I
∈
[
0
,
1
]
\tau^{\mathcal{I}} ∈[0,1]
τI∈[0,1],这是一个手动调优的超参数。
数据集:CCKS2021(ECE-CCKS)。
评估指标:precision、recall、F1.
(1)事件论元提取(EAE)度量评估模型提取感兴趣事件论元的能力。与之前的工作一样(Yang et al, 2019),当一个论元的事件类型、跨度和事件角色同时匹配正确标签时,它就会被正确预测。(2)因果类型度量(CET)衡量预测的因果事件类型是否与正确答案匹配。(3)事件因果关系提取(ECE)度量综合了上述两个度量,其中ECE中的一个论元在其预测的因果事件类型、跨度和事件角色同时满足正确标注时被正确提取。
使用BERT-base,AdamW优化器,学习率3e-5,epoch为10,batch-size为8,句子最大长度为150,阈值均为0.5。
Event-then-Causality方法。这些方法首先从文本中提取事件,然后对因果关系进行分类。BERT-Softmax、BERT-CRF、DMBERT、PLMEE。
Event-with-Causality方法。这些方法不是分别推导事件和因果关系,而是在考虑因果关系的情况下进行事件提取,从而同时推导事件和因果关系对。Novel-tagging、CasEcE、Pair-linking。
1、Event-then-Causality方法效果普遍较差,没有不考虑因果关系,许多与因果关系无关的事件被错误地提取出来,这将使因果关系决策混淆。
2、Event-with-Causality结果相对较好,但是没有考虑面向实体的关系建模策略不能充分地探究事件之间的内在相关性和相互相关性。
3、DualCor的效果最好。
我们注意到,在我们的数据集中,有近10%的句子表达了多个事件因果关系对,从而探讨了因果关系对的数量如何影响ECE性能。具体来说,我们将测试集分为单个子集,其中每个句子只包含一个事件因果对,否则,多子集。除了DualCor,我们还选择了PLMEE+Causality(简称PLMEE+Cau)和Pair-linking作为比较基线的代表,我们在图4中展示了它们的表现。从图中我们可以看到(1)所有模型的性能从Single子集到Multi子集都呈递减趋势,这反映了面向多个因果对的ECE是非常棘手的。(2)在Multi子集上表现较弱的原因可能是因果关系对数量的增加来自于被提及事件的增加,这需要更复杂的事件间相关性建模(Sheng et al, 2022)。(3)由于在Multi子集上的表现明显低于整体和单一子集上的表现,我们认为Multi-pairs可能是未来ECE工作中值得研究的一个巨大挑战。
比较了参数量、训练速度和推理速度。
总结出三种错误。(1)Wrong Cause-Effect Type是指预测错误的因果事件类型组合为实例#1。这种错误会严重损害最终的性能,因为在ECE中,错误的因果类型下的事件论元将被视为假阳性。我们注意到DualCor几乎有40%的错误案例属于这种类型,而Pair-linking的错误案例是32%。我们将此归因于我们的方法主要关注事件论元之间的相关性,缺乏事件类型之间精确的因果建模,而成对链接中的事件类型级别对链接解释了这一点。(2)Redundant Arguments表示模型预测了一个实际上不存在的论元,作为实例#2中效果事件的冗余区域。这种错误通常出现在同一事件角色上的因果事件之间,这表明了推导特定于因果关系的事件论元的难度。虽然DualCor的冗余参数占了将近30%的错误案例,但它比配对链接的错误案例低了将近10%。这揭示了探索事件内和事件间论元相关性以区分因果事件论元的重要性。(3) Missing Arguments是指模型无法预测已经存在的事件论元,例如实例#3中漏掉了“Inner Mongolia”。我们观察到,它通常发生在包含多个事件论元的事件角色中,其中需要更复杂的事件论元相关性建模。
在本文中,我们提出了一个新的任务,事件因果关系提取(ECE),旨在从纯文本中提取具有结构化事件信息的因果事件对。我们提出了一种基于精心设计的双网格标记方案的方法,该方法探索了任务的事件内和事件间论元相关性。实验结果证明了该方法的有效性,并进行了广泛的分析,指出了几个有前景的方向,以启发今后的工作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。