深度学习应用篇-自然语言处理[10]:N-Gram、SimCSE介绍,更多技术:数据增强、智能标注、多分类算法、文本信息抽取、多模态信息抽取、模型压缩算法等

news2024/11/17 10:02:55

在这里插入图片描述
【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等

在这里插入图片描述
专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等

本专栏主要方便入门同学快速掌握相关知识。后续会持续把深度学习涉及知识原理分析给大家,让大家在项目实操的同时也能知识储备,知其然、知其所以然、知何由以知其所以然。

声明:部分项目为网络经典项目方便大家快速学习,后续会不断增添实战环节(比赛、论文、现实应用等)

专栏订阅:

  • 深度学习入门到进阶专栏
  • 深度学习应用项目实战篇

深度学习应用篇-自然语言处理[10]:N-Gram、SimCSE介绍,更多技术:数据增强、智能标注、多分类算法、文本信息抽取、多模态信息抽取、模型压缩算法等

1.N-Gram

N-Gram是一种基于统计语言模型的算法。它的基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作,形成了长度是N的字节片段序列。每一个字节片段称为gram,对所有gram的出现频度进行统计,并且按照事先设定好的阈值进行过滤,形成关键gram列表,也就是这个文本的向量特征空间,列表中的每一种gram就是一个特征向量维度。

该模型基于这样一种假设,第N个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。常用的是二元的Bi-Gram和三元的Tri-Gram。

N-gram的用途很广,比如搜索引擎或者输入法提示,词性标注,垃圾短信分类,分词,机器翻译,语音识别能等等等。

  • 概率计算

假设我们有一个由n nn个词组成的句子 S = ( w 1 , w 2 , . . . , w n ) S=(w_{1},w_{2},...,w_{n}) S=(w1,w2,...,wn),如何衡量它的概率呢?让我们假设,每一个单词 w i w_{i} wi都要依赖于从第一个单词 w 1 w_{1} w1到到它之前一个单词 w i − 1 w_{i-1} wi1的影响:

p ( S ) = p ( w 1 w 2 . . . w n ) = p ( w 1 ) p ( w 2 ∣ w 1 ) . . . p ( w n ∣ w n − 1 . . . w 2 w 1 ) p(S)=p(w_{1}w_{2}...w_{n})=p(w_{1})p(w_{2}|w_{1})...p(w_{n}|w_{n-1}...w_{2}w_{1}) p(S)=p(w1w2...wn)=p(w1)p(w2w1)...p(wnwn1...w2w1)

这个衡量方法有两个缺陷:

  1. 参数空间大: 概率 p ( w n ∣ w n − 1 . . . w 2 w 1 ) p(w_{n}|w_{n-1}...w_{2}w_{1}) p(wnwn1...w2w1)的参数有O(n)个。
  2. 数据稀疏,词同时出现的情况可能没有,组合阶数高时尤其明显。

为了解决第一个问题,引入马尔科夫假设(Markov Assumption):一个词的出现仅与它之前的若干个词有关。

p ( w 1 . . . w n ) = ∏ p ( w i ∣ w i − 1 . . . w 1 ) ≈ ∏ p ( w i ∣ w i − 1 . . . w i − N + 1 ) p(w_{1}...w_{n})=\prod{p(w_{i}|w_{i-1}...w_{1})} \approx \prod{p(w_{i}|w_{i-1}...w_{i-N+1})} p(w1...wn)=p(wiwi1...w1)p(wiwi1...wiN+1)

如果一个词的出现仅依赖于它前面出现的一个词,那么我们就称之为 Bi-gram:

p ( S ) = p ( w 1 w 2 . . . w n ) = p ( w 1 ) p ( w 2 ∣ w 1 ) . . . p ( w n ∣ w n − 1 ) p(S)=p(w_{1}w_{2}...w_{n})=p(w_{1})p(w_{2}|w_{1})...p(w_{n}|w_{n-1}) p(S)=p(w1w2...wn)=p(w1)p(w2w1)...p(wnwn1)

如果一个词的出现仅依赖于它前面出现的两个词,那么我们就称之为 Tri-gram:

