深度学习笔记之Transformer(六)Position Embedding铺垫:Skipgram与CBOW模型

引言

上一节介绍了 Word2vec \text{Word2vec} Word2vec模型架构与对应策略。本节将继续介绍 Skipgram \text{Skipgram} Skipgram CBOW \text{CBOW} CBOW模型架构。

回顾: Word2vec \text{Word2vec} Word2vec模型

关于 Word2vec \text{Word2vec} Word2vec模型,它的任务目标是基于语料库 ( Corpus ) (\text{Corpus}) (Corpus),对该语料库对应词汇表 ( Vocabulary ) (\text{Vocabulary}) (Vocabulary)中的每一个词表示成一个分布式向量 ( Distributed Vector ) (\text{Distributed Vector}) (Distributed Vector)

而这个分布式向量需要满足:

  • 作为特征表示的向量维数有限;
  • 如果词与词之间存在相似性关系,我们希望对应的特征向量能够表达出来。

而我们已知的训练信息仅包含语料库,可以将语料库中的文本(句子)整合在一起,视作由若干个词语组成的超长序列 D \mathcal D D
其中 w t ( t = 1 , 2 , ⋯ , T ) w_t(t=1,2,\cdots,\mathcal T) wt(t=1,2,,T)表示一个随机变量,它可能是词汇表中的任意一个词,只不过存在各词均存在相应的概率而已。
D = { w 1 , w 2 , ⋯ , w T } \mathcal D = \{w_1,w_2,\cdots,w_{\mathcal T}\} D={w1,w2,,wT}

