序列建模简史(DIN/DIEN/DSIN/BST/MIMN/SIM/ETA/SDIM/TWIN)

序列建模简史(DIN/DIEN/DSIN/BST/MIMN/SIM/ETA/SDIM/TWIN)

史前史

在用户序列专门用于建模之前,一般对序列的建模的处理就是将所有序列行为进行sum/avg pooling操作,将用户的多个序列行为简单聚合成一个Embedding,然后和其他特征一起拼接。这就是最开始粗放地利用序列,序列行为的威力完全没有释放出来。也不难怪,史前史时期,各种眼花缭乱的模型结构、学习方式喷涌而出,序列建模才刚开始冒头。
在这里插入图片描述

后来工业界和学术界都证明序列建模能够有效提升用户建模的精度,头部大厂开始有人在序列建模领域专注研究,其中尤其以阿里的序列建模出名,一系列序列建模相关论文一发表就受到广泛关注,为序列建模领域开辟出一片光明的前途。

历史脉络

在梳理历史脉络之前,我们看看史前史时期对序列利用有哪些不足。

用户序列里面包含了丰富的用户行为模式、兴趣模式、用户兴趣变化迁移的信号,可以说利用好用户序列,能大幅提升模型的精度,大幅提升用户体验。如果只是简单的对用户序列进行聚合操作,丢失了很多信息。

比如说用户每个序列重要性必然是不同的,和目标物料相关性的权重都不一样。

再比如说用户序列用户兴趣的变化怎么刻画,模型怎么学习用户兴趣的迁移。

再比如说现在用户序列越来越长了,越长越全面的序列保存的用户信息越完整,如何建模超长序列。

再比如说用户序列里面包含的用户形态各异的兴趣,如何建模出用户的多峰兴趣。

还有用户序列是用户在多个session内产生的,session内与其他session又有所不同,如何建模刻画这种差异。

还有session的其他相关信息(sideinfomation)怎么利用起来,进一步丰富和补充序列,提升建模精度。

DIN

背景

阿里巴巴在电商的在线展示广告场景。基于Embedding & MLP 的网络结构通过固定长度的向量作为用户表征的方式限制了用户的多兴趣表达,而用户的兴趣是多样的,这样就产生了矛盾。

解决这种矛盾,可以增加用户向量表征维度。不过缺点也是明显的,会增加计算量,增加了模型复杂度,重点是可能会过拟合。也可以通过学习用户序列,在不同的广告上面有不同的用户向量表征,提升用户和目标广告的个性化相关性,DIN就是这个思路。

介绍

DIN的结构图如下
在这里插入图片描述

DIN通过引入attention来解决用户表征向量和目标广告的自适应匹配。使用attention机制来表达用户的动态兴趣,可以表示如下
v U ( A ) = f ( v A , e 1 , e 2 , . . . , e H ) = ∑ j = 1 H a t t e n t i o n ( e j , v A ) = ∑ j = 1 H w j e j \mathbf v_U(A) = f(\mathbf v_A,\mathbf e_1, \mathbf e_2, ..., \mathbf e_H ) = \sum_{j=1}^H attention(\mathbf e_j,\mathbf v_A) = \sum_{j=1}^H \mathbf w_j \mathbf e_j vU(A)=f(vA,e1,e2,...,eH)=j=1Hattention(ej,vA)=j=1Hwjej

{ e 1 , e 2 , . . . , e H } \{\mathbf e_1, \mathbf e_2, ..., \mathbf e_H\} {e1,e2,...,eH}是用户历史行为的一组Embedding,长度为 H H H

这个来源于一个朴素的想法,如果用户购买序列中有鞋子、袜子、水杯、键盘、风扇,后面那么用户如果购买了鼠标,鼠标和前面键盘相关性较大,和其他的购买行为相关性不大,模型通过attention能够捕捉到这种信息。面对目标广告时,不同的用户序列的权重是不一样的。

DIEN

背景

DIN通过attention能够动态刻画用户的兴趣,不过DIN没有考虑用户序列之间的相关性,用户序列之间的顺序也没有考虑。

