DualCor: Event Causality Extraction with Event Argument Correlations论文解读

news/2024/3/29 19:07:02/文章来源:https://blog.csdn.net/qq_45041871/article/details/129199498

Event Causality Extraction with Event Argument Correlations(带有事件论元相关性的事件因果关系抽取)

论文:2301.11621.pdf (arxiv.org)

代码:cuishiyao96/ECE: Dataset and code for COLING2022 paper Event Causality Extraction with Event Argument Correlations (github.com)

期刊/会议:COLING 2022

摘要

事件因果关系识别(ECI)是事件因果关系理解的重要任务,其目的是检测两个给定文本事件之间是否存在因果关系。然而,ECI任务忽略了关键的事件结构和因果关系组件信息,使其难以用于下游应用。在本文中,我们探索了一种新的任务,即事件因果关系提取(ECE),旨在从纯文本中提取因果事件对及其结构化事件信息。ECE任务更具挑战性,因为每个事件可以包含多个事件论元,在事件之间提出细粒度的相关性,以确定因果事件对。因此,我们提出了一种带有双网格标记方案(dual grid tagging scheme)的方法来捕获ECE的事件内和事件间论元相关性。在此基础上,我们设计了一种事件类型增强模型架构来实现双网格标记方案。实验证明了我们的方法的有效性,广泛的分析指出了ECE未来的几个方向。

1、简介

事件因果关系(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的有效性,广泛的分析显示了未来工作的潜在研究方向。

2、相关工作

本文探讨了一种新的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方法似乎难以完成以事件为中心的任务,因为事件在事件内部和事件之间呈现更复杂的论元相关性。

3、任务定义

事件因果关系提取(ECE)旨在从纯文本中推导出因果事件对。在这里,一个因果事件对包含一个Cause组件和一个Effect组件,其中每个组件表示具有特定事件类型的事件,其事件论元及其事件角色。给定一段文本,需要一个事件因果关系提取系统来预测其中的所有因果事件对,如图1所示。

4、双网格标记方法

本节介绍了我们提出的ECE双网格标记方案,包括标记方案及其解码策略。第5节介绍了模型的具体实现。

4.1 标记模式

一般情况下,我们为因果事件分别构建了两个网格标记表,每个表提取了句子中可能发生的所有事件。在形式上,给定一个nnn个token句和mmm个预定义的事件类型,我们分别为原因和结果事件构造两个m×nm × nm×n的网格表。如图2所示,每行表示同一事件类型中的论元,而每列表示根据事件类型分配给句子中的token的标记。

对于表格中的每一行,我们用一个{Cor-Rol-Bdy}形式的标签填充它,该标签由三个字段组成,分别是correlation-fieldrole-fieldboundary-field:

(1)对于boundary-field:Bdy∈{Sta,End}Bdy∈\{Sta, End\}Bdy{Sta,End},我们设计它来表示论元跨度的起始位置和结束位置。例如,在图2(a)中,我们通过匹配Cor-Rol-StaCor-Rol-End标记来匹配论元“corn seeds”。

(2)对于role-field: Rol∈{Roli}iRol∈\{Rol_i\}_iRol{Roli}i (iii为角色索引),我们设计它来表示一个事件中每个论元的事件角色,从而构成一个事件结构。例如,在图2(a)中,我们根据Price_Rising行中的Cor-Product-Bdy标签,将论元“corn seeds”确定为Price_Rising类型事件中的Product-role论元。

(3)对于correlation-field:Cor∈{Intra,Inter}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类型的事件对。

在标记方案的基础上,该模型可以自然地提取因果关系事件对及其论元。此外,该方案在单独的类型行中学习每种类型的事件论元,允许模型考虑与特定类型信息的内部事件论元相关性。此外,标记方案强制模型从一个因果关系组件中提取论元,感知另一个因果关系组件中的论元,从而捕获事件之间的论元相关性。

4.2 解码策略

在标记方案的基础上,介绍了标记结果的解码策略。具体来说,我们将该过程分解为论元跨度解码、事件结构解码和因果对解码三个步骤。附录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,因此它不包括在因果关系对中。

5、模型

5.1 编码层

使用BERT进行编码。对于一个由nnn个token {t1,t2,…,tn}\{ t_1,t_2,\ldots,t_n \}{t1,t2,,tn}组成的句子,mmm个预定义事件类型{e1,e2,…,em}\{ e_1,e_2,\ldots,e_m \}{e1,e2,,em},原始的输入句子将改为:
[CLS]e1[M1]e2[M2]…em[Mm][SEP]t1…tn[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] t1tn [SEP]
其中[Mj][\text{M}_j][Mj]是第jjj个事件类型eje_jej的标记。我们将输入序列输入编码器,并使用输出表示H=h1,h2,…,hn\mathbf{H} = \mathbf{h}_1, \mathbf{h}_2,\ldots, \mathbf{h}_nH=h1,h2,,hn对应的句子作为符号表示。然后,我们将事件类型标记的表示形式收集为事件类型表示形式,表示为E=e1,e2,…,em\mathbf{E} = \mathbf{e}_1, \mathbf{e}_2,\ldots, \mathbf{e}_mE=e1,e2,,em

5.2 网格表示层

本节首先详细介绍用于生成条目表示的函数,然后介绍如何在两个网格表中应用它。

5.2.1 语义融合函数

网格中的每个条目分别为一个token和事件类型之间的关系建模,用于事件论元推断。对于句子中第jjj个事件类型eje_jej和第iii个token相连接的条目,将tit_itieje_jej的语义整合为gj,i=ϕ(ej,hi)g_{j,i} = \phi (e_j, h_i)gj,i=ϕ(ej,hi),通过融合函数ϕ\phiϕ得到其表示gj,ig_{j,i}gj,i。直观地说,ϕ\phiϕ可以通过拼接或相加等多种语义融合方式来实现。考虑到相同的事件论元跨度在不同的事件类型中可能发挥不同的作用(Sheng et al, 2021),事件论元的决定以事件类型为条件。因此,ϕ\phiϕ应该表示事件类型和token之间的条件依赖关系。因此,我们采用条件层归一化(CLN) (Su, 2019)来实现ϕ\phiϕ。CLN主要基于层归一化(Ba et al, 2016),但它基于先验条件动态计算增益γγγ和偏差βββ,而不是直接将它们作为神经网络中的可学习参数。给定事件类型表示ej\mathbf{e}_jej为条件,token表示hi\mathbf{h}_ihi,通过CLN实现融合函数ϕ\phiϕ为:
ϕ(ej,hi)=CLN(ej,hi)=γj⊙(hi−μiσi)+βj,γj=Wγej+bγ,βj=Wβej+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}μiR,σiRhi\mathbf{h}_ihi的均值和方差,γj∈Rd,βj∈Rd\gamma_j \in \mathbb{R}^d, \beta_j \in \mathbb{R}^dγjRd,βjRd指的是条件增益和偏置。通过这种方式,事件类型信息表示为条件信息,因此与token表示集成在一起。

