论文笔记:详解NEUPSL DSI

《Using Domain Knowledge to Guide Dialog Structure Induction via Neural Probabilistic 》

名词解释

Dialog Structure Induction(DSI)是推断给定目标导向对话的潜在对话结构(即一组对话状态及其时间转换)的任务。它是现代对话系统设计和话语分析的关键组件。

Probabilistic Soft Logic (概率软逻辑,PSL)是一种在统计关系学习和推理中使用的框架。它结合了逻辑编程的可解释性与概率模型的不确定性处理能力,适用于处理不确定和复杂的关系数据。PSL使用软逻辑(一种近似布尔逻辑的形式)来表达知识,其中逻辑命题的真值不再是简单的真(true)或假(false),而是在[0,1]范围内的实数,表示真实程度的不同。在PSL中,逻辑规则被转化为概率模型的一部分。这使得PSL能够以概率方式处理不确定性,例如,在数据缺失或噪声情况下进行推理。

文章的主要工作

(1) 提出了 NEUPSL DSI,这是一种新颖的平滑PSL(概率软逻辑)约束松弛方法,旨在确保在反向传播过程中提供丰富的梯度信号;

(2) 在合成和现实对话数据集上评估了 NEUPSL DSI,在标准泛化、领域泛化和领域适应三种设置下进行了测试。我们定量地展示了注入领域知识相比于无监督和少量样本方法的优势;

(3) 全面调查了软逻辑增强学习对学习神经模型不同方面的影响,通过检查其在表示学习和结构归纳方面的质量。

前置知识

VRNN

DD-VRNN

Probabilistic Soft Logic(PSL)

这项工作以一种类似于概率软逻辑(Probabilistic Soft Logic,PSL)的声明方式引入了软约束。PSL 是一种声明式统计关系学习(Statistical Relational Learning,SRL)框架,用于定义一种特定的概率图模型,即铰链损失马尔可夫随机场(Hinge-Loss Markov Random Field,HL-MRF)(Bach 等人,2017年)。PSL 使用一阶逻辑规则来模拟关系依赖性和结构约束,这些规则被称为模板,其参数称为原子。例如,“对话中的第一句话很可能属于问候状态”的陈述可以表示为:
FirstUtt ( U ) → STATE ( U , greet ) (5) \text{FirstUtt}(U) \rightarrow \text{STATE}(U,\text{greet})\tag{5} FirstUtt(U)STATE(U,greet)(5)
在公式(5)中, FirstUtt ( U ) → STATE ( U , greet ) \text{FirstUtt}(U) \rightarrow \text{STATE}(U,\text{greet}) FirstUtt(U)STATE(U,greet) FirstUtt ( U ) \text{FirstUtt}(U) FirstUtt(U) STATE ( U , greet ) \text{STATE}(U,\text{greet}) STATE(U,greet) 是原子(即原子布尔语句),分别指出一个话语 U U U 是否为对话的第一句话,或者它是否属于问候状态。在PSL规则中的原子通过替换自由变量(例如上文的 U U U)为感兴趣领域的具体实例(例如,具体话语 ‘Hello!’)来实现具体化,我们称这些为具体化原子。概率模型的观测变量和目标/决策变量对应于从领域中构建的具体化原子,例如, FirstUtt ( ′ H e l l o ! ′ ) \text{FirstUtt}('Hello!') FirstUtt(Hello!) 可能是一个观测变量,而 STATE ( ′ H e l l o ! ′ , greet ) \text{STATE}('Hello!', \text{greet}) STATE(Hello!,greet) 可能是一个目标变量。

观测变量是指在概率模型或统计分析中可以直接测量或记录的变量。它们是数据收集过程中实际观察到的值。在统计和机器学习的上下文中,观测变量通常用于推断或预测那些我们无法直接测量的潜在变量或未知参数。
目标变量,又称为因变量或预测变量,在数据分析、统计建模和机器学习中是指那些模型试图预测或解释的变量。

概率软逻辑(PSL)通过允许原本具有布尔值的原子采用区间 [0, 1] 内的连续真值来执行推理,从而软化了逻辑约束。利用这种放松,PSL用一种称为卢卡西维奇逻辑(Lukasiewicz logic)的软逻辑形式替换了逻辑运算(Klir 和 Yuan, 1995):