也就是如果用户购买序列为“鞋子->袜子->水杯->键盘->风扇”和用户序列是“鞋子->水杯->袜子>风扇->键盘”通过attention得到的用户表征完全一样,实际上这两个序列是不同的。用户兴趣是在演变与进化迁移的,DIEN通过兴趣提取层和兴趣进化层精细刻画用户兴趣的演进过程,进一步提升用户表征的多样性和准确性。

介绍

DIEN的结构图如下
在这里插入图片描述
兴趣提取层
用户序列行为存在前后相关性,兴趣也随着行为发生变化,某个时刻的兴趣不仅与当前的行为相关,也和历史各个时刻的行为相关。用GRU建模用户序列的这种前后依赖的关系,用隐状态表示用户当前时刻的兴趣。同时引入辅助loss,通过下一个时刻的行为对当前行为进行监督,保证隐状态的有效性。

引入辅助loss可以有效缓解长序列梯度传播问题,引入用户非点击序列作为负样本,限制用户隐状态包含用户兴趣,模型用到的用户行为序列数据,长度可能非常大,容易导致GRU面临梯度消失问题;而且对各个时刻隐状态进行监督,可以提高提取到的兴趣表征效果,从而有利于下一个阶段兴趣演化层对兴趣的学习

兴趣进化层
通过基于attention的GRU方式,把attention分数当做更新门的作用,对GRU的隐状态进行更新。减弱不想管历史行为隐藏状态的更新,因此可以对隐状态的更新更细化。使兴趣演化过程聚焦在相关兴趣上,相关性越高,对隐状态的更新越大,从而对最终兴趣表征影响越大。

DSIN

背景

用户序列在一个时间片段里面有很大的相关性,不同时间段内的用户序列差异可能比较大。例如用户上午在淘宝搜索或者浏览衣服相关商品,下午使用淘宝可能搜索笔记本电脑相关商品。这里不同session之间差异较大,同一个session内部具有较大相关性。DSIN就是这个思路,对用户序列更细粒度的处理。

介绍

DSIN结构图如下
插图

session划分层
对session进行分组,按间隔30分钟进行分组

session兴趣提取层
提取每个session的用户兴趣,使用multi-head attention方式提取,将position Embedding 替换为bias Embedding

session兴趣交互层
学习session内序列的依赖顺序关系,使用双向lstm对提取出的session用户兴趣向量进行建模,目的是建模各个session兴趣向量的演化迁移规律

session兴趣激活层
计算用户兴趣和目标物料的attention分数,强化相关的用户兴趣,减弱不相关的用户兴趣。不过论文用session兴趣向量和lstm输出的兴趣向量都和目标物料向量做attention打分

DSIN对用户序列的利用力度更加细化,按照session进行分组建模,思路还是非常不错的。不过结构过于复杂,最后的lstm效率较低,个人以为,即便按照阿里的强悍工程技术能力,也未必能在线上主流量上面使用,这个模型耗时太大了。

BST

背景

Transformer在NLP领域大放异彩后,很多领域都开始使用这个彪悍的结构,NLP处理的就是各种字词序列问题,用户序列也是一种序列问题,Transformer很自然的就拿过来应用到这个序列建模上面了。

介绍

BST结构图如下
在这里插入图片描述
这里兴趣提取与演化过程简化为了Transformer结构,为了能学到用户序列和目标item的相关性,将目标item也一同输入给Transformer,然后用Transformer的输出和用户其他特征一起进入DNN。BST相当于用到了序列建模领域的利刃。

MIMN

背景

用户长期用户行为序列建模,当序列进一步拉长到千级别,会面临着几个挑战,其中最关键的两个包括:

存储约束 推荐系统有6亿用户,每个用户的行为序列的最大长度为150,存储约为1TB,不仅存储product_id,还存储其他相关功能id,如shop_id, brand_id等。当行为序列的长度达到1000需要6TB的存储空间。在淘宝场景的系统中使用高性能存储来保持低功耗延迟和高吞吐量,如此巨大的存储空间太昂贵了。因此,一个相当长的行为序列意味着不可接受的存储消耗。

