RCEE: Event Extraction as Machine Reading Comprehension 论文解读

news2024/10/2 16:22:01

RCEE: Event Extraction as Machine Reading Comprehension

论文:Event Extraction as Machine Reading Comprehension (aclanthology.org)

代码:jianliu-ml/EEasMRC (github.com)

期刊/会议:EMNLP 2020

摘要

事件提取(Event extraction, EE)是一项重要的信息提取任务,旨在提取文本中的事件信息。以前的EE方法通常将其建模为分类任务,这些任务需要大量数据,并且存在数据稀缺问题。在本文中,我们提出了一种新的EE学习范式,将其明确地转换为机器阅读理解问题(MRC)。我们的方法包括一个无监督的问题生成过程,它可以将事件模式转换为一组自然问题,然后是一个基于BERT的问题回答过程,以检索作为EE结果的答案。这种学习范式使我们能够通过在MRC中引入复杂的模型来加强EE的推理过程,并通过在MRC中引入大规模的数据集来缓解数据稀缺问题。实证结果表明:i)我们的方法比以前的方法获得了最先进的性能。ii)我们的模型在数据稀缺的情况下表现出色,例如,在只有1%的数据提取事件论元得到49.8%F1,而之前的方法为2.2%的F1。iii)我们的模型也适用于零样本场景,在不使用任何EE训练数据的情况下,在两个数据集上实现了37.0%和16%的F1。

1、简介

事件提取(Event extraction, EE)是一项重要的信息提取任务,旨在提取文本中的事件信息。例如,在句子S1中(如图1 (a)所示),EE系统应该识别攻击(Attack)事件,该事件由一个事件触发词 stabbed 表示,该事件触发词带有四个事件论元——Sunday (Role=Time)、一个 protester(Role=Attacker)、一个officer(Role=Target)和一个paper cutter(Role=Instrument)。EE被证明有利于广泛的应用,包括知识库增强,文档摘要、问题回答(Berant et al, 2014)等。

在目前的研究中,EE主要被表述为一个分类问题,旨在定位和分类每个事件触发词/论元(Ahn, 2006;Li等,2013;Chen等,2015;Nguyen等人,2016)。尽管有很多进步,但基于分类的方法是数据饥饿的,需要大量的训练数据来确保良好的性能(Chen et al, 2017;Li等,2013;Liu等,2018a)。此外,这种方法通常不能处理训练期间从未遇到的新事件类型(Huang et al, 2018)。

在本研究中,我们引入了一种新的EE学习范式,为同时解决上述问题提供了思路。我们的主要动机是,从本质上讲,EE可以被视为机器阅读理解(MRC)问题(Hermann等人,2015;Chen et al, 2016)涉及文本理解和匹配,旨在发现文本中特定事件的信息。例如,在S1中,对Instrument角色填充符的提取在语义上等价于以下问答过程(如图1 (b)所示):

Q1:What Instrument did the protester use to stab the officer? A1: a paper cutter.

这意味着解决EE的新方法,这有两个主要优势:首先,通过将EE作为MRC,我们可以利用MRC的最新进展(例如,BERT (Devlin et al, 2019))来增强EE任务,这可能会极大地加强模型中的推理过程。其次,我们可以直接利用丰富的MRC数据集来提高EE,这可能会缓解数据稀缺问题(这被称为跨域数据增强)。第二个优势也为零样本EE打开了一扇门:对于不可见的事件类型,我们可以列出定义其模式的问题,并使用MRC模型来检索作为EE结果的答案,而不是预先为它们获取训练数据。

为了连接MRC和EE,关键的挑战在于生成描述事件方案的相关问题(例如,为Instrument生成Q1)。请注意,我们不能采用有监督的问题生成方法(Duan等人,2017;袁等,2017;Elsahar等人,2018),因为缺乏对齐的问题-事件对。以往连接MRC和其他任务的工作通常采用人工设计的模板(Levy et al, 2017;FitzGerald et al, 2018;Li et al, 2019b,a;Gao等,2019;Wu等人,2019)。例如,在QA-SRL (FitzGerald et al, 2018)中,谓词pbulish的问题始终是“Who published something?”,不管上下文如何。这样的问题可能不足以指示MRC模型找到答案。