A ∧ B = max ⁡ ( 0.0 , A + B − 1.0 ) A \land B = \max(0.0, A+B - 1.0) AB=max(0.0,A+B1.0)
A ∨ B = min ⁡ ( 1.0 , A + B ) (6) A \lor B = \min(1.0, A+B) \tag{6} AB=min(1.0,A+B)(6)
¬ A = 1.0 − A \lnot A = 1.0 - A ¬A=1.0A

其中 A A A B B B 代表基础原子或原子上的逻辑表达式,并且取值在 [0, 1] 范围内。例如,PSL将公式 5 中的语句转换为以下形式:

min ⁡ { 1 , 1 − FirstUtt ( U ) + STATE ( U , greet ) } (7) \min\{1, 1 - \text{FirstUtt}(U) + \text{STATE}(U, \text{greet})\}\tag{7} min{1,1FirstUtt(U)+STATE(U,greet)}(7)

鉴于 A → B A \rightarrow B AB 等价于 ¬ A ∨ B \lnot A \lor B ¬AB,我们可以创建一系列函数 { ℓ i } i = 1 m \{ \ell_i \}^m_{i=1} {i}i=1m,称为模板,它们将数据映射到 [0, 1] 区间。使用这些模板,PSL定义了一个条件概率密度函数,用于在给定观测数据 x x x 的情况下,对未观测随机变量 y y y 进行推理,这称为铰链损失马尔可夫随机场(HL-MRF):

P ( y ∣ x ) ∝ exp ⁡ ( − ∑ i = 1 m λ i ⋅ ϕ i ( y , x ) ) (8) P(y|x) \propto \exp\left(-\sum_{i=1}^{m} \lambda_i \cdot \phi_i(y, x)\right) \tag{8} P(yx)exp(i=1mλiϕi(y,x))(8)

这里 λ i \lambda_i λi 是一个非负权重,而 ϕ i \phi_i ϕi 是基于模板的潜在函数:

ϕ i ( y , x ) = max ⁡ { 0 , ℓ i ( y , x ) } (9) \phi_i(y, x) = \max\{0, \ell_i(y, x)\} \tag{9} ϕi(y,x)=max{0,i(y,x)}(9)

然后,模型预测 y y y 的推理通过最大后验(MAP)估计继续进行,即通过最大化目标函数 P ( y ∣ x ) P(y|x) P(yx)(公式 8)相对于 y y y 的值。

Neural Probabilistic Soft Logic Dialogue Structure Induction(NEUPSL DSI)方法

问题表述

在给定面向目标的对话语料库 D D D 的情况下,我们考虑了学习潜在于该语料库的图 G G G 的对话结构识别(DSI)问题。更正式地说,对话结构被定义为有向图 G = ( S , P ) G = (S, P) G=(S,P),其中 S = { s 1 , … , s m } S = \{s_1, \ldots, s_m\} S={s1,,sm} 编码了一组对话状态,而 P P P 是概率分布 p ( s t ∣ s < t ) p(s_t|s_{<t}) p(sts<t),表示状态之间转移的可能性(见下图作为例子)。给定潜在的对话结构 G G G,对话 d i = { x 1 , … , x T } ∈ D d_i = \{x_1, \ldots, x_T\} \in D di={x1,,xT}D 是按时间顺序排列的话语集合 x t x_t xt。假设 x t x_t xt 根据过去历史条件下的话语分布 p ( x t ∣ s ≤ t , x < t ) p(x_t|s_{\leq t}, x_{<t}) p(xtst,x<t) 定义,状态 s t s_t st 根据 p ( s t ∣ s < t ) p(s_t|s_{<t}) p(sts<t) 定义。给定对话语料库 D = { d i } i = 1 n D = \{d_i\}_{i=1}^n D={di}i=1n,DSI 的任务是学习一个尽可能接近潜在图的有向图形模型 G = ( S , P ) G = (S, P) G=(S,P)

image.png

NEUPSL DSI 下整合神经和符号学习

image.png
上图提供了 DD-VRNN 和符号约束集成的图形表示。直观上,NEUPSL DSI 可以描述为三个部分:实例化、推理和学习。