耗时限制 深度网络非常具有挑战性,特别是在有大量请求的情况下。淘宝场景下QPS为500耗时为14ms,当用户行为的长度可达1000,DIEN的耗时达到200毫秒,30ms就已经不可接受了。

介绍

MIMN通过对机器学习算法和服务系统的协同设计来解决长序列建模的问题
在这里插入图片描述

(i) 服务系统视角:设计了一个单独的UIC(用户兴趣中心)模块。UIC关注用户行为的在线服务问题行为建模,为用户提供最新的兴趣表示每个用户。UIC的一个关键点是它的更新机制。更新只依赖于实时的用户行为触发事件,而不是流量请求。也就是说,UIC是无延迟的实时点击率预测。
(ii) 机器学习算法视角:仅解耦UIC模块无法解决存储问题,因为它仍然很难存储和进行推理
用户行为序列的长度扩展到1000到数百数以百万计的用户。借用记忆网络的概念
从NTM中提出了一种新的架构,称为MIMN(多通道用户兴趣记忆网络)。MIMN采用增量方式,可通过UIC模块实现很容易。这有助于解决存储挑战。此外,MIMN通过两种内存利用率设计改进了传统的NTM正则化和记忆归纳单元,使其更高效用于在有限存储空间下对用户行为序列进行建模。

SIM

背景

MIMN虽然可以理论上可以处理任意长度的序列,但实际上面是通过一个size固定大小的记忆矩阵实现的,当序列越长,记忆里面包含的噪声会越多,反而会影响兴趣建模的效果。也就是说当用户行为序列的长度进一步增加时,MIMN无法精确捕捉用户对特定候选项目的兴趣。SIM摒弃记忆网络的做法,开辟了一条新的道路。

介绍

SIM提出的基于搜索的兴趣模型(SIM)通过两个级联搜索单元提取用户兴趣:

在这里插入图片描述

(i) 泛搜单元GSU(General Search Unit) 负责从原始序列泛搜任意长的顺序行为数据,并获得相关的子用户行为序列(SBS),将候选序列从数万降为数百个。
(ii) 精搜单元ESU(Exact Search Unit) 对目标候选物料和SBS选出的数百个候选行为按照注意力机制进行建模。

这种级联搜索模式使SIM具有更好的能力,在可伸缩性和可扩展性方面更准确地建模终身序列行为,SIM对顺序用户行为数据进行建模最大长度可达54000。

ETA

背景

SIM提出了两阶段方法。第一阶段,辅助任务旨在从长序列用户行为检索最相关的用户行为序列。第二阶段,经典的注意力机制用来处理目标物料和第一阶段选出来的用户子序列的关系,进行CTR预估。

这种方式存在两个问题,首先是目标不一致,第一阶段目的是找到和目标物料相似的用户序列行为,第二阶段是尽可能的准确建模点击率;其次,第一阶段和第二阶段的更新频率不同,第一阶段是离线构建索引,然后导入到线上,第二阶段是参与在线训练。

ETA是一种端到端的目标注意力方法,可以大大降低训练和推理成本,并端到端训练长期用户行为序列。

介绍

ETA 实现端到端的长期用户行为建模,以减轻上述信息缺失(即目标发散和更新频率不一致)。通过使用SimHash来生成用户行为序列中每个行为的指纹。然后用汉明距离是用来帮助选择top-k物料,这样把检索复杂性从O(LBd)降低到O(L*B),其中L为行为序列的长度,B是候选物料的数量,d为embedding的尺寸。降低复杂性是有帮助我们删除了离线辅助模型,并实时进行训练和服务过程中进行检索。

在这里插入图片描述

实际上ETA是将SIM两阶段的第一阶段泛搜阶段嵌入了SimHash,筛选和目标候选物料相关的用户行为序列,这样实现端到端的建模长期用户序列。

SDIM

背景