我们通过提出一个无监督的问题生成过程来克服上述挑战,该过程可以生成既相关又依赖于上下文的问题。具体来说,在我们的方法中,我们假设每个问题可以分解为两个部分,分别反映查询主题和上下文相关的信息。例如,Q1可以分解为“What instrument”和“did the protester use to stab the officer?”为了生成查询主题表达式,我们设计了一种基于模板的生成方法,结合角色分类和疑问词实现。为了生成更具挑战性的上下文依赖表达式,我们将其制定为无监督翻译任务(Lample等人,2018b)(或风格转移(Prabhumoye等人,2018)),它基于领域内去噪自动编码(Vincent等人,2008)和跨域反向翻译(Sennrich等人,2016)将描述性语句转换为问题风格表达式。请注意,训练过程只需要大量的描述性陈述和未对齐的问题式陈述。最后,在生成问题后,我们构建一个基于BERT的MRC模型(Devlin et al, 2019)来回答每个问题,并将所有答案综合为EE的结果。

为了评估我们的方法,我们在基准EE数据集上进行了大量的实验,实验结果证明了我们方法的有效性。具体来说,1)在标准评估中,我们的方法达到了最先进的性能,并优于之前的EE方法(§4.2)。2)在低数据的情况下,我们的方法展示了有希望的结果,例如,在使用1%的训练数据实现了49.8%的F1,而之前的EE方法仅为2.2%F1(§4.3)。3)我们的方法也适用于零样本场景,在不使用任何EE训练数据的情况下,在两个数据集上实现了37.0%和16.6%的F1(§4.4)。

我们的贡献如下:

  • 我们研究了EE的一个新范式,通过明确地将其框定为MRC问题。我们表明,这种新的范式可以通过利用MRC领域的模型和数据来提高情感表达。我们的工作可能会鼓励更多研究MRC迁移学习的工作,以促进信息提取。
  • 我们提出了一种无监督的问题生成方法来连接MRC和EE。与以往使用模板生成问题的工作相比,我们的方法可以生成既与主题相关又与上下文相关的问题,从而更好地指导MRC模型进行问题回答。
  • 我们报告基准EE数据集的最新性能。我们的方法在处理低数据和零样本场景时也显示了有希望的结果。

2、相关工作

事件抽取:EE是一项重要的IE任务,旨在从文本中提取事件信息,已引起了研究者的广泛关注。传统的EE方法采用手工设计的特征,如句法特征(Ahn, 2006)、文档级特征(Ji和griishman, 2008)、实体级特征(Hong等人,2011)和其他特征(Liao和griishman, 2010;Li et al, 2013)。最近的EE方法采用神经模型,如卷积神经网络(Chen等人,2015),循环神经网络(Nguyen等人,2016;Sha等人,2018),图卷积神经网络(Liu等人,2018b, 2019b),以及其他高级架构(Yang和Mitchell, 2016;刘等,2018a, 2019a;Nguyen and Nguyen, 2019;Zhang等,2019)。尽管有很多进步,如简介中提到的,以前的大多数方法将EE作为一个分类问题来表述,通常会遇到数据稀缺的问题,通常无法处理训练时从未见过的新事件类型。

其他任务的MRC。我们的工作还涉及连接MRC和其他任务的工作,例如关系提取(Levy等人,2017;Li等人,2019b),语义角色标注(FitzGerald等人,2018),命名实体识别(Li等人,2019a),以及其他(Wu等人,2019;Gao等人,2019)。特别是,Du和Cardie(2020)采用了类似的想法将EE框定为MRC。但与我们的工作不同的是,上述大多数方法(Levy et al, 2017;Li et al, 2019b;菲茨杰拉德等人,2018;Du和Cardie, 2020)采用人为设计的、与上下文无关的问题,这些问题可能无法为问题回答提供足够的上下文证据。有些作品确实不采用提问式查询(Li et al, 2019a;Gao等人,2019)。例如,Li等人(2019a)使用“Find organization in the text”作为查询命令查找Organization实体。这种非自然的“查询”和MRC数据集中的自然问题之间的差异可能会阻碍从MRC到任务的有效迁移学习。相比之下,我们的工作旨在通过无监督问题生成方法生成相关和上下文相关的问题。

