当前位置: 首页 > news >正文

【NLP】 18. Tokenlisation 分词 BPE, WordPiece, Unigram/SentencePiece

1. 翻译系统性能评价方法

在机器翻译系统性能评估中,通常既有人工评价也有自动评价方法:

1.1 人工评价

人工评价主要关注以下几点:

  • 流利度(Fluency): 判断翻译结果是否符合目标语言的语法和习惯。
  • 充分性(Adequacy): 判断翻译是否传达了原文的全部信息。
  • 评价方式: 可以通过打分(Rate)、排序(Rank)以及编辑比较(Edit & Compare)的方式进行人工评测。

1.2 自动评价指标

自动评价方法常用的包括基于字符 n-grams 的指标(如 chrF)和基于单词 n-grams 的指标(如 BLEU)。

chrF 指标
  • 基本思想:
    将翻译结果与参考译文在字符级别进行 n-gram 匹配,适合于捕捉词形变化(如“read”与“Reading”),适合处理小写、标点、甚至拼写错误等情况。
  • 常用公式:
    • 精确率(Precision):
      precision = TP / (TP + FP)

    • 召回率(Recall):
      recall = TP / (TP + FN)

    • F-beita 分数(F_β-score):

      F β = ( ( 1 + β 2 ) ⋅ T P ) / ( ( 1 + β 2 ) ⋅ T P + β 2 ⋅ F N + F P ) F_β = ((1+β^2)·TP) / ((1+β^2)·TP + β^2·FN + FP) Fβ=((1+β2)TP)/((1+β2)TP+β2FN+FP)
      其中,beita 参数控制精确率和召回率之间的权重。例如,F2-score中 β= 2(公式:F2 = 5TP/(5TP + 4FN + FP)),而 F0-score 则相当于Precision, 当β很大的时候,相当于Recall

当所评估句子数量较多时,chrF 能有效反映字符级匹配情况,但当匹配以单词为单位时,可能出现“没有4-gram匹配得分为0”的情况,因此常配合其他指标综合评估。

BLEU 指标
  • 基本思想:
    BLEU 通过对比翻译输出与参考译文的单词 n-grams(通常计算一元、二元、三元和四元 n-grams)精确率,并取几何平均后乘以一个惩罚因子(brevity penalty)来处理生成句子较短的问题。
  • 局限性:
    由于BLEU只计算精确率,不考虑单词的形态变化(例如“read”和“Reading”在严格匹配时视为不同)以及上下文语序,且几何平均在数据量不足时敏感,常常无法完全反映翻译的流利性和充分性。

对比

BLEU vs. chrF

特征BLEUchrF
全称Bilingual Evaluation UnderstudyCharacter n-gram F-score
单位基于词级别(word-level)基于字符级别(character-level)
匹配单位n-gram(如词组)字符n-gram(如连续的字符组合)
语言适用性英语/法语等空格分词语言效果较好对形态复杂语言(如德语、芬兰语、中文)效果更好
对词形变化的鲁棒性差(如“run”和“runs”会被认为不同)好(字符n-gram可以捕捉到词形变化)
对词序敏感非常敏感不那么敏感
评价精度偏向于流畅性(fluency)更能捕捉语义和词形匹配(adequacy)
惩罚机制有 Brevity Penalty 惩罚过短的句子没有专门惩罚机制
实现工具NLTK、SacreBLEU官方工具:chrF++,也在 SacreBLEU 中支持

2. Tokenisation 的基本概念与问题

Tokenisation(分词或词元化)指的是将一段文本切分为基本单元(token),如单词、标点符号或子词单元。传统方法多采用基于空格分割,但存在以下问题:

2.1 基于空格分词的局限性

  • 简单的空格分割:
    通常将文本按照空格拆分出各个 token,此方法对于英文等基于空格分词的语言基本适用。但在实际情况中会遇到:
    • 缩写问题: 如 “won’t” 表示 “will not”,空格分词时可能作为一个整体或拆分为 “won” 和 “'t”。
    • 标点处理: 如 “great!” 中的感叹号有可能被保留或删除,不同工具处理方式不一致。
    • 罕见词或变体: 如 “taaaaaaasty” 可能有多种变体,直接按空格分割,无法解决拼写变化或冗余重复问题。
    • 拼写错误或新词: 如 “laern” (原意 learn)和 “transformerify” 这样的新造词也会被简单拆分,而无法充分捕捉原有语义。

2.2 Tokenisation 帮助处理罕见词等问题