p ( S ) = p ( w 1 w 2 . . . w n ) = p ( w 1 ) p ( w 2 ∣ w 1 ) . . . p ( w n ∣ w n − 1 w n − 2 ) p(S)=p(w_{1}w_{2}...w_{n})=p(w_{1})p(w_{2}|w_{1})...p(w_{n}|w_{n-1}w_{n-2}) p(S)=p(w1w2...wn)=p(w1)p(w2w1)...p(wnwn1wn2)
N-gram的 N NN 可以取很高,然而现实中一般 bi-gram 和 tri-gram 就够用了.

用极大似然估计来计算每一项的条件概率,即频数:

p ( w n ∣ w n − 1 ) = C ( w n − 1 w n ) C ( w n − 1 ) p(w_{n}|w_{n-1})=\frac{C(w_{n-1}w_{n})}{C(w_{n-1})} p(wnwn1)=C(wn1)C(wn1wn)

p ( w n ∣ w n − 1 w n − 2 ) = C ( w n − 2 w n − 1 w n ) C ( w n − 2 w n − 1 ) p(w_{n}|w_{n-1}w_{n-2})=\frac{C(w_{n-2}w_{n-1}w_{n})}{C(w_{n-2}w_{n-1})} p(wnwn1wn2)=C(wn2wn1)C(wn2wn1wn)

p ( w n ∣ w n − 1 . . . w 2 w 1 ) = C ( w 1 w 2 . . . w n ) C ( w 1 w 2 . . . w n − 1 ) p(w_{n}|w_{n-1}...w_{2}w_{1})=\frac{C(w_{1}w_{2}...w_{n})}{C(w_{1}w_{2}...w_{n-1})} p(wnwn1...w2w1)=C(w1w2...wn1)C(w1w2...wn)

具体地,以Bi-gram为例,我们有这样一个由三句话组成的语料库:

I am Sam
Sam I am
I do not like apple

容易统计,“I”出现了3次,“I am”出现了2次,因此能计算概率:

p ( a m ∣ I ) = 2 3 p(am|I)=\frac{2}{3} p(amI)=32

同理,还能计算出如下概率:

p ( S a m ∣ a m ) = 0.5 p(Sam|am)=0.5 p(Samam)=0.5

p ( d o ∣ I ) = 0.33 p(do|I)=0.33 p(doI)=0.33
等等

2.SimCSE

句向量表征技术一直都是NLP领域的热门话题,在BERT前时代,一般都采用word2vec训练出的word-embedding结合pooling策略进行句向量表征,或者在有训练数据情况下,采用TextCNN/BiLSTM结合Siamese network策略进行句向量表征。在BERT时代,人们借助预训练语言模型的固有优势,一般采用BERT模型的[CLS]向量(即句子的起始字符向量)作为句向量表征;SimCSE采用对比学习的方法,进行句向量表征,在BERT模型上获取更好的句向量表征,详细介绍如下:

2.1.介绍

SimCSE(simple contrastive
sentence embedding framework),即简单的对比句向量表征框架。SimCSE共包含了无监督和有监督的两种方法。无监督方法,采用dropout技术,对原始文本进行数据增强,从而构造出正样本,用于后续对比学习训练;监督学习方法,借助于文本蕴含(自然语言推理)数据集,将蕴涵-pair作为正例,矛盾-pair作为难负例,用于后续对比学习训练。并且通过对比学习解决了预训练Embedding的各向异性问题,使其空间分布更均匀,当有监督数据可用时,可以使正样本直接更紧密。模型结构如下图所示:

其中,图a为无监督SimCSE,图b为有监督SimCSE,详细模型介绍见第3节和第4节。
下面将从对比学习背景、无监督SimCSE、有监督SimCSE、各向异性问题、实验细节五个方面进行详细介绍。

2.2.对比学习背景

2.2.1定义

对比学习就是以拉近相似数据,推开不相似数据为目标,有效地学习数据表征。给定一个pair对样本集合 D = { ( x i , x i + ) } i = 1 m D=\{(x_{i}, x_{i}^{+})\}^{m}_{i=1} D={(xi,xi+)}i=1m,其中 x i x_{i} xi x i + x_{i}^{+} xi+为相似样本,优化目标一般采用通过批内负样本(in-batch negatives)交叉熵损失函数,如下,
l i = − log ⁡ e s i m ( h i , h i + ) / τ ∑ j = 1 N e s i m ( h i , h j + ) / τ l_{i}=-\log\frac{e^{sim(h_{i},h_{i}^{+})/\tau}}{\sum_{j=1}^{N} e^{sim(h_{i},h_{j}^{+})/\tau}} li=logj=1Nesim(hi,hj+)/τesim(hi,hi+)/τ
其中, h i h_{i} hi h i + h_{i}^{+} hi+ x i x_{i} xi x i + x_{i}^{+} xi+的句向量表示, N N N为训练过程中batch的大小, s i m ( h i , h i + ) sim(h_{i},h_{i}^{+}) sim(hi,hi+)为向量 h i h_{i} hi h i + h_{i}^{+} hi+余弦相似度, τ \tau τ为温度超参。