3、我们的方法

我们的方法由RCEE(Reading Comprehension for Event Extraction)表示,如图2所示。具体来说,给定一个句子 S 1 S_1 S1, RCEE在接收到一个特殊查询“[Event]”时,首先确定一个事件触发词“stabbed”及其事件类型“Attack”。其次,RCEE为攻击事件模式对应的每个语义角色生成一个问题。第三,RCEE建立MRC模型,作为事件论元提取来回答每个问题。最后,RCEE将所有答案综合为EE的最终结果。

RCEE的技术细节如下。在图中,我们将一个句子表示为 c = { c 1 , … , c n } c = \{c_1,\ldots,c_n\} c={c1,,cn},并将图构造为事件触发词提取、无监督问题生成、事件论元提取和RCEE的训练过程。

3.1 事件触发词抽取

要提取事件触发词,我们使用“[event]”作为特殊的查询命令,表示查找texts中的所有事件触发词。原因是事件触发词通常是动词,很难为它们设计问题。还要注意,这个特殊的查询命令启用事件触发词和论元提取共享相同的编码模型。

接下来,我们采用基于分类(而不是基于span的方法)的触发词提取,考虑到大多数触发词(ACE中超过95%)是单个单词,基于span的答案生成可能过于繁重。具体来说,我们首先将“[EVENT]”与句子 c c c联合编码,以计算一个编码的表示(详情请参阅§3.3)。然后,对于 c c c中的每个词 c i c_i ci,我们将其编码表示作为逻辑回归模型的输入,并计算一个包含不同事件类型概率的向量 o c i o_{c_i} oci。最后, c i c_i ci的第 l l l个事件类型的概率为 p ( l ∣ c i ) = o c i ( l ) p(l|c_i) = o^{(l)}_{c_i} p(lci)=oci(l),这是 o c i o_{c_i} oci的第 l l l个元素。

3.2 无监督的问句生成

触发词提取后,RCEE根据预测的事件类型生成一组问题。在这里,我们假设每个问题可以组合为:1)查询主题,它反映了问题的相关性;2)问题风格的事件语句,它编码了上下文相关的信息。

主题问题的生成。我们设计了基于模板的查询主题生成方法。注意,为了使疑问句足够自然,我们应该考虑不同的疑问句对应不同的语义角色。例如,语义角色Time的查询主题可能是“When […],而对于Attacker则可能是“Who[…]”。基于上述动机,我们首先将语义角色分成不同的类别,然后为每个类别设计不同的模板。表1显示了ACE 2005事件本体的分类(即与时间相关、与地点相关、与人员相关和一般角色)和模板。从表中可以看出,为Victim生成的查询主题是“Who is the Victim”。

问题语境化。问题语境化的目的是生成剩下的问题风格事件语句。这里将其制定为一个无监督的翻译任务(Lample等人,2018a,b),目标是将描述性语句(descriptive statement)(如句子)映射到一个问题式语句,没有并行资源。它也可以被视为风格转移(Prabhumoye et al, 2018)。为了实现这一目标,我们首先建立了大型语料库,包括描述性语句(记为 S S S)和未对齐的自然问题(记为 Q Q Q),我们将 S S S中的每个实例限制为一个以动词为中心的单词窗口,并将Q中的每个实例限制为一个问题,去除诸如When/Where/Who/What等疑问句。其次,根据Lample et al (2018b),我们建立了两个MT模型: P S → Q ( q s ∣ s ) P_{S→Q}(q_s|s) PSQ(qss),它将描述性语句 s ∈ S s∈S sS映射为问题式语句 q s q_s qs, 而 P Q → S ( s q ∣ q ) P_{Q→S} (s_q|q) PQS(sqq)进行反向转换。每个MT模型分别在源域和目标域中包含一个编码器和一个解码器。例如 P S → Q ( q s ∣ s ) P_{S→Q}(q_s|s) PSQ(qss) s s s中有一个编码器 E S E_S ES,在 Q Q Q中有一个解码器 D Q D_Q DQ。第三,我们通过领域内自动编码、去噪自动编码(Vincent et al, 2008)和跨域在线回译(Sennrich et al, 2016)联合训练 P S → Q ( q s ∣ s ) P_{S→Q}(q_s|s) PSQ(qss) P Q → S ( s q ∣ q ) P_{Q→S} (s_q|q) PQS(sqq),如图3所示。最后,在推理时,以预测触发词为中心的一个单词窗口(用 s x s_x sx表示)被认为是 P S → Q ( q s ∣ s ) P_{S→Q}(q_s|s) PSQ(qss)的输入,我们通过:
q s x = arg ⁡ max ⁡ q s x   P S → Q ( q s x ∣ s x ) q_{s_x}=\arg \max _{q_{s_x}}\ P_{S \to Q}(q_{s_x|s_x}) qsx=argqsxmax PSQ(qsxsx)
q s x q_{s_x} qsx与预先生成的查询主题连接以生成最终的问题。