SIM、ETA都是基于检索的方法。基于这些方法存在以下缺点:从整个序列中检索top-k项是次优的。因为即便是ETA,第一阶段是基于检索选取相似候选行为序列,第二阶段是基于注意力机制目标的,两阶段目标总归是不完全一致,这会对用户的长期兴趣产生有偏的估计。在用户具有丰富的行为的情况下,检索到的top-k项可能都与候选项相似,并且估计的用户兴趣表示将是不准确的。此外,检索算法的有效性和效率也难以达到平衡。

介绍

SDIM提出了一种利用LSH获取用户兴趣的新方法。在哈希之后,我们通过将与具有相同签名的候选项q相关联的行为项s𝑗相加,直接形成用户的兴趣。在单个哈希函数r中,所提出的估计用户兴趣的方法可以通过以下方法来计算。

输入的行为embedding向量为 x ∈ R d \mathbf x \in R^d xRd,hash函数向量为 r ∈ R d \mathbf r \in R^d rRd,其中 r i ∼ N ( 0 , 1 ) r_i \sim N(0, 1) riN(0,1),hash计算过程如下
h ( x , r ) = s i g n ( r T x ) = ± 1 h(\mathbf x, \mathbf r) = sign (\mathbf r^T \mathbf x) = \pm 1 h(x,r)=sign(rTx)=±1
如果输入向量 x 1 \mathbf x_1 x1和向量 x 2 \mathbf x_2 x2相似,那么他们的hash码相同
P ( r ) = 1 h ( x 1 , r ) = h ( x 2 , r ) P^{(r)} = 1_{h(\mathbf x_1, \mathbf r) = h(\mathbf x_2, \mathbf r)} P(r)=1h(x1,r)=h(x2,r)

上面hash是对每个维度使用一个hash函数,实际应用中每个维度使用多个hash函数,能有效降低碰撞概率,假设采用 m m m个hash函数,则有hash函数矩阵 R ∈ R m × d \mathbf R \in R^{m \times d} RRm×d

h ( x , R ) = s i g n ( R x ) ∈ R m h(\mathbf x, \mathbf R) = sign(\mathbf R \mathbf x) \in R^{m} h(x,R)=sign(Rx)Rm

这样就得到了输入向量的hash签名(长度为 m m m),然后再将hash签名分隔成 τ \tau τ组,每组视作一个hash桶,用这个hash桶作为索引,保存落入到这个hash桶的输入embedding列表,并对每个embedding使用L2归一化。

下图是 m = 4 m=4 m=4 τ = 2 \tau =2 τ=2,将每个序列行为embedding hash成4个bit,然后这4个bit分成2组(黄色和绿色2组),然后每组的签名值作为key建立索引,保存对应的经过L2归一化的embedding。

在这里插入图片描述

对于序列行为 s j \mathbf s_j sj,候选物料为 q \mathbf q q,那么根据用户序列可以得到用户行为向量
l 2 ( P ( r ) S ) = l 2 ( ∑ j = 1 L p j ( r ) s j ) l_2(\mathbf P^{(\mathbf r)} \mathbf S)=l_2(\sum_{j=1}^L\mathbf p_j^{(\mathbf r)} \mathbf s_j) l2(P(r)S)=l2(j=1Lpj(r)sj)

其中 S \mathbf S S为用户序列Embedding, p j r = { 0 , 1 } \mathbf p_j^{r}=\{0, 1\} pjr={0,1},当序列 s j \mathbf s_j sj和候选物料 q \mathbf q q在hash函数向量 r \mathbf r r下的签名一样时为1,否则为0。
q j ( r ) = 1 h ( s j , r ) = h ( q , r ) \mathbf q^{(r)}_j=1_{ h(\mathbf s_j, \mathbf r) = h(\mathbf q, \mathbf r)} qj(r)=1h(sj,r)=h(q,r)