而优化分布式向量的策略可以使用极大似然估计进行描述:

  • 关于语料库 D \mathcal D D内各随机变量的联合概率分布可表示为如下形式:
    P ( w 1 : T ) = P ( w 1 , w 2 , ⋯ , w T ) = P ( w t ) ⋅ P ( w 1 : t − 1 , w t + 1 : T ∣ w t ) \begin{aligned} \mathcal P(w_{1:\mathcal T}) & = \mathcal P(w_1,w_2,\cdots,w_{\mathcal T}) \\ & = \mathcal P(w_t) \cdot \mathcal P(w_{1:t - 1},w_{t+1:\mathcal T} \mid w_t) \end{aligned} P(w1:T)=P(w1,w2,,wT)=P(wt)P(w1:t1,wt+1:Twt)
    其中 w t w_t wt表示位于语料库内的第 t ( t ∈ { 1 , 2 , ⋯ , T } ) t(t \in \{1,2,\cdots,\mathcal T\}) t(t{1,2,,T})个位置的随机变量;而 w 1 : t − 1 , w t + 1 : T w_{1:t - 1},w_{t+1:\mathcal T} w1:t1,wt+1:T则表示词 w t w_t wt在该语料库中的上下文 ( Context ) (\text{Context}) (Context)信息。 P ( w 1 : t − 1 , w t + 1 : T ∣ w t ) \mathcal P(w_{1:t - 1},w_{t+1:\mathcal T} \mid w_t) P(w1:t1,wt+1:Twt)则表示词 w t w_t wt对应的似然结果
  • 其中 P ( w t ) \mathcal P(w_t) P(wt)表示 D \mathcal D D w t w_t wt这个位置关于词汇表 V \mathcal V V中所有词的概率分布,在上下文未知的条件下,其相当于在均匀分布中进行采样。各分量对应的概率结果均为 1 ∣ V ∣ \begin{aligned}\frac{1}{|\mathcal V|}\end{aligned} V1
    这里的 ∣ V ∣ |\mathcal V| V则表示词汇表 V \mathcal V V中词的数量。
    基于 P ( w t ) \mathcal P(w_t) P(wt)这个定值,并不是我们关系的对象。我们更关心随机变量 w t w_t wt上下文的似然结果 P ( w 1 : t − 1 , w t + 1 : T ∣ w t ) P(w_{1:t - 1},w_{t+1:\mathcal T} \mid w_t) P(w1:t1,wt+1:Twt)。对应地,其他随机变量的似然结果也可表示成该形式:
    P ( w 1 : t − 1 , w t + 1 : T ∣ w t ) t = 1 , 2 , ⋯ , T \mathcal P(w_{1:t - 1},w_{t+1:\mathcal T} \mid w_t) \quad t=1,2,\cdots,\mathcal T P(w1:t1,wt+1:Twt)t=1,2,,T
    其中每一项的后验部分均包含 T − 1 \mathcal T - 1 T1个项。并且各项之间可能存在关联关系。因而我们想将 P ( w 1 : t − 1 , w t + 1 : T ∣ w t ) \mathcal P(w_{1:t - 1},w_{t+1:\mathcal T} \mid w_t) P(w1:t1,wt+1:Twt)完整地表达出来几乎是不现实的(计算量相关性的表达方面都有阻碍)。因而需要构造一系列的假设简化对似然的计算
    • 假设 1 1 1 w t w_t wt仅能影响 w t w_t wt为中心,前后长度为 C \mathcal C C范围内的随机变量(上下文)。基于该假设,似然 P ( w 1 : t − 1 , w t + 1 : T ∣ w t ) \mathcal P(w_{1:t - 1},w_{t+1:\mathcal T} \mid w_t) P(w1:t1,wt+1:Twt)可简化成如下形式:
      对应的窗口大小为 2 C 2\mathcal C 2C
      P ( w 1 : t − 1 , w t + 1 : T ∣ w t ) = (1) P ( w t − C :  t − 1 , w t + 1 :  t + C ∣ w t ) \mathcal P(w_{1:t - 1},w_{t+1:\mathcal T} \mid w_t) \overset{\text{(1)}}{=} \mathcal P(w_{t - \mathcal C \text{ : } t-1},w_{t+1 \text{ : } t+ \mathcal C} \mid w_t) P(w1:t1,wt+1:Twt)=(1)P(wtC : t1,wt+1 : t+Cwt)
    • 假设 2 2 2:在给定 w t w_t wt的条件下,各似然结果之间相互独立。从而对应的完整似然函数可表示为:
      引入 log ⁡ \log log函数,并引入均值操作。这样做的目的是希望窗口内的上下文信息尽量共同影响似然函数的变化,而不是集中在有限的几个随机变量。
      ∏ t = 1 T P ( w t − C :  t − 1 , w t + 1 :  t + C ∣ w t ) ⇒ 1 T ∑ t = 1 T log ⁡ P ( w t − C :  t − 1 , w t + 1 :  t + C ∣ w t ) \prod_{t=1}^{\mathcal T} \mathcal P(w_{t - \mathcal C \text{ : } t-1},w_{t+1 \text{ : } t+ \mathcal C} \mid w_t) \Rightarrow \frac{1}{\mathcal T} \sum_{t=1}^{\mathcal T} \log \mathcal P(w_{t - \mathcal C \text{ : } t-1},w_{t+1 \text{ : } t+ \mathcal C} \mid w_t) t=1TP(wtC : t1,wt+1 : t+Cwt)T1t=1TlogP(wtC : t1,wt+1 : t+Cwt)
    • 假设 3 3 3在给定 w t w_t wt的条件下 w t − C , ⋯ , w t − 1 , w t + 1 , w t + C w_{t-\mathcal C},\cdots,w_{t-1},w_{t+1},w_{t+\mathcal C} wtC,,wt1,wt+1,wt+C之间独立同分布。即: w t − C ∣ w t , ⋯ , w t − 1 ∣ w t , w t + 1 ∣ w t , ⋯ , w t + C ∣ w t w_{t-\mathcal C} \mid w_t,\cdots,w_{t-1} \mid w_t,w_{t+1} \mid w_t,\cdots,w_{t+\mathcal C} \mid w_t wtCwt,,wt1wt,wt+1wt,,wt+Cwt独立同分布。因而上式可以继续简化成如下形式:
      由于假设 3 3 3,使得随机变量之间失去了‘序列信息’。因而 Word2vec \text{Word2vec} Word2vec系列模型并没有考虑序列信息,因为该模型的核心任务是生成“存在相似性关系”的分布式向量。
      1 T ∑ t = 1 T ∑ i = − C ( ≠ 0 ) C log ⁡ P ( w t + i ∣ w t ) \frac{1}{\mathcal T} \sum_{t=1}^{\mathcal T} \sum_{i=-\mathcal C(\neq 0)}^{\mathcal C} \log \mathcal P(w_{t+i} \mid w_t) T1t=1Ti=C(=0)ClogP(wt+iwt)