3.3 事件论元抽取

然后,RCEE使用基于BERT的MRC模型执行事件论元提取作为问题回答。设问题 q = { q 1 , … , q m } q = \{q_1,\ldots,q_m\} q={q1,,qm}

学习输入的表征。我们首先将 q q q c c c联合编码以学习输入表示,通过构造一个序列“[CLS] q [SEP] c”作为BERT的输入。为了进一步增强表示,我们设计了一种新的嵌入,单词共享嵌入,作为BERT的输入,动机是 q q q c c c的共享单词更容易传达事件信息。具体来说,单词 w i w_i wi(在 q q q c c c中)的共享词嵌入为:
p w i = { p s h ∈ R d 1  if  w i  is shared by  q  and  c p n o ∈ R d 1 otherwise p_{w_i}= \left \{ \begin{matrix} p_{sh} \in \mathbb{R}^{d_1} & \text{ if } w_i \text{ is shared by } q \text{ and } c\\ p_{no} \in \mathbb{R}^{d_1} & \text{otherwise} \end{matrix} \right. pwi={pshRd1pnoRd1 if wi is shared by q and cotherwise
其中 p s h p_{sh} psh p n o p_{no} pno是训练过程中更新的两个嵌入向量。编码后,我们取BERT的最后一层隐含层 H c q ∈ R N × d 2 H^q_c∈\mathbb{R}^{N×d_2} HcqRN×d2作为 q q q c c c的最终表示,其中 N = m + n + 2 N = m + n + 2 N=m+n+2, d 2 d_2 d2为BERT的隐含层维数。

自适应论元生成。与触发词不同,事件论元生成由基于span的算法处理(Hermann等人,2015),因为它们通常是实体,包含多个单词。虽然我们注意到超过14%的语义角色有零或多个论元,但我们修改了现有的算法来解决这个问题(如算法1所示)。具体来说,给定 q q q c c c的联合表示 H c q H^q_c Hcq,我们首先计算两个概率向量,其中包含 c c c中每个位置的答案的开始和结束位置:
p s t a r t = softmax ( H c q W s t a r t ) , p e n d = softmax ( H c q W e n d ) , p_{start}=\text{softmax}(H_c^q W_{start}),\\ p_{end}=\text{softmax}(H_c^q W_{end}),\\ pstart=softmax(HcqWstart),pend=softmax(HcqWend),
其中 W s t a r t , W e n d ∈ R 2 d 4 × 1 W_{start} ,W_{end}∈\mathbb{R}^{2d_4×1} Wstart,WendR2d4×1为模型参数。然后,我们将特殊token“[SEP]”作为“无答案”指标,只使用概率高于“[SEP]”的开始/结束位置来构造候选答案。我们采用i)开始/结束索引的相对位置、长度约束和似然阈值 δ δ δ等几种启发式方法来过滤非法答案。新的算法可以为一个问题生成0个或多个答案。此外,当实体信息已知时(许多方法都采用此设置(Chen et al, 2015;Nguyen et al, 2016)),我们进一步采用黄金实体强化(golden entity refinement),它强制要求答案与标注实体具有相同的边界。

3.4 训练

为了训练RCEE,我们采用预训练后微调的策略,可以使用MRC和EE的数据集联合训练一个模型。

预训练阶段。在预训练阶段,我们在MRC数据集上训练RCEE,损失如下:
L r c ( θ ) = ∑ < c , q , a > P ( a ∣ c , q ) \mathcal{L}_{rc}(\theta)=\sum_{<c,q,a>} \mathbf{P}(a|c,q) Lrc(θ)=<c,q,a>P(ac,q)
< c , q , a > <c,q,a> <c,q,a>指的是由上下文 c c c、查询 q q q和答案 a a a组成的MRC示例; P ( a ∣ c , q ) \mathbf{P}(a|c,q) P(ac,q)表示给定 c c c q q q的ground-truth答案的可能性,定义为:
P ( a ∣ c , q ) = log ⁡ p ( g s a ∣ c , q ) + log ⁡ p ( g e a ∣ c , q ) \mathbf{P}(a|c,q)=\log p(\mathcal{g}_s^a|c,q)+\log p(\mathcal{g}_e^a|c,q) P(ac,q)=logp(gsac,q)+logp(geac,q)
g s a , g e a \mathcal{g}_s^a,\mathcal{g}_e^a gsa,gea分别表示ground-truth的开始位置和结束位置。

微调阶段。在微调阶段,我们在EE数据集上训练RCEE,损失如下:
L e v ( θ ) = − ∑ e ( log ⁡ p ( g e ∣ w e ) + ∑ r ∈ A ( g e ) P ( a r ∣ c e , q r ) ) \mathcal{L}_{ev}(\theta)=-\sum_{e} \left( \log p(\mathcal{g}_e|w_e) +\sum_{r \in \mathcal{A}(\mathcal{g}_e) }\mathbf{P}(a_r|c_e,q_r) \right) Lev(θ)=e logp(gewe)+rA(ge)P(arce,qr)
其中 e e e在每个事件实例上; w e w_e we表示的触发词 e e e; g e \mathcal{g}_e ge e e e的事件类型; A r g ( e ) Arg(e) Arg(e)指定 g e \mathcal{g}_e ge的角色集; r r r在每个规则上的范围。我们采用Adam (Kingma and Ba, 2014)来更新RCEE的参数。

4、实验

4.1 实验设置

数据集和评估指标:ACE 2005数据集,根据之前的工作,我们将数据集分为训练集、验证集和测试集(Li et al, 2013;Chen等,2015;Yang and Mitchell, 2016),我们还采用了precision §、recall ®和F1-score (F1)作为评价指标,以确保可比性。采用Yeh(2000)提出的方法进行显著性检验,显著性水平p = 0.05

实施细节:我们采用具有24层、1024个隐藏单元和16个注意头的BERT-Large作为我们的MRC模型。其他超参数通过网格搜索在验证集上进行调优。其中,单词共享嵌入的维数设置为100(从10、50、100、200到500)。答案预测阈值 δ δ δ设置为0.3(从[0.1,0.2,…, 0.9])。批大小设置为10(从2,5,10,15)。辍学率设置为0.5。我们采用SQuAD 2.0 (Rajpurkar et al, 2018)进行跨领域数据论证(我们的MRC模型在F1中达到83.9%)。无监督问题生成的实现在补充材料中。

Baseline model:JointBeam、DMCNN、JRNN、dbRNN、JMEE、Joint3EE、JointTrans、BERTEE。我们的模型表示为RCEE和RCEE ER(“ER”表示黄金实体强化(golden entity refinement))。我们使用DA来表示跨领域数据增强。

4.2 标准评估

在标准评估中,我们考虑两种设置:1)已知实体,这是以前许多方法考虑的,2)未知实体,这是一个更现实的设置。