实例化 NEUPSL DSI 模型使用一组一阶逻辑模板来创建一组潜力,这些潜力定义了用于学习和评估的损失函数。设 p w p_w pw 为 DD-VRNN 的潜在状态预测函数,其中包含隐藏参数 w w w 和输入话语 x vrnn x_{\text{vrnn}} xvrnn。这个函数的输出,定义为 p w ( x vrnn ) p_w(x_{\text{vrnn}}) pw(xvrnn),将是代表给定话语每个潜在类别可能性的概率分布。给定一个一阶符号规则 ℓ i ( y , x ) \ell_i(y, x) i(y,x),其中 y = p w ( x vrnn ) y = p_w(x_{\text{vrnn}}) y=pw(xvrnn) 是代表来自神经模型的潜在状态预测的决策变量,而 x x x 代表未在神经特征 x vrnn x_{\text{vrnn}} xvrnn 中纳入的符号观察,NEUPSL DSI 实例化一组形式为以下的deep hinge-loss potentials(深度铰链损失潜能):

ϕ w , i ( x vrnn , x ) = max ⁡ ( 0 , ℓ i ( p w ( x vrnn ) , x ) ) (10) \phi_{w,i}(x_{\text{vrnn}}, x) = \max(0, \ell_i(p_w(x_{\text{vrnn}}), x))\tag{10} ϕw,i(xvrnn,x)=max(0,i(pw(xvrnn),x))(10)

例如,在参考公式7时,决策变量 y = p w ( x vrnn ) y = p_w(x_{\text{vrnn}}) y=pw(xvrnn) 与 STATE(x, greet) 随机变量关联,导致以下情况:

ℓ i ( p w ( x vrnn ) , x ) = min ⁡ { 1 , 1 − FIRSTUTT ( U ) + p w ( x vrnn ) } (11) \ell_i(p_w(x_{\text{vrnn}}), x) = \min\{1, 1 - \text{FIRSTUTT}(U) + p_w(x_{\text{vrnn}})\} \tag{11} i(pw(xvrnn),x)=min{1,1FIRSTUTT(U)+pw(xvrnn)}(11)

在上述实例化模型的描述中,NEUPSL DSI 推理目标被拆分为神经推理目标和符号推理目标。神经推理目标通过评估 DD-VRNN 模型预测相对于 DSI 的标准损失函数来计算。鉴于深度铰链损失潜能 { ϕ w , i } i = 1 m \{\phi_{w,i}\}_{i=1}^m {ϕw,i}i=1m,符号推理目标是在决策变量 y = p w ( x vrnn ) y = p_w(x_{\text{vrnn}}) y=pw(xvrnn) 处评估的 HL-MRF 似然(公式8):

P w ( y ∣ x vrnn , x , λ ) = exp ⁡ ( − ∑ i = 1 m λ i ⋅ ϕ w , i ( x vrnn , x ) ) (12) P_w(y|x_{\text{vrnn}}, x, \lambda) = \exp\left(-\sum_{i=1}^m \lambda_i \cdot \phi_{w,i}(x_{\text{vrnn}}, x)\right) \tag{12} Pw(yxvrnn,x,λ)=exp(i=1mλiϕw,i(xvrnn,x))(12)

在 NEUPSL DSI 下,决策变量 y = p w ( x vrnn ) y = p_w(x_{\text{vrnn}}) y=pw(xvrnn) 是由神经网络权重 w w w 隐含控制的,因此,对决策变量 y ∗ y^* y 进行符号学习的传统 MAP 推理,可以简单地通过神经权重最小化 arg ⁡ min ⁡ w P w ( y ∣ x vrnn , x , λ ) \arg\min_w P_w(y|x_{\text{vrnn}}, x, \lambda) argminwPw(yxvrnn,x,λ) 来完成。结果,NEUPSL DSI 学习最小化一个受限优化目标:

w ∗ = arg ⁡ min ⁡ w [ L DD-VRNN + L constraint ] (13) w^* = \arg\min_w \left[ \mathcal{L}_{\text{DD-VRNN}} + \mathcal{L}_{\text{constraint}} \right] \tag{13} w=argwmin[LDD-VRNN+Lconstraint](13)

我们将约束损失定义为 HL-MRF 分布的对数似然:

