LLM Sherpa提供战略性API,以加速大型语言模型(LLM)的应用场景。
[!重要] llmsherpa后端服务现已完全开源,采用Apache 2.0许可证。详见https://github.com/nlmatics/nlm-ingestor
- 现在您可以使用Docker镜像运行自己的服务器!
- 支持不同的文件格式:DOCX、PPTX、HTML、TXT、XML
- 内置OCR支持
- 块现在有坐标 - 使用块(如章节)的bbox属性
- 新的缩进解析器,更好地将文档中的所有标题对齐到相应的级别
- 免费服务器和付费服务器未更新最新代码,建议用户按照nlm-ingestor中的说明启动自己的服务器
大多数PDF转文本解析器不提供布局信息。通常,甚至句子也被任意的回车换行符分割,使得很难找到段落边界。这在为LLM应用(如检索增强生成(RAG))索引/向量化PDF时,对分块和添加长期上下文信息(如章节标题)到段落中造成了各种挑战。
LayoutPDFReader通过解析PDF并提供层次化布局信息来解决这个问题,包括:
使用LayoutPDFReader,开发人员可以找到最佳的文本块进行向量化,并为LLM的有限上下文窗口大小提供解决方案。
您可以直接在Google Colab这里试验该库
这里有一篇文章解释了问题和我们的方法。
这里有一篇LlamaIndex的博客解释了智能分块的需求。
API参考:https://llmsherpa.readthedocs.io/
如何与Google Gemini Pro一起使用 如何与Cohere Embed3一起使用
[!注意] LLMSherpa使用免费开放的API服务器。该服务器除了在解析期间临时存储外,不会存储您的PDF。此服务器将很快停用。 使用https://github.com/nlmatics/nlm-ingestor中的说明自行托管您的私有服务器
[!重要] Microsoft Azure Marketplace上的私有版本 将很快停用。请使用https://github.com/nlmatics/nlm-ingestor中的说明迁移到您的自托管实例。
pip install llmsherpa
使用LayoutPDFReader的第一步是提供URL或文件路径,然后获取文档对象。
from llmsherpa.readers import LayoutPDFReader llmsherpa_api_url = "https://readers.llmsherpa.com/api/document/developer/parseDocument?renderFormat=all" pdf_url = "https://arxiv.org/pdf/1910.13461.pdf" # 也允许使用文件路径,例如 /home/downloads/xyz.pdf pdf_reader = LayoutPDFReader(llmsherpa_api_url) doc = pdf_reader.read_pdf(pdf_url)
在以下示例中,为简单起见,我们将使用LlamaIndex。如果您还没有安装,请安装该库。
pip install llama-index
import openai openai.api_key = #<插入API密钥>
LayoutPDFReader通过保持文档结构相关的文本在一起进行智能分块:
以下代码使用LayoutPDFReader文档块创建LlamaIndex查询引擎
from llama_index.core import Document from llama_index.core import VectorStoreIndex index = VectorStoreIndex([]) for chunk in doc.chunks(): index.insert(Document(text=chunk.to_context_text(), extra_info={})) query_engine = index.as_query_engine()
让我们运行一个查询:
response = query_engine.query("列出所有使用bart的任务") print(response)
我们得到以下响应:
BART在文本生成、理解任务、抽象对话、问答和摘要任务方面表现良好。
让我们尝试另一个需要从表格中获取答案的查询:
response = query_engine.query("bart在squad上的性能得分是多少") print(response)
我们得到以下响应:
BART在SQuAD上的性能得分为EM 88.8和F1 94.6。
LayoutPDFReader提供了强大的方法来从大型文档中选择章节和子章节,并使用LLM从章节中提取洞见。
以下代码查找文档中的Fine-tuning章节:
from IPython.core.display import display, HTML selected_section = None # 通过标题在文档中查找章节 for section in doc.sections(): if section.title == '3 Fine-tuning BART': selected_section = section break # 使用include_children=True和recurse=True来完全展开章节。 # include_children只返回一个子级别的子项,而recurse会遍历所有后代 HTML(section.to_html(include_children=True, recurse=True))
运行上述代码会产生以下HTML输出:
<h3>3 Fine-tuning BART</h3><p>BART产生的表示可以在下游应用中以几种方式使用。</p><h4>3.1 序列分类任务</h4><p>对于序列分类任务,相同的输入被送入编码器和解码器,最后一个解码器标记的最终隐藏状态被送入新的多类线性分类器。\n这种方法与BERT中的CLS标记相关;但是我们在末尾添加额外的标记,以便该标记在解码器中的表示可以关注来自完整输入的解码器状态(图3a)。</p><h4>3.2 标记分类任务</h4><p>对于标记分类任务,如SQuAD的答案端点分类,我们将完整文档送入编码器和解码器,并使用解码器的顶层隐藏状态作为每个词的表示。\n这个表示用于分类标记。</p><h4>3.3 序列生成任务</h4><p>由于BART有一个自回归解码器,它可以直接微调用于序列生成任务,如抽象问答和摘要。\n在这两个任务中,信息从输入中复制但被操纵,这与去噪预训练目标密切相关。\n在这里,编码器输入是输入序列,解码器自回归地生成输出。</p><h4>3.4 机器翻译</h4><p>我们还探索了使用BART来改进翻译成英语的机器翻译解码器。\n先前的工作Edunov等人。\n(2019)已经表明,通过结合预训练编码器可以改进模型,但在解码器中使用预训练语言模型的收益有限。\n我们展示了可以通过添加一组从双语文本学习的新编码器参数,将整个BART模型(包括编码器和解码器)用作机器翻译的单一预训练解码器(见图3b)。</p><p>更确切地说,我们用一个新的随机初始化的编码器替换了BART的编码器嵌入层。\n模型进行端到端训练,这训练新编码器将外语词映射到BART可以去噪为英语的输入。\n新编码器可以使用与原始BART模型不同的词汇表。</p><p>我们分两步训练源编码器,在两种情况下都从BART模型的输出反向传播交叉熵损失。\n在第一步中,我们冻结大部分BART参数,只更新随机初始化的源编码器、BART位置嵌入和BART编码器第一层的自注意力输入投影矩阵。\n在第二步中,我们训练所有模型参数几个迭代。</p>
现在,让我们使用提示创建这段文本的自定义摘要:
from llama_index.llms import OpenAI context = selected_section.to_html(include_children=True, recurse=True) question = "列出所讨论的所有任务,并对每个任务进行一行描述" resp = OpenAI().complete(f"阅读这段文本并回答问题:{question}:\n{context}") print(resp.text)
上述代码产生以下输出:
文本中讨论的任务:
1. 序列分类任务:相同的输入被送入编码器和解码器,最后一个解码器标记的最终隐藏状态用于多类线性分类。
2. 标记分类任务:完整文档被送入编码 器和解码器,解码器的顶层隐藏状态用作每个词的表示进行标记分类。
3. 序列生成任务:BART可以微调用于抽象问答和摘要等任务,其中编码器输入是输入序列,解码器自回归地生成输出。
4. 机器翻译:BART可以用于改进机器翻译解码器,通过结合预训练编码器并将整个BART模型用作单一预训练解码器。新编码器参数从双语文本中学习。
使用LayoutPDFReader,您可以遍历文档中的所有表格,并利用LLM的能力分析表格。 让我们看看这个文档中的第6个表格。如果您使用的是笔记本,可以按以下方式显示表格:
from IPython.core.display import display, HTML HTML(doc.tables()[5].to_html())
输出的表格结构如下:
SQuAD 1.1 EM/F1 | SQuAD 2.0 EM/F1 | MNLI m/mm | SST Acc | QQP Acc | QNLI Acc | STS-B Acc | RTE Acc | MRPC Acc | CoLA Mcc | |
---|---|---|---|---|---|---|---|---|---|---|
BERT | 84.1/90.9 | 79.0/81.8 | 86.6/- | 93.2 | 91.3 | 92.3 | 90.0 | 70.4 | 88.0 | 60.6 |
UniLM | -/- | 80.5/83.4 | 87.0/85.9 | 94.5 | - | 92.7 | - | 70.9 | - | 61.1 |
XLNet | 89.0/94.5 | 86.1/88.8 | 89.8/- | 95.6 | 91.8 | 93.9 | 91.8 | 83.8 | 89.2 | 63.6 |
RoBERTa | 88.9/94.6 | 86.5/89.4 | 90.2/90.2 | 96.4 | 92.2 | 94.7 | 92.4 | 86.6 | 90.9 | 68.0 |
BART | 88.8/94.6 | 86.1/89.2 | 89.9/90.1 | 96.6 | 92.5 | 94.9 | 91.2 | 87.0 | 90.4 | 62.8 |
现在让我们提出一个问题来分析这个表格:
from llama_index.llms import OpenAI context = doc.tables()[5].to_html() resp = OpenAI().complete(f"阅读这个表格并回答问题:哪个模型在squad 2.0上表现最好:\n{context}") print(resp.text)
上述问题将得到以下输出:
在SQuAD 2.0上表现最好的模型是RoBERTa,其EM/F1得分为86.5/89.4。
就是这样!LayoutPDFReader还支持带有嵌套标题和标题行的表格。
这里是一个带有嵌套标题的例子:
from IPython.core.display import display, HTML
HTML(doc.tables()[6].to_html())
CNN/DailyMail | XSum | - | ||||
---|---|---|---|---|---|---|
R1 | R2 | RL | R1 | R2 | RL | |
--- | --- | --- | --- | --- | --- | --- |
Lead-3 | 40.42 | 17.62 | 36.67 | 16.30 | 1.60 | 11.95 |
PTGEN (See et al., 2017) | 36.44 | 15.66 | 33.42 | 29.70 | 9.21 | 23.24 |
PTGEN+COV (See et al., 2017) | 39.53 | 17.28 | 36.38 | 28.10 | 8.02 | 21.72 |
UniLM | 43.33 | 20.21 | 40.51 | - | - | - |
BERTSUMABS (Liu & Lapata, 2019) | 41.72 | 19.39 | 38.76 | 38.76 | 16.33 | 31.15 |
BERTSUMEXTABS (Liu & Lapata, 2019) | 42.13 | 19.60 | 39.18 | 38.81 | 16.50 | 31.27 |
BART | 44.16 | 21.28 | 40.90 | 45.14 | 22.27 | 37.25 |
现在让我们提出一个有趣的问题:
from llama_index.llms import OpenAI context = doc.tables()[6].to_html() question = "告诉我bart在不同数据集上的R1表现" resp = OpenAI().complete(f"阅读这个表格并回答问题:{question}:\n{context}") print(resp.text)
我们得到了以下回答:
BART在不同数据集上的R1表现:
- 对于CNN/DailyMail数据集,BART的R1得分是44.16。
- 对于XSum数据集,BART的R1得分是45.14。
要获取llmsherpa服务返回的完整json并进行不同的处理,只需获取json属性
doc.json
AI数字人视频创作平台
Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。
一站式AI创作平台
提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作
AI办公助手,复杂任务高效处理
AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换, 提升50%效率!
AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号