语义模型 - 从 Transformer 到 Qwen

语义模型

Transformers

Huggingface Transformers 是基于一个开源基于 transformer 模型结构提供的预训练语言库,它支持 Pytorch,Tensorflow2.0,并且支持两个框架的相互转换。

其本质上是一个 Encoder-Decoder 架构。因此中间部分的 Transformer 可以分为两个部分:Encoder 和 Decoder。

Decoder-Only & Encoder-Only

Decoder-Only 模型

GPT Qwen 等属于 Decoder-Only 模型,是生成式模型。

Encoder-Only 模型

其输出是一个embedding向量。与 decoder-only 的文本回答不同,encoder-only 模型将其"答案"编码成这种压缩的数值形式。

这个向量是模型输入的压缩表示,因此有时 encoder-only 模型也被称为表征模型(representational models)。

经常与 Decoder-Only 的模型一起使用,组建更强大的 AI 应用(例如 RAG)。

Bert

Bert 全称为 Bidirectional Encoder Representations from Transformers。是一种基于 Transformers 的双向编码器表示,它只使用了 Transformer 中的 Encoder 部分,用于语言理解的预训练模型。改进了单向编码器的局限性,通过双向上下文提供更强大的语义信息提取能力,广泛应用于多项NLP任务,并在多个基准测试中取得突破性成果。

举个例子理解下双向编码器:

今天天气很差,我们不得不取消户外运动。

将句中的某个字或词挖走,句子就变成:今天天气很( ),我们不得不取消户外运动。分别从单向编码(如 GPT)和双向编码(如 BERT)的角度来考虑"( )"中应该填什么词。

单向编码只会使用"今天天气很"这五个字的信息来推断"( )"内的字或词,从人类角度考虑,使用概率最大的词应该是:"好""不错""差""糟糕",而这些词可以被划分为截然不同的两类。

双向编码可以利用下文信息"我们不得不取消户外运动"来帮助模型判断,从人类角度考虑,概率最大的词应该是:"差""糟糕"。

以此就可以直观地感受到,不考虑模型的复杂度和训练数据量,双向编码与单向编码相比,可以利用更多的上下文信息来辅助当前词的语义判断。在语义理解能力上表现更好。

ModernBERT

ModernBERT 是 BERT 的现代化版本,旨在提高下游任务的性能和处理效率。与其前身不同,它支持更长的 Token,更现代的训练方式

GPT

Generative Pre-trained Transformer(GPT)系列是由 OpenA 提出的非常强大的预训练语言模型,这一系列的模型可以在非常复杂的 NLP 任务中取得非常惊艳的效果,例如文章生成,代码生成,机器翻译,Q&A 等。现在已经被广泛应用。

Qwen3

和 GPT 系列模型类似,都是基于 Transforms Decoder 的生成式 AI 模型,由阿里云发布,在架构上和 GPT 略有不同。

模型文件结构

模型保存形式

  • .safetensors 由 Hugging Face 提出,侧重于安全性和效率,适合于那些希望快速部署且对安全有较高要求的场景,尤其在Hugging Face生态中。
  • .ckpt 文件是 PyTorch Lightning 框架采用的模型存储格式,它不仅包含了模型参数,还包括优化器状态以及可能的训练元数据信息,使得用户可以无缝地恢复训练或执行推理。
  • .bin 文件不是标准化的模型保存格式,但在某些情况下可用于存储原始二进制权重数据,加载时需额外处理。
  • .pth 是PyTorch的标准模型保存格式,方便模型的持久化和复用,支持完整模型结构和参数的保存与恢复。
  • .onnx(Open Neural Network Exchange)文件是一个开放格式,用于表示机器学习模型。它旨在提供一种标准的方式来表示深度学习模型,使得模型可以在不同的框架和工具之间进行转换和互操作

文件结构

以 Qwen 0.6B 为例。

