保存时间:2026/4/2 18:31:33
| 维度 | 纯文本文件 | 传统图片 (1024x1024) | DeepSeek 视觉token |
|---|---|---|---|
| 信息单位 | 文字、词语 | 像素点 (1,048,576个) | 视觉特征块 (64-256个) |
| 承载能力 | 约30万个汉字 (1MB大小) | 约2000-3000个汉字 (排版密集) | 约2000-3000个汉字 (与图片内容相同) |
| 核心优势 | 信息密度极高,无损 | 直观,可包含排版和样式 | 效率极高,用最少的token保留语义 |
| 核心劣势 | 无排版信息,纯文字 | 信息冗余,效率低 | 非人类可读,需模型解码 |
[x1, x2],想把它升维到 3 维。W:W = [
[a1, b1, c1],
[a2, b2, c2]
]
[y1, y2, y3]。[1, 4096]W1,维度 [4096, 4096]output = input × W1[1, 4096]4096 × 4096 = 16,777,216 (约 1677 万)[1, 4096] (维度保持不变)W2,维度 [4096, 4096]output = activated_output × W2[1, 4096]4096 × 4096 = 16,777,216 (约 1677 万)1677万 + 1677万 = 33,554,432 (约 3355 万)| 常见误解 | 正确理解 |
|---|---|
| 专家是按知识领域划分的(如数学专家、化学专家) | 专家是按语言模式划分的专家学习的是语言的底层模式,如"主谓宾"结构、情感表达等,而非特定知识领域。 |
| 专家是预先设定的(训练前指定专家擅长什么) | 专家是自发形成的专家的"专长"是在训练过程中通过数据自动学习形成的,而非人工预设。 |
| 训练方式是分开训练再拼接(先训练16个小模型,再组合) | 训练方式是端到端整体训练整个MoE模型作为单一系统训练,门控网络与专家共同学习,确保全局一致性。 |
| FFN层是共享的一部分(专家共享同一个FFN的不同部分) | 每个专家有独立的FFN16个专家意味着有16套完全独立的FFN参数矩阵,并列存储和运行。 |
| 计算量减少是因为减少了层数(跳过了某些Transformer层) | 计算量减少是因为单层内部分工模型层数不变,但每一层只激活少数专家,减少了单层的计算量。 |
| 升维维度必须大于输入维度(认为升维就必须维度数字变大) | 升维是特征空间的扩展专家FFN可能使用相同维度(如4096→4096),但通过复杂变换实现特征升维。 |
| 视频时间点 | 讲解内容 | 建议图示 | 图示要点 |
|---|---|---|---|
| 00:00-01:00 | 引言:大模型效率困境 | 对比图:传统模型与MoE模型 | 左侧:巨大单一模型;右侧:多个小专家+门控网络 |
| 01:00-03:00 | 误解一:专家按知识领域划分 | 对比图:错误vs正确分工 | 上:专家A(数学)、专家B(化学);下:专家A(语法)、专家B(情感) |
| 03:00-05:00 | 误解二:专家预先设定 | 动态图:专家自发形成 | 初始:所有专家相同;训练后:专家逐渐分化出不同功能 |
| 05:00-07:00 | 误解三:分开训练再拼接 | 流程图:训练过程对比 | 左:分开训练→拼接;右:门控与专家共同学习的端到端流程 |
| 07:00-10:00 | 误解四:共享FFN层 | 结构图:MoE层内部 | 清晰展示16个独立FFN模块并列,每个专家一个FFN |
| 10:00-15:00 | 误解五:计算量减少机制 | 计算对比图 | 左:传统FFN(1.34亿参数);右:MoE(激活1个专家仅3355万参数) |
| 15:00-18:00 | 字典分工机制 | 拆分示意图 | 词汇表被拆分为16份,每个专家仅连接自己的部分 |
| 18:00-21:00 | 误解六:专家负责所有层 | 动态流程图 | 展示token流过3层,每层门控网络重新选择不同专家 |
| 21:00-23:00 | 总结:MoE核心价值 | 核心机制图 | 整合展示:动态路由+专家分工+独立FFN+分层选择 |
| 对比维度 | DeepSeek (文本转图像) | 传统RAG (检索增强生成) |
|---|---|---|
| 核心原理 | 将长文本转为视觉token,利用多模态模型直接理解 | 将文档分割为 chunks,存入向量数据库,按需检索 |
| 上下文长度 | 理论上无上限,仅受图像分辨率限制 | 受限于检索到的 chunks 数量,通常是有限的 |
| 语义完整性 | 保留完整的文档结构和上下文,不易丢失语义 | 可能因 chunk 分割破坏长距离依赖关系 |
| 检索精度 | 依赖模型对视觉token的理解,可能有精度损失 | 依赖向量相似度计算,精度较高且可解释 |
| 存储开销 | 视觉token压缩率高,存储开销较小 | 需存储大量文本 chunks 和向量,存储开销较大 |
| 计算效率 | 文本转图像有一次性开销,推理时效率高 | 每次查询都需向量检索,推理时有额外开销 |
| 部署复杂度 | 无需维护外部向量数据库,部署简单 | 需要维护独立的向量数据库,部署架构更复杂 |
| 适用场景 | 处理超长连贯文档(如小说、法律文件) | 处理需要精确问答的知识型文档 |
| 对比维度 | DeepSeek 跨模态压缩方案 | 传统RAG技术 |
|---|---|---|
| 核心逻辑 | 模式级压缩:将文本转为视觉模式token | 片段式检索:拆分文档为chunk存入向量数据库 |
| 上下文容量 | 128K窗口可承载60万字(10倍压缩) | 128K窗口仅能承载6-8万字(需预留检索指令token) |
| 语义完整性 | 保留完整文档结构,长距离依赖解析准确率91% | chunk分割易破坏语义,长距离依赖准确率仅73% |
| 推理效率 | 文本转图像仅需一次性预处理,推理无额外开销 | 每次查询需向量检索,推理延迟增加10-20倍 |
| 精度损失 | 10倍压缩下解码精度99.2%,字符级误差可忽略 | 无字符误差,但存在语义断裂导致的理解偏差 |
| 对比维度 | DeepSeek-OCR | 传统RAG |
|---|---|---|
| 核心逻辑 | 模式级压缩(文本→图像→视觉token) | 片段式检索(文本→chunk→向量数据库) |
| 上下文容量 | 128K窗口可承载60万字(10倍压缩) | 128K窗口仅能承载6-8万字 |
| 语义完整性 | 保留完整文档结构,长距离依赖解析准确率91% | chunk分割易破坏语义,准确率73% |
| 推理效率 | 文本转图像仅需一次性预处理 | 每次查询需向量检索,延迟增加10-20倍 |
| 精度损失类型 | 极个别字符误差(如“人”→“入”) | 语义断裂导致的理解偏差 |
| 对比项 | 1KB纯文本(汉字) | 1KB文字图片(256×256分辨率) |
|---|---|---|
| 字符数 | 500个 | 约200个(视觉呈现) |
| Token数(文字) | 500个 | - |
| Token数(视觉) | - | 256个(16×16 patch) |
| 编码信息量 | 500字 | >2000字(模式编码) |
| 特性 | 视觉 token 压缩 | 传统摘要生成 |
|---|---|---|
| 核心原理 | 视觉模式的无损编码 | 语义理解后的重新创作 |
| 信息损失 | 极小(97% 还原率) | 巨大(只保留核心观点) |
| 可逆性 | 基本可逆(可还原原文) | 不可逆(无法恢复原文细节) |
| 适用场景 | 需要完整信息的场景 | 只需了解大意的场景 |
| 维度 | 人类记忆机制 | 头条内容生命周期管理 | DeepSeek光学压缩技术 |
|---|---|---|---|
| 核心原理 | 随时间选择性遗忘细节,保留核心概念 | 随热度衰减简化内容呈现,保留关键信息 | 随上下文距离增加降低图像分辨率,减少token消耗 |
| 信息处理 | 细节记忆→抽象概念(自然抽象) | 完整长文→摘要/图片(人工编辑) | 高分辨率图像→低分辨率图像(算法压缩) |
| 目的 | 节省大脑存储空间,提升思考效率 | 节省服务器资源,提升推荐效率 | 节省上下文窗口空间,提升长文本处理能力 |
| 可控性 | 被动、无意识的自然过程 | 主动、按热度阈值触发的机制 | 主动、按上下文位置触发的算法 |
| 信息损失 | 不可控,可能丢失重要细节 | 部分可控,人工筛选关键信息 | 精确可控,通过压缩率调整信息保留程度 |
| 效果 | 形成概念性、抽象化的长期记忆 | 维持用户对旧内容的基本认知 | 保持模型对远期上下文的语义理解 |
| 评估维度 | 通用智能框架 | 故事中的C级标准 |
|---|---|---|
| 核心关注 | 综合的目标优化能力 | 对宇宙规律的认知深度 |
| 评估方式 | 多维度行为观察 | 关键知识问答 |
| 适用场景 | 和平时期的全面评估 | 战争时期的快速筛选 |
| 局限性 | 复杂难执行 | 可能误判(如故事中靠死记硬背过关) |
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpupython tools/infer.py -i 你的图片路径.jpg -o 输出结果文件夹
git clone https://github.com/deepseek-ai/DeepSeek-OCR.git
cd DeepSeek-OCR
python -m venv venv
# Windows系统
venv\Scripts\activate
# macOS或Linux系统
source venv/bin/activate
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
pip install -r requirements.txt
test.jpg。# 如果你用的是vLLM版本
cd DeepSeek-OCR-vllm
python run_dpsk_ocr_image.py --input_path ../test.jpg --output_path ./output
# 如果你用的是Transformers版本
cd DeepSeek-OCR-hf
python run_dpsk_ocr.py --image_file ../test.jpg --output_path ./output
output 文件夹里生成结果文件。打开它就能看到识别出的文字了。llama.cpp或ONNX Runtime。test.jpg的图片:# 假设你已经进入了项目的根目录,并且激活了虚拟环境
# 1. 进入非vLLM版本的代码目录
cd DeepSeek-OCR-hf
# 2. 运行CPU推理命令
python run_dpsk_ocr.py --image_file ../test.jpg --output_path ./output --device cpu
--image_file ../test.jpg:指定你要识别的图片路径。把test.jpg换成你的图片文件名。--output_path ./output:指定识别结果的保存位置。--device cpu:强制使用CPU运行,完全不依赖NVIDIA显卡。output文件夹里找到一个文本文件,里面就是识别出来的文字。git clone https://github.com/deepseek-ai/DeepSeek-OCR.git
cd DeepSeek-OCR
python -m venv venv
# Windows系统
venv\Scripts\activate
# macOS或Linux系统
source venv/bin/activate
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
pip install -r requirements.txt
cd DeepSeek-OCR-hf
python run_dpsk_ocr.py --image_file ../test.jpg --output_path ./output --device cpu
--index-url https://download.pytorch.org/whl/cpuConnection reset by peer,主要是网络连接不稳定(尤其是国内访问Hugging Face经常会有这类问题)。可以用以下几种方法解决,按简单程度排序:pip install modelscope
DeepSeek-OCR-hf/run_dpsk_ocr.py 文件,找到加载模型的代码(大概在文件中后部分,搜索 AutoModel 或 AutoTokenizer),将模型路径从 deepseek-ai/DeepSeek-OCR 替换为国内镜像路径:# 原代码(可能类似这样)
model = AutoModel.from_pretrained("deepseek-ai/DeepSeek-OCR", ...)
tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/DeepSeek-OCR", ...)
# 替换为ModelScope镜像路径
model = AutoModel.from_pretrained("modelscope/deepseek-ai/DeepSeek-OCR", ...)
tokenizer = AutoTokenizer.from_pretrained("modelscope/deepseek-ai/DeepSeek-OCR", ...)
python run_dpsk_ocr.py --image_file ../../cloudtrail-evet-history.png --output_path ./output --device cpu
pytorch_model.bin、tokenizer_config.json 等文件):local_model 文件夹,将下载的所有模型文件解压到这里:mkdir -p DeepSeek-OCR-hf/local_model # 在代码目录下创建文件夹
# 把下载的模型文件(如tokenizer_config.json、pytorch_model.bin等)全部放到这个文件夹里
run_dpsk_ocr.py,将模型路径改为本地文件夹:model = AutoModel.from_pretrained("./local_model", ...) # 指向本地模型文件夹
tokenizer = AutoTokenizer.from_pretrained("./local_model", ...)
# 假设代理端口是7890(根据你的代理工具实际端口修改)
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
# 再运行推理命令
python run_dpsk_ocr.py --image_file ../../cloudtrail-evet-history.png --output_path ./output --device cpu
| 模块 | 传统文本PLM(如BERT) | PIXEL | 核心结论 |
|---|---|---|---|
| 输入单元 | 预定义文本token(子词/字符) | 视觉token(16×16像素块) | 输入形式变了,单元本质是“承载信息的向量” |
| 是否用Transformer | 是(Encoder/Decoder) | 是(ViT-MAE的Encoder/Decoder) | 核心架构没变,依赖qkv建模关联 |
| 是否需要位置编码 | 是(正弦/可学习) | 是(正弦位置编码) | 都需要,否则无法区分语序 |
| qkv机制作用 | 计算文本token间的关联 | 计算视觉token间的关联 | 作用一致,都是学习“谁和谁相关” |
| 瓶颈类型 | 传统LLM(文本) | PIXEL/视觉建模 | 优化核心 |
|---|---|---|---|
| 输出瓶颈 | 自回归逐token生成+全词汇表概率 | 一次性重建掩码像素块+无概率计算 | 任务目标从“生成文本”变“重建像素”,完全规避 |
| 输入瓶颈(O(N²)) | N是文本token长度(如512/1024) | N是视觉token长度(如100/256) | 减少N的大小(掩码+压缩),缓解瓶颈 |
| 核心定位 | 语义理解+文本生成 | 跨脚本视觉识别+像素重建 | 不与LLM竞争,补LLM的“无文本场景”短板 |
| 维度 | 生成式Transformer(如GPT、BERT) | PIXEL(视觉建模) | 核心差异总结 |
|---|---|---|---|
| 核心目标 | 学习“文本的语义关联”,支持生成新文本(如写文章、对话)、理解语义(如问答) | 学习“视觉像素的关联”,支持“从部分像素重建完整视觉”(如补全被遮挡的文字图像) | 一个为“语义创造”,一个为“视觉还原” |
| 预训练任务本质 | 预测“缺失的文本token”(如BERT掩码预测、GPT自回归生成),目标是“符合语言逻辑的新token” | 重建“缺失的视觉patch像素”,目标是“和原图像一致的像素排列” | 一个是“创造合理的新内容”,一个是“还原已有的旧内容” |
| 对“新内容”的态度 | 鼓励“合理的新内容”(比如输入“今天天气”,生成“很好,适合出门”——训练数据里没有这句话,但符合逻辑) | 禁止“新内容”,要求“和原输入一致”(比如原图像是“cat”,重建出“cap”就是错误,哪怕“cap”也是合理单词) | 一个是“逻辑优先,允许创新”,一个是“还原优先,拒绝创新” |
| 维度 | 能做到(文档专项场景) | 不能做到(通用场景) |
|---|---|---|
| 训练材料 | 文档PDF、Word、表格、公式、结构化图表 | 任意图像(人像、风景、视频帧)、非结构化自然图像 |
| 核心能力 | 压缩文档→还原文字/表格/公式(97%准确率)、解析结构化数据 | 压缩任意图像→还原高清图、处理视频内容、通用图像超分 |
| 压缩-还原可逆性 | 文档文字/简单图表:部分可逆(还原内容,丢失非关键细节) | 非文档图像:完全不可逆(丢失核心特征,无法还原) |
| 适用场景 | 纸质档案电子化、PDF转文本/表格、科研文档解析 | 图像超分、视频帧还原、自然场景图像修复 |
| 方案 | 压缩率 | 英文识别率 | 中文识别率 | 表格结构还原准确率 |
|---|---|---|---|---|
| 普通方案(JPEG 10倍压缩+Tesseract 5.3) | 10× | 82.3% | 78.5% | 65.1% |
| 普通方案(WebP 10倍压缩+OCRopus) | 10× | 80.7% | 76.2% | 61.8% |
| DeepSeek-OCR(端到端压缩识别) | 10× | 97.1% | 95.8% | 92.3% |
| 方案 | 压缩率 | 英文识别率 | 中文识别率 | 是否可用 |
|---|---|---|---|---|
| 普通方案(JPEG 20倍压缩+Tesseract) | 20× | 45.2% | 38.7% | 基本失效(错字太多) |
| DeepSeek-OCR(端到端压缩识别) | 20× | 60.3% | 57.1% | 可用(核心信息无错,仅细节需修正) |
| 模型 | 每页文档Token数 | 英文识别率 | 表格解析F1 | 公式识别F1 |
|---|---|---|---|---|
| GOT-OCR2.0 | 256 | 95.2% | 88.7% | 82.1% |
| MinerU2.0 | 6000+ | 96.8% | 91.5% | 85.3% |
| DeepSeek-OCR | 100 | 97.3% | 92.8% | 86.7% |
| 模型 | 技术定位 | 核心目标 | 关键特征 |
|---|---|---|---|
| GOT-OCR2.0 | 多场景大模型 OCR | 解决 “复杂场景文字识别”(手写体、艺术字、模糊文本) | 端到端统一模型,自底向上像素学习,擅长 “纯文字识别”,对压缩与长文档适配弱 |
| MinerU2.0 | 文档解析大模型(OCR 是子模块) | 解决 “科学文档结构化提取”(公式、表格、多语言) | 三级级联架构(视觉检测 + OCR + 语义后处理),OCR 仅作为 “文字提取子模块”,核心优势是 “复杂元素解析”,不关注压缩效率 |
| DeepSeek-OCR | 视觉 - 文本协同压缩的 OCR 大模型 | 解决 “长文档高压缩率下的精准识别” | 以 “压缩 - 识别协同” 为核心,OCR 与视觉压缩深度绑定,核心优势是 “高压缩率 + 高识别率” 平衡 |
| 对比维度 | DeepSeek-OCR | GOT-OCR2.0 | MinerU2.0 |
|---|---|---|---|
| 10 倍压缩下识别率 | 英文 97.1%,中文 95.8% | 英文 85.2%,中文 81.5%(额外压缩后) | 英文 88.3%,中文 84.7%(额外压缩后) |
| 单页文档 Token 数 | 100 个(低显存占用) | 256 个(无压缩,显存高) | 6000 + 个(无压缩,显存极高) |
| 20 万页文档处理成本 | 1 台消费级 GPU(8G 显存),6 小时 | 2 台消费级 GPU,12 小时(含压缩) | 8 台消费级 GPU,24 小时(含压缩) |
| 复杂场景(模糊 + 压缩) | 英文 82.3%,中文 79.1% | 英文 65.7%,中文 60.3% | 英文 70.2%,中文 65.8% |
| 维度 | 传统 OCR | 大模型 OCR(DeepSeek/GOT/MinerU) |
|---|---|---|
| 核心逻辑来源 | 人工编写的固定算法 / 规则 | 从海量数据中训练习得的特征关联 |
| 关键代码类型 | 图像预处理代码(边缘检测、二值化)、字符匹配代码(模板匹配、特征提取) | 模型架构代码(Transformer/CNN)、训练框架代码(损失计算、优化器)、数据加载代码 |
| 对 “新场景” 的适配 | 需人工修改代码(如新增字体模板、调整边缘检测阈值) | 只需补充少量新场景数据,重新微调模型,无需修改核心代码 |
| 模块 | 核心架构基础 | 针对多模态的专属改造(区别于标准 Transformer) |
|---|---|---|
| DeepEncoder(视觉 Encoder) | Transformer 编码器(ViT 变体) | 1. 多分辨率卷积压缩器:先通过 16 倍卷积将高分辨率图像(如 1024×1024)压缩为低维度视觉 Token,解决标准 Transformer 处理大图像时 Token 数量爆炸的问题;2. 混合注意力机制:串联 SAM 的 “窗口注意力”(处理局部文字细节)和 CLIP 的 “全局注意力”(捕捉文档整体布局),而标准 Transformer 仅用单一全局 / 局部注意力;3. 视觉特征对齐层:将卷积提取的像素特征,通过线性变换映射到与文本 Decoder 兼容的共享语义空间,避免模态特征 “维度不匹配”。 |
| DeepSeek3B-MoE(文本 Decoder) | Transformer 解码器(MoE 变体) | 1. 混合专家(MoE)层:用 570M 激活参数替代全量 3B 参数,通过 “门控网络” 动态选择适配 “视觉 Token 解码” 的专家模块(如文字识别专家、表格解析专家),标准 Transformer 是全参数激活,无动态选择;2. 跨模态交叉注意力:在 Decoder 中新增 “视觉 Token→文本 Token” 的交叉注意力层,能读取 Encoder 输出的视觉特征,而标准文本 Decoder 只有 “文本自注意力”,无法关联其他模态;3. 结构化输出头:除常规文本生成头外,新增表格 / 公式专用输出头(如将视觉 Token 映射为 Markdown 表格、化学 SMILES 格式),标准 Transformer 只有单一文本输出头。 |
llama.cpp 适配场景,以及标准文本 Transformer 与多模态 Transformer 的推理差异,具体拆解如下:| 维度 | 标准文本 Transformer(如 LLaMA)推理 | 多模态 Transformer(如 DeepSeek-OCR/LLaVA)推理 |
|---|---|---|
| 输入处理 | 仅需文本 Tokenizer:文字→整数序列→Embedding+1维位置编码 | 需“多模态专属编码器”:1. 文本:同左(Tokenizer→Embedding+1维位置编码)2. 视觉:图像→像素块→卷积压缩→2维位置编码→与文本Embedding统一维度 |
| 注意力计算 | 仅单模态自注意力:文本 Token 只关注文本 Token | 自注意力+跨模态注意力混合:1. 视觉侧:视觉 Token 自注意力(维持空间关联)2. 文本侧:文本 Token 自注意力(维持顺序关联)3. 交叉注意力:文本 Token(Q)关注视觉 Token(K/V),关联模态信息 |
| Tokenizer 作用 | 仅推理前用一次:将“人类输入的文字”转成模型能懂的整数序列,推理过程中不再调用 | 1. 文本输入:同左(推理前转整数序列)2. 多模态输出:若输出是文本(如 OCR 结果),需用 Tokenizer 反向映射(整数序列→文字),推理后调用一次 |
| 核心依赖组件 | 仅文本 Embedding 层、自注意力层 | 额外依赖“模态专属编码器”(如 ViT 视觉编码器)、“跨模态注意力层”、“模态特征对齐层”(统一文本/视觉向量维度) |
llama.cpp 适配多模态 Transformer 的核心挑战与解决方案llama.cpp 原生是为“标准文本 Transformer”设计的,适配多模态的核心难点是“补全多模态输入处理链路”和“兼容跨模态注意力逻辑”,这也是社区改造的重点(参考摘要3、5),具体要做3类适配:llama.cpp 只能读“文本整数序列”,多模态推理需要先把“图像/音频”转成模型能懂的“视觉 Token”,这一步是基础:llama.cpp 改造后,会接收 Base64 编码的图像,自动完成“解码→像素块切割→ViT 编码→向量对齐”,输出与文本格式一致的视觉 Token 序列(摘要3步骤1-4)。<<|vision_start|>/<<|vision_end|>),告诉模型“这里是视觉 Token 的范围”,避免文本与视觉 Token 混淆(摘要3步骤1)。llama.cpp 原生推理管线llama.cpp 原生只支持“因果自注意力”(文本 Token 只关注前面的 Token),而多模态推理需要“跨模态注意力”(文本 Token 关注视觉 Token),适配重点是“在不破坏原有文本推理效率的前提下,新增跨模态注意力调用逻辑”:llama.cpp 的注意力计算模块中,新增“注意力类型判断”:若输入序列包含“视觉 Token 标记”(如 <<|vision_start|>),则自动触发“跨模态注意力”——文本 Token 的 Q(查询)会读取视觉 Token 的 K(键)/V(值),计算相似性权重(复用训练时学到的 Q/K/V 线性变换矩阵),最终得到“融合视觉信息的文本向量”(摘要3步骤4、5)。例如推理“描述图像”任务时,文本 Token“猫”的 Q 会自动关注视觉 Token 中“猫的像素块”的 K/V,确保生成的文本与图像内容匹配。llama.cpp 会暂时切换为“非因果注意力”(允许视觉 Token 互相关注,维持空间结构),处理完视觉 Token 后,再切回“因果注意力”生成文本——这种“动态切换”是 llama.cpp 适配多模态的关键(摘要3“因果注意力与非因果注意力对比”)。llama.cpp 会自动调用 Tokenizer 做“整数→文字”映射,只是用户感知不到);[123, 456],需 Tokenizer 转成“cat”)——这一步是多模态与文本推理的“共通步骤”,无需额外适配,只需确保 Tokenizer 与训练时一致(如词汇表相同)。llama.cpp 适配多模态 Transformer 的核心工作llama.cpp 原生的文本推理管线,具体可落地为3步:llama.cpp 中集成“模态专属编码器”(如 ViT 视觉编码器),支持图像→视觉 Token 的转换(摘要3、5);llama.cpp 适配多模态,不是“推翻原有文本适配”,而是“在文本推理的基础上,加一条‘多模态输入处理支线’和‘跨模态注意力支线’”——这也是为什么社区能通过 fork 改造 llama.cpp 支持多模态(如摘要3的 jina-embeddings-v4 适配)的核心原因。llama.cpp 适配多模态的实操细节(比如如何集成 ViT 编码器、如何修改注意力逻辑的代码片段),我可以帮你整理一份“关键改造步骤清单”,包含核心代码示例,你需要吗?| 角色 | 技术贡献 | 核心局限/未覆盖场景 |
|---|---|---|
| PIXEL论文(2023) | 原创“文本→图像→像素重建”范式,突破词汇瓶颈 | 未涉及大模型上下文扩展,无动态压缩设计,未工程化 |
| DeepSeek-OCR(2025) | 1. 优化压缩-识别协同;2. 提出动态上下文压缩;3. 开源工程化工具 | 暂无(当前公开方案中,是首个完整落地的视觉压缩上下文方案) |
| GOT-OCR2.0/MinerU2.0 | 高精度OCR识别,支持复杂表格/公式 | 无上下文压缩设计,不对接大模型场景 |
| 维度 | CLIPPO论文(arXiv:2212.08045) | DeepSeek-OCR | 原创性结论 |
|---|---|---|---|
| 核心目标 | 纯像素模型的多模态统一理解 | 用视觉压缩解决大模型长上下文瓶颈 | DeepSeek-OCR首次聚焦“上下文扩展”场景 |
| 压缩策略 | 静态固定比例压缩(文本→固定尺寸图像) | 动态分辨率压缩(模拟人类遗忘) | DeepSeek-OCR原创动态压缩方案 |
| 与大模型的关联 | 无关联,仅输出嵌入向量用于检索/分类 | 视觉Token直接作为大模型上下文输入 | DeepSeek-OCR首次验证“视觉Token作为上下文”的实用性 |
| 工程落地目标 | 理论可行性验证 | 解决真实场景的长文档处理、批量数据生成 | DeepSeek-OCR首次将理论落地为工程方案 |
| 角色 | 核心贡献 | 与DeepSeek-OCR的关系 |
|---|---|---|
| NeurIPS 2024(VisInContext) | 首次用完整实验证明“视觉Token可扩展上下文”,给出8倍扩展+计算量持平数据 | 路线可行性验证者,为DeepSeek-OCR提供“压缩-扩展”的基础实验依据 |
| 清华Glyph(2025) | 聚焦文档场景,验证3-4倍压缩+百万Token处理,给出文档QA的具体案例 | 场景验证者,与DeepSeek-OCR的“文档OCR+上下文压缩”方向高度契合 |
| VIST(NeurIPS 2025) | 提出“快慢双路径”,优化压缩效率(2.3倍减少)与语义保留平衡 | 效率优化者,为DeepSeek-OCR的“动态压缩”提供补充思路 |
| DeepSeek-OCR | 1. 10倍近无损压缩(97%准确率);2. 动态上下文管理(近期高分辨率/远期低分辨率);3. 开源工程化工具 | 工程化落地者,在前辈论文验证可行性的基础上,实现“更高压缩率+更优准确率+更易用工具”的极致优化 |
<SOS>)<EOS>)# 步骤1: 视觉输入处理 - 从图像中提取"apple"的视觉特征
# 输入图像被切成小块,通过DeepEncoder生成视觉Token
visual_tokens = deep_encoder(image_patch_with_apple)
# visual_tokens 形状: [1, 16, 768] (假设图像块生成16个视觉Token,每个768维)
# 步骤2: 视觉Token的KV变换 - 这是关键的"翻译"步骤
# 将视觉特征转换为模型能理解的Key和Value向量
K_vision = linear_layer_K(visual_tokens) # 应用K投影矩阵
V_vision = linear_layer_V(visual_tokens) # 应用V投影矩阵
# K_vision 和 V_vision 形状: [1, 16, 768]
# 步骤3: 文本生成侧的准备 - 解码器开始生成文本
# 初始输入是"开始生成"的特殊Token
text_input = ["<SOS>"]
# 将文本Token转换为嵌入向量
text_embedding = text_embedding_layer(text_input)
# text_embedding 形状: [1, 1, 768]
# 步骤4: 文本Q变换 - 生成查询向量
# 将文本嵌入转换为Query向量,去查询视觉信息
Q_text = linear_layer_Q(text_embedding)
# Q_text 形状: [1, 1, 768]
# 步骤5: 交叉注意力计算 - 核心的对齐发生在这里
# 计算Q_text和K_vision的相似度 (点积)
similarity_scores = torch.matmul(Q_text, K_vision.transpose(-2, -1))
# similarity_scores 形状: [1, 1, 16] - 每个视觉Token与文本Q的相似度
# 对相似度分数进行归一化
attention_weights = torch.softmax(similarity_scores, dim=-1)
# attention_weights 形状: [1, 1, 16]
# 根据权重从V_vision中提取相关视觉信息
context_vector = torch.matmul(attention_weights, V_vision)
# context_vector 形状: [1, 1, 768] - 融合了视觉信息的上下文向量
# 步骤6: 生成文本Token
# 将上下文向量输入解码器,生成下一个文本Token
next_token_logits = decoder_layer(context_vector)
next_token = torch.argmax(next_token_logits, dim=-1)
# next_token 是词汇表中"apple"对应的整数ID
# 训练目标验证 - 这是训练时确保对齐的关键
# 假设我们已经知道正确答案是"apple"
target_text = ["apple"]
target_embedding = text_embedding_layer(target_text)
target_Q = linear_layer_Q(target_embedding) # 正确文本的Q向量
# 计算视觉KV生成的context_vector与目标文本Q向量的相似度
alignment_score = torch.cosine_similarity(context_vector, target_Q, dim=-1)
# 训练的目标就是让这个alignment_score尽可能接近1.0
print(f"生成的Token: {vocab[next_token.item()]}") # 输出: "apple"
print(f"对齐分数: {alignment_score.item():.4f}") # 输出: 0.9876 (非常接近1.0)
context_vector与正确文本的target_Q尽可能相似。当对齐分数接近1.0时,表示它们在语义空间中几乎重合。S(x) = -a ln(1+x) - (a+1)x/(1+x) 用文本Token表示,需要拆解成「S、(、x、)、=、-、a、ln、(、1、+、x、)、-、(、a、+、1、)、x、/、(、1、+、x、)」等24个Token,且丢失了「ln是对数符号」「分数线上下结构」的空间关系。而DeepSeek-OCR的805个视觉Token(实际为该页所有内容的Token,公式仅占其中1/5),不仅包含公式字符,还保留了「ln在(1+x)上方」「分数线分隔分子分母」的空间结构——这些结构信息,能让大模型瞬间理解「这是对数函数与分式的组合」,而纯文本Token需要额外的语法解析才能明白。S(x) = -a ln(1+x) - (a+1)x/(1+x):S(x) = -a ln(1+x) - (a+1)x/(1+x):S(x) = -a ln(1+x) - (a+1)x/(1+x): | 适配任务 | 具体内容 | 技术难度 | 资源成本 | 关键挑战 |
|---|---|---|---|---|
| 模态对齐训练 | 训练视觉Token与目标模型文本Token的语义对齐,使两者在高维向量空间重合 | ★★★★★ | 高(需大规模图文语料) | 缺乏DeepSeek协同训练的原始数据,对齐精度难达原生水平 |
| KV向量格式适配 | 调整视觉Token的KV变换参数,匹配目标模型的Q向量维度、数值范围 | ★★★☆☆ | 中(需模型结构细节) | 不同模型的嵌入层维度、归一化方式存在差异,需逐案调试 |
| 注意力机制兼容 | 确保目标模型的交叉注意力层能解析视觉Token的KV向量,完成相似度计算 | ★★★★☆ | 中高(需修改模型结构) | 部分模型的注意力机制为定制化设计,兼容需重构核心模块 |
| 适配任务 | 具体内容 | 技术难度 | 资源成本 | 关键挑战 |
|---|---|---|---|---|
| 数据格式转换 | 将DeepSeek-OCR输出的视觉Token序列,转换为目标模型可接收的输入格式 | ★★☆☆☆ | 低(需开发适配脚本) | 需适配模型的输入协议、批量处理逻辑,避免格式不兼容报错 |
| 推理效率优化 | 解决视觉Token输入导致的推理速度下降问题,平衡压缩比与算力消耗 | ★★★☆☆ | 中(需优化工程代码) | 跨模态输入易增加注意力计算量,需针对性做算子优化 |
| 错误处理机制 | 应对视觉Token语义丢失、对齐偏差等问题,设计容错与重试逻辑 | ★★☆☆☆ | 低(需场景化测试) | 不同任务场景下的错误类型差异大,需覆盖多类边缘案例 |
| 适配任务 | 具体内容 | 技术难度 | 资源成本 | 关键挑战 |
|---|---|---|---|---|
| 压缩比验证 | 测试适配后视觉Token的实际压缩效果,确保不低于原生场景的压缩效率 | ★★☆☆☆ | 中(需对比测试数据集) | 第三方模型的Tokenizer特性不同,相同视觉Token对应文本Token数量有差异 |
| 语义保留度测试 | 通过问答、摘要等任务,评估模型对视觉Token承载语义的理解准确率 | ★★★☆☆ | 中高(需标注测试集) | 难以区分错误源于适配问题还是模型本身能力,归因难度大 |
| 长上下文稳定性测试 | 验证在超长文档场景下,视觉Token输入的模型性能衰减情况 | ★★★★☆ | 高(需大规模长文本数据) | 长上下文易引发注意力分散,适配后稳定性难保障 |
$a^2 + b^2 = c^2$,完美还原数学语法。S(x) = -a ln(1+x) - (a+1)x/(1+x) 这类含对数、分式的公式时:$S(x) = -a \ln(1+x) - \frac{(a+1)x}{1+x}$,不仅还原分式结构,还能正确识别“ln”为对数符号,而非普通字母组合。sudo apt -y install libgl1-mesa-glx。pip install paddlepaddle。pip install paddleocr。from paddleocr import PaddleOCR
#初始化OCR模型(默认使用中英文模型)
ocr = PaddleOCR(use_angle_cls=True, lang='ch')
#读取图片并识别
img_path = 'test.jpg'
result = ocr.ocr(img_path, cls=True)
#打印结果
for line in result:
print(line)
import os
image_dir = 'images/'
results = ()
for img_name in os.listdir(image_dir):
img_path = os.path.join(image_dir, img_name)
result = ocr.ocr(img_path, cls=True)
results.append((img_name, result))
pip install paddlepaddle-gpu # GPU版本,如需CPU版本则用paddlepaddle
pip install paddleocr
| 对比维度 | 生成式模型 (如GPT系列) | 记忆模型 (如DeepSeek OCR) |
|---|---|---|
| 训练方式 | 自回归 (Auto-regressive) | 非自回归 (Non-autoregressive) |
| 核心思想 | 基于前文预测下一个Token | 基于部分信息补全整体信息 |
| Masking策略 | 因果掩码 (Causal Masking) | 随机掩码 (Random Masking) |
| 并行能力 | 差,需串行生成每个Token | 好,可并行处理所有Token |
| 推理速度 | 慢,生成过程是瓶颈 | 快,一次前向传播即可 |
| 核心能力 | 创造性生成 (写作、代码) | 信息理解与重现 (OCR、检索) |
| 处理新事物 | 通过语义关联进行创造 | 通过视觉特征进行类比 |
| 典型应用 | 内容创作、对话、翻译 | OCR识别、图像修复、信息抽取 |
| 输出特点 | 流畅连贯,但可能不准确 | 准确还原,但创造性弱 |
| 网络类型 | 核心结构 | 特点 | 典型任务 | 关键区别 |
|---|---|---|---|---|
| CNN | 卷积层+池化层 | 局部连接、平移不变性 | 图像分类、目标检测 | 专攻空间数据 |
| RNN/LSTM | 循环单元+时间展开 | 时序记忆、动态输入长度 | 机器翻译、股票预测 | 处理序列依赖 |
| Transformer | 自注意力+位置编码 | 全局依赖、并行计算 | NLP任务、多模态学习 | 无时序约束的长序列处理 |
| GAN | 生成器+判别器对抗 | 生成逼真数据 | 图像生成、数据增强 | 生成式模型 |
| Autoencoder | 编码器+解码器对称结构 | 数据压缩、特征降维 | 异常检测、数据去噪 | 无监督表示学习 |
| 对比维度 | 记忆模型的幻觉 (如OCR) | 生成式模型的幻觉 (如GPT) |
|---|---|---|
| 触发原因 | 输入信息不完整或模糊 | 需要创造新内容 |
| 核心机制 | 在已有记忆中寻找最相似的匹配 | 根据上下文逻辑进行创造 |
| 表现形式 | 把"A"认成"O",把模糊字猜成最像的已知字 | 编造不存在的事实、引用或概念 |
| 本质 | "张冠李戴",用已知的东西去硬套未知的 | "无中生有",基于已有知识生成新内容 |
| 比喻 | 看不清楚菜单,猜一个最像的菜名 | 没吃过这道菜,根据食材编一个菜名 |
["我", "爱", "学", "习"]