在SimCSE论文中,采用BERT模型对句子进行句向量表征,即 h = f θ ( x ) h=f_{\theta}(x) h=fθ(x),其中, f θ f_{\theta} fθ为BERT模型参数,并通过对比学习损失优化网络全部参数。

2.2.2构造正样本

对比学习中的一个关键问题是如何构建 ( x i , x i + ) (x_{i}, x_{i}^{+}) (xi,xi+)数据对。在计算机视觉中,通过对一张图片进行简单地裁剪,翻转,扭曲和旋转就可以获取质量很高的 x i + x_{i}^{+} xi+;而在自然语言处理中,构造 x i + x_{i}^{+} xi+的方法与图像类似,一般对原始句子进行转译、重排,或对部分词语删除、插入、替换等;但是由于离散性,导致NLP中的数据扩充往往会引入大量的负面噪声,使得 x i + x_{i}^{+} xi+的质量难以保证。

在SimCSE论文中,提出使用标准dropout操作构造高质量 x i + x_{i}^{+} xi+,并达到比上述数据扩充更好的效果。

2.2.3对齐性和均匀性

在对比学习中,通常使用对齐性(alignment)和均匀性(uniformity)来衡量表征质量的好坏。

alignment是计算 ( x i , x i + ) (x_{i}, x_{i}^{+}) (xi,xi+)数据对向量表征之间的距离,表示数据之前的紧密程度,
l a l i g n ≜ E ( x i , x i + )   p p o s ∣ ∣ f ( x ) − f ( x + ) ∣ ∣ 2 l_{align} \triangleq \mathop{E}\limits_{(x_{i}, x_{i}^{+})~p_{pos}} ||f(x)-f(x^+)||^2 lalign(xi,xi+) pposE∣∣f(x)f(x+)2
uniformity是计算 x i x_{i} xi向量表征在整体特征分布上的均匀程度,
l u n i f o r m ≜ l o g E x , y ∼ i . i . d . p d a t a e − 2 ∣ ∣ f ( x ) − f ( y ) ∣ ∣ 2 l_{uniform} \triangleq log \mathop{E}\limits_{x,y \mathop{\sim}\limits^{i.i.d.} p_{data}} e^{-2||f(x)-f(y)||^2} luniformlogx,yi.i.d.pdataEe2∣∣f(x)f(y)2
其中, p d a t a p_{data} pdata表示数据分布。

这两个指标与对比学习的目标是一致的:正例之间应该保持紧密,而任意向量的语义特征应该尽可能地分散在超球体上。

2.3.无监督SimCSE

无监督SimCSE的思想非常简单,给定一个句子集合 { x i } i = 1 m \{x_i\}_{i=1}^{m} {xi}i=1m,将 x i x_{i} xi分别输入到编码器中两次,分别得到向量 z i z_{i} zi的正例和 z i ’ z_{i}^{’} zi;由于随机dropout masks机制存在于模型的fully-connected layers和attention probabilities上,因此相同的输入,经过模型后会得到不同的结果;将 z i ’ z_{i}^{’} zi向量作为 z i z_{i} zi的正例,其他向量作为负例,SimCSE的训练目标变成:
l i = − log ⁡ e s i m ( h i z i , h i z i ’ ) / τ ∑ j = 1 N e s i m ( h i z i , h j z j ’ ) / τ l_{i}=-\log\frac{e^{sim(h_{i}^{z_i},h_{i}^{^{z_i^{’}}})/\tau}}{\sum_{j=1}^{N} e^{sim(h_{i}^{z_i},h_{j}^{z_j^{’}})/\tau}} li=logj=1Nesim(hizi,hjzj)/τesim(hizi,hizi)/τ
注意: z z z为Transformers中的标准dropout mask,在无监督SimCSE没有额外增加任何dropout。

2.3.1Dropout数据增强与其他的比较