用户兴趣表示为和候选物料签名一致的序列向量的attention值
A t t e n t i o n ( q , S ) = 1 m / τ ∑ i = 1 m / τ l 2 ( P ( r i ) S ) = 1 m / τ ∑ i = 1 m / τ l 2 ( ∑ j = 1 L p j ( r i ) s j ) Attention(\mathbf q, \mathbf S)=\frac{1}{ {m}/ {\tau} } \sum_{i=1}^{m/ \tau} l_2(\mathbf P^{(\mathbf r_i)} \mathbf S) = \frac{1}{ {m}/ {\tau} } \sum_{i=1}^{m/ \tau} l_2( \sum_{j=1}^L \mathbf p^{(\mathbf r_i)}_j \mathbf s_j) Attention(q,S)=m/τ1i=1m/τl2(P(ri)S)=m/τ1i=1m/τl2(j=1Lpj(ri)sj)

相当于直接在用户长期序列上面做attention操作,作者也进行了理论证明。总体架构如下:
在这里插入图片描述

TWIN

背景

长期用户序列建模两阶段框架下的核心问题:两阶段目标(相似性度量标准)不一致,GSU很容易筛选出相关性不高的item,浪费了计算资源,偏离了用户的兴趣。SIM是明显的两阶段,ETA和SDIM是端到端的,两阶段的emb也是一样的,但是只是用GSU的LSH去近似ESU的Target Attention,因此仍然存在不一致性。

介绍

TWIN:就是为了解决这个不一致的问题,用于终身用户行为建模的两阶段兴趣网络,其中 Consistency-Preserved GSU (CP-GSU) 采用与 ESU 中的 TA 相同的目标行为相关性度量,使两个阶段成为双胞胎.为了将昂贵的 TA 扩展到 CP-GSU,TWIN 通过有效的行为特征拆分、简化的 TA 架构和高度优化的在线基础设施,打破了 TA 的关键计算瓶颈,即 1 0 4 10^4 104 个行为的线性投影。
在这里插入图片描述

通过对用户行为序列特征进行拆分,将特征分为两部分:item固有特征H与user-item交互特征C。固有特征有:id、作者、主题、时长,交互特征有:用户点击时间戳、用户播放时间、点击页面位置、用户视频交互。

在这里插入图片描述
固有特征可以通过缓存策略减少计算。

对于用户项目交叉特征,缓存策略不适用,因为:1)。交叉特征描述了用户和视频之间的交互细节,因此不会在用户行为序列之间共享。 2).每个用户最多观看一次视频。即,在投影交叉特征时没有重复计算。因此,我们通过简化线性投影权重来降低计算成本。计算公式如下图所示,其实就是把每个交叉特征的emb映射到1维,最终输出一个L*J的向量,L:序列长度,J:交叉特征个数。

在这里插入图片描述

整体上是一个QKV的过程

alpha是一个序列长度的权重,query只与固有特征计算attention,交叉特征作为bias,不与query进行计算。
α = ( K h W h ) ( q T W q ) T d k + ( K c W c ) β        ( 6 ) \alpha = \frac{ (K_hW^h) (q^TW^q)^T}{\sqrt{d_k} } + (K_cW^c) \beta \ \ \ \ \ \ (6) α=dk (KhWh)(qTWq)T+(KcWc)β      (6)
上式中 α \alpha α 是一个L*1的向量,表示的是TA的attention结果。注意,公式(6)中, K h W h K_hW^h KhWh 通过离线缓存拿到,线上只计算其他部分。个人认为,将特征分为固有特征和交叉特征的原因在于:target没有交叉特征。

根据 α \alpha α 选择出top100,计算最终的attention:(该预测仅执行 100 多个行为,因此可以在线高效地进行,不需要再对特征K进行拆分。)从6式中取出top100个alpha聚合value。

A t t e n t i o n ( q T W q , K h W h , K c W c , K W v ) = S o f t m a x ( α ) T K W v     ( 7 ) \mathrm{Attention} (q^TW^q, K_hW^h, K_cW^c, KW^v) =\mathrm{Softmax}(\alpha)^TKW^v \ \ \ (7) Attention(qTWq,KhWh,KcWc,KWv)=Softmax(α)TKWv   (7)