L Constraint = − log ⁡ P w ( y ∣ x vrnn , x , λ ) (14) \mathcal{L}_{\text{Constraint}} = -\log P_w (y|x_{\text{vrnn}}, x, \lambda) \tag{14} LConstraint=logPw(yxvrnn,x,λ)(14)

为了改进梯度学习的软逻辑约束,直接使用的线性软约束以及经典的Lukasiewicz松弛无法传递具有幅度的梯度,而是仅传递方向(例如,±1)。正式来说,关于 w w w 的潜能 ϕ w ( x vrnn , x ) = max ⁡ ( 0 , ℓ ( p w ( x vrnn ) , x ) ) \phi_w(x_{\text{vrnn}}, x) = \max(0, \ell(p_w(x_{\text{vrnn}}), x)) ϕw(xvrnn,x)=max(0,(pw(xvrnn),x)) 的梯度为:

∂ ϕ w ∂ w = ∂ ℓ ( p w , x ) ∂ w ⋅ 1 ϕ w > 0 \frac{\partial \phi_w}{\partial w} = \frac{\partial \ell(p_w, x)}{\partial w} \cdot 1_{\phi_w>0} wϕw=w(pw,x)1ϕw>0

= [ ∂ ∂ p w ℓ ( p w , x ) ] ⋅ ∂ p w ∂ w ⋅ 1 ϕ w > 0 (15) = \left[ \frac{\partial}{\partial p_w} \ell(p_w, x) \right] \cdot \frac{\partial p_w}{\partial w} \cdot 1_{\phi_w>0} \tag{15} =[pw(pw,x)]wpw1ϕw>0(15)

这里 ℓ ( p w , x ) = a ⋅ p w ( x vrnn ) + b \ell(p_w, x) = a \cdot p_w(x_{\text{vrnn}}) + b (pw,x)=apw(xvrnn)+b 其中 a , b ∈ R a, b \in \mathbb{R} a,bR p w ( x vrnn ) ∈ [ 0 , 1 ] p_w(x_{\text{vrnn}}) \in [0, 1] pw(xvrnn)[0,1],这导致梯度 ∂ ∂ p w ℓ ( p w , x ) = a \frac{\partial}{\partial p_w} \ell(p_w, x) = a pw(pw,x)=a。观察在PSL描述的三个Lukasiewicz操作,很明显 a a a 的结果总是 ±1,除非每个约束有多个 p w ( x vrnn ) p_w(x_{\text{vrnn}}) pw(xvrnn)

因此,这种经典的软逻辑松弛导致了一个幼稚(naive)、不平滑的梯度:

∂ ϕ w ∂ w = [ a 1 ϕ w > 0 ] ⋅ ∂ p w ∂ w (16) \frac{\partial \phi_w}{\partial w} = [a 1_{\phi_w>0}] \cdot \frac{\partial p_w}{\partial w} \tag{16} wϕw=[a1ϕw>0]wpw(16)

这主要由预测概率的梯度 ∂ ∂ w p w \frac{\partial}{\partial w} p_w wpw 组成。它几乎不向模型提供 p w p_w pw 满足符号约束 ϕ w \phi_w ϕw 的程度的信息(除了非平滑的阶跃函数 1 ϕ w > 0 1_{\phi_w>0} 1ϕw>0),从而在基于梯度的学习中产生挑战。

在这项工作中,我们提出了一种新颖的基于对数的松弛方法,它提供了更平滑且更具信息性的梯度信息用于符号约束:

ψ w ( x ) = log ⁡ ( ϕ w ( x vrnn , x ) ) \psi_w(x) = \log (\phi_w(x_{\text{vrnn}}, x)) ψw(x)=log(ϕw(xvrnn,x))

= log ⁡ ( max ⁡ ( 0 , ℓ ( p w ( x vrnn ) , x ) ) ) (17) = \log (\max(0, \ell(p_w(x_{\text{vrnn}}), x))) \tag{17} =log(max(0,(pw(xvrnn),x)))(17)
这个看似简单的转换给梯度行为带来了非平凡的变化:

$$ \frac{\partial \psi_w}{\partial w} = \frac{1}{\phi_w} \cdot \frac{\partial \phi_w}{\partial w}

= \left[ \frac{a}{\phi_w} 1_{\phi_w>0} \right] \cdot \frac{\partial p_w}{\partial w} \tag{18}$$

