最近在搞pdf to latex代码,让我可以订阅arXiv的文档来关注最新的ai 动态
尝试了几个办法
1.mathpix这个太几把贵了,很奇怪 只能翻译很少的页书 有的pdf一下子就50-80页的,没几个pdf就翻译额度用玩了
2.aspose.这个玩意儿在部分情况下免费一个月150个pdf,而且不看页书,竟然可以翻译正确,我拿了几个复杂的pdf,它竟然可以转换成tex 然后我再编译回来 竟然可以打开!不可思议,唯一的缺点就是他们的官方文档实在太难阅读了,我几乎是靠着我的代码阅读工具才勉强写出来的代码,而且这个翻译很随机,有的时候可以翻译成功,有的时候翻译的tex代码完全无法看,我也不知道他们咋实现 的,但是简单的pdf我看着好像没啥问题。就是很难用!
3.有道翻译的pdf,就是翻译的中文不行。。。实在难以下咽的感觉,阅读好累还不如不翻译
然后我就想办法用llm来解决这个问题,我习惯用了haiku ,因为是便宜好用,主要是ChatAnthropic这个库太好用了,其他的我都要自己去封装,而且要兼容langchain,比如我还要写它的异步函数,很麻烦
但是我测试下来,我告诉haiku
你是一个翻译专家并且精通LaTex语法,请将以下LaTeX文档从英文翻译为中文,直接给出翻译后的完整LaTeX文档内容,不需要任何额外的说明或确认以及不要"```latex"的包裹标签
但是haiku老回复我“以下是将上述英文 LaTeX 文档翻译为中文的结果:”无论我怎么更换prompt都会这样,很难受,于是我换了gpt4-turbo,很好 效果很强烈,但是很贵,当你看到我现在这个帖子的时候,你已经在节约10美元的情况下学到了和我一样的知识。
我先把gpt4的结果放一边。
我现说说我为了节约用钱,直接用了一些便宜的大模型的结果,为了节约钱,我直接用llm chat来对话,我随便拿了一些我之前测试容易出现问题的latex场景,比如有的latex就是package.tex没有任何的英文内容:
usepackage{cite}
usepackage{amsmath,amssymb,amsfonts}
usepackage{algorithmic}
usepackage{graphicx}
usepackage{textcomp}
usepackage{xcolor}
usepackage[hyphens]{url}
usepackage{multirow}
usepackage{booktabs}
usepackage{pifont}
usepackage{array}
usepackage{xspace}
usepackage{soul}
usepackage{subcaption}
usepackage{fancyhdr}
usepackage{colortbl}
usepackage{makecell}
usepackage[bookmarks=true,breaklinks=true,letterpaper=true,colorlinks,citecolor=blue,linkcolor=blue,urlcolor=blue]{hyperref}
这种package就和你写框架一样的,只是引入相关组件。看看幻方的llm咋回答的
结果看来就是不行,回复的内容包括了它对这个内容的解读,显然不符合我的要求。
然后我修改了我的prompt,强调了一下不要做任何输出说明。我的prompt是:你是一个翻译专家并且精通LaTex语法,请将以下LaTeX文档从英文翻译为中文,直接给出翻译后的完整LaTeX文档内容,不需要任何额外的说明或确认以及不要"```latex"的包裹标签,如果文档中没有可翻译成中文的内容,请直接输出我给你的文档内容,不要有任何额外的说明
看下来如果是带latex代码和英文内容混合的情况下输出效果还是可以的。但是又会遇到我刚才说的场景,如果是全代码的package.tex就无了
它就又给我瞎几把回答了,当一个prompt工程师真难啊,而且我这样的测试效率很低下,最好是找个类似prompt测试框架来实现。
然后回到刚才的gpt4的问题,因为latex之前的字体是英文的所以没啥问题,我们翻译成中文以后,超出字符集了,所以要换字体。
这里给出一个方案 用 ctex的宏库,很好用的。
在我帖子写到一半的时候 又出来一个很强的orc的工具 可以解决pdf2markdown这部分的问题https://github.com/multimodal-art-projection/MAP-NEO/tree/main/Matrix/document-convert#introduction
看着很强大,我的电脑不支持测试,因为没空间了。哎
我继续讲我之前的工作,我之前的工作其实解决的思路也是orc->markdown/latex之类的中间语言->llm->pdf这样的思路。之前找了个llm能解决大部分问题,通过多模态可以解决一部分这样的情况,例如使用gpt4可以做到这样的回复,接下来的测试就降低llm成本修改prompt来让整个流程简单化
我不认为转换成markdown格式是个很好的选择,markdown默认不支持公式 会丢失一些信息,我觉得最好的就是转换成latex,这个模型可以在content image block tables latex 各个方面有很好的实现,这样就可以解决和代替ocr的这部分了。
其实我也测试过gpt4多模态来识别,勉强可以用,也可以识别table image之类的组件 并返回坐标,然后新建一个doucment类型把这些图片的坐标定位进去 再把翻译好的字丢进去,最后重装成一个latex。
还有一个比较推荐的模型就是vary ,可以看下这个文档https://blog.csdn.net/matt45m/article/details/135374713
效果也是和这个map-neo差不多的。不过好像说是map-neo比vary好多了
包括阿里的https://github.com/X-PLUG/mPLUG-DocOwl/tree/main/DocOwl1.5
我的脚本:https://github.com/xsser/llm2latex2pdf
这个是用来转换翻译latex->pdf部分的
-
读取文件夹下的tex文件
-
然后使用llm异步翻译成latex代码丢回来(建议使用sonnet模型 搭配这个prompt是效果最地道 最便宜的解决方案)
-
并使用ctex宏加载编译,自动识别主要的编译tex文件,执行命令用xelatex编译
-
最后得到中文版的pdf
所以如果llm可以识别 然后生成latex其实就很好解决了
还有一个文档我一直没搞定。。好多软件也没搞定 就是arXiv-2204.03089v1奇葩
对于arvix的tex代码转换成pdf的效果图
原文始发于微信公众号(xsser的博客):pdf翻译成中文
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论