已知实体的结果。表2给出了已知实体的触发词(Trigger Ex.)和论元提取(argument Ex.)的结果。我们还报告了使用oracle触发词提取论元的结果(论元Ex.(O)),以排除触发词提取结果中潜在的错误传播。从结果来看,1)RCEE ER获得了最先进的性能,超过所有基线的相当大的幅度(触发词提取+0.6%;论元抽取+3.6% (5.4%))。2)尤其在论元提取方面,RCEE_ER优于同样使用BERT表示的BERTEE(也使用BERT表示)5%以上,这表明改进主要来自于问题的重新表述,而不是引入BERT表示。3) RCEE_ER的高召回率表明它可以比基线预测更多的例子,这可能意味着RCEE_ER可以处理基线模型失败的困难情况。

未知实体的结果。表3给出了未知实体的结果。在此设置中,基于分类的方法需要首先识别实体,因此我们为它们实现了基于BERT的方法。还比较了不需要实体信息的联合EE方法。我们使用RCEE进行比较,其中不包括实体细化。从结果来看,RCEE仍然表现出最好的性能-它击败了基于分类的方法(F1中超过9.3%)和联合模型(超过6.0%)。通过检查∆F1,我们注意到RCEE对golden实体的依赖相对较少(在没有golden实体的F1中为-4.3%),但基于分类的方法严重依赖golden实体,在有预测实体的F1中下降超过8%。