text 复制代码
Qwen3-0.6B
├── config.json							# 控制模型的名称、最终输出的样式、隐藏层宽度和深度、激活函数的类别等
├── generation_config.json
├── LICENSE
├── merges.txt
├── model.safetensors
├── README.md
├── tokenizer_config.json
├── tokenizer.json					# tokenizer.json 和 tokenizer_config.json 分词的配置文件
└── vocab.json							# vocab.txt 词典文件

扩展

激活函数

神经网络模拟的是人脑中的神经元结构,激活函数旨在帮助网络学习数据中的复杂模式。在神经元中,输入经过一系列加权求和后作用于另一个函数,这个函数就是这里的激活函数。

通俗来讲,就是将输入和输出的映射升纬,使模型适配更多的非线性情况。激活函数可以分为线性激活函数 (线性方程控制输入到输出的映射,如 f(x)=x 等)以及非线性激活函数 (非线性方程控制输入到输出的映射,比如SigmoidTanh、ReLU、LReLU、PReLU、Swish 等)

Tokenizer

Tokenizer分词算法是NLP大模型最基础的组件,基于Tokenizer可以将文本转换成独立的token列表,进而转换成输入的向量成为计算机可以理解的输入形式。

根据不同的切分粒度可以把tokenizer分为:

  1. 基于词的切分,基于字的切分和基于subword的切分。 基于subword的切分是目前的主流切分方式。
  2. subword的切分包括: BPE(/BBPE), WordPiece 和 Unigram三种分词模型。其中WordPiece可以认为是一种特殊的BPE。
  3. 完整的分词流程包括:文本归一化,预切分,基于分词模型的切分,后处理。
  4. SentencePiece是一个分词工具,内置BEP等多种分词方法,基于Unicode编码并且将空格视为特殊的token。这是当前大模型的主流分词方案。
分词方法 典型模型
BPE GPT, GPT-2, GPT-J, GPT-Neo, RoBERTa, BART, LLaMA, ChatGLM-6B, Baichuan
WordPiece BERT, DistilBERTMobileBERT
Unigram AlBERT, T5, mBART, XLNet

LoRA 微调

LoRA:Low-Rank Adaptation of Large Language Models(低阶自适应参数高效微调 )。

基本原理是冻结预训练好的模型权重参数,在冻结原模型参数的情况下,通过往模型中加入额外的网络层,并只训练这些新增的网络层参数。由于这些新增参数数量较少,这样不仅 finetune 的成本显著下降,还能获得和全模型微调类似的效果。

参考

  1. https://zhuanlan.zhihu.com/p/535100411
  2. https://zhuanlan.zhihu.com/p/1911115248053755995
  3. https://yuluo-yx.github.io/blog/deep-learn-init/#分类问题引入
  4. https://yuluo-yx.github.io/docs/LLMs-AI-llms-what-token/#分词器原理
相关推荐
亿坊电商11 小时前
AI数字人交互系统架构全解析:从多模态输入到实时渲染的闭环设计!
人工智能·系统架构·交互
热点速递11 小时前
AI成广告新引擎:从百度、快手到Meta,智能技术如何拯救互联网广告下滑!
人工智能·百度
fishfuck11 小时前
MMEvol: Empowering Multimodal Large Language Models with Evol-Instruct
人工智能·语言模型·自然语言处理
技术支持者python,php11 小时前
USB摄像头采集数据
人工智能·c#
言之。11 小时前
豆包手机AI Agent技术深度解析
人工智能·智能手机
IT_陈寒11 小时前
Java并发编程避坑指南:从volatile到ThreadLocal,8个实战案例解析线程安全核心原理
前端·人工智能·后端
whaosoft-14312 小时前
51c自动驾驶~合集61
人工智能
拭心12 小时前
转型 AI 工程师:重塑你的能力栈与思维
大数据·人工智能
数据饕餮12 小时前
Agent智能体的搭建与应用02:智能体类型划分标准、类型和案例
人工智能·agent·智能体
weixin_4231961712 小时前
# Python 深度学习 初始化(超参数、权重、函数输入列表)避坑指南:None 占位、可变共享与工厂函数
人工智能·深度学习