最终,基于极大似然估计的优化函数 J ( θ ) \mathcal J(\theta) J(θ)表示为如下形式:
{ θ ^ = arg ⁡ min ⁡ θ J ( θ ) J ( θ ) = − 1 T ∑ t = 1 T ∑ i = − C ( ≠ 0 ) C log ⁡ P ( w t + i ∣ w t ) \begin{cases} \hat {\theta} = \mathop{\arg\min}\limits_{\theta} \mathcal J(\theta) \\ \mathcal J(\theta) = \begin{aligned} -\frac{1}{\mathcal T} \sum_{t=1}^{\mathcal T} \sum_{i=-\mathcal C(\neq 0)}^{\mathcal C} \log \mathcal P(w_{t+i} \mid w_t) \end{aligned} \end{cases} θ^=θargminJ(θ)J(θ)=T1t=1Ti=C(=0)ClogP(wt+iwt)
Word2vec \text{Word2vec} Word2vec模型的任务就是用来计算 P ( w t + 1 ∣ w t ) \mathcal P(w_{t+1} \mid w_t) P(wt+1wt)。它的神经网络架构表示如下:
Wordvec神经网络架构
其中隐藏层神经元中的 ∑ \sum 表示该神经元仅执行线性运算。也就是说,除了输出层的 Softmax \text{Softmax} Softmax函数,整个网络中不存在其他关于激活函数的非线性映射。原因在于:模型输入层、输出层的神经元数量均为 ∣ V ∣ |\mathcal V| V,这意味着隐藏层神经元数量也不会过小,因为数量过小会丢失更多信息。从而导致如果是非线性操作,后续的计算代价可能是无法估量的。

补充:关于 Word2vec \text{Word2vec} Word2vec的一些说明

上述模型的输出结果 w o w_o wo是一个大小为 ∣ V ∣ |\mathcal V| V随机变量
w o ∈ R ∣ V ∣ × 1 w_o \in \mathbb R^{|\mathcal V| \times 1} woRV×1
它描述的是 P ( w t + i ∣ w t ) ( i ∈ { − C , C } ) \mathcal P(w_{t+i} \mid w_t)(i \in \{-\mathcal C,\mathcal C\}) P(wt+iwt)(i{C,C})。物理意义是:给定语料库 D \mathcal D D内的某个中心词,其上下文词的后验概率结果。但根据假设 ( 1 ) (1) (1),某中心词内包含 2 C 2\mathcal C 2C个上下文结果,并且这些上下文结果独立同分布。因而我们的神经网络应扩展为如下形式:
对窗口内所有上下文的预测
这个计算图它示如何描述上面三个假设的:

  • 假设 1 1 1:基于某一个中心词 w i = ω t w_i = \omega_t wi=ωt作为输入,我们能够得到 2 C 2\mathcal C 2C输出层结果,并且每个结果均是大小为 ∣ V ∣ |\mathcal V| V概率分布
  • 假设 2 2 2:输入层 w i w_i wi无论输入哪一个元素 ω 1 , ω 2 , ⋯ , ω T \omega_1,\omega_2,\cdots,\omega_{\mathcal T} ω1,ω2,,ωT,均共用同一个计算图。这样能够保证各 ω t ( t = 1 , 2 , ⋯ , T ) \omega_t(t=1,2,\cdots,\mathcal T) ωt(t=1,2,,T)输出结果不仅相互独立,并且还同分布
    相互独立体现在:输入层的不同输入,对应的输出仅和该输入相关;同分布体现在:它们共用同一个计算图,共用相同的权重信息 W , U \mathcal W,\mathcal U W,U
  • 假设 3 3 3:在输入层 w i = ω t w_i = \omega_t wi=ωt作为输入的条件下,其上下文各随机变量的输出分布共用同一权重信息 U \mathcal U U,从而基于同一权重 U \mathcal U U产生的输出结果,同样满足独立同分布

而最终想要得到分布式向量到底是谁呢 ? ? ?自然是基于权重 W \mathcal W W作用下的隐藏层特征。而这个特征是否能够迁移到其他的语料库 ? ? ?只要语料库使用相同语言(共用同一套语法),这个特征自然能够迁移到其他语料库中。

为什么会有这种效果 ? ? ?这就要回到策略构建的过程中为什么要使用极大似然估计。回顾完整的似然函数,我们要让它最大
max ⁡ { 1 T ∑ t = 1 T ∑ i = − C ( ≠ 0 ) C log ⁡ P ( w t + i ∣ w t ) } \max \left\{\frac{1}{\mathcal T} \sum_{t=1}^{\mathcal T} \sum_{i=-\mathcal C(\neq 0)}^{\mathcal C} \log \mathcal P(w_{t+i} \mid w_t)\right\} max T1t=1Ti=C(=0)ClogP(wt+iwt)
由于 1 T \begin{aligned}\frac{1}{\mathcal T}\end{aligned} T1的作用,意味着每一个 P ( w t + i ∣ w t ) ( t ∈ { 1 , 2 , ⋯ , T } ; i ∈ { − C , ⋯ , C } ) \mathcal P(w_{t+i} \mid w_t)(t \in\{1,2,\cdots,\mathcal T\};i \in \{-\mathcal C,\cdots,\mathcal C\}) P(wt+iwt)(t{1,2,,T};i{C,,C})都要尽可能地达到最大。这会导致:中心词 w t w_t wt与其对应的上下文结果 w t − C , ⋯ , w t − 1 , w t + 1 , ⋯ , w t + C w_{t-\mathcal C},\cdots,w_{t-1},w_{t+1},\cdots,w_{t+\mathcal C} wtC,,wt1,wt+1,,wt+C绑定在一起

  • 存在一组上下文 w t − C , ⋯ , w t − 1 , w t + 1 , ⋯ , w t + C w_{t-\mathcal C},\cdots,w_{t-1},w_{t+1},\cdots,w_{t+\mathcal C} wtC,,wt1,wt+1,,wt+C使下面式子达到最大;:
    P ( w t − C , ⋯ , w t − 1 , w t + 1 , ⋯ , w t + C ∣ w t ) = ∏ i = − C ( ≠ 0 ) C P ( w t + i ∣ w t ) \mathcal P(w_{t-\mathcal C},\cdots,w_{t-1},w_{t+1},\cdots,w_{t+\mathcal C} \mid w_t) = \prod_{i=-\mathcal C(\neq 0)}^{\mathcal C} \mathcal P(w_{t+i} \mid w_t) P(wtC,,wt1,wt+1,,wt+Cwt)=i=C(=0)CP(wt+iwt)

  • 相反,如果换了一组上下文 w k − C , ⋯ , w k − 1 , w k + 1 , ⋯ , w k + C ( k ≠ t ) w_{k-\mathcal C},\cdots,w_{k-1},w_{k+1},\cdots,w_{k+\mathcal C}(k \neq t) wkC,,wk1,wk+1,,wk+C(k=t)(这明显是另一个词 w k w_k wk的上下文),它同样会得到一个结果
    P ( w k − C , ⋯ , w k − 1 , w k + 1 , ⋯ , w k + C ∣ w t ) \mathcal P(w_{k-\mathcal C},\cdots,w_{k-1},w_{k+1},\cdots,w_{k+\mathcal C} \mid w_t) P(wkC,,wk1,wk+1,,wk+Cwt)
    但这个结果会差于 P ( w t − C , ⋯ , w t − 1 , w t + 1 , ⋯ , w t + C ∣ w t ) \mathcal P(w_{t-\mathcal C},\cdots,w_{t-1},w_{t+1},\cdots,w_{t+\mathcal C} \mid w_t) P(wtC,,wt1,wt+1,,wt+Cwt)

基于上述逻辑,会有:如果两个词之间存在相似的情况,那么这两个词对应的上下文分布也应该是相似。而这个相似的上下文结构反而成为了隐变量(隐藏层的输出)的一种判别依据。实际上,它并没有直接去描述相似性,而是从中心词与对应上下文的对应关系来学习隐变量,从而间接说明这个隐变量信息能够描述相似性。

实际上这个模型结构就是 Skip gram \text{Skip gram} Skip gram模型结构。而 CBOW \text{CBOW} CBOW模型与 Skip gram \text{Skip gram} Skip gram模型思想正好相反——上下文信息作为输入,共用同一个 W \mathcal W W,最终输出的是中心词的分布
它的假设 3 3 3 Skip gram \text{Skip gram} Skip gram相反,但同样也是基于条件的独立同分布。

2023 / 7 / 10 2023/7/10 2023/7/10补充:关于 CBOW \text{CBOW} CBOW构建的逻辑

Skip gram \text{Skip gram} Skip gram相类似,该模型的策略同样基于 3 3 3项假设:
其中前 2 2 2项假设与 Skip gram \text{Skip gram} Skip gram完全相同;仅最后 1 1 1项假设关于‘后验与条件’的独立性与 Skip gram \text{Skip gram} Skip gram相反,从而影响模型的构建。

场景构建:依然是基于作为训练数据的语料库 D = { w 1 , w 2 , ⋯ , w T } \mathcal D = \{w_1,w_2,\cdots,w_{\mathcal T}\} D={w1,w2,,wT},关于它的联合概率分布表示如下:
Skip gram \text{Skip gram} Skip gram相对应地,将联合概率分布分解成 P ( w t ∣ w 1 , ⋯ , w t − 1 , w t + 1 , ⋯ , w T ) ⋅ P ( w 1 , ⋯ , w t − 1 , w t + 1 , ⋯ , w T ) \mathcal P(w_t \mid w_1,\cdots,w_{t-1},w_{t+1},\cdots,w_{\mathcal T}) \cdot \mathcal P(w_1,\cdots,w_{t-1},w_{t+1},\cdots,w_{\mathcal T}) P(wtw1,,wt1,wt+1,,wT)P(w1,,wt1,wt+1,,wT)的形式。
P ( w 1 : T ) = P ( w 1 , w 2 , ⋯ , w T ) = P ( w t ∣ w 1 , ⋯ , w t − 1 , w t + 1 , ⋯ , w T ) ⋅ P ( w 1 , ⋯ , w t − 1 , w t + 1 , ⋯ , w T ) \begin{aligned} \mathcal P(w_{1:\mathcal T}) & = \mathcal P(w_1,w_2,\cdots,w_{\mathcal T}) \\ & = \mathcal P(w_t \mid w_1,\cdots,w_{t-1},w_{t+1},\cdots,w_{\mathcal T}) \cdot \mathcal P(w_1,\cdots,w_{t-1},w_{t+1},\cdots,w_{\mathcal T}) \end{aligned} P(w1:T)=P(w1,w2,,wT)=P(wtw1,,wt1,wt+1,,wT)P(w1,,wt1,wt+1,,wT)
对应地,联合概率分布基于各中心词的描述可表示为:
P ( w t ∣ w 1 , ⋯ , w t − 1 , w t + 1 , ⋯ , w T ) ⋅ P ( w 1 , ⋯ , w t − 1 , w t + 1 , ⋯ , w T ) t = 1 , 2 , ⋯ , T \mathcal P(w_t \mid w_1,\cdots,w_{t-1},w_{t+1},\cdots,w_{\mathcal T}) \cdot \mathcal P(w_1,\cdots,w_{t-1},w_{t+1},\cdots,w_{\mathcal T}) \quad t=1,2,\cdots,\mathcal T P(wtw1,,wt1,wt+1,,wT)P(w1,,wt1,wt+1,,wT)t=1,2,,T

  • 假设 1 1 1中心词 w t w_t wt仅能影响到前后各 C \mathcal C C上下文结果
    P ( w t ∣ w 1 , ⋯ , w t − 1 , w t + 1 , ⋯ , w T ) = (1) P ( w t ∣ w t − C , ⋯ , w t − 1 , w t + 1 , ⋯ , w t + C ) \mathcal P(w_t \mid w_1,\cdots,w_{t-1},w_{t+1},\cdots,w_{\mathcal T}) \overset{\text{(1)}}{=} \mathcal P(w_t \mid w_{t-\mathcal C},\cdots,w_{t-1},w_{t+1},\cdots,w_{t+\mathcal C}) P(wtw1,,wt1,wt+1,,wT)=(1)P(wtwtC,,wt1,wt+1,,wt+C)
  • 假设 2 2 2语料库中各随机变量对应的似然结果之间相互独立。那么整个语料库的完整似然结果可表示为:
    ∏ t = 1 T P ( w t ∣ w t − C , ⋯ , w t − 1 , w t + 1 , ⋯ , w t + C ) ⇒ 1 T ∑ t = 1 T log ⁡ P ( w t ∣ w t − C , ⋯ , w t − 1 , w t + 1 , ⋯ , w t + C ) \prod_{t=1}^{\mathcal T} \mathcal P(w_t \mid w_{t-\mathcal C},\cdots,w_{t-1},w_{t+1},\cdots,w_{t+\mathcal C}) \Rightarrow \frac{1}{\mathcal T} \sum_{t=1}^{\mathcal T} \log \mathcal P(w_t \mid w_{t-\mathcal C},\cdots,w_{t-1},w_{t+1},\cdots,w_{t+\mathcal C}) t=1TP(wtwtC,,wt1,wt+1,,wt+C)T1t=1TlogP(wtwtC,,wt1,wt+1,,wt+C)
  • 假设 3 3 3后验(中心词) w t w_t wt确定的条件下,各条件 w t − C , ⋯ , w t − 1 , w t + 1 , ⋯ , w t + C w_{t-\mathcal C},\cdots,w_{t-1},w_{t+1},\cdots,w_{t+\mathcal C} wtC,,wt1,wt+1,,wt+C之间独立同分布。从而将条件分布 P ( w t ∣ w t − C , ⋯ , w t − 1 , w t + 1 , ⋯ , w t + C ) \mathcal P(w_t \mid w_{t-\mathcal C},\cdots,w_{t-1},w_{t+1},\cdots,w_{t+\mathcal C}) P(wtwtC,,wt1,wt+1,,wt+C)分解为如下形式:
    P ( w t ∣ w t − C , ⋯ , w t − 1 , w t + 1 , ⋯ , w t + C ) = ∏ i = − C ( ≠ 0 ) C P ( w t ∣ w t + i ) \mathcal P(w_t \mid w_{t-\mathcal C},\cdots,w_{t-1},w_{t+1},\cdots,w_{t+\mathcal C}) = \prod_{i=-\mathcal C(\neq 0)}^{\mathcal C} \mathcal P(w_t \mid w_{t+i}) P(wtwtC,,wt1,wt+1,,wt+C)=i=C(=0)CP(wtwt+i)
    对应地,对应完整似然结果表示为:
    I = 1 T ∑ t = 1 T log ⁡ ∏ i = − C ( ≠ 0 ) C P ( w t ∣ w t + i ) = 1 T ∑ t = 1 T ∑ i = − C ( ≠ 0 ) C log ⁡ P ( w t ∣ w t + i ) \begin{aligned} \mathcal I & = \frac{1}{\mathcal T} \sum_{t=1}^{\mathcal T} \log \prod_{i=-\mathcal C(\neq 0)}^{\mathcal C} \mathcal P(w_t \mid w_{t+i}) \\ & = \frac{1}{\mathcal T} \sum_{t=1}^{\mathcal T} \sum_{i=-\mathcal C(\neq 0)}^{\mathcal C} \log \mathcal P(w_t \mid w_{t+i}) \end{aligned} I=T1t=1Tlogi=C(=0)CP(wtwt+i)=T1t=1Ti=C(=0)ClogP(wtwt+i)

Skip gram \text{Skip gram} Skip gram相反,我们要对 P ( w t ∣ w t + i ) \mathcal P(w_t \mid w_{t+i}) P(wtwt+i)进行建模:

  • 模型结构与 Skip gram \text{Skip gram} Skip gram完全相同,只不过输入由 w t w_t wt变成了 w t + i w_{t+i} wt+i;对应地,输出由 w t + i w_{t+i} wt+i变成了 w t w_t wt
  • 该网络结构与上述相同,不重复了。

CBOW \text{CBOW} CBOW的网络结构表示如下:
CBOW模型结构
而它的网络结构逻辑与 Skip gram \text{Skip gram} Skip gram相同,都是通过极大似然估计来使中心词信息中心词对应窗口内的上下文信息绑定在一起,从而使得相似中心词存在相似的上下文信息

相关参考:
词向量(Word Vector)【白板推导系列】

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

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

相关文章

六、consumer源码解读

Consumer源码解读 本课程的核心技术点如下: 1、consumer初始化 2、如何选举Consumer Leader 3、Consumer Leader是如何制定分区方案 4、Consumer如何拉取数据 5、Consumer的自动偏移量提交 Consumer初始化 从KafkaConsumer的构造方法出发,我们跟踪到…

设计模式——迭代器模式

迭代器模式(落没的设计模式) 定义 它提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节。 迭代器是为容器服务的,能容纳元素的对象可以称为容器,例:List、Set、Map 迭代器模式&a…

操作系统实战45讲|01程序的运行过程、02几行汇编几行C

配置环境遇到的问题 virtualBox实现windows和Ubuntu之间的复制粘贴 1.修改设置,设置共享粘贴板为双向 或者在运行的虚拟机的窗口中进行设置 2.安装virtualbox增强功能 (1)直接联网安装 设备----安装增强功能 3.补充 windows中终端和文档复制的快捷键为ctrlc&…

Element Plus el-table 自定义合并行和列

原文链接&#xff1a;Element Plus el-table 自定义合并行和列 前言 目标效果是将表格行数据中某个属性值相同的项合并到一起&#xff0c;效果如下&#xff1a; <el-table :data"tableData" :span-method"spanMethod" style"width: 100%">…

Set up the compilation environment for ESP8266-RTOS-SDK using Git on Windows

Software to be installed&#xff1a; Git BashPython Environment&#xff0c;ESP8266 Master require Python v3 environment. Please check “add to PATH” while installing Open Git Bash&#xff0c;Enter a local disk&#xff0c;create an empty folder, enter the …

JVM常用参数

以下是 JVM 常用参数的配置 内存相关参数&#xff1a; -Xmx&#xff1a;指定 JVM 最大可用内存&#xff0c;例如 -Xmx2g 表示最大可用内存为 2GB。 -Xms&#xff1a;指定 JVM 初始内存大小&#xff0c;例如 -Xms512m 表示初始内存为 512MB。 -XX:MaxPermSize&#xff1a;指定…

Leap AI + Python 开发绘图应用

使用python语言&#xff0c;并借助Leap AI网站的api key&#xff0c;可以轻松实现AI绘图功能。使用时&#xff0c;用户只要输入prompt提示词&#xff0c;几秒钟之内服务器就能生成图片并返回图片的链接地址。开发人员可以利用这个功能开发个性化的绘图软件&#xff0c;或者整合…

Redis常见命令和使用示例

目录 1.使用官方文档学习redis 2.核心命令 SET GET 3.全局/通用命令 KEYS EXISTS DEL EXPIRE TTL TYPE 1.使用官方文档学习redis redis官网 点击搜索&#xff0c;输入&#xff0c;比如输入ping&#xff0c;会显示Commands,是一个命令&#xff0c;点击ping&#xff…

「深度学习之优化算法」(十二)水波算法

1. 水波算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)   水波算法(Water wave optimization)是根据水波理论提出的优化算法。什么是水波理论?简单来说就是水波的宽度越小,其频率越高,频率与水波宽度的平方根成反比(具体细节我也不懂,物理方面的)。水波…

Spring AOP

Spring AOP &#x1f50e;定义&#x1f50e;AOP 的组成切面(Aspect)切点(Pointcut)通知(Advice)连接点(Join Point)总结 &#x1f50e;Spring AOPSpring AOP 的创建Spring AOP 的使用切点表达式Spring AOP 的实现原理 &#x1f50e;&#x1f338;&#x1f338;&#x1f338;完结…

报名开启 | DolphinDB 粉丝节,与你相约上海

作为量化爱好者&#xff0c;你是否在寻找更多志同道合的朋友&#xff1f; 作为技术达人&#xff0c;想探索因子挖掘、深度学习、AI领域的前沿技术&#xff1f; 7月22日 机会来了&#xff01; DolphinDB 首届线下粉丝节将于7月22日下午在上海举行&#xff01; 来现场&#xf…

面向对象进阶一(static,继承,多态)

面向对象进阶一 一、static二、继承2.1 继承的定义和特点2.2 继承内容、成员变量和成员方法的访问特点2.2.1继承内容2.2.2 成员变量的访问特点2.2.3 成员方法的访问方法、方法的重写 2.3 继承中构造方法的访问特点 三、this、super使用总结四、多态4.1 多态的基本概念4.2 多态调…