微信扫码
与创始人交个朋友
我要投稿
在大型语言模型(LLMs)和检索增强生成(RAG)环境中,以markdown文本格式输入数据具有重要意义。以下是一些详细考虑因素。
LLMs 是强大的语言模型,可以生成连贯且具有上下文相关性的文本。然而,它们有时可能会产生缺乏事实准确性或上下文的响应。通过结合基于检索的方法(如RAG),我们可以提高生成文本的质量。
RAG 使得将外部数据——在LLM的训练数据中之前缺失的数据——整合到文本生成过程中成为可能。这种包含减少了“幻觉问题”,并增强了文本响应的相关性。
Markdown 是一种轻量级标记语言,允许用户使用简单的语法格式化纯文本。它广泛用于创建结构化文档,特别是在 GitHub、Jupyter 笔记本和各种内容管理系统上。当将数据输入到 LLM 或 RAG 系统时,使用 Markdown 格式提供了几个好处:
结构化内容:Markdown 允许您将信息组织成标题、列表、表格和其他结构化元素。这种结构有助于更好地理解和上下文保留。
富文本:Markdown 支持基本格式,如粗体、斜体、链接和代码块。在输入数据中包含富文本可以增强语言模型的上下文。
嵌入链接和引用:Markdown 允许您嵌入超链接、脚注和引用。在 RAG 场景中,这对于引用外部来源或提供额外上下文至关重要。
易于创作:Markdown 具有可读性,易于编写。作者可以高效地创建内容,而无需复杂的格式化工具。
分块:对于 RAG 系统至关重要,分块(也称为“拆分”)将大量文档拆分为更易处理的部分。通过支持 MD 格式的 PyMuPDF 数据提取,我们支持分块以保持具有共同上下文的文本在一起。重要的是,MD 格式的 PyMuPDF 提取允许进行 第 3 级分块。
总之,在 LLM 和 RAG 环境中使用 Markdown 文本格式可以确保更准确和相关的结果,因为它提供了更丰富的数据结构和更相关的数据块负载给您的 LLM。
自推出以来,PyMuPDF 一直能够从 PDF 页面中提取文本、图像、矢量图形,并且从 2023 年 8 月起,还能够提取表格。这些对象类型各自有其提取方法:文本有一种,表格、图像和矢量图形则有其他方法。为了满足 RAG 的要求,我们将这些不同的提取方式合并,生成一个统一的 Markdown 字符串,以一致地表示页面的整体内容。
所有这些都实现为 一个 Python 脚本。它可以被其他脚本作为模块导入,或者在终端窗口中通过以下命令行调用:
$ python pymupdf_rag.py input.pdf [-pages PAGES]
它将生成一个 Markdown 格式的文本文件(称为 input.md
)。可选参数 PAGES
允许将转换限制为 PDF 总页面的一个子集。如果省略,则处理整个 PDF。
“-pages
” 参数是一个字符串,由所需的页面编号(从1开始)组成,用于考虑进行markdown转换。可以给出多个页面编号规范,使用逗号分隔。每个规范可以是一个整数或两个用“-
”连接的整数,指定一个页面范围。以下是一个示例:
“-pages 1–10,15,20-N
”
这将包括第1页到第10页、第15页以及第20页到文件末尾(大写“N”被视为最后一页的编号)。
在调用时,程序检查给定页面上的所有文本并找出最常用的字体大小。该值(以及所有较小的字体大小)被假定为 正文文本。较大的字体大小被假定为 标题文本。
根据它们在字体大小层级中的相对位置,标题文本将前面加上一个或多个 markdown 标题 #
标签字符。
每个页面上的所有文本首先将被分类为标准文本或表格文本。然后,页面内容将从上到下提取,并转换为Markdown格式。
这最好通过一个例子来解释:
该页面显示的内容代表典型情况:
两个表格,具有部分重叠的垂直位置。一个表格没有标题,另一个表格有外部列标题。
有一行标题和多个级别的标题。
正文文本包含多种样式细节,如粗体、斜体和行内代码
。
有序和无序列表。
代码片段。
布局分析将确定三个区域并选择适当的处理模式:(1) 文本,(2) 表格,(3) 文本。
生成的Markdown文本忠实地反映了上述内容——在这种格式中尽可能做到。
作为一个例子,让我们看一下具有外部标题的表格的输出:
|Column1|Column2|
|---|---|
|Cell (0, 0)|Cell (0, 1)|
|Cell (1, 0)|Cell (1, 1)|
|Cell (2, 0)|Cell (2, 1)|
这是与GitHub兼容的格式,具有最小的可能令牌大小——这是保持输入到RAG系统的小型化的重要方面。
列边框由“|
”字符表示。如果文本行后面跟着“|---|---| …
”形式的行,则假定该文本行是表头。完整的表格定义必须前后至少有一行空行。
请注意,由于技术原因,Markdown表格必须有一个标题,因此如果没有外部标题,将选择第一行作为表头。
为了确认整体准确性,以下是Markdown解析器如何处理完整页面的示例:
除了在命令行中执行程序外,Markdown 转换也可以通过程序请求:
import fitz
from pymupdf_rag import to_markdown# import Markdown converter
doc = fitz.open(“input.pdf”)# open input PDF
## define desired pages: this corresponds “-pages 1-10,15,20-N”
page_list = list(range(9)) + [14] + list(range(19, len(doc) – 1))
## get markdown string for all pages
md_text = to_markdown(doc, pages=page_list)
## write markdown string to some file
output = open(“out-markdown.md”, “w”)
output.write(md_text)
output.close()
通过集成 PyMuPDF 的提取方法,PDF 页面的内容将被忠实地转换为可用作 RAG 聊天机器人的输入的 Markdown 文本。
请记住,成功的 RAG 聊天机器人的关键在于它能够访问的信息的质量和完整性。
启用 PyMuPDF 的 Markdown 提取确保从 PDF 中获取这些信息不仅是可能的,而且是简单的,展示了该库的强大和对开发者的友好。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-12-26
GraphRAG和轻量级LightRAG技术及应用案例深度解析
2024-12-26
使用 Markdown 和 Gemini 为 RAG 解锁 PDF
2024-12-26
长文 | RAG的实战指南及探索之路
2024-12-26
2024年,百万上下文依然没有杀死RAG
2024-12-26
在推荐、RAG等业务中,如何完成亿级向量的快速检索?
2024-12-25
RAG 工程实践优化点及方法总结
2024-12-25
强化 RAG 应用:生成式 AI 返回准确率提升的高效策略与实践
2024-12-25
RAG开发中,如何用Milvus 2.5 BM25算法实现混合搜索
2024-07-18
2024-05-05
2024-06-20
2024-09-04
2024-05-19
2024-07-09
2024-07-09
2024-07-07
2024-06-13
2024-07-07
2024-12-26
2024-12-24
2024-12-21
2024-12-14
2024-12-01
2024-11-27
2024-11-25
2024-11-06