如上所示,来自符号约束的梯度现在包含了一个新项 1 ϕ w \frac{1}{\phi_w} ϕw1。它向模型提供了模型预测满足符号约束 ℓ \ell 的程度信息,使得它不再是相对于 ϕ w \phi_w ϕw 的离散阶跃函数。结果,当一个规则的满足度 ϕ w \phi_w ϕw 是非负但低(即,不确定)时,梯度的大小将会很高,而当规则的满足度很高时,梯度的大小将会低。通过这种方式,符号约束项 ϕ i \phi_i ϕi 的梯度现在引导神经模型更有效地专注于学习那些不遵守现有符号规则的挑战性例子这导致神经和符号组件在模型学习期间更有效的协作,并且从经验上导致了泛化性能的提高。

通过加权词袋模型更强地控制后验坍塌

后验坍塌(Posterior Collapse)是一种在训练变分自编码器(VAEs)时常见的问题,尤其是在自然语言处理(NLP)任务中。这个问题发生在模型的编码器部分学会忽略输入数据,导致模型的隐含变量(latent variables)不再能够捕获数据的有用信息。换句话说,后验分布(即给定观察数据后的潜在变量的条件分布)倾向于与先验分布(潜在变量的分布)相同,因此潜在变量没有为数据的生成过程提供任何有意义的信息。这种情况下,模型的解码器部分将只能基于先验知识来重构数据,而无法利用潜在表示的好处。
在VAEs中,后验坍塌通常表现为隐变量的概率分布趋向于标准正态分布,使得隐变量无法有效地编码任何关于输入数据的信息。因此,解码器学习忽视这些变量,依靠数据中的其他特征来重构输入,这降低了模型的表现力。

避免VRNN解决方案坍塌至关重要,这种坍塌指的是模型将其所有预测仅放在少数几个状态中。这个问题被称为潜在变量消失问题(Zhao等人,2017)。Zhao等人(2017)通过为VRNN引入一个词袋(BOW)损失来解决这个问题,这要求网络预测响应 x x x 中的词袋。他们将 x x x 分成两个变量: x o x_o xo(词序)和 x bow x_{\text{bow}} xbow(无词序),并假设在给定 z z z c c c 的条件下,这两个变量是条件独立的:

p ( x ∣ z , c ) = p ( x o ∣ z , c ) p ( x bow ∣ z , c ) p ( z ∣ c ) . (19) p(x|z,c) = p(x_o|z,c)p(x_{\text{bow}}|z,c)p(z|c). \tag{19} p(xz,c)=p(xoz,c)p(xbowz,c)p(zc).(19)

这里, c c c 是对话历史:前面的话语,对话地位(如果话语来自同一个说话者则为1,否则为0),以及元特征(例如,主题)。让 f f f 是一个具有参数 z , x z, x z,x 的多层感知机的输出,其中 f ∈ R V f \in \mathbb{R}^V fRV V V V 是词汇量大小。然后词袋概率被定义为 log ⁡ p ( x bow ∣ z , c ) \log p(x_{\text{bow}}|z,c) logp(xbowz,c)

log ⁡ ∏ t = 1 ∣ x ∣ e f x t ∑ j V e f j \log \prod_{t=1}^{|x|} \frac{e^{f_{x_t}}}{\sum_{j}^V e^{f_j}} logt=1xjVefjefxt

其中, ∣ x ∣ |x| x x x x 的长度, x t x_t xt x x x 中第 t t t 个词的索引。

为了对抗后验坍塌施加强有力的正则化,我们使用基于训练语料库计算得到的 tf-idf 权重的 tf-idf 加权方案。直观上,这种重加权方案帮助模型专注于重构每个对话状态中独特的非通用术语,这鼓励模型在其表示空间中“拉开”不同对话状态的句子,以更好地最小化加权 BOW 损失。相比之下,一个在均匀加权 BOW 损失下的模型可能会因重构高频率术语(例如,“what is”,“can I”和“when”)而分心,这些术语是所有对话状态共有的。因此,我们指定 tf-idf 加权 BOW 概率为:

tf-idf 加权 BOW 概率定义为:

