发布时间:2021-08-15 16:58:34来源:机器之心
机器之心报道
机器之心编辑部
只需要把公式图片用鼠标拖动到工具内,就能一键转成LaTex公式。
写论文、做研究时,最让你头疼的是什么?想必公式编辑会榜上有名。那么有没有便捷的方法进行公式编辑呢?这里推荐一款神器,它使用PyTorchLightning可将LaTeX数学方程的图像映射到LaTeX代码。
它的效果是这样的,输入一张带公式的图片,它能转换成LaTeX代码形式:
而它的名字也是很直接的,就叫做「ImagetoLaTexConverter」,把产品功能写在了明面上。
项目地址:https://github.com/kingyiusuen/image-to-latex
网友表示:我太需要这个了。
也有网友表示,你也可以使用CLIP来实现,因为这个工具是将完整的方程拆分为单个字符。
此前,很多人都在用MathpixSnip,这个工具虽然好用,但是只能提供50次免费转换。之后,一位中国开发者也创建了一款类似工具「」,用户输入公式截图即可以自动将其对应的LaTex文本转换出来。效果也虽好,不过也只是提供了1000次从文档中提取公式的能力。
此次项目的创建者为明尼苏达大学双城分校计量心理学博士生KingYiuSuen,他本科毕业于香港中文大学,致力于研究评估心理测试和教育评估的统计学方法,以及测试响应数据的建模。
该项目为何能够一键转换成LaTex公式?这要都得益于背后使用的数据集和模型。
项目背后的数据集与模型
作者也对打造过程进行了详细的介绍。2016年,在YuntianDeng等作者合著的一篇OCR主题论文《WhatYouGetIsWhatYouSee:AVisualMarkupDecompiler》中,他们介绍了叫做「im2latex-100K」的模型(原始版本和预处理版本),这是一个由大约100KLaTeX数学方程图像组成的数据集。
作者使用该数据集训练了一个模型,使用ResNet-18作为具有2D位置编码的编码器,使用Transformer作为具有交叉熵损失的解码器。这个过程类似于《FullPageHandwritingRecognitionviaImagetoSequenceExtraction》Singhetal.(2021)中描述的方法,不过作者只使用ResNetuptoblock3来降低计算成本,并且去掉了行号编码,因为它不适用于这个问题。
Singhetal.(2021)论文中的系统架构。
最初,作者使用预处理数据集来训练模型,因为预处理图像被下采样到原始大小的一半以提高效率,而且分组并填充为相似的大小以方便批处理。但结果表明,这种严格的预处理被证明是一个巨大的限制。尽管该模型可以在测试集(其预处理方式与训练集相同)上取得合格的性能,但它并不能很好地泛化到数据集之外的图像,这很可能是因为其他图像质量、填充和字体大小与数据集中的图像不同。
使用相同数据集尝试解决相同问题的其他人也发现了这种现象。下图这位开发者试图从论文中裁剪图像,图像与数据集中的图像大小相似。但即使对于简单的公式,输出也会完全失败:
为此,作者使用了原始数据集并在数据处理pipeline中包含了图像增强(例如随机缩放、高斯噪声)以增加样本的多样性。此外,作者没有按大小对图像进行分组,而是进行了均匀采样并将它们填充为批次中最大图像的大小,以便模型必须学习如何适应不同的填充大小。
作者在使用数据集中遇到的其他问题包括:
一些LaTex代码生成了视觉上相同的输出,比如\left(和\right),看起来与(和))一样,因此做了规范化处理;
一些LaTex代码用来添加空间,比如\vspace{2px}和\hspace{0.3mm})。但是,间距对于人类来说也很难判断。此外,表述相同间距有很多方法,比如1cm=10mm。最后,作者比希望模型在空白图像上生成代码,因此删除了这些空白图像。
不过,该项目也有一些可能需要改进的地方:
更好地数据清理(比如删除间距命令)
尽可能多地训练模型(由于时间原因,只训练了15个epoch的模型,但是验证损失依然下降)
使用集束搜索(只实现了贪婪搜索)
使用更大的模型(比如ResNet-34而不是ResNet-18)
进行一些超参数调优
作者使用的是GoogleColab,计算资源有限,因此并没有做到以上这些。
项目的使用与部署
在项目设置方面:首先你需要将该项目克隆到计算机,并将命令行放置到库文件夹中:
gitclonehttps://github.com/kingyiusuen/image-to-latex.gitcdimage-to-latex
然后,创建一个名为venv的虚拟环境并安装所需的软件包:
makevenvmakeinstall-dev
在数据预处理方面:执行如下命令下载im2latex-100k数据集并进行所有预处理任务(图像裁剪可能需要一个小时):
pythonscripts/prepare_data.py
在模型训练方面:启动训练session的命令如下:
pythonscripts/run_experiment.pytrainer.gpus=1data.batch_size=32
你可以在conf/config.yaml中修改配置,也可以在命令行中修改。
在实验跟踪方面:最佳模型checkpoint将自动上传到Weights&Biases(W&B)(在训练开始前你需要先进行注册或登录W&B)。如下是从W&B下载训练模型checkpoint的示例命令:
pythonscripts/download_checkpoint.pyRUN_PATH
将RUN_PATH替换为运行的路径,运行路径格式为
例如,你可以使用如下命令下载最佳运行:
pythonscripts/download_checkpoint.pykingyiusuen/image-to-latex/1w1abmg1
checkpoint将被下载到项目目录下一个名为artifacts的文件夹中。
测试和持续集成方面:以下工具可用于lint代码库:
isort:对Python脚本中的import语句进行排序和格式化;
black:遵循PEP8的代码格式化程序;
flake8:在Python脚本中报告风格问题的代码检查器;
mypy:在Python脚本中执行静态类型检查。
使用下面的命令来运行所有的检查和格式化程序:
makelint
在部署方面:训练好的模型通过创建的API进行预测,启动和运行服务器命令如下:
makeapi
要运行Streamlit应用程序,请使用以下命令创建一个新的终端窗口:
makestreamlit
应用程序应该在浏览器中自动打开,你也可通过http://localhost:8501/进行查看。想让这个应用程序运行,你还需要下载实验运行的工件,启动并运行API。
为API创建一个Docker映像:
makedocker
NVIDIA对话式AI开发工具NeMo实战分享
开源工具包NeMo是一个集成自动语音识别(ASR)、自然语言处理(NLP)和语音合成(TTS)的对话式AI工具包,便于开发者开箱即用,仅用几行代码便可以方便快速的完成对话式AI场景中的相关任务。
8月26日20:00-21:00,系列分享第2期:使用NeMo快速构建智能问答系统。
智能问答系统简介
智能问答系统的工作流程和原理
构建适合于NeMo的中文问答数据集
在NeMo中训练中文问答系统模型
使用模型进行推理完成中文智能问答的任务
直播链接:https://jmq.h5.xeknow.com/s/how4w(点击阅读原文直达)
报名方式:进入直播间——移动端点击底部「观看直播」、PC端点击「立即学习」——填写报名表单后即可进入直播间观看。
交流答疑群:直播间详情页扫码即可加入。
©THEEND
转载请联系本公众号获得授权
投稿或寻求报道:content@jiqizhixin.com