4.3 数据稀缺场景的结果

图4比较了数据稀缺场景下的模型和BERTEE,表4给出了极低数据场景下的结果(≤20%的训练数据)。从结果来看,我们的模型表现出了优越的性能,例如,相比之下,只用1%的EE训练数据就获得了49.8%的F1,而BERTEE只有2.2%的F1。我们注意到改进来自两个方面:1)数据增强(DA)。例如,根据表4,在1%和5%数据的实验中,DA对RCEE_ER提高了+47.6%和+33.4%。2)答案生成算法。注意在低数据情况下,没有DA的RCEE_ER仍然始终优于BERTEE。这表明该算法比分类方法数据效率高。原因可能是,我们的方法中的答案生成算法是基于位置的,这对于看不见的单词可能是稳健的。而以往EE方法的分类方法大多基于单词,需要更多的标注数据。

4.4 零样本案例下的效果

表5显示了zero-shot EE的结果,其中EE数据完全禁止进行训练(仅使用DA进行模型预训练)。为了增加结果的说服力,我们采用了另一个数据集,FrameNet (Baker, 2014)(其中帧被视为元事件类型)进行评估。从结果来看:在没有任何EE数据的情况下,我们的模型在ACE和FrameNet上F1分别达到了37%和16.6%。这说明了我们的模型处理不可见类型的有效性。

5、更长远的讨论

5.1 问题生成的影响

我们比较了不同的问题生成策略:1)QRole,使用角色名作为查询;2) QCommand,它使用“Find the #Role”作为查询(Li等人,2019a),和3)QTemplate,它使用模板“What is the #Role in the #event_trigger event?”作为查询(菲茨杰拉德等人,2018)。从结果来看,QRole、QCommand和QTemplate在论元提取中F1分别达到60.1%、64.9%和68.5%。;而我们的方法是70.1%。我们注意到这些方法的不足之处可能在于表达能力较差。例如,在一个句子中,“The pair flew to Singapore last year after … ”, QNAME使用“Time”作为查询;QCommand使用“Find the Time”作为查询;QTemplate使用“What is the Time in the flew event?”作为查询。虽然我们的方法直接产生了一个近乎完美的问题:“[When] do the pair fly to Singapore?”我们在补充材料中提供了更多的例子。

5.2 不同论元的效果

图5显示了RCEE在不同语义角色上的表现,以随机选择的四个角色为例,1)有大量数据,例如Defendant有359个训练例;2)中型数据,例如Money, 75个例子;3)数据有限,例如SellerPrice只有32个和9个例子(罕见角色)。从结果来看,基于分类的方法,如BERTEE,对于数据丰富的角色可以获得较好的结果,但当数据不足时,其性能会严重下降。相比之下,我们的方法RCEE在处理稀有角色方面表现出色,例如,在F1中为SellerPrice获得了61.5%和78.2%(注意Price只有9个样例数据),而BERTEE为8.9%和1.7%。

5.3 错误分析

我们在本节中进行误差分析。一个典型的错误与长距离依赖关系有关,占23.4%(这里“长距离”表示触发词和论元之间的距离≥10)。表6 (a)显示了一个案例,其中论元Evian,France距离触发词约20个单词,使得很难识别论元。2)第二个错误涉及到意义一般的角色,例如,Entity, Agent -这些角色通常很难生成有意义的问题,在所有情况中有32.7%的错误。3)第三个错误是co-reference,占17.2%。考虑表6 (b)中的示例,其中die触发了一个Die事件,“Laleh”和“Ladan”实现了语义角色Victim。我们的模型预测答案是“them”(在die前面的两个单词)——尽管“them”是“Laleh和Ladan”的参考,但根据目前的评估,它被认为是一个错误。这也提出了一个问题,当我们评估EE系统时,是否应该考虑共指。