通过dropout masks机制进行数据增强构造正例的方法,可以视为一种最小形式的数据扩充,正例与原始样本之间采用完全相同的句子,只有在向量表征过程中的dropout mask有所不同。

在STS-B的开发集上,比较该方法与其他数据增强方法的差异。在英文维基上随机抽取 1 0 6 10^6 106个句子进行训练,学习速率=3e-5,批次大小为64。并训练过程中没有使用STS训练集。

  • 裁剪,删除和替换等数据增强方法,效果均不如dropout masks机制,即使删除一个词也会损害性能,详细如下表所示,

  • 使用下一句作为目标训练,或者采用两个独立的编码器进行编码的效果,不如采用一个编码器的dropout masks机制,详细如下表所示,

3.2为什么该方法可以work?

  • 为了进一步理解dropout噪声在无监督SimCSE中的作用,论文尝试了不同的dropout率,如下表所示,

可以发现仅在默认dropout概率p=0.1时效果最优,并且当dropout概率p=0,或者相同输入有同样的dropout mask时,效果显著下降。

  • 在训练过程中,每隔10步检查一次模型,并可视化alignment和uniformity在训练过程中的变化,如下图所示,

可以发现,在训练过程中,所有模型的均匀性都在提高,但是对于no-dropout和fixed-0.1模型来说对齐性急剧下降,而无监督SimCSE和delete-one-word模型进本持平。虽然delete-one-word模型的对齐性好于无监督SimCSE,但是均匀性相差较多,因此在整体效果上,无监督SimCSE更胜一筹。

2.4.有监督SimCSE

对比学习的关键是如何构建 ( x i , x i + ) (x_{i}, x_{i}^{+}) (xi,xi+)数据对,在无监督SimCSE中,借助dropout mask机制,构造高质量 x i + x_{i}^{+} xi+数据,已经获得了较好的句向量表征;在有监督SimCSE中,如何通过监督数据,进一步提高句向量表征,具体如下:

2.4.1监督数据的选择

共存在四种数据集,适合构造对比学习 ( x i , x i + ) (x_{i}, x_{i}^{+}) (xi,xi+)数据对,分别是:

  • QQP:Quora问题对;

相似的问题对为正样本,如下:

正样本
How can I improve my communication and verbal skills? 
What should we do to improve communication skills?

不相似的问题对为负样本,如下:

负样本
Why are you so sexy? 
How sexy are you?
  • Flickr30k:每个图像都有5个人进行描述,可以认为同一图像的任意两个描述为一对 ( x i , x i + ) (x_{i}, x_{i}^{+}) (xi,xi+)数据对;
    以下图为例:

对图片中的人物的5段描述,如下:

人物描述
Gray haired man in black suit and yellow tie working in a financial environment.
A graying man in a suit is perplexed at a business meeting.
A businessman in a yellow tie gives a frustrated look.
A man in a yellow tie is rubbing the back of his neck.
A man with a yellow tie looks concerned.
  • ParaNMT:大规模的回译数据集;

针对原数据进行机器翻译,获得回译数据,如下:

原数据:so, what’s half an hour?
回译数据:half an hour won’t kill you.
  • NLI datasets:自然语言推理数据集,包括:SNLI和MNLI。

自然语言推理数据集,包含蕴含、矛盾和中立;蕴含表示第二句话可以推理出第一句话;矛盾表示第二句话不能推理出第一句话;中立表示两句话无关;举例如下:

蕴含样本
well you see that on television also 
You can see that on television, as well.
矛盾样本
but that takes too much planning 
It doesn't take much planning.
中立样本
Conceptually cream skimming has two basic dimensions - product and geography. 
Product and geography are what make cream skimming work.

在四种数据集上,直接使用 ( x i , x i + ) (x_{i}, x_{i}^{+}) (xi,xi+)数据对进行训练的结果如下表所示,

可以发现,NLI数据集上,采用语义蕴含对作为 ( x i , x i + ) (x_{i}, x_{i}^{+}) (xi,xi+)数据对的效果最好;并且统计发现,语义蕴含对(SNLI + MNLI)的词汇重叠仅占比39%,而QQP和ParaNMT数据集占比60%和55%。最终,选择NLI数据集进行监督学习。

2.4.2难负例的使用