5.2.2 网格表征

我们使用两个语义融合函数ϕc\phi^cϕcϕr\phi^rϕr,分别导出因果网格表的条目表示。每个语义融合函数由一层CLN实现,得到的条目表示为:
gj,ic=ϕc(ej,hi)=CLNc(ej,hi),gj,ir=ϕr(ej,hi)=CLNr(ej,hi)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)
gj,ic,gj,irg_{j,i}^c,g_{j,i}^rgj,ic,gj,ir是分别在原因表和结果表中的条目表示为网格标记。

5.3 训练和推理

由于每个表中(ej,ti)(e_j, t_i)(ej,ti)可以同时分配多个标签,因此我们对条目表示进行多标签分类。具体来说,全连接网络预测(ej,ti)(e_j, t_i)(ej,ti)的每个标签的概率为:
pj,iI=sigmoid(gj,iIWI+bI)\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符号,分别表示因果格表,pj,iI\mathbf{p}_{j,i}^{\mathcal{I}}pj,iI的每个维度表示(ej,ti)(e_j, t_i)(ej,ti)之间出现一个标签的概率。因此,我们采用交叉熵损失作为损失函数:
LI=−∑j=1m∑i=1n∑k∈CI(yjiI=k)log(pj,iI[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=1mi=1nkCI(yjiI=k)log(pj,iI[k])
其中CCC是预定义标签的集合,pj,iI[k]∈[0,1]\mathbf{p}^{\mathcal{I}}_{j,i}[k]∈[0,1]pj,iI[k][0,1]是标签kkk(ej,ti)(e_j, t_i)(ej,ti)之间的预测概率,yjiIy_{ji}^{\mathcal{I}}yjiI是标签在(ej,ti)(e_j, t_i)(ej,ti)之间的真实标签。I\mathbb{I}I是一个开关函数,当yjiI=ky_{ji}^{\mathcal{I}}=kyjiI=kI=1\mathbb{I} = 1I=1,否则I=0\mathbb{I} = 0I=0。由式5可知,我们从两个栅格表中分别获得损失,并将其聚合为最终的训练目标:
J(θ)=Lc+Lr\mathcal{J}(\theta)=\mathcal{L}^c+\mathcal{L}^r J(θ)=Lc+Lr
为了进行推断,pj,iI\mathbf{p}_{j,i}^{\mathcal{I}}pj,iI被转换为标记,其概率超过标量阈值τI∈[0,1]\tau^{\mathcal{I}} ∈[0,1]τI[0,1],这是一个手动调优的超参数。

6、实验

6.1 数据集和评估

数据集:CCKS2021(ECE-CCKS)。

评估指标:precision、recall、F1.

(1)事件论元提取(EAE)度量评估模型提取感兴趣事件论元的能力。与之前的工作一样(Yang et al, 2019),当一个论元的事件类型、跨度和事件角色同时匹配正确标签时,它就会被正确预测。(2)因果类型度量(CET)衡量预测的因果事件类型是否与正确答案匹配。(3)事件因果关系提取(ECE)度量综合了上述两个度量,其中ECE中的一个论元在其预测的因果事件类型、跨度和事件角色同时满足正确标注时被正确提取。

6.2 实验设置

使用BERT-base,AdamW优化器,学习率3e-5,epoch为10,batch-size为8,句子最大长度为150,阈值均为0.5。

6.3 baseline

Event-then-Causality方法。这些方法首先从文本中提取事件,然后对因果关系进行分类。BERT-Softmax、BERT-CRF、DMBERT、PLMEE

Event-with-Causality方法。这些方法不是分别推导事件和因果关系,而是在考虑因果关系的情况下进行事件提取,从而同时推导事件和因果关系对。Novel-tagging、CasEcE、Pair-linking

6.4 主要的结果

1、Event-then-Causality方法效果普遍较差,没有不考虑因果关系,许多与因果关系无关的事件被错误地提取出来,这将使因果关系决策混淆。

2、Event-with-Causality结果相对较好,但是没有考虑面向实体的关系建模策略不能充分地探究事件之间的内在相关性和相互相关性。

3、DualCor的效果最好。

6.5 单因果事件对和多因果事件对对比

我们注意到,在我们的数据集中,有近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工作中值得研究的一个巨大挑战。

7、分析和讨论

7.1 消融实验

7.2 有效性讨论

比较了参数量、训练速度和推理速度。

7.3 错误分析

总结出三种错误。(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”。我们观察到,它通常发生在包含多个事件论元的事件角色中,其中需要更复杂的事件论元相关性建模。

8、总结

在本文中,我们提出了一个新的任务,事件因果关系提取(ECE),旨在从纯文本中提取具有结构化事件信息的因果事件对。我们提出了一种基于精心设计的双网格标记方案的方法,该方法探索了任务的事件内和事件间论元相关性。实验结果证明了该方法的有效性,并进行了广泛的分析,指出了几个有前景的方向,以启发今后的工作。

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

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

相关文章

前端借助Canvas实现压缩base64图片两种方法

一、具体代码 1、利用canvas压缩图片方法一 // 第一种压缩图片方法(图片base64,图片类型,压缩比例,回调函数)// 图片类型是指 image/png、image/jpeg、image/webp(仅Chrome支持)// 该方法对以上三种图片类型都适用 压缩结果的图片base64与原类型相同// …

从零开始一文理解Graph Embedding

Graph Embedding基础 图表示学习 什么是Graph Embedding 本文包括 DeepWalk LINE SDNE Node2vec Struc2vec等几个重要的Graph Embedding 方法 先说下不同embedding的区别是什么: DeepWalk:采用随机游走,形成序列,采用skip-gram方…

RocketMQ实现延迟队列精确到秒级实现

前言篇:为了节约成本,决定通过自研来改造rocketmq,添加任意时间延迟的延时队列,开源版本的rocketmq只有支持18个等级的延迟时间,其实对于大部分的功能是够用了的,但是以前的项目,全部都是使用了…

STM32 OTA应用开发——通过USB实现OTA升级

STM32 OTA应用开发——通过USB实现OTA升级 目录STM32 OTA应用开发——通过USB实现OTA升级前言1 环境搭建2 功能描述3 BootLoader的制作4 APP的制作5 烧录下载配置6 运行测试结束语前言 什么是OTA? 百度百科:空中下载技术(Over-the-Air Techn…

【SpringCloud系列】SpringCloudConfig配置中心

前言 我们在开发过程中总是会有各种各样的配置,比较如数据库连接配置,Mybatis配置等等各种组件的配置,这些配置都放在yml中,如果想要变更这些配置,需要修改yml文件,然后重新部署项目才能生效,同…

后端接收格式为x-www-form-urlencoded的数据

1.x-www-form-urlencoded是什么? x-www-form-urlencoded纸面翻译即所谓url格式的编码,是post的默认Content-Type,其实就是一种编码格式,类似json也是一种编码传输格式。form表单中使用 form的enctype属性为编码方式&#xff0…

GoFrame工程目录设计介绍

GoFrame框架针对业务项目的目录设计,主体的思想来源于三层架构,但在具体实现中,对其进行了一定的改进和细化使其更符合工程实践和时代进步。 一.工程目录结构 GoFrame业务项目基本目录结构如下: 二.目录结构解释 对外接口 对…

AWS攻略——使用中转网关(Transit Gateway)连接不同区域(Region)VPC

文章目录Peering方案Transit Gateway方案环境准备创建Transit Gateway Peering Connection接受邀请修改中转网关路由修改被邀请方中转网关路由修改邀请方中转网关路由测试修改Public子网路由知识点参考资料区别于 《AWS攻略——使用中转网关(Transit Gateway)连接同区域(Region…

记录--前端项目中运行 npm run xxx 的时候发生了什么?

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 npm 是 node 捆绑的依赖管理器,常用程度可想而知。那么你每天都在 npm/yarn run 的命令到底是如何运行项目的呢? 前端项目中运行 npm run xxx 的时候发生了什么?大家…

LinkSLA智能运维技术派-Redis的监控

Redis是一个开源,内存存储的数据服务器,可用作数据库、高速缓存和消息队列代理等场景。 首先我们对内存进行监控,主要指标如下: - used_memory:使用内存 - used_memory_rss:从操作系统分配的内存 - mem_fragmentation_ratio:内…

Mac mini 外接移动硬盘无法写入或者无法显示的解决方法

文章目录1. 背景2. 让NTFS格式的移动硬盘正常读写方法3. 打开“启动安全性实用工具”4. 更改“安全启动”设置1. 背景 刚买mac min(2023年2月3日)不久,发现macOS的玩起来并不容易,勇习惯了windows系统的习惯,感觉 mac…

免去打包烦恼,自动构建你的GitHub Pages|玩转GitHub Pages三部曲(二)

本文讲述了如何利用 GitHub Actions 来自动构建 GitHub Pages 项目,免去繁琐的手动构建再提交过程,让你专注于写作。大家的点赞和互动是我更文的动力 /(ㄒoㄒ)/ 所以我决定发起一项活动,到三月三十一日统计,留言次数和赞赏次数最多…

selenium基本操作

爬虫与反爬虫之间的斗争爬虫:对某个网站数据或图片感兴趣,开始抓取网站信息;网站:请求次数频繁,并且访问ip固定,user_agent也是python,开始限制访问;爬虫:通过设置user_a…

ifconfig不显示ipv4地址,ifconfig eth0 192.168.5.9失败

ifconfig eth0 192.168.5.9设置ip地址后,通过ifconfig仍然没有ipv4地址: 一、 执行ifup eth0启动eth0: ifconfig、ifup、ifdown :这三个命令的用途都是启动网络接口,不过,ifup 与 ifdown 仅就 /etc/sysconfig/network-…

【数据存储】浮点型在内存中的存储

目录 一、存储现象 二、IEEE标准规范 1.存储 2.读取 三、举例验证 1.存储 2.读取 浮点型存储的标准是IEEE(电气电子工程师学会)754制定的。 一、存储现象 浮点数由于其有小数点的特殊性,有很多浮点数是不能精确存储的,如&#…

阅读HAL源码之重点总结

HAL封装中有如下特点(自己总结的): 特定外设要设置的参数组成一个结构体; 特定外设所有寄存器组成一个结构体; 地址基本都是通过宏来定义的,定义了各外设的起始地址,也就是对应寄存器结构体的地…

优秀外贸业务员必备的业务技能

2023年的春天,可谓是外贸企业三年寒冬后的第一个春天。外贸行业离不开的就是优秀的外贸业务员,那么一个优秀的外贸业务员需要有哪些必备的技能呢?跟着我一起来看看吧!一、电话开发客户能力首先,要知道,声音…

【unittest学习】unittest框架主要功能

1.认识unittest在 Python 中有诸多单元测试框架,如 doctest、unittest、pytest、nose 等,Python 2.1 及其以后的版本已经将 unittest 作为一个标准模块放入 Python 开发包中。2.认识单元测试不用单元测试框架能写单元测试吗?答案是肯定的。单…

华为OD机试题,用 Java 解【最小施肥机能效】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

无线通信时代的新技术----信标( Beacon)

随着IT技术的发展,无线通信技术也在不断发展。 现已根据预期用途开发了各种无线通信技术,例如 NFC、WIFI、Bluetooth和 RFID。 车辆内部结构的复杂化和数字化,车载通信网络技术的重要性也越来越高。 一个典型的例子是远程信息处理。 远程信息…