NuMarkdown-8B-Thinking:让文档转换变得更智能
你是否曾经遇到过这样的情况:手里拿着一堆扫描的文档,比如书籍、合同或者报告,想要把它们变成可以编辑的电子版?传统的工具可能会让你头疼——它们能认出文字,但一碰到复杂的排版或者表格,就手忙脚乱。今天,我要给你介绍一个特别的帮手——NuMarkdown-8B-Thinking。它不仅能“看懂”文档,还能把它们变成整齐的 Markdown 文件。这对于需要处理大量文件或者做内容分析的人来说,简直太方便了。
在这篇文章里,我会带你一步步了解这个模型是什么、它怎么工作、能做什么,以及怎么用它来解决实际问题。无论你是学生、研究人员还是职场人士,只要你需要处理文档,这篇文章都会给你一些实用的启发。准备好了吗?我们开始吧!
什么是 NuMarkdown-8B-Thinking?
简单来说,NuMarkdown-8B-Thinking 是一个专门用来把文档转换成 Markdown 格式的智能工具。它结合了 OCR(光学字符识别) 和 视觉语言模型(VLM) 的技术,能从图片或扫描件中提取文字,还能理解文档的布局,最后生成 Markdown 文件。
想象一下,你有一个助手,先认真看一遍你的文档,记下哪里是标题、哪里是表格、哪里是正文,然后再动手整理成一份清晰的文件。NuMarkdown-8B-Thinking 就是这样的助手。它基于一个叫 Qwen 2.5-VL-7B 的模型,经过特别训练,能处理那些让人头疼的复杂布局和表格。
它为什么特别?
-
能看懂复杂结构:普通 OCR 工具只能把文字“抄”下来,但这个模型会分析整个文档,知道哪里是标题、哪里是列表、哪里是表格。 -
表格处理能力强:碰到合并单元格或者多行内容的表格,它也能整理得井井有条。 -
输出 Markdown:Markdown 是一种简单易用的标记语言,很多人都用它写文档、做笔记或者管理内容。这个模型直接生成 Markdown,省去了你手动整理的麻烦。
它是怎么工作的?
NuMarkdown-8B-Thinking 的工作方式有点像人的思考过程,分成两个步骤:
-
思考阶段
它会先“想一想”,生成一些“思考 tokens”(你可以理解为它的笔记),用来分析文档的结构。比如,它会判断:“这个是标题,那个是表格,这段是正文。” -
转换阶段
分析完之后,它根据自己的“笔记”,把内容整理成 Markdown 格式输出。
这种“先想后做”的方式,让它在处理复杂文档时特别靠谱。思考的深度会根据任务难度变化,有时候思考的部分甚至比最终输出的内容还多好几倍。
它是怎么训练出来的?
训练过程分两步:
-
监督微调(SFT)
用一些合成的文档数据(从公开的 PDF 文件生成的)来教它怎么从文档到 Markdown。这就像给它看很多例子,让它学会模仿。 -
强化学习(RL)
用一种叫 GRPO 的方法(Grouped Reward Policy Optimization),特别关注布局的准确性,再用一些难处理的图片来“磨炼”它。
它的表现如何?
NuMarkdown-8B-Thinking 在测试中表现得很出色,甚至超过了像 GPT-4o 这样的通用模型和 OCRFlux 这样的专业 OCR 工具。它跟一些大型闭源模型(比如 Gemini 2.5)也能一较高下。
排名数据
在一个叫 Arena 的排名中,它拿到了第二名,仅次于 gemini-flash-reasoning。下面是具体的排名表:
排名 | 模型 | μ | σ | μ − 3σ |
---|---|---|---|---|
1 | gemini-flash-reasoning | 26.75 | 0.80 | 24.35 |
2 | NuMarkdown-reasoning | 26.10 | 0.79 | 23.72 |
3 | NuMarkdown-reasoning-w/o_grpo | 25.32 | 0.80 | 22.93 |
4 | OCRFlux-3B | 24.63 | 0.80 | 22.22 |
5 | gpt-4o | 24.48 | 0.80 | 22.08 |
6 | gemini-flash-w/o_reasoning | 24.11 | 0.79 | 21.74 |
7 | RolmoOCR | 23.53 | 0.82 | 21.07 |
这个排名是用一种叫 trueskill-2 的系统算出来的,基于大约 500 次匿名投票。可以看到,NuMarkdown-8B-Thinking 的得分(μ)是 26.10,非常接近第一名。
胜率对比
在跟其他模型的直接对比中(只看图片文档),它的胜率也很高。
(文档里提到了一张柱状图,这里无法展示,但我可以描述一下:柱状图展示了 NuMarkdown-8B-Thinking 和其他模型的胜率、平局率和败率,它在大多数对比中都占上风,尤其是在跟 OCRFlux-3B 和 GPT-4o 的较量中。)
怎么用 NuMarkdown-8B-Thinking?
想试试这个模型?它提供了两种主要的使用方式:vLLM 和 Transformers 库。下面我一步步教你怎么操作。
方法 1:用 vLLM
vLLM 是一个高效的推理工具,适合快速部署模型。跟着这些步骤走:
-
安装 vLLM
确保你的电脑上已经装好了 vLLM。如果没有,可以用 pip 安装:pip install vllm
-
启动服务
在终端运行这条命令,启动 NuMarkdown-8B-Thinking 的服务:vllm serve numind/NuMarkdown-8B-Thinking --trust_remote_code --limit-mm-per-prompt image=1
-
发送请求
用 Python 写一个脚本,把图片传给模型,让它处理。代码如下:from openai import OpenAI import base64 # 设置 API 参数 openai_api_key = "EMPTY" openai_api_base = "http://localhost:8000/v1" client = OpenAI( api_key=openai_api_key, base_url=openai_api_base, ) # 把图片转成 base64 格式 def encode_image(image_path): with open(image_path, "rb") as image_file: return base64.b64encode(image_file.read()).decode('utf-8') # 替换成你的图片路径 base64_image = encode_image("image.png") data_url = f"data:image/jpeg;base64,{base64_image}" # 发送请求给模型 chat_response = client.chat.completions.create( model="numind/NuMarkdown-8B-Thinking", temperature=0.7, messages=[ { "role": "user", "content": [ { "type": "image_url", "image_url": {"url": data_url}, "min_pixels": 100 * 28 * 28, "max_pixels": 5000 * 28 * 28, }, ], }, ] ) # 提取结果 result = chat_response.choices[0].message.content reasoning = result.split("<think>")[1].split("</think>")[0] answer = result.split("<answer>")[1].split("</answer>")[0] print(answer)
这段代码会把图片传给模型,然后打印出生成的 Markdown 内容。
方法 2:用 Transformers 库
如果你更喜欢用 Hugging Face 的工具,可以试试这个方法:
-
安装依赖
确保你装了 Transformers 和 PyTorch:pip install transformers torch
-
加载模型和处理器
用 Python 加载模型:import torch from PIL import Image from transformers import AutoProcessor, Qwen2_5_VLForConditionalGeneration model_id = "numind/NuMarkdown-8B-Thinking" processor = AutoProcessor.from_pretrained( model_id, trust_remote_code=True, min_pixels=100*28*28, max_pixels=5000*28*28 ) model = Qwen2_5_VLForConditionalGeneration.from_pretrained( model_id, torch_dtype=torch.bfloat16, attn_implementation="flash_attention_2", device_map="auto", trust_remote_code=True, )
-
准备图片和提示
加载你的图片并设置输入:img = Image.open("image.png").convert("RGB") messages = [{ "role": "user", "content": [ {"type": "image"}, ], }] prompt = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) model_input = processor(text=prompt, images=[img], return_tensors="pt").to(model.device)
-
生成输出
运行模型,得到 Markdown 结果:with torch.no_grad(): model_output = model.generate(**model_input, temperature=0.7, max_new_tokens=5000) result = processor.decode(model_output[0]) reasoning = result.split("<think>")[1].split("</think>")[0] answer = result.split("<answer>")[1].split("</answer>")[0] print(answer)
两种方法都可以,vLLM 更适合快速部署,Transformers 更灵活,适合调试或者自定义。
一个实际例子
为了让你更直观地感受它的能力,我们来看一个例子。
(文档里提到了一张图片 ex1.png,这里无法展示,但我会描述它的内容:图片是一个两页的教育文档,每页有标题、列表、表格和页脚,表格里有合并单元格和多行内容。)
模型处理后,输出了这样的 Markdown 文件:
### Generalitat de Catalunya
### Departament d'Educació
### Institut Gal·lecs
### Curs 2021-22
- Els llibres de color blau indiquen que es manté respecte al curs anterior。
- Els llibres de color groc indiquen que es tracta d'un canvi per a aquest curs。
- Els llibres de color vermell indiquen que no s'han de comprar perquè van a càrrec del centre。
- Matèries sense llibre: Dossiers, llicències i el Kit de tecnologia s'hauran de pagar i de recollir a través de l'AMPA a partir de setembre。
# 1 ESO
| MATERIAL | TÍTOL | AUTOR | EDITORIAL | ISBN |
|-------------------|--------------------------------------------|-------------------|----------------------------------------------|---------------|
| Llengua Catalana | Punt Volat | | Castellnou (Didacta +) | 9788417803124 |
| | Duna, Diari d'un estiu。 | Muriel Villanueva | Babulinka Books<br>EditorialCol·lecció: Pettes<br>Joies per a Grans Lectors。<br>2013 | 9788494159077 |
| | El nen que xatejava amb Jack Sparrow。 | Francesc Puigpelat| Bromera<br>Col·lecció: L'Elefant。 2015 | 9788490264072 |
| Llengua Castellana| Proyecto Asterisco | | Castellnou (Didacta +) | 9788417803186 |
| | Manzanas rojas | Luis Matilla | Ed。 Anaya | 978846673989 |
| | Fàbulas de Esopo | Jerry Pinkney | Vicens Vives | 978843671648 |
| Anglès | Think Ahead ESO 1。 Student's book。<br>Think Ahead ESO 1。 Workbook (cat)。 | | Burlington Books<br>Burlington Books | 9788925300662<br>9789925300686 |
Codí: 04mp02
Responsable: Coordinador Qualitat
Versió: 5
Full d'Informació a l'alumnat i famílies
Aquest document pot quedar obsolet una vegada imprès
Pàgina 1 de 2
### Generalitat de Catalunya
### Departament d'Educació
### Institut Gal·lecs
### Curs 2021-22
| MATERIAL | TÍTOL | AUTOR | EDITORIAL | ISBN |
|-------------------|--------------------------------------------|-------------------|----------------------------------------------|---------------|
| FRANCÈS | Nouvelle Génération A1-A2 | | Santillana | 9788490494745 |
| CIÈNCIES EXPERIMENTALS | Science Bits<br>ES GESTIONA A TRAVÉS DE L'AMPA AL SETEMBRE | | | 9788412213485 (llicència digital) |
| MATEMÀTIQUES | Projecte MOTIMATS-ONMAT (llicència digital) Tekman Books<br>ES GESTIONA A TRAVÉS DE L'AMPA AL SETEMBRE | | | |
| TECNOLOGIA | Tecnologia 1 ESO | TEIDE | | 9788430783175 |
| VISUAL I PLÀSTICA | SENSE LLIBRE-KIT DE MATERIAL | | | |
| CIÈNCIES SOCIALS | SENSE LLIBRE-dossier | | | |
Codí: 04mp02
Responsable: Coordinador Qualitat
Versió: 5
Full d'Informació a l'alumnat i famílies
Aquest document pot quedar obsolet una vegada imprès
Pàgina 2 de 2
你看,它把标题、列表、表格和页脚都整理得清清楚楚,连合并单元格和多行内容都处理得很好。
常见问题(FAQ)
你可能还有一些疑问,我在这里尽量回答清楚:
1. NuMarkdown-8B-Thinking 能处理什么类型的文档?
它主要用来处理图片格式的文档,比如扫描的 PDF、JPEG 或 PNG 文件。特别适合那些布局复杂、有表格的文档。
2. 怎么调整它的输出结果?
你可以改动 temperature
参数。这个值越低(比如 0.7),输出越稳定;值越高,输出会更有变化。默认 0.7 是个不错的起点。
3. 运行它需要什么硬件?
这个模型比较大,建议用 GPU 来跑,这样速度快很多。代码里可以用 device_map="auto"
让它自动选择设备。
4. 它能处理多页文档吗?
目前它一次只能处理一张图片。如果是多页文档,你得把每页分开处理,然后自己把结果拼起来。
5. 它支持哪些语言?
它主要是用英语文档训练的,但其他语言的文档也能试试,效果可能会因语言不同而变化。
如何开始使用?(HowTo Schema)
如果你想马上试试 NuMarkdown-8B-Thinking,这里是一个简单的操作指南:
步骤 1:准备环境
-
需要什么:一台有 GPU 的电脑(推荐),Python 环境,vLLM 或 Transformers 库。 -
安装工具: -
vLLM: pip install vllm
-
Transformers: pip install transformers torch
-
步骤 2:选择使用方式
-
用 vLLM: -
启动服务: vllm serve numind/NuMarkdown-8B-Thinking --trust_remote_code --limit-mm-per-prompt image=1
-
运行前面给的 Python 代码,替换图片路径。
-
-
用 Transformers: -
复制前面 Transformers 的代码。 -
改成你的图片路径,运行代码。
-
步骤 3:处理文档
-
把你的文档(图片格式)传给模型。 -
拿到输出的 Markdown 文件,检查一下结果。
步骤 4:调整和使用
-
如果结果不够理想,可以调 temperature
参数,或者检查图片质量。 -
把 Markdown 文件用在你的项目里,比如笔记、报告或者内容分析。
为什么值得试试?
NuMarkdown-8B-Thinking 不只是一个工具,它能帮你省下很多整理文档的时间。比如:
-
学生:把课本扫描件转成 Markdown,方便复习。 -
研究人员:把论文或报告转成可编辑的格式,加快分析。 -
职场人士:把合同或手册数字化,方便存档和分享。
它最大的优势是能处理那些让人抓狂的复杂文档,而且输出的 Markdown 格式简单又实用。
结语
NuMarkdown-8B-Thinking 就像一个聪明的小助手,把 OCR 技术带到了一个新高度。它不仅能识别文字,还能理解文档的结构,生成整洁的 Markdown 文件。如果你经常需要处理文档,不妨试试这个工具。它可能会让你的工作轻松不少。
想了解更多?可以去 Hugging Face 页面 看看,或者加入 Discord 社区 和其他用户聊聊经验。有什么问题,随时留言,我尽量帮你解答!