NLI数据集中,一个前提假设文本,具有对应的蕴含文本和矛盾文本,将矛盾文本作为难负例;即, ( x i , x i + ) (x_{i}, x_{i}^{+}) (xi,xi+)数据对变成 ( x i , x i + , x i − ) (x_{i}, x_{i}^{+}, x_{i}^{-}) (xi,xi+,xi)数据组,其中, x i + x_{i}^{+} xi+为蕴含文本, x i − x_{i}^{-} xi为矛盾文本;监督学习SimCSE的训练目标变成:
l i = − log ⁡ e s i m ( h i , h i + ) / τ ∑ j = 1 N ( e s i m ( h i , h j + ) / τ + e s i m ( h i , h j − ) / τ ) l_{i}=-\log\frac{e^{sim(h_{i},h_{i}^{+})/\tau}}{\sum_{j=1}^{N} (e^{sim(h_{i},h_{j}^{+})/\tau} +e^{sim(h_{i},h_{j}^{-})/\tau})} li=logj=1N(esim(hi,hj+)/τ+esim(hi,hj)/τ)esim(hi,hi+)/τ
通过上表可以发现,增加矛盾文本作为难负例后,效果有所提高。
直观上,区分难负例(矛盾文本)和Batch内其他负例可能是有益的,将监督学习SimCSE的训练目标变成:
l i = − log ⁡ e s i m ( h i , h i + ) / τ ∑ j = 1 N ( e s i m ( h i , h j + ) / τ + α 1 i j e s i m ( h i , h j − ) / τ ) l_{i}=-\log\frac{e^{sim(h_{i},h_{i}^{+})/\tau}}{\sum_{j=1}^{N} (e^{sim(h_{i},h_{j}^{+})/\tau} + \alpha^{1_{i}^{j}} e^{sim(h_{i},h_{j}^{-})/\tau})} li=logj=1N(esim(hi,hj+)/τ+α1ijesim(hi,hj)/τ)esim(hi,hi+)/τ
用不同的α值训练SimCSE模型,并在STS-B开发集上对训练的模型进行评价,发现当α为1时效果最优,并且中性数据不会带来更多的收益,如下表所示,

2.5.各向异性问题

最近的研究发现了语言表征中的各向异性问题,即训练后的embeddings仅占据在向量空间中狭窄的部分,严重限制了向量的表现力。
缓解这个问题的一个简单方法是后处理,可以消除主要的主成分或将embeddings映射到各向同性分布。另一种常见的解决方案是在训练过程中添加正则项。
而对比学习的优化目标可以改善缓解各向异性问题,当负例数趋近于无穷大时,对比学习目标的渐近表示为:
− 1 τ E ( x i , x i + ) ∼ p p o s [ f ( x ) T f ( x + ) ] + E x ∼ p d a t a [ log ⁡ E x − ∼ p d a t a [ e f ( x ) T f ( x − ) / τ ] ] - \frac{1}{\tau}\mathop{E}\limits_{(x_{i}, x_{i}^{+}) \sim p_{pos}}[f(x)^{T}f(x^+)] + \mathop{E}\limits_{x \sim p_{data}}[\log \mathop{E}\limits_{x^- \sim p_{data}}[e^{f(x)^{T}f(x^-)/ \tau}]] τ1(xi,xi+)pposE[f(x)Tf(x+)]+xpdataE[logxpdataE[ef(x)Tf(x)/τ]]
其中,第一项使正例之间更相似,第二项使将负例之间分开。而第二项在优化过程中,会压平向量空间的奇异谱,因此对比学习有望缓解表征退化问题,提高句向量表征的均匀性。并通过下图,可以发现,

  • 虽然预训练embeddings具有良好的对齐性,但其均匀性较差;
  • 后处理方法,大大改善均匀性,但也使其对齐性变差;
  • 无监督SimCSE有效地提高了预训练embeddings的均匀性,同时保持了良好的对齐性;
  • 有监督SimCSE,可以进一步提高对齐性。

2.6.实验细节

对7个语义文本相似度(STS)任务进行了实验,将无监督和有监督的SimCSE与STS任务中的最先进的句子嵌入方法进行了比较,可以发现,无监督和有监督的SimCSE均取得了sota的效果,具体如下表所示,

2.6.1训练参数

对于有监督的SimCSE,对模型进行3个轮的训练,在STS-B的开发集上每训练250步进行一次模型验证,并保存测试集上最优效果的节点。对于无监督的SimCSE与有监督的SimCSE操作一致,但仅训练一个epoch。并对批次大小和学习率进行网格搜索,找寻最优参数,如下图所示,