通过更细粒度的分词方法,可以减少由于拼写错误、变形或新词带来的问题。例如,将长词拆成子词单元,可以使得词形变化不至于使整个单词无法识别。

  • 实例:
    • “laern” 拆分为 “la##”, “ern”。
      这样一来,即使遇到拼写错误或不常见的词,模型也能通过子词组合部分捕捉到词语的语义,从而提高整体泛化能力。

3. 子词分割策略与方法

为了更好地处理词形变化、罕见词及新词,现有许多基于子词单位的分词算法。主要包括以下三类:

3.1 Byte-Pair Encoding (BPE)

BPE 的基本算法步骤为:

  1. 初始化词汇表:
    将词汇表设置为所有单独的字符。
  2. 查找频率最高的相邻字符对:
    遍历语料,找出最常在一起出现的两个字符或子词。
  3. 合并:
    将这一对合并,生成一个新的子词单位,并更新整个语料中的分词表示。
  4. 检查词汇表大小:
    如果词汇表大小未达到预设目标(例如 100,000),则返回步骤2继续合并,直到达到要求。

这种方法简单高效,常用于许多现代 NLP 框架中。
假设我们现在的训练语料有以下 4 个词:

1. low
2. lower
3. newest
4. widest

初始我们会把每个词都拆成字符 + 特殊结束符号 </w>来防止词和词连接在一起:

l o w </w>  
l o w e r </w>  
n e w e s t </w>  
w i d e s t </w>  

🔁 步骤 0:统计所有字符对频率

从上面所有词中,统计所有相邻字符对的频率(包括 </w>):

PairCount
l o2
o w2
w 1
w e1
e r1
r 1
n e1
e w1
w e1
e s2
s t2
t 2
w i1
i d1
d e1

注意:

  • w e 出现了两次(一次是 “lower”,一次是 “newest”);
  • e ss tt </w> 是在 “newest” 和 “widest” 中反复出现的。

🔨 步骤 1:合并频率最高的字符对

我们假设 s t 是当前频率最高的(2 次)。那我们合并 s t → st

现在变成:

l o w </w>  
l o w e r </w>  
n e w e st </w>  
w i d e st </w>  

🔁 步骤 2:重新统计字符对频率

重新统计所有字符对(只列几个):

PairCount
l o2
o w2
e st2
st 2

我们发现 e stst </w> 又很频繁 → 合并 e st → est


🔨 步骤 3:合并 e st → est

结果:

bashCopyEditl o w </w>  
l o w e r </w>  
n e w est </w>  
w i d est </w>  

你看,“newest” 和 “widest” 的后缀变成了统一的 est,这就是 BPE 的威力!


🔁 再来几轮(每次合并频率最高的)

假设继续合并:

Round合并操作影响
4l olo得到 lo w
5lo wlow得到完整词 low
6e rer合并 “lower” 的尾部
7w ewe合并 “newest” 的 “we” 部分
8we + rwer可得 “lower” 更完整

每合并一次,词汇表中就新增一个子词(如 lowester 等),最终我们就有一个子词词表,用于之后的分词。


✅ 最终效果(假设分词完成后):
原始词分词结果
lowlow
lowerlow + er
newestnew + est
widestwid + est

这样,即使将来出现一个从没见过的词,比如 bravest,我们也可以分成:

brav + est

🧠 总结亮点
  • BPE 把频繁出现的字符组合合并成更长的单元
  • 最终词汇表里既有完整词(如 low),也有子词(如 est, er);
  • 能处理拼写变化、形态变化、新词
  • 是 GPT、BERT、RoBERTa、T5 等模型使用的标准方法。

3.2 WordPiece

WordPiece 最早由 Google 提出,其主要步骤与 BPE 类似,但在合并步骤中使用更复杂的决策标准:

  • 训练一个 n-gram 语言模型,
    并考虑所有可能的词汇对,选择那个加入后能最大程度降低困惑度perplexity的组合;
  • HuggingFace 实现的 WordPiece 则有时选择使得合并后 token 的概率比例满足某个公式,例如选择使得
    “|combined| / (|first symbol| * |second symbol|)” 最大的词对。

这种方法可在一定程度上更好地平衡子词与完整词的表达效果。

✂️ 分词示例(WordPiece)

playing 为例,假设词表中包含:

[ "play", "##ing", "##er", "##est", "##s" ]

playing 会被分为:

play + ##ing

再比如 unbelievable

如果词表中有:

["un", "##believable", "##able", "##lievable", ...]

则可能被分为:

un + ##believable

