pix2tex 如何为自己的公式集生成自定义 tokenizer 并配置训练?
【免费下载链接】LaTeX-OCRpix2tex: Using a ViT to convert images of equations into LaTeX code.项目地址: https://gitcode.com/GitHub_Trending/la/LaTeX-OCR
如果你已经有一份自己的数学公式图像数据集,想基于 pix2tex(LaTeX-OCR,一个用 ViT 将公式图片转换为 LaTeX 代码的模型)训练自己的模型,就需要两步准备工作:为自己的公式集训练一个自定义 BPE tokenizer,然后修改训练配置并启动训练。本文只覆盖这条路径:从公式文本 + 公式图片,到生成 tokenizer、打包数据集、修改配置、开始训练。
前提条件(来自 docs/installation.md 与 README.md):
- Python 3.7+,并已安装 PyTorch;
- 安装训练依赖:
pip install "pix2tex[train]"。
准备你的公式数据
训练入口需要两样东西:一个公式文本文件和一个图片目录。
- 公式文本文件:每行一条 LaTeX 公式(例如项目自带数据中的
math.txt)。 - 图片目录:存放公式渲染出的 PNG 图片。根据 pix2tex/dataset/dataset.py 的实现,程序只读取目录下的
*.png,并用文件名(去掉扩展名)作为整数去公式文本文件中取对应行号作为该图的标签,所以图片文件命名必须是它在公式文本中的行序号(如0.png、1.png……)。 - 图片尺寸会在加载时被过滤:宽高必须落在
min_dimensions(默认 32×32)到max_dimensions(默认 1024×512)之间,超出范围的图片会被丢弃。
如果暂时没有自己的数据,README 提到作者在 Google Drive 上提供了生成的训练数据(formulae.zip 为图片、math.txt 为标签),验证集和测试集用同样的标签文本文件,需要分别重复下面的步骤。
第 1 步:生成自定义 tokenizer
README 给出的命令:
python -m pix2tex.dataset.dataset --equations path_to_textfile --vocab-size 8000 --out tokenizer.json其中path_to_textfile是 README 中的占位写法,替换为你自己的公式文本文件路径。这条命令只传了--equations(没传--images),dataset.py的入口会进入 tokenizer 生成分支:调用 Hugging Facetokenizers库训练一个 BPE 模型,特殊 token 固定为[PAD]、[BOS]、[EOS],--vocab-size控制词表大小(pix2tex/dataset/dataset.py 中该参数默认值也是 8000),结果保存为--out指定的 json 文件。
生成后得到例如tokenizer.json,它就是后面数据集打包和训练配置共用的分词器。
第 2 步:把图片与标签打包成数据集
python -m pix2tex.dataset.dataset --equations path_to_textfile --images path_to_images --out dataset.pkl--images path_to_images:上面那一步中说明的图片目录;--out dataset.pkl:输出的 pickle 数据集文件。
由于第 1 步生成了自定义 tokenizer,这一步要把传给它,README 原文:
To use your own tokenizer pass it via
--tokenizer(See below).
python -m pix2tex.dataset.dataset --equations path_to_textfile --images path_to_images --tokenizer tokenizer.json --out dataset.pklREADME 同时要求:验证集(以及测试集)也要用同样的流程再各生成一份.pkl。
第 3 步:修改训练配置
以模板 pix2tex/model/settings/config.yaml 为基础,README 要求至少改以下几项:
| 配置项 | 模板中的值 | 改成 |
|---|---|---|
data | dataset/data/train.pkl | 你生成的训练集.pkl路径 |
valdata | dataset/data/val.pkl | 你生成的验证集.pkl路径 |
tokenizer | dataset/tokenizer.json | 第 1 步生成的 tokenizer 文件路径 |
num_tokens | 8000 | 你的词表大小(README 明确要求 "setnum_tokensto your vocabulary size") |
注意num_tokens必须与你--vocab-size的取值一致:上面命令用的是 8000,而模板里num_tokens恰好也是 8000,如果你换了一个词表大小,这里必须同步修改。README 说 "Change other hyperparameters if you want to",即其余超参数(batchsize、lr、epochs、max_seq_len等)可按需调整。另外 pix2tex/dataset/dataset.py 中prepare_data会跳过 tokenize 后超过max_seq_len的批次,序列过长的样本不会进入训练。
第 4 步:启动训练
python -m pix2tex.train --config path_to_config_filepath_to_config_file替换为你修改后的 yaml 路径(pix2tex/train.py 中该参数缺省时使用内置的settings/debug.yaml,所以自定义训练应显式传入)。
训练过程中可以这样判断进展(均来自 pix2tex/train.py 的实现):
- 进度条实时显示
Loss: %.4f; - 每隔
sample_freq(模板值为 3000)个 batch,会在验证集上计算 BLEU score、normed edit distance、token accuracy 三项指标;只有 BLEU 和 token accuracy 同时超过历史最佳时才保存最优模型; - 每
save_freq个 epoch(模板值为 5)强制保存一次 checkpoint,文件形如<name>_e<epoch>_step<step>.pth,写入model_path/name目录(模板中model_path: checkpoints、name: pix2tex),并在同目录落一份config.yaml记录本次训练参数。
也就是说,验证成功的信号是:checkpoints/pix2tex/下出现.pth权重文件与对应的config.yaml,并且训练日志中的三项验证指标随训练推进有变化。README 中给出的官方模型评测结果为参考示例:BLEU 0.88、normed edit distance 0.10、token accuracy 0.60——这是官方训练数据上的示例数值,不代表你的数据会得到相同结果。
边界与注意事项
- 图片必须是 PNG 且文件名即标签行号,尺寸在 32×32 到 1024×512 之间,否则该样本不会进入数据集;
- tokenizer、数据集
.pkl和配置三者必须保持一致:数据集打包用的--tokenizer、配置里的tokenizer路径、num_tokens与--vocab-size,任何一处不一致都会导致 token id 对不上; - 训练依赖 GPU 与否可用
--no_cuda参数强制 CPU 模式(见 pix2tex/train.py 的参数定义)。
训练完成后,权重文件即可按config.yaml中记录的路径在checkpoints目录中找回;如果你的数据规模远小于官方训练集,建议先小步跑通整条流程(tokenizer → dataset.pkl → config → train)再调大词表和 epoch。
【免费下载链接】LaTeX-OCRpix2tex: Using a ViT to convert images of equations into LaTeX code.项目地址: https://gitcode.com/GitHub_Trending/la/LaTeX-OCR
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考