实验发现,只要相应地调整学习速率,SimCSE对批量大小并不敏感,这与对比学习需要大批次的发现相矛盾。可能原因为所有SimCSE模型都是在原有预训练模型基础上继续训练的,已经提供了较好的初始化参数。

2.6.2MLP Layer

对于无监督和有监督的SimCSE,训练过程均采用在带有一个MLP层的[CLS]向量作为句向量表征。但,对于无监督的SimCSE,在测试中丢弃了MLP层,仅使用[CLS]向量作为句向量表征,详细实验如下表所示,

2.6.3MLM

在训练过程中引入masked language modeling变量,可以提到模型的迁移效果,如下表所示,

但值得注意的是,迁移性的提高,会造成原始任务上的效果下降。

2.6.4温度

温度主要用于调整softmax函数的平滑程度,在训练过程中,温度为0.05时,效果最佳。

SimCSE论文,在无监督句向量表征上,通过简单的dropout方式,构造了对比学习的正例,达到堪比监督学习效果,堪称大道至简。并且在监督学习上,对比学习框架效果也取得了SOTA。

  • 参考文献
  • SimCSE: Simple Contrastive Learning of Sentence Embeddings

更多文章请关注公重号:汀丶人工智能

3.NLP更多详细介绍:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等

前人栽树后人乘凉,本专栏提供资料:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等项目代码整合,省去你大把时间,效率提升。 帮助你快速完成任务落地,以及科研baseline。

NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等

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

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

相关文章

redis中的 adlist链表实现

adlist源码解读(基于redis 6.2.7) 1丶打开源码 adlist.h typedef struct listNode {struct listNode *prev;struct listNode *next;void *value; } listNode;//迭代时 使用 typedef struct listIter {listNode *next;int direction; 迭代方向 } listIter;typedef struct lis…

Submit的使用,程序中调用其他报表

Submit的使用 项目需求:编写一个程序能够将实时的物料库存数据通过发送邮件的形式发送到对应的邮件。现有标准的事务码MB5B来查看对应的库存数据。可以在程序中使用submit将参数传递到MB5B中,然后将获取的数据返回到程序中,然后在执行发送邮件…

【Git通关之旅】从山脚到山顶(傲视群雄版)

Git分布式版本控制工具 版本控制器的方式 集中式版本控制工具 集中式版本控制工具,版本库是集中存放在中央服务器的,team里每个人work时从中央服务器下载代 码,是必须联网才能工作,局域网或互联网。个人修改后然后提交到中央版本库…

【蓝桥杯】求既约分数—>(全解)最大公约数与最小公倍数

前言: 通过对【蓝桥杯】2020初赛的一道求既约分数的题目的讲解,引出关于求“最大公约数与最小公倍数”的方法汇总。 对于“最大公约数与最小公倍数”来说,求解都有一些固定的方法,而这些方法一般都是固定的,只需要掌握…

亚马逊、Allegro卖家建立属于自己的测评系统,实现批量优质账号养成

卖家搭建一套完整的测评系统,卖家自己能够养出批量优质账号,并完全掌控真实买家的浏览、加购、下单和评价等风控数据规律。我们的系统能够自主加速推广,防御反击,同时节省运营成本,实现高效的测评运营。 我们的系统支…

传统印刷企业需要部署数字工厂管理系统吗

随着数字化技术的快速发展,传统印刷企业面临着巨大的市场竞争压力。为了提高生产效率,降低生产成本,越来越多的企业开始考虑部署印刷数字工厂管理系统。但是,对于许多企业来说,是否部署印刷数字工厂仍然是一个需要权衡…

【国产复旦微FMQL45教程】-小试牛刀之LED

本教程采用 FMQL7045 FPGA开发板来完成整个试验,板卡照片如下: 具有丰富的接口资源,系统框图如下: 本教程用于完成基于Vivado的FMQL45的LED实验,目标是能够将这款开发板PL端先跑起来。 对于纯 PL 设计,我们…

002、体系结构之TiDB Server

TiDB Server 1、TiDB总览1.1、TiDB Server架构1.2、TiDB Server 主要功能: 2、SQL语句处理语句的解析和编译SQL层协议层上下文解析层逻辑优化器物理优化器本地执行器分布式执行器 3、如何将表的数据转成kv形式4、在线DDL相关模块5、GC机制与相关模块6、TiDB Server …

