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

news/2024/4/20 8:59:15/文章来源:https://blog.csdn.net/qq_45041871/article/details/129236770

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所示。具体来说,给定一个句子S1S_1S1, RCEE在接收到一个特殊查询“[Event]”时,首先确定一个事件触发词“stabbed”及其事件类型“Attack”。其次,RCEE为攻击事件模式对应的每个语义角色生成一个问题。第三,RCEE建立MRC模型,作为事件论元提取来回答每个问题。最后,RCEE将所有答案综合为EE的最终结果。

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

3.1 事件触发词抽取

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

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

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)。为了实现这一目标,我们首先建立了大型语料库,包括描述性语句(记为SSS)和未对齐的自然问题(记为QQQ),我们将SSS中的每个实例限制为一个以动词为中心的单词窗口,并将Q中的每个实例限制为一个问题,去除诸如When/Where/Who/What等疑问句。其次,根据Lample et al (2018b),我们建立了两个MT模型:PS→Q(qs∣s)P_{S→Q}(q_s|s)PSQ(qss),它将描述性语句s∈Ss∈SsS映射为问题式语句qsq_sqs, 而PQ→S(sq∣q)P_{Q→S} (s_q|q)PQS(sqq)进行反向转换。每个MT模型分别在源域和目标域中包含一个编码器和一个解码器。例如PS→Q(qs∣s)P_{S→Q}(q_s|s)PSQ(qss)sss中有一个编码器ESE_SES,在QQQ中有一个解码器DQD_QDQ。第三,我们通过领域内自动编码、去噪自动编码(Vincent et al, 2008)和跨域在线回译(Sennrich et al, 2016)联合训练PS→Q(qs∣s)P_{S→Q}(q_s|s)PSQ(qss)PQ→S(sq∣q)P_{Q→S} (s_q|q)PQS(sqq),如图3所示。最后,在推理时,以预测触发词为中心的一个单词窗口(用sxs_xsx表示)被认为是PS→Q(qs∣s)P_{S→Q}(q_s|s)PSQ(qss)的输入,我们通过:
qsx=arg⁡max⁡qsxPS→Q(qsx∣sx)q_{s_x}=\arg \max _{q_{s_x}}\ P_{S \to Q}(q_{s_x|s_x}) qsx=argqsxmax PSQ(qsxsx)
qsxq_{s_x}qsx与预先生成的查询主题连接以生成最终的问题。

3.3 事件论元抽取

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

