🍊 UglyOrange
💻 软件

Texo:仅 20M 参数的 SOTA 级 LaTeX OCR 开源模型

frigidpluto Views: ...
Texo Logo 展示
Texo - 极简主义的 LaTeX OCR 解决方案

搞科研的,免不了要写 LaTex,常写 LaTex 的,免不了会遇到不知道怎么打的公式,再或者有一堆现成的优美公式,想转换成 LaTex 代码。放几年前,这都是很麻烦的事,焦头烂额搞半天还不一定能做来个所以然。比如之前我一直比较纠结的是 $\sum\limits_{i=0}^{\infty} \frac{1}{2^i}$ 这种符号是怎么把下标放到 sum 符号下面的(秘诀在于添加一个 limits,即 \sum\limits)。这样的小问题遇到一次就知道了解决方案,但第一次解决都免不了要一番折腾与测试。

得益于深度学习的发展,以前很繁琐的事情,现在都能让 AI 轻松解决。

本文要介绍的 Texo (读作 /ˈtɛːkoʊ/),为这个问题提供了一个简单易用的解决方案。作为一个仅包含 20M 参数 的轻量级模型,它不仅保持了 SOTA (State Of The Art) 级别的性能,还能直接在浏览器中运行。

核心特性

Texo 的设计理念是“极简”与“实用”,它具备以下显著特点:

  • 极致轻量:仅 20M 参数,推理速度极快。
  • 完全开源:基于 AGPL-3.0 协议,免费且开放。
  • 低门槛训练:无需购买 4090,在消费级 GPU 上即可进行微调或训练。
  • 端侧运行:支持 ONNX 导出,可直接在 浏览器中运行,保护隐私且零延迟。
  • 教程级代码:代码结构组织清晰,不仅是工具,也是学习 OCR 模型开发的绝佳教程。

技术架构与性能表现

Texo 本质上是 PPFormulaNet-S 的蒸馏版本 (Distilled Version),并在 UniMERNet-1M 数据集上进行了微调。这种策略使得 Texo 在大幅减少参数量的同时,最大程度地保留了模型的识别精度。

以下是 Texo 在 UniMERNet-Test 数据集上与主流大模型的对比测试结果:

模型参数量指标SPECPESCEHWE
UniMERNet-T107MBLEU0.9090.9020.5660.883
Edit Dist0.0660.0750.2390.078
PPFormulaNet-S57MBLEU0.86940.8071--
Texo-distill20MBLEU0.90140.89090.70340.8606
Edit Dist0.07800.10420.19410.0995

从数据可以看出,Texo-distill 版本在参数量仅为 UniMERNet-T 五分之一的情况下,BLEU 分数(0.9014)与其(0.909)非常接近,且优于 57M 参数的 PPFormulaNet-S。也就是说,Texo-distill 提速不降质,轻量化带来了速度优势,但对识别准确率影响极小。

注:Texo-distill 使用了与 UniMERNet 相同的 Tokenizer,因此序列指标具备严格可比性。

实测体验非常快,图片上传后,识别完成也就不到一秒钟的时间。

快速上手

Texo 提供了非常现代化的 Python 开发体验,推荐使用 uv 进行包管理。

1. 环境配置

git clone https://github.com/alephpi/Texo
uv sync

2. 模型下载

项目提供了便捷的脚本从 Hugging Face 下载模型:

# 仅下载推理模型
python scripts/python/hf_hub.py pull

# 下载包含训练检查点的完整版(适合需要继续训练的开发者)
python scripts/python/hf_hub.py pull --with_useful_ckpts

3. 推理演示

下载完成后,可以直接运行项目中的 demo.ipynb 文件,体验从图片到 LaTeX 代码的转换过程。

训练指南

对于希望基于 Texo 进行二次开发或微调的研究者,作者提供了详细的训练指引。得益于轻量化的设计,硬件要求非常亲民。

硬件要求

  • 最低配置:20G CPU 内存(配合流式数据加载) + 16G 显存(配合梯度累积)。这意味着高端游戏显卡(如 RTX 4080/4090)即可尝试训练。
  • 推荐配置:50G CPU 内存 + 40G 显存。
  • 作者环境:50G CPU 内存 + NVIDIA A40/L40S (46G)。

数据集准备

Texo 使用 UniMER-1M 数据集。为了方便开发者,作者提供了已经整理和归一化处理后的版本:

启动训练

项目使用 hydra 管理配置,支持灵活的训练启动方式:

# 启动标准训练
python src/train.py

# 从指定检查点恢复训练
python src/train.py training.resume_from_ckpt="<ckpt_path>"

# 调试模式 (快速验证代码)
python src/train.py --config-dir="./config" --config-name="train_debug.yaml"

训练过程的日志和可视化数据(Loss 曲线、BLEU 分数等)会自动保存在 outputs 目录,可通过 TensorBoard 查看。

小结

LaTex 小问题可以直接问 deepseek 或者豆包,但如果你对 LaTeX OCR 项目感兴趣,或者想自己搭建一个轻量级的离线 LaTeX OCR 方案,Texo 绝对值得一试。

资源