pyecharts案例三——河南省疫情地图绘制

代码实现 代码的业务流程基本和全国疫情地图相同,注意城市名结尾必须有“市”才能识别 import json from pyecharts.charts import Map from pyecharts.options import *f open("./疫情.txt", "r", encoding"UTF-8") data f.read…

暴力破解测试-业务安全测试实操(1)

业务安全测试实践模版理论指导_luozhonghua2000的博客-CSDN博客 测试原理和方法 暴力破解测试是指针对应用系统用户登录账号与密码进行的穷举测试,针对账号或密码进行逐一比较,直到找出正确的账号与密码。 般分为以下三种情况: 在已知账号的情况下,加载密码字典针对密码进行…

从美颜算法到AI美颜SDK:美丽的背后隐藏着什么?

在年轻人的生活中,通过美颜SDK类型的美颜工具进行拍摄已经成为了一种全新的文化现象。时下,AI美颜、美颜SDK讨论热点极高,那么大家知道美颜算法和AI美颜到底有什么不同吗?它们背后隐藏着什么样的技术和思想? 一、美颜算…

java的StringBuilder、Stringjoiner

一、StringBuilder StringBuilder可以看成是一个容器,创建之后里面的内容是可变的。作用是提高字符串的操作效率。 注意:使用String创建字符串对象时,是不能改变字符串的内容的,例如: String s1 "aaa"; St…

【解决MySQL-jdbc连接问题】com.mysql.jdbc.Driver was not found, trying direct instantiat

启动服务时出现报错 com.zaxxer.hikari.util.DriverDataSource : Registered driver with driverClassNamecom.mysql.jdbc.Driver was not found, trying direct instantiation.而且接口有时候能访问成功,有时候的超时连接,异常的慢 经查询&#xff0c…

BUUCTF Alice与Bob 1

题目描述: 密码学历史中,有两位知名的杰出人物,Alice和Bob。他们的爱情经过置换和轮加密也难以混淆,即使是没有身份认证也可以知根知底。就像在数学王国中的素数一样,孤傲又热情。下面是一个大整数:98554799767,请分解…

HTMLCSS Day03 CSS字体及文本样式

文章目录 1.文本属性- 颜色属性在CSS中如何通过color属性来修改文字颜色英文单词rgbrgba十六进制 - font-style 用于打开和关闭斜体文本- font-weight 为字体设置粗细程度- font-size 为文字指定大小- font-family 为文字指定特殊的字体,浏览器只会使用浏览器可以访…

动态规划dp —— 23.等差数列划分

1.状态表示 是什么?dp表中里的值所表示的含义就是状态表示 dp[i]表示:以i位置为结尾的所有子数组中有多少个等差数列 2.状态转移方程 dp[i] 等于什么 以i位置为结尾的等差数列,也就是说i位置必须和i-1,i-2位置构成等差数列&am…

98.实战网页构建定价部分-第一节

通过之前的文章我们实现如下的页面&#xff1a; ● 这节课我们来完成价目的部分 <section class"section-pricing"><div class"container"><span class"subheading">定价</span><h2 class"heading-secondary…

目前音质好的几款音频功放芯片

“音频功率放大器”简称音频功放&#xff0c;是扩声系统不可缺少的音响设备&#xff1b;是指把来自音源或前级放大器输出的弱信号放大并推动一定功率的音箱发出声音的集成电路。 音频功放可分为模拟功放和数字功放&#xff0c;传统模拟功放主要有A、AB、B、G类等&#xff0c;区…

vscode 实时同步代码到远程服务器

&#xff08;1&#xff09;在本地新建一个工程文件夹quant&#xff0c;将要同步的文件或者代码或文件夹放到quant里面&#xff1a; &#xff08;2&#xff09;创建sftp配置 使用 ctrlshiftp 快捷键调出输入框&#xff0c;选择 SFTP:Config 回车 会在 .vscode 目录下创建一个 s…

实验篇(7.2) 11. 创建点对点安全隧道(FortiGate-IPsec) ❀ 远程访问

【简介】前面我们实验的是FortiClient客户端与防火墙进行VPN连接&#xff0c;现在我们要做的实验是防火墙与防火墙之间进行VPN连接。现在我们来看看两台防火墙之间要怎样创建VPN连接。 实验要求与环境 OldMei集团深圳总部部署了域服务器和ERP服务器&#xff0c;用来对集团总部进…