自然语言处理——自注意力机制
一、文字表示方法
在自然语言处理中,如何用数据表示文字是基础问题。独热编码(One-hot Encoding )是一种简单的方法,例如对于 “我”“你”“他”“猫”“狗” 等字,会将其编码为如 “我 = [1 0 0 0 0 ……]”“你 = [0 1 0 0 0 ……]” 的形式。这种编码方式存在明显缺陷,一方面,其维度取决于汉字个数,通常会很长;另一方面,它无法体现出字词之间的语义关系。
Word Embedding 则是让模型自己学习文字的向量表示。通过训练,每个字或词都能得到一个相对低维且能在一定程度上反映其语义特征的向量,相比 One-hot Encoding 更具优势。
二、常见输出
在自然语言处理任务中,常见的输出有以下几种情况:
① 词性识别任务(每个词都输出一个值):针对输入文本中的每个词,模型输出其对应的词性。例如对于句子 “我 爱 你”,模型会分别输出 “代词”“动词”“代词” 等词性标签。这里每个词都有对应的输出值,且输出的词性标签数量与输入词的数量相同。
② 情感分类(所有词输出一个值):模型对输入的文本进行情感判断,输出为正向或负向等情感类别。例如对于句子 “你做的不错”,模型可能输出正向情感;而对于 “唉,又又又 emo 了”,则可能输出负向情感。在这种任务中,通常是对整个文本进行分析后得出一个单一的情感类别作为输出。
③ 翻译任务(输出长度不对应):输入一种语言的文本,模型输出另一种语言的翻译结果。如输入 “我爱中国”,输出 “I love China”。在这类任务中,输出的文本长度通常与输入文本长度没有固定的对应关系,模型需要根据对源语言文本的理解生成符合目标语言语法和语义的翻译文本。
三、传统模型局限及自注意力机制引入
(一)RNN 和 LSTM
1、循环神经网络(RNN)
在 RNN 运行过程中,其隐藏状态会在不同时间步之间传递信息,就像在传递一个家族的 “传家宝”(可以理解为向量、记忆单元) 一样,不断积累和更新与序列相关的信息。它帮助模型记住之前的输入内容,以便更好地处理当前输入并预测后续输出。
但是,当句子中的无效信息太多的时候,或者是处理长序列的时候,RNN会出现信息混乱或者丢失的情况,于是我们便引入了长短期记忆(LSTM)。
2、长短期记忆(LSTM)
在长短期记忆网络(LSTM)里,有几个重要的 “门” 来帮助它处理信息:
-
遗忘门:
- 想象你在学习一个故事,这个门就像是一个过滤器,它会根据当前读到的新信息和你之前记住的一些信息,来决定你要忘记之前记住的部分内容。它会根据一些计算(利用当前输入和你之前的记忆状态),给出一个 0 到 1 的数字。如果是 0,就表示完全忘记之前的某个信息;如果是 1,就表示完全保留之前的信息。例如,你之前记住了一些情节,但随着故事发展,有些旧的情节可能变得不重要了,遗忘门就会帮助你慢慢忘记它们。
-
输入门:
- 这扇门负责决定你要记住哪些新信息。当你读新的内容时,输入门会先根据当前的信息和你之前的记忆,判断哪些新信息是重要的,哪些不重要。它会先计算出一个重要性的权重,然后根据这个权重把重要的新信息存储起来。就像你在听故事时,会根据新的情节和你之前的理解,决定哪些新情节需要重点记住,哪些可以忽略。
-
记忆门(输出门):
- 这个门决定你要把记住的哪些信息展示出来,也就是要输出的信息。它根据当前的信息和你之前的记忆状态进行计算,然后从你记住的所有信息中挑选一部分展示出来。这部分信息会被传递给下一个时刻,让你可以继续根据这些信息来理解后面的故事。比如说,你听完一段故事后,会根据你记住的信息和新的信息,选择一部分来表达你对当前故事的理解,这就是输出门的作用。
这些门共同协作,让 LSTM 可以更好地处理像故事、句子等一系列顺序信息,避免出现信息混乱或者丢失的情况,特别是对于较长的序列,它们能帮助 LSTM 更聪明地记住重要的信息,忘记无关的信息。这样就可以让 LSTM 在处理长序列数据时,比普通的神经网络表现得更好,更准确地预测或处理信息啦 。
虽然在处理文本序列时,循环神经网络(RNN)和长短期记忆网络(LSTM)是常用的方法。然而,它们存在严重的效率问题,因为在处理过程中只能一个词一个词地依次处理,无法同时对整个文本进行分析。例如在词性识别任务中,对于 “我 爱 你” 这样的句子,需要按照顺序逐个分析每个词的词性,这就导致处理速度很慢,并且在长文本处理时,这种劣势更加明显。
(二)自注意力机制(Self-attention)
为了解决上述问题,自注意力机制应运而生。它能够一次性处理所有字词的特征提取,无需等待前一个字词处理完毕,实现了完全并行的计算。
1、什么是注意力?
通俗一点来讲,我应该给A、B、C、D分配多少的精力,我的注意力分成四份 ,A分0.1份,B分0.2份,C分0.5份,D分0.2份,给谁分的多给谁分的少取决于A、B、C、D是否值得我们注意,这就叫做注意力,即输出是综合了每一个,给每一个分配不同权重相加而来。
2、自注意力机制
2.1、基础计算思路
对于b1、b2、b3、b4来说,我们可以用刚刚的思路,给a1、a2、a3、a4每一个设置一个注意力,即所占权重,然后用最简单的点乘,如对a1,2来说,我们可以用a1、a2点乘,假设两个都是768的向量,点乘出来一个值0.2,那么我们认为0.2就是1和2之间的注意力,b1也就是a1,1、a1,2、a1,3、a1,4相加出来的结果。但这种直接点乘的方式存在固定字乘出固定值的弊端,如“吃苹果”、“用苹果”,这里的苹果显然不是一个东西,用这种方式便不能正确分类。
2.2、改进计算思路
现在我们不用他们原来的值进行点乘,我们先对a1、a2做一步变换,对a1我们乘以一个矩阵Wq,对a2我们乘以一个矩阵Wk,得到一个q和k。我们知道乘以一个矩阵相当于做一个全连接,我们再对q和k进行点乘得到a1,2,这里的q我们称之为query(询问)、k我们称之为key(键值)。我们可以理解为q是一个扫码器,k是一个二维码,扫码过后我们就知道应该分配多少注意力。
一般来讲,我们对每一个a也会乘以一个Wk,作为a1,1的二维码。最后我们一般要求分配的注意力和为1,所以在最后我们会进行一个Soft-max操作,使得四个注意力之和为1。
2.3、进一步改进计算思路
在注意力机制中,我们一般使用(值向量)而不是原始的(输入向量)乘以注意力权重,因为:
① 原始输入向量的局限性:原始输入向量包含了所有的原始信息,但这些信息可能较为繁杂,没有经过特定的转换和提炼。直接使用乘以注意力权重,不能很好地突出对当前任务或上下文真正重要的信息。
② 值向量的作用:通过计算得到的值向量 v ,是对原始输入向量 a 进行了一种线性变换和特征提取。这个变换过程可以将原始信息映射到一个更适合进行注意力加权的空间,使得不同维度的信息能够更好地被区分和利用。经过这样的转换后,再用注意力权重对进行加权求和,能够更有效地整合和突出与当前上下文相关的重要特征,从而更好地完成各种下游任务,如文本分类、机器翻译等。
因此,每一个字的特征提取都可以同时进行,因为它不需要等待前一个完成,实现完全并行!
2.4、维度计算和公式解释
① 我们用a1点乘Wq得到了一个q1,这里的Wq就相当于是一个全连接(768,768),这里的a1我们可以认为是(1,768 ),和线性代数不一样,我们用竖起来的表示a1,并且是一维的,所以这里得到的q1也是(1,768)。我们可以把(a1,a2,a3,a4)当成是一个输入矩阵 I ,经过一个全连接输出Q矩阵(q1,q2,q3,q4)。
② 同理可得 k 矩阵和 v 矩阵也是这么计算而来。
③ 对于注意力 a1,1、a1,2、a1,3、a1,4 来说,是由 q1 分别与k1、k2、k3、k4做点乘而来,也就是一个(1,768)点乘一个(768,1),得到一个数字,也就是一个值。如图,这里的 k1、k2、k3、k4 相当于就是(768,4)的一个矩阵,相乘得到的 a1,1、a1,2、a1,3、a1,4 就是一个(1,4)矩阵。
④ 在计算得到所有注意力之后,我们进行一个softmax操作,这里的softmax操作是在每一行进行的,也就是每一行最后相加为1。
⑤ 最后我们用每一个的注意力乘以对应的 v 得到 b ,如图所示,我认为这里的 v1、v2、v3、v4 竖着写更容易理解一点,相当于是(4,4)的矩阵与(4,768)的矩阵相乘,得到的依旧是一个(4,768)的矩阵。
从这个过程中我们也可以看到,实际上只有 q、k、v 是需要学习的,剩余的全是数据。
2.4、输入优化
我们根据上面所说的考虑一个问题,文本具有天然的顺序性,词语在句子中的位置会影响其语义和语法功能。自注意力机制本身在计算过程中并不区分字词的位置信息。例如在句子 “我 爱 你” 和 “你 爱 我” 中,如果没有位置编码,模型可能无法区分这两个句子的差异,因为仅从词向量本身来看,“我”“你”“爱” 的语义编码是固定的,但加上位置编码后,模型就能知道每个词在句子中的具体位置,从而更好地理解句子的语义和语法结构,像 “我” 在句首和句尾所表达的语义角色是不同的,位置编码有助于捕捉这种区别。所以我们引入一种改进方法:用汉字的编码和位置的编码直接相加作为模型输入。
举个例子,在这个过程中,如果没有额外的位置信息,它仅仅是基于词本身的语义编码(通过 Word Embedding 等方式得到)来进行计算。例如 “我” 这个词的向量表示可能是 [0.1, 0.2, 0.3] ,“爱” 是 [0.4, 0.5, 0.6] ,“你” 是 [0.7, 0.8, 0.9] ,在计算注意力时只关注这些向量的数值关系。
所以对于 “你 爱 我” 这个句子,虽然词语顺序变了,但如果没有位置编码,从自注意力机制的基本计算来看,它得到的结果可能和 “我 爱 你” 非常相似,因为词向量本身没有改变。
但实际上这两个句子的语义完全不同。而位置编码就是为了解决这个问题。位置编码会给每个位置赋予一个独特的向量表示。比如在一个简单的设定中,位置 1 对应的向量是 [0, 0, 1] ,位置 2 是 [0, 1, 0] ,位置 3 是 [1, 0, 0] 。
那么对于 “我 爱 你”,“我” 的输入向量就变成了 [0.1, 0.2, 0.3] + [0, 0, 1] ,“爱” 变成 [0.4, 0.5, 0.6] + [0, 1, 0] ,“你” 变成 [0.7, 0.8, 0.9] + [1, 0, 0] 。
对于 “你 爱 我”,“你” 的输入向量是 [0.7, 0.8, 0.9] + [0, 0, 1] ,“爱” 是 [0.4, 0.5, 0.6] + [0, 1, 0] ,“我” 是 [0.1, 0.2, 0.3] + [1, 0, 0] 。
这样,通过位置编码的加入,即使词向量本身相同,由于位置向量的不同,模型在计算注意力和提取特征时就能区分出两个句子中词语的不同位置和语义角色,从而准确理解句子的含义。
首先,每个词语(“我”“有”“一只”“猫”)都有其对应的词向量。然后,为每个词语的位置生成位置向量,将词向量和位置向量相加,得到 Transformer 的输入表示x
。这些输入表示会通过后续的 Transformer 架构进行处理,以完成各种自然语言处理任务,如文本分类、机器翻译等。
Linear (21128, 768) 和 Linear (512, 768):这两个线性层是用于对词向量和位置向量进行某种变换或映射。例如,可能是将原始的高维词向量(维度为 21128)和位置向量(维度为 512)通过线性变换映射到 Transformer 模型所需要的维度(这里是 768)。
四、多头自注意力机制
为了进一步提升模型的性能和表达能力,可以采用多头自注意力机制。例如设置 4 个头的情况,即同时进行 4 组不同的自注意力计算。通过这种方式,模型能够从多个角度捕捉文本中的信息,就像对同一段文本,不同的头可以关注到不同层面的语义关系或语法结构等,然后将这些结果进行整合,从而更全面地理解文本。
五、Bert 模型
模型概述:
BERT 是一个强大的特征提取器,在自然语言处理中应用广泛。其预训练任务主要包括掩码语言模型(Masked Language Model)和下一句预测(Next Sentence Prediction)。
预训练任务细节:
① 在掩码语言模型(Masked Language Model)中,一般会对百分之十五的内容进行掩码,其中,如对于 “my dog is hairy”,有 80% 的概率将 “hairy” 替换为 [MASK],10% 替换为其他随机词如 “apple”,10% 保持不变。
② 在下一句预测任务(Next Sentence Prediction)则是给定两个句子,判断它们是否是前后相邻的句子,如 “[CLS] the man went to [MASK] store [SEP] he bought a gallon [MASK] milk [SEP]” 与 “[CLS] the man [MASK] to the store [SEP] penguin [MASK] are flightless birds [SEP]”,分别标记为 “IsNext” 和 “NotNext”,通过大量此类数据训练,使 Bert 学习到丰富的语言特征和语义关系。
模型结构:
BERT 主要由三部分组成。首先是嵌入层(embedding layer),负责将输入文本转换为包含词嵌入和位置嵌入的向量表示;其次是多个多头注意力层(Multi - Head Attention),通过自注意力机制让特征充分交互,捕捉文本中的语义信息;最后是池化层(pooler output),在进行分类等下游任务时,通常只关注 [CLS] 标记对应的输出,可采用平均池化、最大池化等方法将其转换为最终的特征表示,用于后续任务如情感分类、命名实体识别等,在不同自然语言处理任务中发挥关键作用,显著提升了模型性能和效果。
Embedding嵌入:
① 词汇嵌入(Token Embeddings):输入句子中的每个单词或子词都会被转换成一个词汇嵌入,这个嵌入是一个高维向量,用于表示该词的语义。例如,"my"、"dog"、"is"等词会分别被转换为各自的词汇嵌入。
② 位置嵌入(Position Embeddings):位置嵌入用于表示token在句子中的位置。因为Transformer模型不像RNN那样处理序列数据,所以需要通过位置嵌入来告知模型各个词在句子中的位置。
③ 句子段落嵌入(Segment Embeddings):这个嵌入用于区分句子对。例如,在问答任务中,BERT通常需要区分问题句和答案句。通过句子段落嵌入,BERT能够辨别两个不同的部分。
图中举了一个例子:“my dog is cute”,BERT会为句子中的每个token生成三种嵌入:词汇嵌入、位置嵌入和句子段落嵌入。然后,这些嵌入会相加,得到一个综合表示,再输入Transformer层进行进一步的处理。
Pooler output池化输出:
① 仅输出CLS:在BERT的输入中,CLS(Classification)标记被放置在句子的开头,并通常作为整个句子的表示,特别是在分类任务中。图中提到,BERT可以只输出CLS标记作为最终结果。
在 BERT 模型中,[CLS] 标记是一个特殊的标记。
原理
- 句子表示:当输入一段文本到 BERT 时,会在文本开头添加 [CLS] 标记。在 BERT 的多层 Transformer 结构中,这个 [CLS] 标记会不断地与其他词的信息进行交互和融合,从而逐渐 “吸收” 整个句子的语义信息。
- 分类任务的应用:在进行分类任务(如情感分类、文本分类等)时,由于 [CLS] 标记已经综合了整个句子的信息,所以可以直接取 [CLS] 标记对应的输出向量作为整个句子的表示向量,然后将这个向量输入到后续的分类层(如全连接层和 Softmax 层)中进行分类预测。
示例
比如有一个句子 “这部电影很精彩”,输入到 BERT 后,经过多层计算,[CLS] 标记的输出向量就包含了 “这部电影很精彩” 这个句子的整体语义特征,然后就可以用这个向量来判断该句子的情感是积极的、消极的还是中性的等。
优点
这样做的好处是简化了模型的输出,不需要对句子中的每个词的输出都进行处理,只关注 [CLS] 标记的输出即可,同时也能取得较好的分类效果。
② 池化方法:
平均池化:此方法计算所有token嵌入的平均值,即对每个token的表示取平均,得到一个全局的表示。
最大池化:此方法选取所有token嵌入的最大值,即在每个维度上取最大值。
其他池化:这里可能指的是根据不同任务需求,使用的其他池化方法。
相关文章:
自然语言处理——自注意力机制
一、文字表示方法 在自然语言处理中,如何用数据表示文字是基础问题。独热编码(One-hot Encoding )是一种简单的方法,例如对于 “我”“你”“他”“猫”“狗” 等字,会将其编码为如 “我 [1 0 0 0 0 ……]”“你 [0 …...
C语言初阶--函数
目录 1. 函数是什么? 2. C语言中函数的分类 2.1 库函数 2.2 自定义函数 3. 函数的参数 3.1 实际参数(实参) 3.2 形式参数(形参) 4. 函数调用 4.1 传值调用 4.2 传址调用 练习:写一个函数判断一个…...
探索基于机器学习的信用评分:从数据到洞察
友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…...
Ubuntu 24.04 LTS 通过 docker desktop 安装 seafile 搭建个人网盘
准备 Ubuntu 24.04 LTSUbuntu 空闲硬盘挂载Ubuntu 安装 Docker Desktop [我的Ubuntu服务器折腾集](https://blog.csdn.net/jh1513/article/details/145222679。 安装 seafile 参考资料 Docker安装 Seafile OnlyOffice 并配置OnlyOffice到Seafile,实现在线编辑…...
【Golang 面试题】每日 3 题(三十六)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…...
Linux虚拟机安装与FinalShell使用:探索Linux世界的便捷之旅
文章目录 软件准备安装 VMware 虚拟机下载CentOS 光盘镜像文件选择适合的 CentOS 版本选择合适的镜像文件 本教程工具版本 第一部分:安装 Linux 虚拟机1. 启动 VMware 并创建新虚拟机2. 默认硬件兼容性设置3. 安装操作系统的设置4. 选择操作系统类型与版本5. 为虚拟…...
leetcode19-删除链表的第n结点
leetcode 19 思路 要删除倒数第n个元素,那么就要找到倒数第n1个元素,那么我们需要两个指针来记录,首先快指针需要先走n1步,然后快慢指针一起进行移动,直到快指针为null的时候,此时慢指针恰好走到倒数第n…...
多学科视角下探索开源Github、Git初步学习
Think 1.Github 作为现今最主流的代码托管平台、协作平台甚至是“社交平台”,本身是闭源的。一方面,它是和大多数开发者连接最紧密的开源阵地,另一方面,拥有传统“黑客精神”的人认为将用户身份绑定这样一个闭源平台上恰恰与…...
新星杯-ESP32智能硬件开发--ESP32的I/O组成-系统中断矩阵
本博文内容导读📕🎉🔥 ESP32开发板的中断矩阵、功能描述与实现、相关API和示例程序进行介绍 ESP32中断矩阵将任一外部中断源单独分配到每个CPU的任一外部中断上,提供了强大的灵活性,能适应不同的应用需求。 ESP32中断主…...
Android 右键后无Java class创建
Android studio 创建java class : 最近几个月用Android studio 开发,因为电脑设置了一个新的用户使用,原来的android studio,打开之前的正常的项目总是报一些奇奇怪怪的错误,就重新安装了最新的版本 问题描述 但是新的android s…...
leetcode-买卖股票问题
309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode) 动态规划解题思路: 1、暴力递归(难点如何定义递归函数) 2、记忆化搜索-傻缓存法(根据暴力递归可变参数确定缓存数组维度) 3、严格表结构依…...
如何通过 Apache Airflow 将数据导入 Elasticsearch
作者:来自 Elastic Andre Luiz 了解如何通过 Apache Airflow 将数据导入 Elasticsearch。 Apache Airflow Apache Airflow 是一个旨在创建、安排(schedule)和监控工作流的平台。它用于编排 ETL(Extract-Transform-Load࿰…...
LDPC (Low-Density Parity-Check) 码min_sum、n_0、block_length 和 rate参数
1. min_sum 1; min_sum 是与 最小和解码算法(Min-Sum Decoding Algorithm)相关的参数。最小和解码算法是 LDPC 码的一种常用解码方法,主要通过传递信号的信息在接收端进行解码。此参数表示最小和算法中的缩放因子。 在 LDPC 解码过程中&am…...
基于javaweb的SpringBoot景区旅游管理系统设计和实现(源码+文档+部署讲解)
个人名片 🔥 源码获取 | 毕设定制| 商务合作:《个人名片》 ⛺️心若有所向往,何惧道阻且长 文章目录 个人名片运行环境技术栈适用功能说明使用说明 运行环境 Java≥8、MySQL≥5.7 1.运行环境:最好是java jdk 1.8,我们在这个平台…...
(二)afsim第三方库编译(qt编译)
注意:源码编译的路径不能有中文否则报错,压缩包必须用官网下载的xz格式解压的才可以,否则sudo ./configure命令找不到 先编译openssl3.1.1软件包,否则编译的qt库将不支持network,相关库的编译(上文(一&…...
重学SpringBoot3-Spring Retry实践
更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞??收藏评论 重学SpringBoot3-Spring Retry实践 1. 简介2. 环境准备3. 使用方式 3.1 注解方式 基础使用自定义重试策略失败恢复机制重试和失败恢复效果注意事项 3.2 编程式使用3.3 监听重试过程 监…...
极域电子教室破解(JiyuTrainer)
JiyuTrainer下载 byebye极域电脑安装包也可以使用 如果只玩单机游戏最简单的办法就是拔网线 另一种办法安装360卫士通过360卫安全卫士上网设置来进行禁用JiyuTrainer网络跟拔网线一样...
Oracle数据库传统审计怎么用
Oracle数据库传统审计怎么用 审计功能开启与关闭By Session还是By AccessWhenever Successful数据库语句审计数据库对象审计查看审计策略和记录Oracle数据库审计功能分为传统审计(Traditional Auditing)和统一审计(Unified Auditing)。统一审计是从Oracle 12c版本开始引入的…...
windows 搭建flutter环境,开发windows程序
环境安装配置: 下载flutter sdk https://docs.flutter.dev/get-started/install/windows 下载到本地后,随便找个地方解压,然后配置下系统环境变量 编译windows程序本地需要安装vs2019或更新的开发环境 主要就这2步安装后就可以了࿰…...
基于SpringBoot的健身房管理系统【源码+文档+部署讲解】
系统介绍 基于SpringBootVue实现的健身房管理系统采用前后端分离架构方式,系统设计了管理员、会员、员工三种角色,系统实现了用户登录与注册、个人中心、会员管理、员工管理、会员卡管理、会员卡类型管理、教练信息管理、解聘管理、健身项目管理、指导项…...
2.slf4j入口
文章目录 一、故事引入二、原理探究三、SLF4JServiceProvider四、总结 一、故事引入 故事要从下面这段代码说起 public class App {private static final Logger logger LoggerFactory.getLogger(App.class);public static void main( String[] args ) throws Exception {lo…...
sql_实用查询语句模版
1. 查询某个字段是否为必填项 SQL 查询模板 SELECT COLUMN_NAME,IS_NULLABLE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME YourTableNameAND COLUMN_NAME YourColumnName;说明: INFORMATION_SCHEMA.COLUMNS 表包含了所有数据库中表的列信息。IS_NULLABL…...
Nginx反向代理架构介绍
Nginx反向代理架构是一种强大的服务器架构模式,它位于用户和原始服务器之间,接收用户的请求并将其转发到一个或多个后端服务器,然后将从后端服务器获取的响应返回给用户,就好像这些内容都是由代理服务器本身直接提供的一样。以下是…...
Mysql MVCC
MVCC 什么是MVCC MVCC(多版本并发控制,Multi-Version Concurrency Control) 是一种用于数据库管理系统(DBMS)中的并发控制机制,它允许多个事务同时执行而不互相阻塞,并通过创建数据的多个版本…...
JavaEE之CAS
上文我们认识了许许多多的锁,此篇我们的CAS就是从上文的锁策略开展的新概念,我们来一探究竟吧 1. 什么是CAS? CAS: 全称Compare and swap,字⾯意思:“比较并交换”,⼀个CAS涉及到以下操作: 我们假设内存中…...
Flink CDC 使用实践以及遇到的问题
背景 最近公司在做一些业务上的架构调整,有一部分是数据从mysql采集到Starrocks,之前的一套方法是走 debezium 到 puslar 到 starrocks,这一套下来比较需要配置很多东西,而且出现问题以后,需要修改很多配置,而且现阶段…...
idea上git log面板的使用
文章目录 各种颜色含义具体的文件的颜色标签颜色🏷️ 节点和路线 各种颜色含义 具体的文件的颜色 红色:表示还没有 git add 提交到暂存区绿色:表示已经 git add 过,但是从来没有 commit 过蓝色:表示文件有过改动 标…...
03.选择排序
一、题目思路 选择排序是一种简单直观的排序算法。它的工作原理是:首先在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大ÿ…...
麒麟V10系统上安装Oracle
以下是在麒麟V10系统上安装Oracle数据库的详细步骤: 安装前准备 检查系统版本:使用uname -a、cat /etc/os-release等命令检查服务器是麒麟V10系统。 配置固定IP和本地yum源: 挂载麒麟V10的iso文件到/mnt目录,如mount -o loop Ky…...
PyTorch 神经协同过滤 (NCF) 推荐系统教程
目录 教程概述1. 神经协同过滤模型概述NCF 模型的主要组成部分: 2. 数据加载与预处理3. 定义神经协同过滤模型4. 训练模型5. 模型评估6. 推荐物品7. 完整示例8. 总结 在本教程中,我们将使用 PyTorch 实现一个神经协同过滤(Neural Collaborat…...
日志收集Day001
1.ElasticSearch 作用:日志存储和检索 2.单点部署Elasticsearch与基础配置 rpm -ivh elasticsearch-7.17.5-x86_64.rpm 查看配置文件yy /etc/elasticsearch/elasticsearch.yml(这里yy做了别名,过滤掉空行和注释行) yy /etc/el…...
【氮化镓】香港科技大学陈Kevin-单片集成GaN比较器
一、引言(Introduction) GaN HEMT的重要性 文章开篇便强调了氮化镓(GaN)高电子迁移率晶体管(HEMT)在下一代功率转换系统中的巨大潜力。GaN HEMT具备高开关频率、低导通电阻、高击穿电压以及宽工作温度范围等优势,使其成为功率电子领域的热门研究对象。这些特性使得GaN…...
LDD3学习9--数据类型和定时器
这部分对应的是第七章和第十一章,因为内容也不是很多,就一起写了。里面的内容基本上就是一个个的点,所以也就一个个点简单总结一下。 1 数据类型 1.1 数据长度 不同操作系统类型长度可能不一样,看图的话最好用u8,u16&…...
性价比1.2V电压基准替代
前言: 小于2V的电压基准比较少,且价格稍贵,对于要求不高的场合,1117可以替代使用,温度系数低于 100ppm/C, 价格便宜。 1117是线性稳压器的一种,一般情况下,输出电压可调。 如下述的1117…...
【青蛙过河——思维】
题目 图解 代码 #include <bits/stdc.h> using namespace std; const int N 1e510; int n, x; int h[N]; bool check(int mid) {for(int i 1; i mid - 1 < n; i)if(h[i mid - 1] - h[i - 1] < 2 * x) return false;return true; } int main() {cin >> …...
【数据库】MySQL数据库SQL语句汇总
目录 1.SQL 通用语法 2.SQL 分类 2.1.DDL 2.2.DML 2.3.DQL 2.4.DCL 3.DDL 3.1.数据库操作 3.1.1.查询 3.1.2.创建 3.1.3.删除 3.1.4.使用 3.2.表操作 3.2.1.查询 3.2.2.创建 3.2.3.数据类型 3.2.3.1.数值类型 3.2.3.2.字符串类型 3.2.3.3.日期时间类型 3.2…...
Vue3 Element-Plus el-tree 右键菜单组件
参考代码:实现Vue3Element-Plus(tree、table)右键菜单组件 这篇文章的代码确实能用,但是存在错误,修正后的代码: <template><div style"text-align: right"><el-icon size"12" color"#…...
学成在线_内容管理模块_创建模块工程
学成在线模块工程 1.各个微服务依赖基础工程2.每个微服务都是一个前后端分离的项目3.xuecheng-plus-content:内容管理模块工程xuecheng-plus-content-modelxuecheng-plus-content-servicexuecheng-plus-content-api 1.各个微服务依赖基础工程 2.每个微服务都是一个前…...
Swift 专题二 语法速查
一 、变量 let, var 变量是可变的,使用 var 修饰,常量是不可变的,使用 let 修饰。类、结构体和枚举里的变量是属性。 var v1:String "hi" // 标注类型 var v2 "类型推导" let l1 "标题" // 常量class a {…...
vue2配置跨域后请求的是本机
这个我来说明一下,因为我们公司的后端设置解决了跨域问题,所以我有很久没有看相关的内容了,然后昨天请求了需要跨域的接口,请求半天一直不对,浏览器显示的是本机地址,我以为是自己配置错了,后面…...
Linux 音视频入门到实战专栏(视频篇)视频编解码 MPP
文章目录 一、MPP 介绍二、获取和编译RKMPP库三、视频解码四、视频编码 沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍如何调用alsa api来进行音频数据的播放和录制。 一、MPP 介绍 瑞芯微提供的媒体处理软件平台…...
IT程序设计文档,软件需求设计文档,详细设计模板(Word原件)
1引言 1.1编写目的 1.2项目背景 1.3参考材料 2系统总体设计 2.1整体架构 2.2整体功能架构 2.3整体技术架构 2.4设计目标 2.5.1总体原则 2.5.2实用性和先进性 2.5.3标准化、开放性、兼容性 2.5.4高可靠性、稳定性 2.5.5易用性 2.5.6灵活性和可扩展性 2.5.7经济性…...
画流程图 代码生成流程图 流程图自动运行
一:在线平台 典藏 drawio:完全免费;可拆入代码生成;使用方法 Kimi drawio生成流程图:Kimi里面生成Mermaid格式——>生成代码并复制——>进入drawio里面点插入"号"——>高级——>Mermaid——…...
庄小焱——2024年博文总结与展望
摘要 大家好,我是庄小焱。岁末回首,2024 年是我在个人成长、博客创作以及生活平衡方面收获颇丰的一年。这一年的经历如同璀璨星辰,照亮了我前行的道路,也为未来的发展奠定了坚实基础。 1. 个人成长与突破 在 2024 年,…...
Unity3d 实时天气系统基于UniStorm插件和xx天气API实现(含源码)
前言 实时天气在Unity3d三维数字沙盘中的作用非常重要,它能够增强虚拟环境的真实感和互动性,实时天气数据的应用可以提供更为精准和直观的天气信息支持,如果真实的数据加上特效、声音和模型反馈会提高产品档次,提高真实感。 目前…...
【学习总结|DAY032】后端Web实战:登录认证
在 Web 后端开发中,登录认证是保障系统安全和用户数据隐私的关键环节。本文将结合实际开发案例,深入探讨登录功能与登录校验的实现思路和技术细节,希望能帮助读者更好地掌握这一重要知识点。 一、登录功能实现 1.1 思路分析 登录功能的核心…...
在 C++ 中实现调试日志输出
在 C 编程中,调试日志对于定位问题和优化代码至关重要。有效的调试日志不仅能帮助我们快速定位错误,还能提供有关程序运行状态的有价值的信息。本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳。 1. 使用 #ifdef _DEBUG…...
2-Kbengine+Unity3D多人在线游戏DEMO源码架构分析
2-Kbengine+Unity3D多人在线游戏DEMO源码架构分析 目录 一、服务器端 1、编写并生成我们的服务器端和客户端通用的游戏协议 2、 认识Entity实体 3、 官方DEMO-kbengine_demos_assets分析 二、 客户端...
Android系统开发(八):从麦克风到扬声器,音频HAL框架的奇妙之旅
引言:音浪太强,我稳如老 HAL! 如果有一天你的耳机里传来的不是《咱们屯里人》,而是金属碰撞般的杂音,那你可能已经感受到了 Android 音频硬件抽象层 (HAL) 出问题的后果!在 Android 音频架构中,…...
使用nginx搭建通用的图片代理服务器,支持http/https/重定向式图片地址
从http切换至https 许多不同ip的图片地址需要统一进行代理 部分图片地址是重定向地址 nginx配置 主站地址:https://192.168.123.100/ 主站nginx配置 server {listen 443 ssl;server_name localhost;#ssl证书ssl_certificate ../ssl/ca.crt; #私钥文件ssl_ce…...