log ⁡ p ( x bow ∣ z , c ) = log ⁡ ∏ t = 1 ∣ x ∣ w x t e f x t ∑ j V e f j (20) \log p(x_{\text{bow}}|z, c) = \log \prod_{t=1}^{|x|} \frac{w_{x_t} e^{f_{x_t}}}{\sum_{j}^V e^{f_j}} \tag{20} logp(xbowz,c)=logt=1xjVefjwxtefxt(20)

其中, w x t w_{x_t} wxt 是计算出的 tf-idf 权重,由下式给出:

w x t = ( 1 − α ) N + α w x t ′ w_{x_t} = \frac{(1 - \alpha)}{N} + \alpha w'_{x_t} wxt=N(1α)+αwxt

N N N 是语料库大小, w x t ′ w'_{x_t} wxt x t x_t xt 索引的 tf-idf 词权重, α \alpha α 是一个超参数。在第5节中,我们探讨这种改变如何影响性能,并观察 PSL 约束是否仍然提供了性能提升。

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

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

相关文章

基于Scapy修改ClientHello的SNI(三)

需求:修改HTTPS的ClientHello中的SNI字段 目标:修改成功,wireshark显示正常 语言:Python 三方库:Scapy 下面是一个标准的ClientHello报文,是从一个完整的HTTPS流中保存出来的,原始报文中的SNI是www.baidu.com 在上一篇文章中 记录基于scapy构造ClientHello报文的尝试…

【Docker】Docker与Kubernetes:区别与优势对比

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。   kubernetes&#xff0c;简称K8s&a…

C#调用ffmpeg从视频提取图片

微信公众号“CSharp编程大全”的文章《C#从视频提取图片&#xff1f;》介绍了基于Microsoft.DirectX.AudioVideoPlayback.Video类实现从视频提取图片的方式&#xff0c;本来是想学习并测试该类的用法&#xff0c;但实际测试过程中却没有测通。百度从视频提取图片&#xff0c;网…

【Leetcode合集】1457. 二叉树中的伪回文路径

1457. 二叉树中的伪回文路径 1457. 二叉树中的伪回文路径 代码仓库地址&#xff1a; https://github.com/slience-me/Leetcode 个人博客 &#xff1a;https://slienceme.xyz 给你一棵二叉树&#xff0c;每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的&am…

rtsp点播异常出现‘circluar_buffer_size‘ option was set but it is xx

先说现象: 我使用potplay播放器来点播rtsp码流的时候可以点播成功&#xff0c;同事使用vlc和FFplay来点播rtsp码流的时候异常。 排查思路: 1.开始怀疑是oss账号问题&#xff0c;因为ts切片数据是保存在oss中的&#xff0c;我使用的是自己的oss账号&#xff0c;同事使用的是公司…

芯片安全和无线电安全底层渗透技术

和传统网络安全不同&#xff0c;硬件安全、芯片安全、无线电安全属于网络底层安全的重要细分领域&#xff0c;是网络安全的真正基石&#xff0c;更是国家安全的重要组成部分&#xff0c;“夯实网络底层安全基础&#xff0c;筑牢网络强国安全底座”&#xff0c;是底网安全重要性…

【小沐学写作】原型设计工具汇总(Axure RP)

文章目录 1、简介2、Axure RP2.1 工具简介2.2 工具特点2.2.1 互动事件2.2.2 条件逻辑2.2.4 工作表格2.2.5 多状态容器2.2.6 数据驱动接口2.2.7 自适应视图2.2.8 流程图 2.3 工具安装2.3.1 安装2.3.2 运行 2.4 使用费用2.5 工具体验2.5.1 登陆框制作 3、其他3.1 Figma3.2 Adobe …

如何通过ShardingJDBC进行读写分离

背景信息&#xff1a; 面对日益增加的系统访问量&#xff0c;数据库的吞吐量面临着巨大瓶颈。 对于同一时刻有大量并发读操作和较少写操作类型的应用系统来说&#xff0c;将数据库拆分为主库和从库。其中主库负责处理事务性的增删改操作&#xff0c;从库负责处理查询操作&#…

实验题【网关设置+VRRP+OSPF】(H3C模拟器)

