【免费下载链接】AnandaSky
AnandaSky 是一个约 6.26 亿参数的视觉语言模型(VLM),专门用于历史汉字体系文献的行级转写。它提升古籍 OCR 识别精度的关键之一,就是MRoPE 三维位置编码:给每个视觉块和文本 token 一套 (t, h, w) 空间坐标,让模型真正"看见"图像的二维布局。本文用最少的公式,讲清 t/h/w 三个方向、通道交错分配与"空间重置"各自起什么作用 🔍
AnandaSky 是什么:6.26 亿参数的古籍转写老将 📜
AnandaSky 采用ViT 视觉编码器 + 基于 Qwen3 的自回归解码器:前者把一行文字图像切成视觉 token 序列,后者逐字生成转写文本。它在从 8 世纪到 20 世纪中国、韩国历史文献(涵盖印刷本与手写稿)中抽取的400 万张行级图像上训练,并支持单栏与双栏的竖排版式。
实测效果(CER 字符错误率,越低越好):
| 测试集 | CER |
|---|---|
| Korean Anthologies(域内) | 0.33% |
| Sibu Congkan(域内) | 0.43% |
| MTHv2(域内) | 0.92% |
| CUHK Challenge 2021(留出基准) | 0.82% |
| ICDAR2019-HDRC(留出基准) | 0.96% |
| Dunhuang Manuscripts(域内) | 1.38% |
| CUHK Challenge 2022(留出基准) | 1.61% |
| Qing Legal Documents(域内) | 4.89% |
完整数据与使用说明见 README.md。
MRoPE 的三个"方向":(t, h, w) 空间坐标
传统文本 Transformer 只能给每个 token 一个一维编号(0, 1, 2, …),但图像天然是二维网格。MRoPE 的答案是把"一个位置"扩展为三个坐标分量:
- t(time / 序列):一维顺序位置
- h(height / 行):token 位于第几行
- w(width / 列):token 位于第几列
AnandaSky 中的赋值规则非常简洁:
| token 类型 | t | h | w |
|---|---|---|---|
| 文本 token | 位置 i | 位置 i | 位置 i |
| 视觉 patch | 0 | 行号(row) | 列号(col) |
文本 token 三个方向取同一个值时,MRoPE精确退化为普通 RoPE,因此解码器与 Qwen3 的纯文本行为完全兼容;而视觉 patch 用 (0, 行, 列) 把二维版面信息写进了位置编码——这正是源码注释中 "2D structure" 的含义,见 modeling_anandasky.py。
64 个"频率槽位"如何分配:RoPE 通道交错
RoPE 的本质是在若干二维子空间里按位置旋转 Q/K 向量,每"一对维度"对应一个频率。AnandaSky 解码器的 head_dim 为 128,因此共有 128/2 =64 对通道。
MRoPE-I(Interleaved,交错式)把每一对通道指派给 t、h、w 三者之一,让单个 token 能同时携带三个方向的位置信息:
- 本次发布的默认配置:config.json 中
mrope_section为null,64 对通道按T, H, W, T, H, W…轮转分配,三个方向各占约 21~22 对; - 可选:也可以通过三元组指定 Qwen3-VL 风格的"分区交错"——H 占用第 1, 4, 7… 对,W 占用第 2, 5, 8… 对,其余归 T。
核心实现在MRoPEInterleavedEmbedding类:modeling_anandasky.py。值得一提的是工程上的优化:三个方向共享同一张 (cos, sin) 频率表,按需取指,避免了各自缓存三张表带来的三倍内存开销。
视觉端:2D RoPE 与"空间重置"技巧
视觉编码器使用 Qwen3-VL 风格的2D RoPE:每个 patch 被换算成以 patch 为单位的网格坐标 (row, col)(patch_size = 10 像素),频率槽位前半段编码行方向、后半段编码列方向,构建过程见 modeling_anandasky.py。
两个细节值得注意:
- 特殊 token 占位:当启用 CLS / register token 时,它们分别取坐标 (0,0) 与 (0, 1..R),patch 网格整体平移 +1 以免冲突,坐标生成逻辑见 _get_patch_coordinates;
- "空间重置"(spatial reset):无特殊 token 时,patch 坐标一律从 (0,0) 开始。也就是说,每张行级图像共享同一坐标系——第 1 张与第 1000 张图的网格完全对齐。模型不必学习"绝对页面位置",只需专注"一行内部的相对布局",这对古籍行级 OCR 极其友好。
视觉 token 随后带着坐标进入解码器,被组装成三维坐标 (t=0, h=行, w=列),见 modeling_anandasky.py。
文本端:为什么生成的文字要"接在图像最远处"
开始逐字生成后,文本 token 继续沿用三维坐标 (t=h=w),但起点不是 0,而是图像 token 的最大坐标 + 1。这个巧妙的一小步避免图文坐标冲突,让模型隐式理解"文本跟在图像之后"的顺序关系;解码阶段 KV cache 也会自动延续这套坐标,见 modeling_anandasky.py。
空间坐标为什么能提升古籍 OCR 精度?
古籍行级图像通常是窄长的竖条:竖排文字"从上到下、从右到左"阅读,一个字是否认识往往取决于上下左右邻字提供的语境。位置编码在这件事上贡献了三份力量:
- 保留二维邻接关系:2D RoPE 直接编码行/列方向的邻近性,同一行、同一列的 patch 天然具有更强的位置相似性,模型可以利用局部版面做字形判断;
- 顺序即坐标:h/w 坐标就是行列号,"阅读顺序"信息被写进了位置编码,降低了形近字的混淆;
- 坐标系对齐:空间重置让所有行图像共享同一坐标框架,对未见过的历史文档(手稿、残损、褪色)泛化更稳。
最终,这套"空间感知"的编码器-解码器组合,让域内测试集 CER 稳定在 0.3%~1.4% 量级,手写与司法文书等更难场景也保持个位数 ✅
快速上手:加载模型与核心文件定位
AnandaSky 依赖FlashAttention与自定义 modeling 代码,加载时需要trust_remote_code=True:
from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained( "badianeai/AnandaSky", trust_remote_code=True, torch_dtype="auto", device_map="auto", )环境要求 Python >= 3.10、PyTorch >= 2.1 与 Ampere 及更新的 NVIDIA GPU,并先执行pip install flash-attn --no-build-isolation安装 FlashAttention。
想深入源码,建议从这几处入手:
- 模型与 MRoPE 完整实现:modeling_anandasky.py
- 图像预处理(pad、归一化、切 patch):inference_processor.py
- 关键超参数(rope_theta = 1e6、mrope_section = null):config.json
- 评测数据与使用示例:README.md
总结
MRoPE 为每个 token 配了一套 (t, h, w) 三维坐标:文本 token 沿用一维顺序,视觉 patch 携带二维行列信息,生成文本从图像最远处接续;再配合"空间重置"的坐标系设计,6.26 亿参数的 AnandaSky 得以稳定读出千年前的窄行文字。如果你也想为自己的视觉语言模型加入二维版面感知,这套"三轴坐标 + 通道交错 + 空间重置"的组合非常值得参考 ✨
【免费下载链接】AnandaSky
相关推荐
终极指南:DeepSeek-OCR Gundam模式如何通过动态裁剪技术提升识别精度
终极指南:DeepSeek OCR Gundam模式如何通过动态裁剪技术提升识别精度 DeepSeek OCR是一款基于上下文光学压缩技术的先进OCR工具,其创
人工智能大模型多模态计算机视觉OCRDeepSeek终极指南:libcimbar色彩空间转换如何将RGB与YUV技术结合,大幅提升条码识别精度
终极指南:libcimbar色彩空间转换如何将RGB与YUV技术结合,大幅提升条码识别精度 libcimbar是一个专为空气间隙数据传输优化的彩色图标矩阵条码系
图像处理通信cnn_captcha性能优化秘籍:如何将识别速度提升300%
cnn_captcha性能优化秘籍:如何将识别速度提升300% cnn_captcha是一个基于TensorFlow实现的卷积神经网络验证码识别项目,专门用于识
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考