T W I N = C o n c a t ( h e a d 1 , . . . , h e a d 4 ) W o \mathrm{TWIN} = \mathrm{Concat}(\mathrm{head_1},..., \mathrm{head_4} )W^o TWIN=Concat(head1,...,head4)Wo
h e a d α = A t t e n t i o n ( q T W α q , K h W α h , K W α v ) , α ∈ { 1 , 2 , 3 , 4 }          ( 8 ) \mathrm{head_{\alpha}=\mathrm{Attention}(q^TW^q_{\alpha} , K_hW^h_{\alpha}, KW^v_{\alpha} )}, \alpha \in \{1,2,3,4\} \ \ \ \ \ \ \ \ (8) headα=Attention(qTWαq,KhWαh,KWαv),α{1,2,3,4}        (8)

在这里插入图片描述

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

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

相关文章

ansible-playbook roles模块编写lnmp剧本

目录 一:集中式编写lnmp剧本 二:分布式安装lnmp 1、nginx 配置 2、mysql配置 3、php配置 4、运行剧本 一:集中式编写lnmp剧本 vim /etc/ansible/lnmp.yml- name: lnmp playhosts: dbserversremote_user: roottasks:- name: perpare condif…

谷歌云 | 电子商务 | 如何更好地管理客户身份以支持最佳的用户体验

【本文由Cloud Ace整理发布。Cloud Ace是谷歌云全球战略合作伙伴,拥有 300 多名工程师,也是谷歌最高级别合作伙伴,多次获得 Google Cloud 合作伙伴奖。作为谷歌托管服务商,我们提供谷歌云、谷歌地图、谷歌办公套件、谷歌云认证培训…

嵌入式开发学习(STC51-10-直流电机)

内容 直流电机工作约5S后停止 直流电机简介 直流电机是指能将直流电能转换成机械能(直流电动机)或将机械能转换成直流电能(直流发电机)的旋转电机; 直流电机的结构应由定子和转子两大部分组成; 直流电…

k8s概念-pv和pvc

回到目录 kubernetes存储卷的分类太丰富了,每种类型都要写相应的接口与参数才行,这就让维护与管理难度加大。 persistenvolume(PV) 是配置好的一段存储(可以是任意类型的存储卷) 也就是说将网络存储共享出来,配置定义成PV。 PersistentVolumeClaim(PVC)是用户pod使…

麦肯锡战略思维四大原则

麦肯锡战略思维四大原则 曾任职麦肯锡、安永等国家国际知名咨询机构的周正元,在其著作《麦肯锡结构化战略思维》将其系统的整理呈现出来,便于学习和使用。 模型介绍 工作中的你,是不是经常遇到复杂问题,六神无主? 专业…

【树形DP+换根思想】2022牛客多校加赛 H

登录—专业IT笔试面试备考平台_牛客网 题意: 思路: 这个虽然是树形DP,却用了换根的思想.... 首先,后缀0的个数可以转化成min(cnt2,cnt5),其中cnt2为2的因子个数,cnt5为5的因子个数 然后进行DP 设dp[u]…

openGauss学习笔记-31 openGauss 高级数据管理-索引

文章目录 openGauss学习笔记-31 openGauss 高级数据管理-索引31.1 语法格式31.2 参数说明31.3 示例 openGauss学习笔记-31 openGauss 高级数据管理-索引 索引是一个指向表中数据的指针。一个数据库中的索引与一本书的索引目录是非常相似的。 索引可以用来提高数据库查询性能&…

解决:树莓派VNC连接屏幕显示不全

目录 前导:我在重新烧录玩树莓派系统,开启完VNC并连接后,发现我的树莓派远程桌面屏幕显示不全,看着很难受! PS:开启VNC服务的过程 问题如下现象: 问题分析:当树莓派通过VNC连接时&…

ThreadLocal原理

