PDF 提取是从 PDF 文件中提取文本、图像或其他数据的过程。在本文中,我们探讨了当前的 PDF 数据提取方法、它们的局限性,以及如何使用 GPT-4 执行 PDF 提取的问答任务。我们还提供了实施 GPT-4 进行 PDF 数据提取的分步指南。
那么,让我们直接进入吧。
PDF 数据提取是从 PDF(便携式文档格式)文件中提取文本、图像或其他数据的过程。这些文件广泛用于共享和存储文档,但它们的内容并不总是很容易访问。
PDF 文件的可访问性和可读性对于那些有视力问题或难以阅读小或模糊文本的人来说非常必要,这对法律情况、数据分析和研究很有用。某些需要提取的情况包括在其他文档中使用 PDF 文件中的文本或图像内容以节省时间并避免错误。
现在是 2023 年,互联网上有很多 PDF 提取技术和工具。让我们更深入地研究 3 种流行的数据提取技术和一些相同的示例:
OCR或Optical Character Recognition
的缩写可用于从各种来源提取文本,包括扫描文档、图像和 PDF 文件,通常用于数字化印刷文档,例如书籍、报纸和历史文档。
一些流行的 OCR 工具包括:
基于模板的技术考虑了文档 PDF 的样式并使用硬编码规则。这些技术通常适用于结构化文档,其结构保持不变且易于理解。
使用正则表达式模式
例如:可以通过以下正则表达式规则提取日期:
[dd-mm-yyyy 或 yyyy-mm-dd] - [0-9]{2,4}/[0-9]{2}/[0-9]{2,4}
基于文本位置和文档尺寸的硬编码规则
机器学习 (ML) 技术被认为是提取 PDF 的最佳方法之一,因为无论文件结构如何,它都可以从 PDF 文件中高度准确地识别和提取文本。这些模型可以存储position of the text
的layout
和位置信息,同时还要记住相邻的文本。这有助于他们更好地概括并更有效地学习文档结构。
大型语言模型是人工智能的一个子集,已经过大量文本数据的训练。例如:ChatGPT,它在整个互联网数据和信息上进行训练,以对对话或其他自然语言输入产生类似人类的反应。
为了产生这些自然语言响应,LLM 使用深度学习模型,该模型使用多层神经网络来处理、分析复杂数据并进行预测。
机器学习模型的局限性
这类模型面临的一个主要问题是,他们只能从 PDF 中提取信息,而不知道提取的信息是否准确无误。提取的文本可能还包括另一个密钥中的一些其他密钥信息。拥有智能上下文有助于模型减少这些不准确性。
为了解决这个问题并将智能集成到 PDF 提取系统中,我们可以利用 GPT-4 的强大功能。
GPT-4(Generative Pre-trained Transformer 4)是 OpenAI 开发的一种大型语言模型,它使用深度学习技术生成类人自然语言文本。它是可用的最大和最强大的语言模型之一,具有 1750 亿个参数。
另一方面,Chat-GPT 是 GPT 的变体,专门针对对话式 AI 应用程序进行了训练。它已经在大型对话数据集上进行了微调,可以对用户查询生成类似人类的响应。 Chat GPT 可用于各种应用程序,包括聊天机器人、客户服务和虚拟助手。
让我们继续问题陈述,看看 GPT-4 和 ChatGPT 如何帮助我们解决 PDF 提取问题。
从 PDF 集合中高效提取特定信息的挑战是许多应用程序和行业经常遇到的挑战。从银行报表或税表中提取信息很困难。手动扫描大量 PDF 的老式方法会耗费大量时间,并且会产生不准确或不一致的数据。此外,PDF 中的非结构化数据使自动化系统难以提取必要的信息。
我们打算解决从 PDF 中找到用户问题答案的问题,而无需人工干预。
我们可以利用 GPT-4 及其嵌入来发挥我们的优势:
执行
A:从PDF中提取文本
您可以使用任何 OCR 或 ML 技术从文档中提取文本
B:根据文档的结构将文本分成适当的小块
使用 Bounding-Box [x0, y0, x2, y2] 的坐标信息,其中 x0 和 y0 是左上坐标,x2 和 y2 是右下坐标,您可以将整个文本分成一定宽度的小块和身高。
C:将这些块编码为嵌入[使用OpenAI 嵌入或HuggingFace ]
import torch from transformers import AutoTokenizer, AutoModel # Load the pre-trained model and tokenizer tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased') model = AutoModel.from_pretrained('bert-base-uncased') # Tokenize the sentence tokens = tokenizer.encode("<pass your code chunk block here>", return_tensors='pt') # Get the embeddings with torch.no_grad(): outputs = model(tokens) embeddings = outputs[0][0] # Print the embeddings print(embeddings)
什么是 Vector DB,为什么需要它?
A:计算用户查询的嵌入
使用与上述相同的技术来计算嵌入
B:从向量数据库中搜索块嵌入向量,其嵌入与用户查询的嵌入紧密匹配
您可以使用任何similarity search algorithm
。
您可以使用句子转换器库的语义句子相似度。
from sentence_transformers import SentenceTransformer, util #Compute cosine-similarities for each code chunk embds with user's query embeddings cosine_scores = util.cos_sim(code_chunk_embds, user_query_embds)
A:提供3个输入。
Input1 :用户查询
Input2 :与查询非常相似的块
输入 3:一些元指令(如果有)[系统:仅根据文档中提供的信息回答问题]
B:GPT-4 输出的答案
正如我们已经知道的那样,由于 GPT4 是一个非常强大的 LLM,它可以包含大量上下文,令牌长度为 8,192 和 32,768 个令牌,因此生成非常准确的结果变得更加容易和非常快速。
ChatGPT API 与任何编程语言无缝集成,可以在下游任务中为我们提供更多帮助。