学习输入的表征。我们首先将qqqccc联合编码以学习输入表示,通过构造一个序列“[CLS] q [SEP] c”作为BERT的输入。为了进一步增强表示,我们设计了一种新的嵌入,单词共享嵌入,作为BERT的输入,动机是qqqccc的共享单词更容易传达事件信息。具体来说,单词wiw_iwi(在qqqccc中)的共享词嵌入为:
pwi={psh∈Rd1if wiis shared by qand cpno∈Rd1otherwisep_{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
其中pshp_{sh}pshpnop_{no}pno是训练过程中更新的两个嵌入向量。编码后,我们取BERT的最后一层隐含层Hcq∈RN×d2H^q_c∈\mathbb{R}^{N×d_2}HcqRN×d2作为qqqccc的最终表示,其中N=m+n+2N = m + n + 2N=m+n+2, d2d_2d2为BERT的隐含层维数。

自适应论元生成。与触发词不同,事件论元生成由基于span的算法处理(Hermann等人,2015),因为它们通常是实体,包含多个单词。虽然我们注意到超过14%的语义角色有零或多个论元,但我们修改了现有的算法来解决这个问题(如算法1所示)。具体来说,给定qqqccc的联合表示HcqH^q_cHcq,我们首先计算两个概率向量,其中包含ccc中每个位置的答案的开始和结束位置:
pstart=softmax(HcqWstart),pend=softmax(HcqWend),p_{start}=\text{softmax}(H_c^q W_{start}),\\ p_{end}=\text{softmax}(H_c^q W_{end}),\\ pstart=softmax(HcqWstart),pend=softmax(HcqWend),
其中Wstart,Wend∈R2d4×1W_{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,损失如下:
Lrc(θ)=∑<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>指的是由上下文ccc、查询qqq和答案aaa组成的MRC示例;P(a∣c,q)\mathbf{P}(a|c,q)P(ac,q)表示给定cccqqq的ground-truth答案的可能性,定义为:
P(a∣c,q)=log⁡p(gsa∣c,q)+log⁡p(gea∣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)
gsa,gea\mathcal{g}_s^a,\mathcal{g}_e^agsa,gea分别表示ground-truth的开始位置和结束位置。

微调阶段。在微调阶段,我们在EE数据集上训练RCEE,损失如下:
Lev(θ)=−∑e(log⁡p(ge∣we)+∑r∈A(ge)P(ar∣ce,qr))\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(θ)=elogp(gewe)+rA(ge)P(arce,qr)
其中eee在每个事件实例上;wew_ewe表示的触发词eee;ge\mathcal{g}_egeeee的事件类型;Arg(e)Arg(e)Arg(e)指定ge\mathcal{g}_ege的角色集;rrr在每个规则上的范围。我们采用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.luyixian.cn/news_show_74704.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

哪个品牌蓝牙耳机性价比高?性价比高的平价蓝牙耳机推荐

现如今&#xff0c;随着蓝牙技术的进步&#xff0c;蓝牙耳机在人们日常生活中的便捷性更胜从前。越来越多的蓝牙耳机品牌被大众看见、认可。那么&#xff0c;哪个品牌的蓝牙耳机性价比高&#xff1f;接下来&#xff0c;我给大家推荐几款性价比高的平价蓝牙耳机&#xff0c;一起…

软件测试面试问答

笔试 笔试的话我们需要揣测具体会考什么内容&#xff0c;我们可以通过招聘信息去了解该公司需要什么样的技能&#xff0c;以此来准备笔试。一般必考的内容会有编程&#xff0c;测试用例设计&#xff0c;工作流程&#xff0c;逻辑思维等内容&#xff0c;除此之外每个公司可能还会…

移动端监听物理返回

业务场景&#xff1a;用户没有填完数据却不小心点到了回退按钮&#xff0c;此时需要展示确认弹框项目场景&#xff1a;vue2 uni-app Chrome Dev调试工具代码片段&#xff1a;onLoad(options){// 将当前url地址添加到浏览器的历史记录中window.history.pushState(null, null, …

OSI和TCP/IP网络模型细讲

文章目录一、OSI七层参考模型二、TCP/IP体系结构三、TCP/IP参考模型四、沙漏计时器形状的TCP/IP协议族五、两种国际标准对比相似之处不同之处一、OSI七层参考模型 OSI参考模型共分为7层&#xff0c;低三层面向通信&#xff0c;可用软硬件实现&#xff1b;高三层面向信息处理&am…

一个基于 LKM 的 Linux 内核级 rootkit 的实现

博客已迁移至&#xff1a;https://gls.show/ GitHub链接 演示Slides overview rootkit是一种恶意软件&#xff0c;攻击者可以在获得 root 或管理员权限后安装它&#xff0c;从而隐藏入侵并保持root权限访问。rootkit可以是用户级的&#xff0c;也可以是内核级的。关于rootk…

Android 实现菜单拖拽排序

效果图简介本文主角是ItemTouchHelper。它是RecyclerView对于item交互处理的一个「辅助类」&#xff0c;主要用于拖拽以及滑动处理。以接口实现的方式&#xff0c;达到配置简单、逻辑解耦、职责分明的效果&#xff0c;并且支持所有的布局方式。功能拆解功能实现4.1、实现接口自…

ARM的工作模式和37个寄存器

一、ARM的工作模式 ARM一共有7种工作模式 模式含义User非特权模式&#xff0c;大部分任务执行在这种模式FIQ当一个高优先级&#xff08;fast) 中断产生时将会进入这种模式IRQ当一个低优先级&#xff08;normal) 中断产生时将会进入这种模式Supervisor当复位或软中断指令执行时…

CISP注册信息安全专业人员证书

一、什么是“CISP”&#xff1f; 注册信息安全专业人员(Certified Information Security Professional&#xff0c;简称“CISP”)&#xff0c;是安全行业最为权威的安全资格认证&#xff0c;由中国信息安全测评中心统一授权组织&#xff0c;中国信息安全测评中心授权培训机构进…

GMP洁净净化车间布局建设|喜格净化设计建设

GMP洁净净化车间布局建设方案应该根据具体的生产流程、工艺要求和产品特点进行设计。以下喜格SICOLAB基本的设计原则和注意事项&#xff1a;&#xff08;1&#xff09;设计洁净度级别&#xff1a;根据产品特点和生产工艺要求&#xff0c;确定洁净度级别&#xff0c;一般分为100…

OpenCV 图像轮廓检测

本文是OpenCV图像视觉入门之路的第15篇文章&#xff0c;本文详细的介绍了图像轮廓检测的各种操作&#xff0c;例如&#xff1a;轮廓检索模式、轮廓逼近算子等操作。 图像轮廓是具有相同颜色或灰度的连续点的曲线&#xff0c;轮廓在形状分析和物体的检测和识别中很有用。图像轮廓…

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

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

IntelliJ插件开发教程之新建项目

JetBrains公司系列产品IDEA、WebStrom、PyCharm、CLion、GoLand等都是基于IntelliJ Platform开发而成&#xff0c;掌握IntelliJ插件开发技能便能拥有提升开发效率的终极武器。本教程Demo源码请微信公众号“开发效率”进行获取。阅读原文如果您是JetBrains产品的用户&#xff0c…

【打卡】图分析与节点嵌入

背景介绍 图&#xff08;Graphs&#xff09;是一种对物体&#xff08;objects&#xff09;和他们之间的关系&#xff08;relationships&#xff09;建模的数据结构&#xff0c;物体以结点&#xff08;nodes&#xff09;表示&#xff0c;关系以边&#xff08;edges&#xff09;…

【数电基础】——数制和码制

目录 1.概述 1.信号&#xff08;电路&#xff09;的功能 2.信号的分类&#xff1a; 3.数字信号的输入和输出的逻辑关系表示方法 2.数制 1.十进制&#xff08;D/d&#xff09; 2.二进制(B/b) 3.八进制&#xff08;O/o&#xff09; 4.十六进制&#xff08;H/h&#xff09;…

腾讯TIM实现即时通信 v3+ts实践

目录 初始化sdk 功能描述 初始化 准备 SDKAppID 调用初始化接口 监听事件 发送消息 创建消息 创建文本消息 登录登出 功能描述 登录 登出 销毁 登录设置 获取会话列表 功能描述 获取会话列表 获取全量的会话列表 历史消息 功能描述 拉取消息列表 分页拉取…

C++ Primer Plus 第6版 读书笔记(2)第2章 开始学习 C++

C是在 C 语言基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言&#xff0c;是C语言的超集。本书是根据2003年的ISO/ANSI C标准编写的&#xff0c;通过大量短小精悍的程序详细而全面地阐述了 C的基本概念和技术&#xff0c;并专辟一章介绍了C11新增的功能…

Telnet 基础实验2: SSH 实验

Telnet 基础实验2&#xff1a; SSH 实验 本实验只能使用 eNSP中 AR 系统的路由器做 拓扑图 SSH &#xff1a; Secure Shell 是一个网络安全协议&#xff0c;基本于 TCP 协议 22 端口传输数据&#xff0c;通过对网络数据的加密&#xff0c;使其能够在一个不安全的网络环境中&a…

浅析Tomcat架构上的Valve内存马(内存马系列篇十一)

写在前面 这篇也是在Tomcat容器上面构造的内存马(收回之前说的不搞Tomcat了)&#xff0c;这是建立在Tomcat的管道上面做文章的一个内存马的实现方式。这是内存马系列的第十一篇文章了。 前置 什么是Pipeline-Valve管道&#xff1f; 根据前面Tomcat架构的相关知识&#xff0…

Java中的this与super关键字深度解析

一、this关键字this 关键字是 Java 常用的关键字&#xff0c;可用于任何实例方法内指向当前对象&#xff0c;也可指向对其调用当前方法的对象&#xff0c;或者在需要当前类型对象引用时使用。&#xff08;1&#xff09;this.属性名this修饰的变量用于指代成员变量方法的形参如果…

3 决策树及Python实现

1 主要思想 1.1 数据 1.2 训练和使用模型 训练&#xff1a;建立模型&#xff08;树&#xff09; 测试&#xff1a;使用模型&#xff08;树&#xff09; Weka演示ID3&#xff08;终端用户模式&#xff09; 双击weka.jar选择Explorer载入weather.arff选择trees–>ID3构建树…