ThreadLocal原理 ThreadLocal对象new出来存放到堆中,ThreadLocal引用是存放在栈里 Thread 类有个 ThreadLocalMap 成员变量,Map的key是Threadlocal 对象,value是你要存放的线程局部变量。 public void set(T value) {//获取当前线程Thread&…

springboot+vue农业技术信息管理系统_9927h

随着信息时代的发展,计算机迅速普及,传统的农业信息管理方式显得不够快捷,这时我们就需要创造更加便利的管理方法,对农业信息进行统计,便于统一管理。将传统管理方式转变为信息、智能化显得尤为重要,农业信…

web开发中的安全和防御入门——csp (content-security-policy内容安全策略)

偶然碰到iframe跨域加载被拒绝的问题,原因是父页面默认不允许加载跨域的子页面,也就是的content-security-policy中没有设置允许跨域加载。 简单地说,content-security-policy能限制页面允许和不允许加载的所有资源,常见的包括&a…

【万字长文】SpringBoot整合Atomikos实现多数据源分布式事务(提供Gitee源码)

前言:在最近的实际开发的过程中,遇到了在多数据源的情况下要保证原子性的问题,这个问题当时遇到了也是思考了一段时间,后来通过搜集大量资料与学习,最后是采用了分布式事务来解决这个问题,在讲解之前&#…

睿讯微带你深度了解汽车交流充电桩

这几年随着新能源汽车的普及,充电桩也越来越多的出现在我们的视野中。新能源纯电汽车就好比一种大号的电子产品,而充电桩则是它不可缺少的子系统,是新能源车主们的必要选择。 汽车充电桩分为直流和交流两种,2022年底全国公共充电桩…

Java课题笔记~ Spring 概述

Spring 框架 一、Spring 概述 1、Spring 框架是什么 Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring 的核心是控制反转(IoC)和面向切面编程(AOP)。 Spring…

创建vue-cli(脚手架搭建)

目录 功能 需要的环境 使用HbuilderX快速搭建一个vue-cli项目 组件路由 element-ui vue-cli 官方提供的一个脚手架,用于快速生成一个 vue 的项目模板;预先定义 好的目录结构及基础代码,就好比咱们在创建 Maven 项目时可以选择创建一个 骨…

VR内容研发公司 | VR流感病毒实验虚拟现实课件

由广州华锐互动开发的《VR流感病毒实验虚拟现实课件》是一种新型的教学模式,可以为学生提供更加真实和直观的流感病毒分离鉴定实验操作体验,从而提高学生的实验技能和工作效率。 《VR流感病毒实验虚拟现实课件》涉及了生物安全二级实验室(BSL-2)和流感病…

分布式应用:Zookeeper 集群与kafka 集群部署

目录 一、理论 1.Zookeeper 2.部署 Zookeeper 集群 3.消息队列 4.Kafka 5.部署 kafka 集群 6.FilebeatKafkaELK 二、实验 1.Zookeeper 集群部署 2.kafka集群部署 3.FilebeatKafkaELK 三、问题 1.解压文件异常 2.kafka集群建立失败 3.启动 filebeat报错 4.VIM报错…

基于DiscordMidjourney API接口实现文生图

https://discord.com/api/v9/interactions 请求头: authorization:取自 浏览器中discord 文生图请求头中的 authorization 的值 Content-Type:application/json 请求体: {“type”:2,“application_id”:“93692956130267xxxx”,“guild_id”:“1135900…

python-MySQL数据库建表语句(需要连接数据库)转存为Excel文档-工作小记

将create table XXXXXX 转为指定Excel文档。该脚本适用于数据库表结构本地文档记录 呈现效果 代码 # -*- coding:utf-8 -*- # Time : 2023/8/2 15:14 # Author: 水兵没月 # File : MySQL建表_2_excel.py import reimport mysql.connector import pandas as pd db 库名 mydb …

TS协议之PMT(节目映射表)

TS协议之PAT(节目关联表) 1.概要 PMT:节目映射表,与PAT成对出现,包含了该节目下所有的节目元素。 PMT数据结构如下: 字段分析: 字段字段描述表id标识一个TS PSI分段的内容是节目关联分段&am…