6、总结和未来工作

在本文中,我们通过将EE转换为MRC问题来重新审视EE。我们的方法包括一个无监督的问题生成过程,可以生成相关和上下文相关的问题,其有效性被实证结果验证。在未来,我们将把我们的方法应用到其他IE任务中,研究它的应用范围。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/374276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Slurm集群调度策略详解(2)-回填调度

1. slurm集群调度系统简介 作业调度系统其实就是指按一定策略把并行程序的各子任务或者是面向多用户的一组作业按一定的选择策略使之与各计算节点的空闲资源相对应&#xff0c;让其在对应的资源上运行&#xff0c;所以作业调度系统是联系上层应用和下层资源的中枢。一个集群资…

纯x86汇编实现的多线程操作系统实践 - 第六章 AP1的用户进程

AP1用户进程的代码为task1.asm。该用户进程将调用0x80系统中断在界面上显示一张BMP格式的图片。用户进程还使用了彩色转灰色技术&#xff0c;轮流显示该图片的彩色和灰色图。代码解释如下&#xff1a;调用0x39号系统中断&#xff0c;从300号扇区获得一个扇区的数据&#xff08;…

【华为OD机试模拟题】用 C++ 实现 - 身高排序(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明身高排序题目输入输出示例一输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:ht…

每日学术速递2.27

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CL 1.FiTs: Fine-grained Two-stage Training for Knowledge-aware Question Answering 标题&#xff1a;FiTs&#xff1a;用于知识感知问答的细粒度两阶段训练 作者&#xff1a;Qichen…

JavaWeb JavaBean,MVC三层架构

9、JavaBean 实体类 JavaBean有特定的写法&#xff1a; 必须要有一个无参构造属性必须私有化必须有对应的get/set方法&#xff1b; 一般用来和数据库的字段做映射 ORM&#xff1b; ORM &#xff1a;对象关系映射 表—>类字段–>属性行记录---->对象 people表 …

Qt 小项目 图片浏览系统

引言 本系统支持&#xff0c;自动播放&#xff0c;左右拖动切换&#xff0c;点击列表切换&#xff0c;点击按钮切换&#xff1b;是一个标准的图像浏览软件。 Windows 图片浏览器&#xff0c;可以查看当前文件夹下的图片&#xff0c;往上翻、往下翻并且自动播放&#xff1b; …

这只乌龟,当然离不开函数了!

什么是函数&#xff1f;函数就是执行特定任务和以完成特定功能的一段代码为什么需要函数&#xff1f;复用代码隐藏实现细节提高可维护性提高可读性便于调试函数的创建def 函数名 ([输入参数]) :函数体[return xxx]函数名需要遵循字母、数字、下划线# 这里的a&#xff0c;b是形式…

03 流程控制

3.1 条件判断3.2 循环控制3.3 中断循环 3.1 条件判断 if 条件判断 &#xff1a;单分支&#xff08;if&#xff09;、双分支&#xff08;if…else…&#xff09;、多分支&#xff08;if … else if … else&#xff09;Switch&#xff08;Scala并没有 switch&#xff0c;用的是…

2023年鞋服配饰行业如何玩转全域经营?

2023年&#xff0c;鞋服配饰行业私域已进入深水区&#xff0c;这就对私域运营提出了更高的挑战和目标&#xff0c;企业纷纷发力以私域为基石、以消费者为核心的全域经营。 不过&#xff0c;虽然鞋服配饰行业私域起步早&#xff0c;玩法多。但在迈向全域经营的过程中&#xff0…

全网详细介绍nginx的反向代理、正向代理配置,location的指令说明,反向代理的两个示例代码以及全局块,events块和http快的说明。

文章目录1. 文章引言2. 何谓反向代理3. 解析nginx的配置文件3.1 全局块(global block)3.2 events块(events block)3.3 http块(http block)4. 如何配置反向代理4.1 反向代理示例14.2 反向代理示例25. 补充说明5.1 location指令说明5.2 nginx完整配置文件1. 文章引言 如果你的服务…

聚合效度全流程

聚合效度分析流程如下&#xff1a; 一、聚合效度定义 聚合效度&#xff08;convergent validity&#xff09;&#xff0c;又称收敛效度&#xff0c;是指测量同一变量的测量项会落在同一因子上&#xff0c;强调本应该在同一因子下的测量项&#xff0c;确实在同一因子下。即一个…

基于nodejs+vue地方特色的风景文化宣传网站vscode

管理员可以根据系统给定的账号进行登录&#xff0c;登录后可以进入木里风景文化管理平台对木里风景文化所有模块进行管理。包括查看和修改自己的个人信息以及登录密码。 该系统为每一个用户都分配了一个用户账号&#xff0c;用户通过账号的登录可以在系统中查看木里风景文化信息…

怎么依靠网络赚钱,网上可以做什么副业

如今&#xff0c;网上赚钱已经成为许多人职业生涯的选择之一。网上有很多可靠的兼职&#xff0c;让你在家里轻松赚钱。今天给大家推荐五份可靠的网上兼职。一、怎样选择可靠的网络兼职可靠的网络兼职一般是指在家通过网络平台完成兼职任务&#xff0c;完成任务后即可获得报酬。…

JVM中TLAB(Thread Local Allocation Buffer)+逃逸分析

1、为什么有TLAB&#xff08;Thread Local Allocation Buffer&#xff09;堆区是线程共享区域&#xff0c;任何线程都可以访问到堆区中的共享数据 由于对象实例的创建在JVM中非常频繁&#xff0c;因此在并发环境下从堆区中划分内存空间是线程不安全的 为避免多个线程操作同一地…

java地图导出——添加经纬线

概述 前面的文章Node实现切片的拼接和地图的导出和Java实现地图的导出分别讲述可如何在node和java中实现切片的拼接以及地图的导出。本文&#xff0c;书接前文&#xff0c;实现java导出时经纬度的添加。 实现后效果 实现 完整的实现思路流程如下图&#xff1a; 1. 根据切片…

什么是Makefile?如何编写Makefile?

&#x1f947;今日学习目标&#xff1a;什么是Makefile&#xff1f;如何编写Makefile&#xff1f; &#x1f935;‍♂️ 创作者&#xff1a;JamesBin ⏰预计时间&#xff1a;10分钟 &#x1f389;个人主页&#xff1a;嵌入式悦翔园个人主页 &#x1f341;专栏介绍&#xff1a;L…

RabbitMQ实现死信队列

目录死信队列是什么怎样实现一个死信队列说明实现过程导入依赖添加配置编写mq配置类添加业务队列的消费者添加死信队列的消费者添加消息发送者添加消息测试类测试死信队列的应用场景总结死信队列是什么 “死信”是RabbitMQ中的一种消息机制&#xff0c;当你在消费消息时&#…

单调栈(C/C++)

目录 1. 单调栈的定义 2. 单调栈的常见用途 3. 案例分析 3.1 暴力解法 3.2 单调栈 4. 单调栈总结 1. 单调栈的定义 单调栈顾名思义&#xff0c;就是栈内的元素是单调的。根据栈内元素的单调性的不同&#xff0c;可以分为&#xff1a; 单调递增栈&#xff1a;栈内元素是单…

LeetCode 105. 从前序与中序遍历序列构造二叉树 106. 从中序与后序遍历序列构造二叉树

为什么前序和中序或者中序和后序&#xff0c;两两组合能构建一个二叉树&#xff1f; 因为前序和后序可以确定根&#xff0c;而中序可以划分出左右区间。 文章目录从前序与中序遍历序列构造二叉树从中序与后序遍历序列构造二叉树从前序与中序遍历序列构造二叉树 难度 中等 题目链…

基于java的进销库存管理系统(Vue+Springboot+Mysql)前后端分离项目,附万字课设论文

1.3 系统实现的功能 本次设计任务是要设计一个超市进销存系统&#xff0c;通过这个系统能够满足超市进销存系统的管理及员工的超市进销存管理功能。系统的主要功能包括&#xff1a;首页、个人中心、员工管理、客户管理、供应商管理、承运商管理、仓库信息管理、商品类别管理、 …