Embedding 模型详解:架构、训练与 LLM 的区别
1. 什么是 Embedding 模型?
Embedding 模型的核心使命是将离散的、高维的文本数据(例如单个词语、短语、句子、段落乃至整篇文档)转化为稠密的 (dense)、低维的 (low-dimensional)、连续的 (continuous) 向量表示。这些向量被称作“嵌入 (Embeddings)”。这里,“稠密”意味着向量中的大多数元素都是非零的,与稀疏表示(如 one-hot编码,其中大部分元素为零)形成对比;“低维”指的是嵌入向量的维度远小于原始文本空间(例如词汇表大小)的维度,从而实现信息的有效压缩;“连续”则表明这些向量存在于一个连续的向量空间中,使得细微的语义差异可以通过向量之间的微小位置差异来体现。
一个优秀的 Embedding 模型所产生的嵌入向量能够精准地捕捉文本的深层语义信息。这意味着,在由这些向量构成的多维空间中,语义上相似或相关的文本(比如,“北京的天气怎么样?”和“查询北京今日气温”)在几何位置上会彼此靠近,而语义上不相关或差异较大的文本(比如,“苹果公司股价”和“如何制作苹果派”)则会相距遥远。这种特性使得嵌入向量成为众多自然语言处理 (NLP) 下游任务的基石,例如:
-
信息检索 (Information Retrieval): 通过比较查询语句的嵌入向量与文档库中各文档嵌入向量的相似度,快速找到最相关的文档。
-
语义相似度计算 (Semantic Similarity): 直接计算两个文本片段嵌入向量之间的余弦相似度或欧氏距离,来量化它们的语义接近程度。
-
文本聚类 (Text Clustering): 将相似的文本嵌入向量聚集在一起,自动发现文本数据中的主题或类别。
-
推荐系统 (Recommendation Systems): 基于用户历史行为或偏好内容的嵌入向量,推荐语义上相关的新内容。
-
文本分类 (Text Classification): 将文本嵌入向量作为特征输入到分类器中,判断文本所属的类别(如情感分析、主题分类)。
在众多 Embedding 模型中,BAAI (北京智源人工智能研究院) 的 bge
(BAAI General Embedding) 系列模型因其出色的性能和对多种语言(尤其是中文)的良好支持,已成为当前非常流行且高效的文本嵌入解决方案之一。
2. BGE 系列模型的网络架构
BGE 系列模型,以及其他许多先进的文本嵌入模型(如 Sentence-BERT, SimCSE, E5 等),其核心架构通常借鉴并构建于 Transformer 模型的 Encoder (编码器) 部分。Transformer 架构因其强大的上下文理解能力和并行处理能力,在 NLP 领域取得了革命性的成功。
其核心组成部分详细解析如下:
-
输入层 (Input Layer): 负责将原始文本序列转换为模型能够处理的数值表示。
-
词嵌入 (Token Embeddings): 首先,输入的文本会被分词器 (Tokenizer) 分解成一系列的词元 (tokens)。这些词元可以是单词、子词 (subwords) 甚至字符,具体取决于分词策略(如 WordPiece, BPE)。然后,每个词元通过一个嵌入矩阵 (Embedding Matrix) 映射到一个初始的、固定维度的向量表示。这个嵌入矩阵通常是模型在训练过程中学习得到的。
-
位置嵌入 (Positional Embeddings): Transformer 的核心机制——自注意力 (Self-Attention)——本身是置换不变的 (permutation-invariant),即它平等地看待输入序列中的所有词元,无法直接感知它们的顺序。然而,文本的意义高度依赖于词序。因此,必须引入位置嵌入来向模型提供关于词元在序列中绝对或相对位置的信息。常见的位置嵌入有学习到的绝对位置嵌入、固定的正弦/余弦位置嵌入等。
-
段嵌入 (Segment Embeddings) / 类型嵌入 (Token Type Embeddings): 在处理需要区分不同文本片段的任务时(例如,自然语言推断任务中判断前提句和假设句之间的关系,或者问答任务中区分问题和上下文),会使用段嵌入。例如,可以将第一个句子的所有词元赋予段嵌入 A,第二个句子的所有词元赋予段嵌入 B。对于仅需嵌入单个句子的任务,所有词元可能共享同一个段嵌入,或者不使用段嵌入。
-
这三种嵌入向量(词嵌入、位置嵌入、以及可选的段嵌入)通常会逐元素相加 (element-wise sum),形成每个词元最终的、融合了内容、位置和段落信息的输入表示,然后传递给后续的 Transformer 编码器层。
-
-
Transformer 编码器层 (Transformer Encoder Layers): 这是模型的核心,负责对输入表示进行深层次的上下文信息提取和语义理解。
-
模型通常由多个(例如6层、12层甚至更多)完全相同的 Transformer 编码器层堆叠 (stack) 而成。上一层的输出作为下一层的输入。
-
每个编码器层主要包含两个关键的子层:
-
多头自注意力机制 (Multi-Head Self-Attention): 这是 Transformer 的精髓所在。它允许模型在计算序列中某个词元的表示时,动态地、有选择地关注输入序列中的所有其他词元(包括其自身),并根据它们与当前词元的相关性(“注意力权重”)来聚合信息。所谓“多头 (Multi-Head)”,是指将注意力计算过程并行地执行多次(例如8个或12个“头”),每个头学习关注输入序列的不同方面或不同的语义子空间。然后将这些头的输出拼接并再次进行线性变换,从而获得更丰富的表示。这使得模型能够有效地捕捉长距离依赖关系和复杂的上下文互动。
-
前馈神经网络 (Feed-Forward Neural Network, FFN): 自注意力机制的输出会经过一个位置无关的前馈网络。这个网络通常由两个线性变换层和一个非线性激活函数(如 ReLU, GELU)组成。它对每个位置的表示进行独立的非线性转换,增加了模型的表达能力,并帮助提取更抽象的特征。
-
-
在每个子层(即多头自注意力和前馈网络)的输出端,都会应用一个 残差连接 (Residual Connection),然后进行 层归一化 (Layer Normalization)。
-
残差连接: 将子层的输入直接加到其输出上。这极大地缓解了深度神经网络训练中的梯度消失/爆炸问题,使得模型可以构建得更深,更容易训练。
-
层归一化: 对每个样本在层内所有神经元的输出进行归一化,使其具有零均值和单位方差。这有助于稳定训练动态,加速模型收敛,并减少模型对初始化参数的敏感性。
-
-
-
输出层 (Output Layer / Pooling Layer):
-
经过多层 Transformer 编码器的处理后,模型会为输入序列中的每一个词元都生成一个上下文感知的高维向量表示(通常是最后一层编码器的输出)。然而,对于句子嵌入或文档嵌入任务,我们通常需要一个单一的、固定维度的向量来代表整个输入文本的语义。这就需要一个池化 (Pooling) 操作来聚合这些词元级别的表示。
-
常用的池化策略包括:
-
CLS 池化 (CLS Pooling): 在输入文本序列的开头添加一个特殊的分类词元
[CLS]
(classification token)。这个[CLS]
词元在经过所有 Transformer 编码器层后,其对应的最终隐藏状态向量被视作整个输入序列的聚合语义表示。BGE 等模型通常推荐并优化了[CLS]
池化策略,因为[CLS]
词元在训练过程中被设计用来学习和积累整个序列的全局信息。 -
平均池化 (Mean Pooling): 将所有(或非填充部分的)输出词元向量在每个维度上进行平均。这是一种简单直观的方法,假设每个词元对整体语义的贡献是均等的。有时会结合注意力权重进行加权平均池化。
-
最大池化 (Max Pooling): 在所有输出词元向量的每个维度上分别取最大值。这种方法倾向于捕捉序列中最显著的特征信号。
-
-
BGE 模型通常采用的是 Transformer 编码器结构,并通过 [CLS]
词元的输出向量(或者对所有词元输出向量进行平均池化,具体取决于模型的具体配置和推荐用法)来获得最终的句子或文本嵌入。
3. BGE 系列模型的训练过程
训练出高质量的文本嵌入模型,使其能够生成具有优良语义区分度和泛化能力的向量表示,是一个复杂的过程,通常涉及以下几个关键环节:
-
训练目标/损失函数 (Training Objective / Loss Function): 这是指导模型学习方向的核心。
-
对比学习 (Contrastive Learning): 这是当前训练最先进文本嵌入模型(包括 BGE)的主流且极为有效的方法。其核心思想非常直观:在学习到的向量空间中,拉近 (pull together) 语义相似的文本对(称为“正样本对”)的嵌入向量,同时推远 (push apart) 语义不相似的文本对(称为“负样本对”)的嵌入向量。
-
InfoNCE Loss (Noise Contrastive Estimation inspired loss): BGE 等模型广泛采用此类损失函数或其变体。对于一个给定的“锚点 (anchor)”文本样本,一个语义上与之匹配的“正样本 (positive)”文本,以及一系列语义上不匹配的“负样本 (negatives)”,InfoNCE 损失的目标是最大化锚点与正样本之间的相似度(通常用点积或余弦相似度衡量),同时最小化锚点与所有负样本之间的相似度。这可以被看作是一个多类别的分类问题,模型需要从包含一个正样本和多个负样本的集合中准确地识别出那个正样本。
-
难负样本挖掘 (Hard Negative Mining): 为了让模型学习到更细致的语义差别,仅仅使用随机抽取的负样本可能效果不佳,因为它们往往与锚点样本差异过大,模型很容易区分。难负样本是指那些与锚点样本在表面上(如词汇重叠)或某些方面相似,但实际上语义不同,或者与正样本非常相似但并非真正的正样本的文本。使用这些难负样本进行训练,可以迫使模型学习更具判别力的特征。例如,对于查询“如何烤制美味的披萨”,一个简单的负样本可能是“中国的历史”,而一个难负样本可能是“如何烤制美味的饼干”或者一篇仅仅提到“披萨”但内容无关的文章。BGE 的训练过程也特别强调了有效挖掘和利用难负样本的重要性。
-
-
其他可能的目标:
-
掩码语言模型 (Masked Language Modeling - MLM): 类似于 BERT 的预训练方式,随机遮盖输入文本中的一部分词元,然后让模型预测这些被遮盖的词元。这个过程能帮助模型学习词元级别的上下文表示和语言结构,可以作为对比学习之前的一个预训练阶段,或者作为辅助任务。
-
指令微调 (Instruction Tuning): 一些较新的 BGE 版本(例如
bge-*-instruct
系列)引入了指令微调的概念。这意味着模型在训练时会接触到带有特定任务指令的输入。例如,对于一个信息检索任务,输入可能不仅仅是查询文本,还可能带有一个前缀指令,如“为这篇文档生成用于检索的嵌入:[文档内容]”或“为这个查询生成用于检索相关段落的嵌入:[查询内容]”。这使得模型能更好地理解任务意图,并根据指令生成更具针对性的嵌入。
-
-
-
训练数据 (Training Data): 数据的数量和质量对嵌入模型的最终性能起着决定性作用。
-
大规模文本语料库 (Large-scale Text Corpora): 模型需要从海量的、多样化的文本数据中学习。这些数据可以来自网页、书籍、新闻、百科、代码等,覆盖广泛的主题和语言风格,从而使模型能够理解丰富的语言现象和世界知识。
-
高质量的样本对 (High-quality Sample Pairs): 对于对比学习而言,构建高质量的正负样本对是成功的关键。样本对的质量和多样性直接影响模型学习到的语义空间的结构。
-
正样本对: 来源可以非常多样:
-
释义对 (Paraphrases): 语义相同但表述不同的句子对 (e.g., "What is the weather like today?" and "How's the weather today?")。
-
问答对 (Question-Answer pairs): 问题与其对应的答案。
-
相邻句子 (Adjacent sentences from a document): 从同一文档中抽取的上下文相关的连续句子。
-
数据增强技术 (Data Augmentation): 如通过回译(将文本翻译到另一种语言再翻译回来)、同义词替换、句子结构变换等方法生成的与原句语义一致的新句子。
-
查询-文档对 (Query-Relevant Document pairs): 在信息检索场景下,用户的查询和被标记为相关的文档。
-
论文引用对 (Paper-Citation pairs): 一篇论文与其引用的论文,或引用它的论文。
-
-
负样本对:
-
批内负样本 (In-batch negatives): 在同一个训练批次 (mini-batch) 中,除了当前锚点样本的正样本之外的所有其他样本,都可以被视为负样本。这是一种简单高效的构造负样本的方式。
-
其他策略构造的负样本: 包括从语料库中随机抽取的样本,或者通过特定策略挖掘的难负样本。关键在于负样本要确保与锚点样本语义上确实不相关或差异显著。
-
-
-
BGE 模型特别强调了使用大规模、高质量的中文、英文以及其他多种语言的语料进行多阶段预训练,并利用包含大量查询-段落对的数据集针对信息检索等特定任务进行了细致的微调。
-
-
优化器和超参数 (Optimizer and Hyperparameters):
-
常用的优化器包括 AdamW (Adam with decoupled weight decay),它在 Transformer 模型的训练中表现良好。
-
诸如学习率 (learning rate)、批大小 (batch size)、训练轮次 (epochs)、温度系数 (temperature parameter in InfoNCE loss) 等超参数,都需要通过实验进行精心的调整和选择,以达到最佳的训练效果。
-
4. 与 LLM 架构的区别
尽管 Embedding 模型(尤其是基于 Transformer 编码器的模型,如 BGE)和大型语言模型 (LLM,如 GPT 系列、LLaMA 系列) 在底层技术(例如都广泛使用 Transformer 架构的组件)上存在一定的共通之处,但它们在核心目标、架构侧重、输出形式、训练范式以及典型应用场景上存在着显著且根本的区别:
特征 | Embedding 模型 (如 BGE) | 大型语言模型 (LLM, 如 GPT 系列) |
主要目标 | 其核心目标是生成文本的稠密向量表示 (Embeddings)。这些向量旨在捕捉文本的语义信息,主要用于语义理解、相似度计算和高效检索。模型本身不直接生成可读文本。 | 其核心目标是生成连贯、符合上下文的自然语言文本,或者执行更广泛的自然语言理解 (NLU) 与自然语言生成 (NLG) 任务,如对话、写作、翻译等。 |
输出 | 输出是固定维度的稠密向量 (例如,BGE-base 输出 768 维向量,BGE-large 输出 1024 维向量)。这个向量是文本语义的数学表征。 | 输出是文本序列 (即一系列词元/token),是人类可读的自然语言。其长度通常是可变的。 |
核心架构 | 通常主要采用 Transformer Encoder (编码器) 结构。编码器擅长理解和整合输入序列的全部上下文信息,以形成对整个输入的全面表示。 | 主要是 Transformer Decoder (解码器) 结构 (如 GPT 系列,采用自回归方式生成文本),或 Encoder-Decoder (编码器-解码器) 结构 (如 T5, BART,常用于序列到序列的转换任务,如翻译、摘要)。解码器结构更适合于逐步生成输出序列。 |
最终层 | 通常是一个池化层 (Pooling Layer) (如 CLS 池化或平均池化),其作用是将 Transformer 编码器输出的序列化词元表示聚合成一个单一的、代表整个输入文本的向量。 | 通常是一个语言模型头 (Language Modeling Head),它是一个线性层加上 Softmax 函数,用于在词汇表上预测下一个最有可能出现的词元。 |
训练范式 | 侧重于对比学习 (Contrastive Learning) (如使用 InfoNCE loss),目标是学习一个能区分语义相似与否的表示空间。也可能针对特定的嵌入任务(如检索)进行有监督微调。 | 主要是自回归预测 (Autoregressive Prediction) / 下一个词元预测 (Next Token Prediction)。模型学习根据之前已生成的词元序列来预测下一个词元。也可能包含掩码语言模型 (MLM) 作为预训练的一部分(如 BERT 风格的 Encoder-Decoder 模型)。 |
典型用途 | 语义搜索、文本匹配、文本聚类、推荐系统中的内容相似性度量、作为下游任务的特征提取器 (feature extractor)。 | 文本生成(故事、诗歌、代码)、对话系统 (Chatbots)、机器翻译、文本摘要、问答系统、代码生成与解释等。 |
模型规模 | 可以设计得相对较小且计算高效,因为其主要目标是生成高质量的嵌入向量,通常不需要像 LLM 那样庞大的参数量来支持复杂的文本生成。参数量可以从几千万到几十亿。 | 通常参数量巨大(从数十亿到数万亿),以追求更强的语言理解、知识记忆和文本生成能力。更大的规模往往带来更好的性能("scaling laws")。 |
对上下文的利用 | 主要用于理解和编码输入文本的整体语义,将其压缩到一个固定大小的向量中。关注的是对已有信息的表征。 | 需要理解给定的上下文并基于此进行扩展和生成。关注的是在已有信息的基础上创造新的、连贯的信息。 |
总结来说,两者在 NLP 生态系统中的角色有着本质的不同:
-
Embedding 模型是“理解者”和“表征者” (Understander & Representer): 它们的核心任务是将输入文本的内在含义和语义关系有效地“压缩”并映射到一个结构化的向量空间中,生成一个高质量的语义“指纹”。这个向量本身不是为了让人类直接阅读,而是为了让计算机能够高效地进行语义比较、检索、聚类等操作。其产出质量直接影响下游任务的性能。
-
LLM 更像是“生成者”、“推理者”和“对话者” (Generator, Reasoner & Conversationalist): 它们的核心任务是基于海量的知识和学习到的语言模式,根据给定的提示 (prompt) 或上下文,生成新的、人类可读的文本,或者以自然语言的方式回答问题、执行指令、进行推理和参与对话。它们更侧重于语言的创造性和交互性。
尽管像 BGE 这样的现代 Embedding 模型也使用了 Transformer 编码器,这与 BERT 等双向语言模型的预训练架构在组件上是相似的,但它们的最终目标和针对性的微调方法是为了产出高质量的句子级或段落级的嵌入向量,专注于优化这些向量在语义检索等任务上的区分能力。这与 BERT 主要通过预测掩码词元或判断句子关系来进行预训练,并常用于分类或序列标注等任务的目标有所不同(尽管 BERT 的输出层也可以被用作嵌入,但专门为嵌入任务设计和训练的模型,如 BGE,通常在这些特定任务上表现更优)。
相关文章:
Embedding 模型详解:架构、训练与 LLM 的区别
1. 什么是 Embedding 模型? Embedding 模型的核心使命是将离散的、高维的文本数据(例如单个词语、短语、句子、段落乃至整篇文档)转化为稠密的 (dense)、低维的 (low-dimensional)、连续的 (continuous) 向量表示。这些向量被称作“嵌入 (Em…...
网络的知识的一些概念
1.什么是局域网,什么是广域网 局域网(Local area network)也可以称为本地网,内网,局域网有这几个发展经历: 最开始电脑与电之间是直接用网线连接的 再后来有了集线器() 再后来出…...
NAT(网络地址转换)逻辑图解+实验详解
原理 NAT(Network Address Translation,网络地址转换) 是一种网络技术,用于在IP数据包通过路由器或防火墙时,修改其源IP地址或目标IP地址,以实现不同网络之间的通信。 基础概念 本来NAT是来解决 IPv4 地…...
深入解析Spring Boot与Kafka集成:构建高性能消息驱动应用
深入解析Spring Boot与Kafka集成:构建高性能消息驱动应用 引言 在现代分布式系统中,消息队列是实现异步通信和解耦的重要组件。Apache Kafka作为一种高性能、分布式的消息系统,被广泛应用于大数据和实时数据处理场景。本文将详细介绍如何在…...
Linux的内存泄漏问题及排查方法
内存泄漏是指在计算机程序中,已不再被使用的内存未被正确释放,导致内存占用随时间累积,进而引发系统内存不足、性能下降甚至崩溃的问题。在Linux系统中,开发者和运维人员可通过以下方法排查和解决内存泄漏问题: 1. 使…...
Java基础知识总结(超详细整理)
一:概述 1.1Java类及类的成员 属性、方法、构造器、代码块、内部类 (1)数组 java虚拟机内存划分 各区域作用 内存解析 基本使用 两个变量指向一个一维数组 没有new就不会在堆里新开辟空间 (2)对象数组 (3&a…...
Qt Widgets模块功能详细说明,基本控件:QPushButton(二)
一、基本控件(Widgets) Qt 提供了丰富的基本控件,如按钮、标签、文本框、复选框、单选按钮、列表框、组合框、菜单、工具栏等。 1、QPushButton 1.1、概述 (用途、继承关系) QPushButton 是 Qt 框架中用于创建按钮的控件,它的主…...
【MySQL成神之路】MySQL常见命令汇总
目录 MySQL常用命令总结 1. 数据库操作 2. 表操作 3. 数据操作(DML) 4. 索引与优化 5. 用户与权限管理 6. 备份与恢复 7. 事务控制 8. 常用函数 9. 系统状态与日志 总结 MySQL常用命令总结 MySQL作为最流行的关系型数据库之一,提供…...
UnLua源码分析(一)初始化流程
UnLua源码分析(一)初始化流程 接入插件启动注册设置默认参数集注册回调SetActivePostLoadMapWithWorldULuaEnvLocator启动Lua虚拟机初始化UE相关的Lua Lib创建与Lua交互的数据结构注册静态导出的类,函数,枚举Lua层初始化 UUnLuaMa…...
非线性1 修改
第一章为读者介绍了非线性动力学与混沌理论的基本概念、发展历史以及应用领域。 1.1 动力学简史: 从牛顿力学开始,介绍动力学作为物理学分支的发展历程。重点介绍了庞加莱对混沌现象的早期探索,以及20世纪60年代洛伦兹方程的发现࿰…...
系统性能不达标,如何提升用户体验?
当系统性能不达标时,要想有效提升用户体验,必须从性能优化、前后端协同、用户感知改善、监控预警机制四个关键维度切入。其中,性能优化是最直接有效的策略,它通过代码优化、资源压缩、缓存机制、CDN加速等手段,显著提升…...
【Linux】进程的基本概念
目录 概念描述进程-PCB如何查看进程通过系统目录进行查看通过ps指令进行查看 通过系统调用获取进程的PID和PPID(进程标⽰符)通过系统调用创建子进程通过一段代码来介绍fork为什么要有子进程?fork为什么给子进程返回0,给父进程返回子进程的PIDfork函数到底…...
mongodb管理工具的使用
环境: 远程服务器的操作系统:centOS stream 9; mongoDB version:8.0; 本地电脑 navicat premium 17.2 ; 宝塔上安装了mongoDB 目的:通过本地的navicat链接mongoDB,如何打通链接,分2步: 第一步:宝塔-&…...
面试中的线程题
原文链接:线程题大全 Java 并发库同步辅助类 CountDownLatch 工作机制:初始化一个计数器,此计数器的值表示需要等待的事件数量。 提供了两个主要方法: await():当一个线程调用此方法时,它将阻塞&#…...
计算机系统的层次结构
计算机系统的层次结构 一, 计算机系统的层次结构的定义 计算机的一个赢软件组成的综合体. 因为面对的应用范围越来越广, 所以必须有复杂的系统软件和硬件的支持. 软/硬件的设计者和使用者从不同的角度, 不同的语言来对待同一个计算机系统, 因此他们看到的计算机系统的属性对计…...
[特殊字符] SSL/TLS 中的密钥协商流程笔记
✅ 背景说明: SSL/TLS 为了确保通信保密性,结合使用了: 非对称加密(用于密钥交换) 对称加密(用于数据加密) 🔁 客户端主导密钥协商的完整流程如下: 1️⃣ 客户端发起…...
多模态大语言模型arxiv论文略读(八十一)
What is the Visual Cognition Gap between Humans and Multimodal LLMs? ➡️ 论文标题:What is the Visual Cognition Gap between Humans and Multimodal LLMs? ➡️ 论文作者:Xu Cao, Bolin Lai, Wenqian Ye, Yunsheng Ma, Joerg Heintz, Jintai …...
SpringBoot(一)--- Maven基础
目录 前言 一、初始Maven 1.依赖管理 2.项目构建 3.统一项目结构 二、IDEA集成Maven 1.Maven安装 2.创建Maven项目 2.1全局设置 2.2 创建SpringBoot项目 2.3 常见问题 三、单元测试 1.JUnit入门 2.断言 前言 Maven 是一款用于管理和构建Java项目的工具ÿ…...
如何使用WordPress创建美食博客
不管你是否意识到,食物是我们生活的核心。有些人将其用作燃料,而另一些人则将食谱作为一种艺术形式呈现。如果您属于后者,并且想创建一个美食博客来分享您的热情,那么WordPress是一个顶级平台。 几乎每个话题都有一个博客利基&am…...
SAP集团内部公司间交易自动开票
SAP集团内部公司间交易自动开票(非STO/EDI模式) 集团内部公司间采购与销售业务,在确认相应单据无误后,为减少人工开票业务, 可以用系统标准功能来实现自动开票。 1.采购发票自动开票(ERS) T-CODE:BP,勾选“基于收货的发票校验”、“自动G…...
代码审计-php框架开发,实战tp项目,打击微交易,源码获取,扩大战果
实战,不安全写法引发的注入 这个bc靶场源码没有,看老师演示 打开很明显的tp框架源码 拿到tp框架之后第一步,搜索版本信息5.0.5 两个思路 1.代码的不安全写法 2.版本自身存在的漏洞 全局搜索where看看也没有不安全的 哎?&…...
Atcoder Beginner Contest 406
比赛链接:ABC406 A - Not Acceptable 将小时转换成分钟直接进行判断。 时间复杂度: O ( 1 ) O(1) O(1)。 #include <bits/stdc.h> using namespace std;int main() {ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);int a,…...
02 K8s双主安装
00 前提准备 # 设置好主机名并添加hosts解析主机名IP地址身份master01172.2.25.50主Mastermaster02172.2.25.51备Masternode01172.2.25.52节点1node02172.2.25.53节点2node03172.2.25.54节点3 01 使用脚本安装Docker # Docker脚本文件 https://node-siyuan.oss-cn-beijing.a…...
分别用 语言模型雏形N-Gram 和 文本表示BoW词袋 来实现文本情绪分类
语言模型的雏形 N-Gram 和简单文本表示 Bag-of-Words 语言表示模型简介 (1) Bag-of-Words (BoW) 是什么? *定义:将文本表示为词频向量,忽略词序和语法,仅记录每个词的出现次数。 **示例: 句子1:I love …...
2_Spring【IOC容器中获取组件Bean】
Spring中IOC容器中获取组件Bean 实体类 //接口 public interface TestDemo {public void doSomething(); } // 实现类 public class HappyComponent implements TestDemo {public void doSomething() {System.out.println("HappyComponent is doing something...")…...
一次页面假死分析
现象:系统的几个功能若干次切换,页面假死,无反应 上图,不是每次切换都假死,但非常容易重现,每次页面假死都在getValidatorJSONInfo这个调用后 getValidatorJSONInfo调用已返回,但返回内容页面挂…...
WPS多级标题编号以及样式控制
WPS多级标题编号以及样式控制 上一篇:WPS自动生成图表目录以及样式控制 阅读提示:请先阅读完本篇内容再操作,避免出现其他错误。 初始样式: 1.1 步骤演示 说明:以3级目录为例 标题1样式:黑体,…...
方差是什么?
一、方差是什么? 方差(Variance)是概率论和统计学中衡量数据离散程度(即数据与平均值的偏离程度)的核心指标。 通俗理解:方差越大,数据越“分散”“波动大”;方差越小,数据越“集中”“稳定”。 二、方差的公式(以样本数据为例) 计算步骤: 第一步:求平均值 ( …...
Java核心API实战:从字符串到多线程全解析
Java常用API详解与代码实践 一、字符串处理类 1. String类 // 字符串基础操作 String str "Hello,Java!"; System.out.println(str.substring(7)); // 输出"Java!" System.out.println(str.indexOf("Java")); // 输出7// 正则表达式匹配 Str…...
低代码AI开发新趋势:Dify平台化开发实战
在人工智能快速发展的今天,AI应用的开发方式也在不断演变。从传统的手写代码到如今的低代码甚至零代码开发,技术的进步让更多的非专业开发者也能轻松上手。本文将带你走进Dify平台化开发的世界,探索如何通过这一强大的低代码AI开发平台&#…...
基于First Order Motion与TTS的AI虚拟主播系统全流程实现教程
前言:多模态虚拟主播的技术革命 在AI内容生成领域,虚拟主播技术正经历从2D到3D、从固定模板到个性化定制的跨越式发展。本文将深入解析如何通过Python技术栈构建支持形象定制与声音克隆的AI虚拟主播系统,涵盖从人脸建模到多模态融合的全流程…...
中科院自动化研究所通用空中任务无人机!基于大模型的通用任务执行与自主飞行
作者: Ji Zhao and Xiao Lin 单位:中科院自动化研究所 论文标题:General-Purpose Aerial Intelligent Agents Empowered by Large Language Models 论文链接:https://arxiv.org/pdf/2503.08302 主要贡献 硬件-软件协同设计框…...
DOM知识点
DOM(Document Object Model)即文档对象模型,是用于表示和操作HTML、XML文档的编程接口。以下是关于DOM的一些知识点总结: 基本概念 • DOM将文档解析为一个由节点(Node)组成的树形结构,每个节…...
设备预测性维护的停机时间革命:中讯烛龙如何用AI重构工业设备管理范式
在工业4.0的智能化浪潮中,非计划停机每年吞噬企业3%-8%的产值。中讯烛龙预测性维护系统通过多模态感知矩阵分布式智能体的创新架构,实现设备健康管理的范式跃迁,帮助制造企业将停机时间压缩70%以上。本文将深度解析技术实现路径与行业级实践方…...
JMeter 教程:使用 HTTP 请求的参数列表发送 POST 请求(form 表单格式)
目录 ✅ 教程目的 🛠️ 准备工作 📄 操作步骤 第一步:新建测试计划 第二步:添加 HTTP 请求 第三步:添加参数列表(表单参数) 第四步:添加结果查看器 第五步:运行测…...
**HTTP/HTTPS基础** - URL结构(协议、域名、端口、路径、参数、锚点) - 请求方法(GET、POST) - 请求头/响应头 - 状态码含义
# HTTP/HTTPS基础知识点详解 ## 1. URL结构 ### 协议部分 - http:// - 超文本传输协议,明文传输 - https:// - 安全的超文本传输协议,使用SSL/TLS加密 - 爬虫注意点:HTTPS网站有TLS指纹(JA3指纹),可被用于检测爬虫 ### 域名部分…...
2025抓包工具Reqable手机抓包HTTPS亲测简单好用-快速跑通
前言 自安卓7.0高版本系统不在信任用户证书,https抓包方式市面查找方法太过复杂手机要root等,前置条件要求太高太复杂,看的头痛,今天一台电脑按步骤操作完即可抓包https,给大家搞定抓包https问题。支持直接编辑修改请求参…...
大模型在胫骨平台骨折预测及治疗方案制定中的应用研究
目录 一、引言 1.1 研究背景与目的 1.2 国内外研究现状 1.3 研究方法和创新点 二、大模型预测胫骨平台骨折的原理和方法 2.1 相关大模型介绍 2.2 数据收集与预处理 2.3 模型训练与优化 2.4 模型评估指标 三、术前预测与手术方案制定 3.1 骨折类型和严重程度预测 3.…...
AI图像处理之ComfyUI节点(二)
一、Load Checkpoint节点 功能:用于加载预训练的大模型,如Stable Diffusion等 参数: chechkpoint:选择加载的模型文件(.ckpt或.satetensors格式) MODEL:输出用于图像扩散预测的UNet模型 CLIP&…...
异常日志规范
目录 一、错误码 二、异常处理 三、日志规约 一、错误码 强制: 1、错误码的制订原则:快速溯源、沟通标准化。 1)错误码必须能够快速知晓错误来源,可快速判断是谁的问题。 2)错误码必须能够清晰地比对(…...
pycharm连接github(详细步骤)
【前提:菜鸟学习的记录过程,如果有不足之处,还请各位大佬大神们指教(感谢)】 1.先安装git 没有安装git的小伙伴,看上一篇安装git的文章。 安装git,2.49.0版本-CSDN博客 打开cmd(…...
UESplineThicken节点
SplineThicken 函数用来使非常薄的多边形在渲染时显示为略厚。对于线缆、头发、草和其他此类对象,这种效果非常理想。 SplineThicken节点 该节点始终朝向摄像机 可以控制模型前后宽度 可以连接到wpo上制作特效效果 参考链接 https://dev.epicgames.com/document…...
【C++】map和set的使用
📌 个人主页: 孙同学_ 🔧 文章专栏:C 💡 关注我,分享经验,助你少走弯路 文章目录 1. 序列式容器和关联式容器1.1 序列式容器1.2 关联式容器 2. set系列的使用2.1 set和multiset的参考文档2.2 se…...
MCP实战:在扣子空间用扣子工作流MCP,一句话生成儿童故事rap视频
扣子最近迎来重要更新,支持将扣子工作流一键发布成MCP,在扣子空间里使用。 这个功能非常有用,因为我有很多业务工作流是在扣子平台上做的,两者打通之后,就可以在扣子空间里直接通过对话方式调用扣子工作流了࿰…...
c/c++的opencv直方图初识
C/C OpenCV中的图像直方图:零基础入门指南 📊 大家好!今天我们来聊聊图像处理中一个非常基础且重要的概念——直方图(Histogram)。如果你是OpenCV新手,或者对直方图感觉有点迷糊,别担心,这篇文章会用最简单…...
Spring Boot 与 RabbitMQ 的深度集成实践(一)
引言 ** 在当今的分布式系统架构中,随着业务复杂度的不断提升以及系统规模的持续扩张,如何实现系统组件之间高效、可靠的通信成为了关键问题。消息队列作为一种重要的中间件技术,应运而生并发挥着举足轻重的作用。 消息队列的核心价值在于其…...
Android动态音频柱状图可视化解析:从原理到实现
Android动态音频柱状图可视化解析:从原理到实现 一、整体架构设计二、核心组件设计三、核心代码实现四、交互设计与用户体验五、性能优化与问题解决一、整体架构设计 Android动态音频柱状图可视化解析 在移动应用开发中,音频可视化是增强用户体验的重要手段。无论是音乐播放器…...
vue3大事件项目
这周写完了vue3的大事件项目,从中学到了很多东西,并且解決了一部分bug,現在就和大家分享一下我遇到的问题并且是如何解決的 1. QuillEditor 的 v-model 用法错误 先讲一下quilleditor富文本的基本使用方法: 1.安裝quill依賴&am…...
MapReduce-WordCount实现按照value降序排序、字符小写、识别不同标点
要求: 输入文件的按照空格、逗号、点号、双引号等分词 输入文件的大写字母全部换成小写 文件输出要求按照value值降序排序 Hadoop给的wordcount示例代码以及代码理解 基于map reduce的word count个人理解:输入的文件经过map reduce框架处理后&#…...
c++线段树之单点修改区间最大子段和-----P4513 小白逛公园
题目大意 单点修改查询区间最大字段和 解题思路 如果线段树节点存储的是‘区间最大子段和’,如何合并? 简单的加法或求极值都不行,仔细分析可得,父节点最大字段和可能为: 左子树最大子段和右子树最大子段和左子树最…...