(如果没有 “believable”,那就会继续拆成 ##believe + ##able


🎯 WordPiece 构建流程(简要)
  1. 初始化词表:包含所有单字符 token(如 a, b, c,…);
  2. 基于最大似然概率计算所有可能合并的对;
  3. 每轮合并一对,使得整体训练语料的似然性最大;
  4. 直到词表达到预设大小(如 30,000 个 token)为止;

这比 BPE 更慢,但能得到更“语言合理”的子词。


🔍 分词过程总结

WordPiece 是一种贪心最长匹配算法,遵循以下原则:

  1. 从词首开始;
  2. 找到最长可匹配的 token(如 “unbelievable” → “un”);
  3. 然后从该点继续向右,查找 ## 前缀的匹配;
  4. 直到整个词完成或无法继续拆分;

🧠 举个例子(完整流程)

假设词表里有:

["un", "##believe", "##able", "##believable"]

处理 unbelievable

  • unbelievableun + ##believable

再处理 unbelievably

如果 ##ly 也在词表中,就可以是:

  • un + ##believable + ##ly

如果 ##believable 不在词表中:

  • 尝试 un + ##believe + ##able

✅ 总结

BPE 看频率,WordPiece 看语言模型概率。

WordPiece 更“聪明”,但 BPE 更“高效”。它们都用来解决“词太多”和“未知词”的问题。

WordPiece vs. BPE 的区别
特性BPEWordPiece
合并策略每次合并频率最高的 pair每次合并带来最大 语言模型概率提升 的 pair
评分标准纯粹基于频率基于最大似然估计(MLE)
分词方式贪心从左到右合并也使用贪心,但遵循“最大匹配”原则
应用例子GPT、RoBERTa、OpenNMTBERT、ALBERT、DistilBERT 等
词边标记可无(GPT类)## 表示词中间部分(如 play ##ing

3.3 Unigram / SentencePiece

Unigram 模型(或称 SentencePiece)采取另一种策略,不是从最小单元不断合并,而是:

  1. 初始化:
    从所有字符以及语料中频率较高的连续字符序列(甚至包括完整单词)构建一个较大的初始词汇表;
  2. 精简:
    通过一种复杂的概率模型和迭代过程,逐步删除贡献较小的词汇项,直到词汇表达到预期大小。

这种方法的优势在于能够同时考虑大单元和小单元的信息,从而得到更优的子词表示。

用 Unigram 分词 internationalization

假设词表中有:

["international", "##ization", "inter", "##national", "##ize", "##ation", "##al", "##i", "##zation"]

Unigram 会考虑所有可能组合:

  1. international + ization
  2. inter + national + ization
  3. inter + nation + al + ization

对每个组合计算 概率乘积(P(a) × P(b) × P© …),然后选取概率 最大的组合方式

比如:

international + ization → P1  
inter + national + ization → P2  
inter + nation + al + ization → P3

选取 max(P1, P2, P3) 那个组合。

3.4 各方法的比较
  • BPE: 简单、直接,广泛应用,合并依据频率;
  • WordPiece: 考虑对语言模型困惑度的影响,通常效果更好,但实现较复杂;
  • Unigram/SentencePiece: 允许初始词汇同时包含较大和较小单元,通过概率模型精简词汇,具有更大的灵活性。
Unigram vs. BPE/WordPiece
特性Unigram(SentencePiece)BPEWordPiece
分词方式选择概率最高的子词组合(非贪心)左到右合并字符对(贪心)贪心最长匹配
词表生成方式预设大词表 → EM算法删掉低概率的子词每轮合并频率最高的 pair每轮合并最大增益的 pair
分词结果是否唯一❌ 可能多个组合概率差不多✅ 唯一贪心路径✅ 贪心最长匹配
优点更灵活,能找到最优子词拆法简单快速精确但复杂
模型代表ALBERT, XLNet, T5, mBART, SentencePieceRoBERTa, GPT, MarianMTBERT, DistilBERT
特殊符号不需要空格、可直接处理未空格文本需提前空格/处理标记通常需要空格

4. 特殊常见词(例如“the”)的处理

在分词和词嵌入训练中,常见词(如 “the”、“is”、“and” 等)通常出现频率极高,这会带来两个问题:

  1. 模型训练时的影响:
    高频词容易主导模型权重,导致训练过程中对低频实义词的信息关注不足。为此,许多方法会在训练时对这些高频词进行下采样(sub-sampling),降低它们在训练中的出现频率。
  2. 评价指标的匹配:
    在翻译评价、自动摘要或其他生成任务中,通常不希望因为 “the” 这种功能词的不同写法(例如大小写问题)产生低分。在实际 tokenisation 中,往往会将所有单词统一小写,或者对停用词单独处理,从而确保这些高频但语义信息较弱的词对整体模型影响较小。

例如,在 BLEU 计算中,尽管 “read” 和 “Reading” 在大小写和形态上有所不同,但通常在预处理阶段会进行小写化;而在子词分割中,“the” 可能不再被拆分,因为它本身已经十分常见而且具有固定形式。因此,“the” 通常被保留为一个完整的 token,同时在训练和评价中通过下采样等方式控制其权重。


5. 实际案例补充

假设我们有一段英文文本作为翻译系统的输入与参考译文,并希望利用自动评价指标来评估翻译质量,同时考虑分词细节:

案例 1:翻译评价中 chrF 指标计算

  • 参考译文: “I like to read too”
  • 机器译文: “Reading, I too like”
  • 处理流程:
    1. 分词:
      利用子词分割策略处理标点和缩写,确保“Reading”可以与“read”在字符 n-gram 层面匹配。

    2. 计算字符 n-gram 匹配:
      对机器译文和参考译文分别计算字符 n-grams,再计算精确率和召回率。

    3. Fbeita 分数计算:

    4. 结果说明:
      通过字符匹配,可以部分容忍由于词形变化(例如 “read” 与 “Reading”)而带来的微小差异。

案例 2:使用 BPE 处理新词

假设文本中出现一个新词 “transformerify”,传统的词汇表中可能未收录。通过 BPE 分词过程:

  1. 初始化:
    将 “transformerify” 拆分为单个字符,即 [“t”, “r”, “a”, “n”, “s”, “f”, “o”, “r”, “m”, “e”, “r”, “i”, “f”, “y”]。
  2. 迭代合并:
    统计在整个语料中最频繁出现的相邻字符对,如果 “er” 出现次数最多,则将“e”与“r”合并为 “er”。不断进行,直到达到预定词汇大小。
  3. 结果:
    最终可能将 “transformerify” 分割为 “transforme” 和 “##ify”,使得即使新词未见过,也能利用已有的子词表示捕捉部分语义。

相关文章:

【NLP】 18. Tokenlisation 分词 BPE, WordPiece, Unigram/SentencePiece

1. 翻译系统性能评价方法 在机器翻译系统性能评估中&#xff0c;通常既有人工评价也有自动评价方法&#xff1a; 1.1 人工评价 人工评价主要关注以下几点&#xff1a; 流利度&#xff08;Fluency&#xff09;&#xff1a; 判断翻译结果是否符合目标语言的语法和习惯。充分性…...

详解MYSQL表空间

目录 表空间文件 表空间文件结构 行格式 Compact 行格式 变长字段列表 NULL值列表 记录头信息 列数据 溢出页 数据页 当我们使用MYSQL存储数据时&#xff0c;数据是如何被组织起来的&#xff1f;索引又是如何组织的&#xff1f;在本文我们将会解答这些问题。 表空间文…...

lwip移植基于freertos(w5500以太网芯片)

目录 一、背景二、lwip移植基于w5500&#xff08;MACPHY&#xff0c;数据链路层和物理层&#xff09;1.移植需要的相关文件2、协议栈层级调用3、w5500关键初始化说明 三、附录 一、背景 1.OSI七层模型 图片来自网络 lwip协议栈工作在应用层、传输层、网络层&#xff1b; 网卡…...

【TI MSPM0】IQMath库学习

一、与DSP库的区别 二、IQMath库详解 RTS是靠纯软件实现的&#xff0c;而MathACL是靠硬件加速&#xff0c;速度更快 三、工程详解 1.导入工程 2.样例详解 使用一系列的运算来展示IQMath库&#xff0c;使用的是MathACL实现版本的IQMath库 编译加载运行&#xff0c;结果变量叫…...

51单片机 光敏电阻5506与ADC0832驱动程序

电路图 5506光敏电阻光强增加电阻值减小 以上电路实测无光时电压1.5v 有光且较亮时电压2.7v。 转换程序和ADC0832程序如下 // ADC0832引脚定义 sbit ADC_CS P1^2; // 片选信号 sbit ADC_CLK P1^0; // 时钟信号 sbit ADC_DIO P1^1; // 数据线// 获取电压值 - 返回c…...

【Linux】进程创建、进程终止、进程等待

Linux 1.进程创建1.fork 函数2.写时拷贝3.为什么要有写时拷贝&#xff1f; 2.进程终止1.进程退出场景2.退出码3.进程常见退出方法1.main函数return2.exit库函数3._exit系统调用 3.进程等待1.概念2.必要性3.方法1.wait2.waitpid3.参数status4.参数option5.非阻塞轮询 1.进程创建…...

ReliefF 的原理

&#x1f31f; ReliefF 是什么&#xff1f; ReliefF 是一种“基于邻居差异”的特征选择方法&#xff0c;用来评估每个特征对分类任务的贡献大小。 它的核心问题是&#xff1a; “我怎么知道某个特征是不是重要&#xff1f;是不是有能力把不同类别的数据区分开&#xff1f;” 而…...

C++ 数据结构之图:从理论到实践

一、图的基本概念 1.1 图的定义与组成 图&#xff08;Graph&#xff09;由顶点&#xff08;Vertex&#xff09;和边&#xff08;Edge&#xff09;组成&#xff0c;形式化定义为&#xff1a; G (V, E) 顶点集合 V&#xff1a;表示实体&#xff08;如城市、用户&#xff09; …...

机器学习(5)——支持向量机

1. 支持向量机&#xff08;SVM&#xff09;是什么&#xff1f; 支持向量机&#xff08;SVM&#xff0c;Support Vector Machine&#xff09;是一种监督学习算法&#xff0c;广泛应用于分类和回归问题&#xff0c;尤其适用于高维数据的分类。其核心思想是寻找最优分类超平面&am…...

C++学习之使用OPENSSL加解密

目录 1.知识点概述 2.哈希的特点和常用哈希算法散列值长度 3.Linux下openss相关的安装问题 4.md5 api 5.其他哈希算法使用 6.sha1测试 7.哈希值的封装 8.非对称加密特点和应用场景 9.生成密钥对-rsa 10.在内存中生成rsa密钥对-代码 11.将密钥对写入磁盘 12.使用bio方…...

markdown导出PDF,PDF生成目录

1、vscode中安装markdown插件&#xff0c;将编辑的文件导出PDF。 2、安装PDF Guru Anki软件 百度网盘&#xff1a;通过网盘分享的文件&#xff1a;PDFGuruAnki 链接: https://pan.baidu.com/s/1nU6avM7NUowhEn1FNZQKkA 提取码: aues PDF中不同的标题需要通过矩形框标注差异&a…...

Node.js中Stream模块详解

Node.js 中 Stream 模块全部 API 详解 一、Stream 基础概念 const { Stream } require(stream);// 1. Stream 类型 // - Readable: 可读流 // - Writable: 可写流 // - Duplex: 双工流 // - Transform: 转换流// 2. Stream 事件 // - data: 数据可读时触发 // - end: 数据读…...

Swift的学习笔记(一)

Swift的学习笔记&#xff08;一&#xff09; 文章目录 Swift的学习笔记&#xff08;一&#xff09;元组基本语法1. **创建元组**2. **访问元组的值**3. **命名的元组**4. **解构元组**5. **忽略某些值** 可选值类型定义 OptionalOptional 的基本使用1. **给 Optional 赋值和取值…...

3.4 函数单调性与曲线的凹凸性

1.函数单调性的定义 1.1.判别法 2.函数凹凸性 2.1 判别法...

随机森林优化 —— 理论、案例与交互式 GUI 实现

目录 随机森林优化 —— 理论、案例与交互式 GUI 实现一、引言二、随机森林基本原理与超参数介绍2.1 随机森林概述2.2 随机森林中的关键超参数 三、随机森林优化的必要性与挑战3.1 优化的重要性3.2 调优方法的挑战 四、常见的随机森林优化策略4.1 网格搜索&#xff08;Grid Sea…...

Pytorch深度学习框架60天进阶学习计划 - 第41天:生成对抗网络进阶(一)

Pytorch深度学习框架60天进阶学习计划 - 第41天&#xff1a;生成对抗网络进阶&#xff08;一&#xff09; 今天我们将深入探讨生成对抗网络(GAN)的进阶内容&#xff0c;特别是Wasserstein GAN&#xff08;WGAN&#xff09;的梯度惩罚机制&#xff0c;以及条件生成与无监督生成…...

62. 不同路径

前言 本篇文章来自leedcode&#xff0c;是博主的学习算法的笔记心得。 如果觉得对你有帮助&#xff0c;可以点点关注&#xff0c;点点赞&#xff0c;谢谢你&#xff01; 题目链接 62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 题目描述 思路 1.如果m1或者n1就只…...

使用Apache POI实现Java操作Office文件:从Excel、Word到PPT模板写入

在企业级开发中&#xff0c;自动化处理Office文件&#xff08;如Excel报表生成、Word文档模板填充、PPT批量制作&#xff09;是常见需求。Apache POI作为Java领域最成熟的Office文件操作库&#xff0c;提供了一套完整的解决方案。本文将通过实战代码&#xff0c;详细讲解如何使…...

基于 RabbitMQ 优先级队列的订阅推送服务详细设计方案

基于 RabbitMQ 优先级队列的订阅推送服务详细设计方案 一、架构设计 分层架构: 订阅管理层(Spring Boot)消息分发层(RabbitMQ Cluster)推送执行层(Spring Cloud Stream)数据存储层(Redis + MySQL)核心组件: +-------------------+ +-------------------+ …...

设计模式(8)——SOLID原则之依赖倒置原则

设计模式&#xff08;7&#xff09;——SOLID原则之依赖倒置原则 概念使用示例 概念 高层次的类不应该依赖于低层次的类。两者都应该依赖于抽象接口。抽象接口不应依赖于具体实现。具体实现应该依赖于抽象接口。 底层次类&#xff1a;实现基础操作的类&#xff08;如磁盘操作…...

oracle COUNT(1) 和 COUNT(*)

在 Oracle 数据库中&#xff0c;COUNT(1) 和 COUNT(*) 都用于统计表中的行数&#xff0c;但它们的语义和性能表现存在一些细微区别。 1. 语义区别 COUNT(*) 统计表中所有行的数量&#xff0c;包括所有列值为 NULL 的行。它直接针对表的行进行计数&#xff0c;不关心具体列的值…...

理想汽车MindVLA自动驾驶架构核心技术梳理

理想汽车于2025年3月发布的MindVLA自动驾驶架构&#xff0c;通过整合视觉、语言与行为智能&#xff0c;重新定义了自动驾驶系统的技术范式。以下是其核心技术实现的详细梳理&#xff1a; 一、架构设计&#xff1a;三位一体的智能融合 VLA统一模型架构 MindVLA并非简单的端到端模…...

基于FPGA的智能垃圾桶设计-超声波测距模块-人体感应模块-舵机模块 仿真通过

基于FPGA的智能垃圾桶设计 前言一、整体方案二、仿真波形总结 前言 在FPGA开发平台中搭建完整的硬件控制系统&#xff0c;集成超声波测距模块、人体感应电路、舵机驱动模块及报警单元。在感知层配置阶段&#xff0c;优化超声波回波信号调理电路与人体感应防误触逻辑&#xff0…...

[极客大挑战 2019]Upload

<script language"php">eval($_POST[shell]);</script>​ ​ <script language"php">#这里写PHP代码哟&#xff01; </script>​ ​ BM <script language"php">eval($_POST[shell]);</script>GIF89a <…...

操作系统基础:05 系统调用实现

一、系统调用概述 上节课讲解了系统调用的概念&#xff0c;系统调用是操作系统给上层应用提供的接口&#xff0c;表现为一些函数&#xff0c;如open、read、write 等。上层应用程序通过调用这些函数进入操作系统&#xff0c;使用操作系统功能&#xff0c;就像插座一样&#xf…...

“堆积木”式话云原生微服务架构(第一回)

模块1&#xff1a;文章目录 目录 1. 云原生架构核心概念 2. Java微服务技术选型 3. Kubernetes与服务网格实战 4. 全链路监控与日志体系 5. 安全防护与性能优化 6. 行业案例与未来演进 7. 学习路径与资源指引 8. 下期预告与扩展阅读 模块2&#xff1a;云原生架构核心概念 核…...

Java 性能优化:从原理到实践的全面指南

性能优化是 Java 开发中不可或缺的一环&#xff0c;尤其在高并发、大数据和分布式系统场景下&#xff0c;优化直接影响系统响应速度、资源利用率和用户体验。Java 作为一门成熟的语言&#xff0c;提供了丰富的工具和机制支持性能调优&#xff0c;但优化需要深入理解 JVM、并发模…...

基于ssm网络游戏推荐系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 当今社会进入了科技进步、经济社会快速发展的新时代。国际信息和学术交流也不断加强&#xff0c;计算机技术对经济社会发展和人民生活改善的影响也日益突出&#xff0c;人类的生存和思考方式也产生了变化。传统网络游戏管理采取了人工的管理方法&#xff0c;但这种管理方…...

HTTP:五.WEB服务器

web服务器 定义:实现提供资源或应答的提供者都可以谓之为服务器!web服务器工作内容 接受建立连接请求 接受请求 处理请求 访问报文中指定的资源 构建响应 发送响应 记录事务处理过程 Web应用开发用到的一般技术元素 静态元素:html, img,js,Css,SWF,MP4 动态元素:PHP,…...

synchronized轻量级锁的自旋之谜:Java为何在临界区“空转“等待?

从餐厅等位理解自旋锁的智慧 想象两家不同的餐厅&#xff1a; 传统餐厅&#xff1a;没座位时顾客去逛街&#xff08;线程挂起&#xff0c;上下文切换&#xff09;网红餐厅&#xff1a;没座位时顾客在门口短时间徘徊&#xff08;线程自旋&#xff0c;避免切换&#xff09; Ja…...

基于redis 实现我的收藏功能优化详细设计方案

基于redis 实现我的收藏功能优化详细设计方案 一、架构设计 +---------------------+ +---------------------+ | 客户端请求 | | 数据存储层 | | (收藏列表查询) | | (Redis Cluster) | +-------------------…...

【深度学习与大模型基础】第10章-期望、方差和协方差

一、期望 ——————————————————————————————————————————— 1. 期望是什么&#xff1f; 期望&#xff08;Expectation&#xff09;可以理解为“长期的平均值”。比如&#xff1a; 掷骰子&#xff1a;一个6面骰子的点数是1~6&#x…...

JavaScript 性能优化实战:深入探讨 JavaScript 性能瓶颈,分享优化技巧与最佳实践

在当今 Web 应用日益复杂的时代&#xff0c;JavaScript 性能对于用户体验起着决定性作用。缓慢的脚本执行会导致页面加载延迟、交互卡顿&#xff0c;严重影响用户留存率。本文将深入剖析 JavaScript 性能瓶颈&#xff0c;并分享一系列实用的优化技巧与最佳实践&#xff0c;助你…...

上篇:《排序算法的奇妙世界:如何让数据井然有序?》

个人主页&#xff1a;strive-debug 排序算法精讲&#xff1a;从理论到实践 一、排序概念及应用 1.1 基本概念 **排序**&#xff1a;将一组记录按照特定关键字&#xff08;如数值大小&#xff09;进行递增或递减排列的操作。 1.2 常见排序算法分类 - **简单低效型**&#xff…...

目前状况下,计算机和人工智能是什么关系?

目录 一、计算机和人工智能的关系 &#xff08;一&#xff09;从学科发展角度看 计算机是基础 人工智能是计算机的延伸和拓展 &#xff08;二&#xff09;从技术应用角度看 二、计算机系学生对人工智能的了解程度 &#xff08;一&#xff09;基础层面的了解 必备知识 …...

【复旦微FM33 MCU 底层开发指南】高级定时器ATIM

0 前言 本系列基于复旦微FM33LC0系列MCU的DataSheet编写&#xff0c;提供基于寄存器开发指南、应用技巧、注意事项等 本文章及本系列其他文章将持续更新&#xff0c;本系列其它文章请跳转↓↓↓ 【复旦微FM33 MCU 寄存器开发指南】总集篇 本文章最后更新日期&#xff1a;2025…...

vdso概念及原理,vdso_fault缺页异常,vdso符号的获取

一、背景 vdso的全称是Virtual Dynamic Shared Object&#xff0c;它是一个特殊的共享库&#xff0c;是在编译内核时生成&#xff0c;并在内核镜像里某一段地址段作为该共享库的内容。vdso的前身是vsyscall&#xff0c;为了兼容一些旧的程序&#xff0c;x86上还是默认加载了vs…...

4.13学习总结

学习完异常和文件的基本知识 完成45. 跳跃游戏 II - 力扣&#xff08;LeetCode&#xff09;的算法题&#xff0c;对于我来说&#xff0c;用贪心的思路去写该题是很难理解的&#xff0c;很难想到&#xff0c;理解了许久&#xff0c;也卡了很久。...

Day14:关于MySQL的索引——创、查、删

前言&#xff1a;先创建一个练习的数据库和数据 1.创建数据库并创建数据表的基本结构 -- 创建练习数据库 CREATE DATABASE index_practice; USE index_practice;-- 创建基础表&#xff08;包含CREATE TABLE时创建索引&#xff09; CREATE TABLE products (id INT PRIMARY KEY…...

概率论与数理统计核心知识点与公式总结(就业版)

文章目录 概率论与数理统计核心知识点与公式总结&#xff08;附实际应用&#xff09;一、概率论基础1.1 基本概念1.2 条件概率与独立性 二、随机变量及其分布2.0 随机变量2.0 分布函数&#xff08;CDF&#xff09;2.1 离散型随机变量2.2 连续型随机变量2.3 多维随机变量2.3.1 联…...

AF3 ProteinDataset类的_patch方法解读

AlphaFold3 protein_dataset模块 ProteinDataset 类 _patch 方法的主要目的是围绕锚点残基(anchor residues)裁剪蛋白质数据,提取一个局部补丁(patch)作为模型输入。 源代码: def _patch(self, data):"""Cut the data around the anchor residues."…...

openssh 10.0在debian、ubuntu编译安装 —— 筑梦之路

OpenSSH 10.0 发布&#xff1a;一场安全与未来兼顾的大升级 - Linux迷 OpenSSH: Release Notes sudo apt-get updatesudo apt install build-essential zlib1g-dev libssl-dev libpam0g-dev libselinux1-devwget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/opens…...

Go 跨域中间件实现指南:优雅解决 CORS 问题

在开发基于 Web 的 API 时&#xff0c;尤其是前后端分离项目&#xff0c;**跨域问题&#xff08;CORS&#xff09;**是前端开发人员经常遇到的“拦路虎”。本文将带你了解什么是跨域、如何在 Go 中优雅地实现一个跨域中间件&#xff0c;支持你自己的 HTTP 服务或框架如 net/htt…...

【数据结构_6】双向链表的实现

一、实现MyDLinkedList&#xff08;双向链表&#xff09; package LinkedList;public class MyDLinkedList {//首先我们要创建节点&#xff08;因为双向链表和单向链表的节点不一样&#xff01;&#xff01;&#xff09;static class Node{public String val;public Node prev…...

【双指针】专题:LeetCode 1089题解——复写零

复写零 一、题目链接二、题目三、算法原理1、先找到最后一个要复写的数——双指针算法1.5、处理一下边界情况2、“从后向前”完成复写操作 四、编写代码五、时间复杂度和空间复杂度 一、题目链接 复写零 二、题目 三、算法原理 解法&#xff1a;双指针算法 先根据“异地”操…...

Foxmail邮件客户端跨站脚本攻击漏洞(CNVD-2025-06036)技术分析

Foxmail邮件客户端跨站脚本攻击漏洞&#xff08;CNVD-2025-06036&#xff09;技术分析 漏洞背景 ‌漏洞编号‌&#xff1a;CNVD-2025-06036 ‌CVE编号‌&#xff1a;待分配 ‌厂商‌&#xff1a;腾讯Foxmail ‌影响版本‌&#xff1a;Foxmail < 7.2.25 ‌漏洞类型‌&#x…...

39.[前端开发-JavaScript高级]Day04-函数增强-argument-额外知识-对象增强

JavaScript函数的增强知识 1 函数属性和arguments 函数对象的属性 认识arguments arguments转Array 箭头函数不绑定arguments 函数的剩余&#xff08;rest&#xff09;参数 2 纯函数的理解和应用 理解JavaScript纯函数 副作用概念的理解 纯函数的案例 判断下面函数是否是纯…...

0x05.为什么 Redis 设计为单线程?6.0 版本为何引入多线程?

回答重点 单线程设计原因: Redis 的操作是基于内存的,其大多数操作的性能瓶颈主要不是 CPU 导致的使用单线程模型,代码简便的同时也减少了线程上下文切换带来的性能开销Redis 在单线程的情况下,使用 I/O 多路复用模型就可以提高 Redis 的 I/O 利用率了6.0 版本引入多线程的…...

CST1019.基于Spring Boot+Vue智能洗车管理系统

计算机/JAVA毕业设计 【CST1019.基于Spring BootVue智能洗车管理系统】 【项目介绍】 智能洗车管理系统&#xff0c;基于 Spring Boot Vue 实现&#xff0c;功能丰富、界面精美 【业务模块】 系统共有三类用户&#xff0c;分别是&#xff1a;管理员用户、普通用户、工人用户&…...

CST1018.基于Spring Boot+Vue滑雪场管理系统

计算机/JAVA毕业设计 【CST1018.基于Spring BootVue滑雪场管理系统】 【项目介绍】 滑雪场管理系统&#xff0c;基于 Spring Boot Vue 实现&#xff0c;功能丰富、界面精美 【业务模块】 系统共有两类用户&#xff0c;分别是管理员和普通用户&#xff0c;管理员负责维护后台数…...