嘿&#xff0c;这里是目录&#xff01; ⭐ H3C模拟器资源链接1. 实验示意图2. 要求和考核目标3. 当前配置3.1 PC1、PC2、PC3、PC4和PC5配置3.2 SW配置3.2.1 SW2配置3.2.2 SW3配置3.2.3 SW4配置3.2.4 SW1配置 3.2. R配置3.2.1 R1配置3.2.2 R2配置 ⭐ H3C模拟器资源链接 H3C网络…

微服务学习|初识MQ、RabbitMQ快速入门、SpringAMQP

初识MQ 同步通讯和异步通讯 同步通讯是实时性质的&#xff0c;就好像你用手机与朋友打视频电话&#xff0c;但是&#xff0c;别人再想与你视频就不行了&#xff0c;异步通讯不要求实时性&#xff0c;就好像你用手机发短信&#xff0c;好多人都能同时给你发短信&#xff0c;你…

xadmin后台在每一行记录增加一个复制链接按钮

xadmin后台在每一行记录增加一个复制链接按钮 1、效果 点击复制后,自动把url链接复制到粘贴板,按Ctrl+v即可显示复制内容。 2、实现代码 adminx.py # 用户管理 class UserWhiteListAdmin(object):search_fields = [name, mobile] # 检索字段list_display

在家无聊想获取收益?这几种副业项目分享给你

总会有在家无聊的时候&#xff0c;特别是一些很“宅”的人。厌倦了一些娱乐方式后&#xff0c;想起生活经济上的压力&#xff0c;这时候就会想到要做些什么获取收益。 是的&#xff0c;不用出门&#xff0c;不用和别人面对面交流&#xff0c;时间自由可控&#xff0c;这就是在家…

Fedora 36 ARM 镜像源更换与软件安装

1、什么是Fedora Fedora Linux是较具知名度的Linux发行套件之一&#xff0c;由Fedora专案社群开发、红帽公司赞助&#xff0c;目标是建立一套新颖、多功能并且自由的作业系统。 Fedora是商业化的Red Hat Enterprise Linux发行版的上游原始码。 2、Fedora软件安装 64 位 .deb&a…

elementPlus之home页面布局

可以根据自己喜欢的格式选择 现在 header 部分 Aside 部分 Main部分 加上背景色以及命名 <template><div class="common-layout"><el-container><el-header class="homeHeader"><div class="headerTitle">Dev…

栈和队列的实现(详解+图解!文末附完整代码)

栈 栈的基本概念 栈是一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&#xff1a;栈的…

macos安装小软件 cmake

一&#xff0c;cmake下载主页 Download CMake 二&#xff0c;下载&#xff0c;解压&#xff0c;配置&#xff0c;编译&#xff0c;安装 0. 假设macos中已经存在了 clang和make工具 1. 通过网页下载最新的稳定版 cmake***.tar.gz 源代码 2. tar zxf cmake***.tar 3. cd cmake***…

iOS强引用引起的内存泄漏

项目中遇到一个问题&#xff1a; 1.在A页面的ViewDidLoad 方法里写了一个接收通知的方法&#xff0c;如下图&#xff1a; 然后在B页面发送通知 &#xff08;注&#xff1a;下图的NOTI 是 [NSNotificationCenter defaultCenter] 的宏&#xff0c; 考虑一下可能有小白看这篇文章…

道高一尺,魔高一丈!Python爬虫与反爬虫大战见此回分晓?

文章目录 前言一、重新理解爬虫中的一些概念二、反爬虫的目的三、爬虫与反爬虫大战关于Python及爬虫技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试…

【从浅识到熟知Linux】基本指定之zip、unzip和tar

&#x1f388;归属专栏&#xff1a;从浅学到熟知Linux &#x1f697;个人主页&#xff1a;Jammingpro &#x1f41f;每日一句&#xff1a;周五写博客更刺激了&#xff0c;想到明天可以晚起床半小时&#xff0c;瞬间精神抖擞。再写它10篇博客。 文章前言&#xff1a;本文介绍zip…

连接docker swarm和凌鲨

docker swarm相比k8s而言&#xff0c;部署和使用都要简单很多&#xff0c;比较适合中小研发团队。 通过连接docker swarm和凌鲨&#xff0c;可以让研发过程中的常用操作更加方便。 更新容器镜像调整部署规模查看日志运行命令 使用步骤 部署swarm proxy 你可以通过linksaas…