精读《利用 GPT 解读 PDF》

news2024/11/17 13:55:11

hatPDF 最近比较火,上传 PDF 文件后,即可通过问答的方式让他帮你总结内容,比如让它帮你概括核心观点、询问问题,或者做观点判断。

背后用到了几个比较时髦的技术,还好有 ChatGPT for YOUR OWN PDF files with LangChain 解释了背后的原理,我觉得非常精彩,因此记录下来并做一些思考,希望可以帮到大家。

技术思路概括

由于 GPT 非常强大,只要你把 PDF 文章内容发给他,他就可以解答你对于该文章的任何问题了。-- 全文完。

等等,那么为什么要提到 langChain 与 vector dataBase?因为 PDF 文章内容太长了,直接传给 GPT 很容易超出 Token 限制,就算他允许无限制的 Token 传输,可能一个问题可能需要花费 10~100 美元,这个 成本 也是不可接受的。

因此黑魔法来了,下图截取自视频 ChatGPT for YOUR OWN PDF files with LangChain:
在这里插入图片描述
我们一步步解读:

  1. 找一些库把 PDF 内容文本提取出来。
  2. 把这些文本拆分成 N 份更小的文本,用 openai 进行文本向量化。
  3. 当用户提问时,对用户提问进行向量化,并用数学函数计算与 PDF 已向量化内容的相似程度。
  4. 把最相似的文本发送给 openai,让他总结并回答你的问题。

利用 GPT 解读 PDF 的实现步骤
我把视频里每一步操作重新介绍一遍,并补上自己的理解。

登录 colab

你可以在本地电脑运行 python 一步步执行,也可以直接登录 colab 这个 python 运行平台,它提供了很方便的 python 环境,并且可以一步步执行代码并保存,非常适合做研究。

只要你有谷歌账号就可以使用 colab。

安装依赖

要运行一堆 gpt 相关函数,需要安装一些包,虽然本质上都是不断给 gpt openapi 发 http 请求,但封装后确实会语义化很多:

!pip install langchain
!pip install openai
!pip install PyPDF2
!pip install faiss-cpu
!pip install tiktoken

其中 tiktoken 包是教程里没有的,我执行某处代码时被提示缺少这个包,大家可以提前按上。接下来提前引入一些后面需要用到的函数:

from PyPDF2 import PdfReader
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import ElasticVectorSearch, pinecone, Weaviate, FAISS

定义 openapi token

为了调用 openapi 服务,需要先申请 token,当你申请到 token 后,通过如下方式定义:

import os
os.environ["OPENAI_API_KEY"] = "***"

默认 langchain 与 openai 都会访问 python 环境的 os.environ 来寻找 token,所以这里定义后,接下来就可以直接调用服务了。

如果你还没有 GPT openapi 的账号,详见 保姆级注册教程。(可惜的是中国被墙了,为了学习第一手新鲜知识,你需要自己找 vpn,甚至花钱买国外手机号验证码接收服务,虽然过程比较坎坷,但亲测可行)。

读取 PDF 内容

为了方便在 colab 平台读取 PDF,你可以先把 PDF 上传到自己的 Google Drive,它是谷歌推出的个人云服务,集成了包括 colab 与文件存储等所有云服务(PS:微软类似的服务叫 One Drive,好吧,理论上你用哪个巨头的服务都行)。

传上去之后,在 colab 运行如下代码,会弹开一个授权网页,授权后就可以访问你的 drive 路径下资源了:

from google.colab import drive
drive.mount('/content/gdrive', force_remount=True)
root_dir = "/content/gdrive/My Drive/"
reader = PdfReader('/content/gdrive/My Drive/2023_GPT4All_Technical_Report.pdf')

我们读取了 2023_GPT4All_Technical_Report.pdf 报告,这是一个号称本地可跑对标 GPT4 的服务(测评)。

将 PDF 内容文本化并拆分为多个小 chunk

首先执行如下代码读取 PDF 文本内容:

raw_text = ''
for i, page in enumerate(reader.pages):
  text = page.extract_text()
  if text:
    raw_text += text

接下来要为调用 openapi 服务对文本向量化做准备,因为一次调用的 token 数量有限制,因此我们需要将一大段文本拆分为若干小文本:

text_splitter = CharacterTextSplitter(
    separator = "\n",
    chunk_size = 1000,
    chunk_overlap = 200,
    length_function = len,
)
texts = text_splitter.split_text(raw_text)

其中 chunk_size=1000 表示一个 chunk 有 1000 个字符,而 chunk_overlap 表示下一个 chunk 会重复上一个 chunk 最后 200 字符的内容,方便给每个 chunk 做衔接,这样可以让找相似性的时候尽量多找几个 chunk,找到更多的上下文。

向量化来了!

最重要的一步,利用 openapi 对之前拆分好的文本 chunk 做向量化:

embeddings = OpenAIEmbeddings()
docsearch = FAISS.from_texts(texts, embeddings)

就是这么简单,docsearch 是一个封装对象,在这一步已经循环调用了若干次 openapi 接口将文本转化为非常长的向量。

文本向量化又是一个深水区,可以看下这个 介绍视频,简单来说就是一把文本转化为一系列数字,表示 N 维的向量,利用数学计算相似度,可以把文字处理转化为连续的数字进行数学处理,甚至进行文字加减法(比如 北京-中国+美国=华盛顿)。

总之这一步之后,我们本地就拿到了各段文本与其向量的对应关系,比如 “这是一段文字” 对应的向量为 [-0.231, 0.423, -0.2347831, …]。

利用 chain 生成问答服务

接下来要串起完整流程了,初始化一个 QA chain 表示与 GPT 使用 chat 模型进行问答:

from langchain.chains.question_answering import load_qa_chain
from langchain.llms import OpenAI
chain = load_qa_chain(OpenAI(), chain_type="stuff")

接下来就可以问他 PDF 相关问题了:

query = "who are the main author of the article?"
docs = docsearch.similarity_search(query)
chain.run(input_documents=docs, question=query)
#  The main authors of the article are Yuvanesh Anand, Zach Nussbaum, Brandon Duderstadt, Benjamin Schmidt, and Andriy Mulyar.

当然也可以用中文提问,openapi 会调用内置模块翻译给你:

query = "训练 GPT4ALL 的成本是多少?"
docs = docsearch.similarity_search(query)
chain.run(input_documents=docs, question=query)
#  根据文章,大约四天的工作,800美元的GPU成本(包括几次失败的训练)和500美元的OpenAI API开销。我们发布的模型gpt4all-lora大约在Lambda Labs DGX A100 8x 80GB上需要八个小时的训练,总成本约为100美元。

QA 环节发生了什么?

根据我的理解,当你问出 who are the main author of the article? 这个问题时,发生了如下几步。

第一步:调用 openapi 将问题进行向量化,得到一堆向量。

第二步:利用数学函数与本地向量数据库进行匹配,找到匹配度最高的几个文本 chunk(之前我们拆分的 PDF 文本内容)。

第三步:把这些相关度最高的文本发送给 openapi,让他帮我们归纳。

对于第三步是否结合了 langchain 进行多步骤对答还不得而知,下次我准备抓包看一下这个程序与 openapi 的通信内容,才能解开其中的秘密。

当然,如果问题需要结合 PDF 所有内容才能概括出来,这种向量匹配的方式就不太行了,因为他总是发送与问题最相关的文本片段。但是呢,因为第三步的秘密还没有解决,很有可能当内容片段不够时,gpt4 会询问寻找更多相似片段,这样不断重复知道 gpt4 觉得可以回答了,再给出答案(想想觉得后背一凉)。

总结

解读 PDF 的技术思路还可以用在任意问题上,比如网页搜索:

网页搜索就是一个典型的从知识海洋里搜索关键信息并解读的场景,只要背后将所有网页信息向量化,存储在某个向量数据库,就可以做一个 GPT 搜索引擎了,步骤是:一、将用户输入关键字分词并向量化。二:在数据库进行向量匹配,把匹配度最高的几个网页内容提取出来。三:把这些内容喂给 GPT,让他总结里面的知识并回答用户问题。

向量化可以解决任意场景模糊化匹配,比如我自己的备忘录会存储许多平台账号与密码,但有一天搜索 ChatGPT 密码却没搜到,后来发现关键词写成了 OpenAPI。向量化就可以解决这个问题,他可以将无法匹配的关键词也在备忘录里搜索到。

配合向量化搜索,再加上 GPT 的思考与总结能力,一个超级 AI 助手可做的事将会远远超过我们的想象。

留给大家一个思考题:结合向量化与 GPT 这两个能力,你还能想到哪些使用场景?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/451978.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java实战篇】Day11.在线教育网课平台--RBAC

文章目录 一、用户授权1、RBAC2、资源服务授权流程3、授权相关的数据模型4、查询用户权限5、细粒度授权 二、找回密码与注册1、找回密码2、注册 三、需求:学生选课1、添加选课需求分析2、数据模型设计2、查询课程信息接口3、添加选课接口4、完善controller 一、用户…

每日一个小技巧:1招教你手机消除笔怎么用

在日常生活中,我们经常需要在手机上进行编辑和涂改,但是由于各种原因,我们可能会做出错误或者不满意的修改。这时候,消除笔就派上用场了。消除笔可以帮助我们在不影响其他内容的前提下,对错误或者不满意的修改进行撤销…

java实现大气无风环境污染物扩散模拟

一、扩散公式整理 二、编写java代码实现 String strJson InterpolationUtils.calGaussPlumePoints0(z,height,q,lon,lat, size,scale,airStable); return strJson.replaceAll("NaN","0").replaceAll("Infinity",String.valueOf(q)); String st…

【机器学习】P23 决策树、熵和信息增益

决策树、熵与信息增益 决策树熵信息增益Python 与 决策树 决策树 决策树(Decision Tree) 是一种基于树形结构的分类算法,它通过一系列的询问(也称为测试或判定条件)来判断一个数据实例属于哪个类别。 以一个案例贯穿…

Go | 一分钟掌握Go | 2 - 集成开发工具

作者:Mars酱 声明:本文章由Mars酱编写,部分内容来源于网络,如有疑问请联系本人。 转载:欢迎转载,转载前先请联系我! 工具介绍 编码是一门传统手艺活,手艺好不好很重要,器…

高精度气象模拟软件WRF实践技术

【原文链接】:高精度气象模拟软件WRF(Weather Research Forecasting)实践技术及案例应用https://mp.weixin.qq.com/s?__bizMzU5NTkyMzcxNw&mid2247538149&idx3&sn3890c3b29f34bcb07678a9dd4b9947b2&chksmfe68938fc91f1a99bbced2113b09cad822711e7f…

开发者必读!常用的二维码生成器 API 推荐

引言 二维码是一种能够存储信息的图形码,它在现代社会中扮演着越来越重要的角色。生成二维码的过程通常需要使用二维码生成器,而现在有很多二维码生成器 API 可以供开发者使用。 在本文中,我们将讨论二维码生成器 API 的工作原理、应用场景…

CHAPTER 6: 《DESIGN A KEY-VALUE STORE》 第6章 《设计一个键值存储》

CHAPTER 6: DESIGN A KEY-VALUE STORE 键值存储(也称为键值数据库)是一种非关系数据库。每一个唯一标识符存储为与其关联值的键。这种数据配对称为“键-值”对。 在一个键-值对中,键必须是唯一的,与该键相关联的值可以是通过密钥访问。键可以是纯文本或…

编译原理个人作业--第五章——基于 编译原理 国防工业出版社 第三版

1 文法 G 1 G_1 G1​为 E → E T ∣ T T → T ∗ F ∣ F F → ( E ) ∣ i E\rightarrow ET|T\\ T\rightarrow T*F|F\\ F\rightarrow(E)|i E→ET∣TT→T∗F∣FF→(E)∣i 请证明 E T ∗ F ET*F ET∗F是他的一个句型(课本写的是ET*T感觉是印错了),指出它的所有短语…

这份最新阿里、腾讯、华为、字节等大厂的薪资和职级对比,你看过没?

互联网大厂新入职员工各职级薪资对应表(技术线)~ 最新阿里、腾讯、华为、字节跳动等大厂的薪资和职级对比 上面的表格不排除有很极端的收入情况,但至少能囊括一部分同职级的收入。这个表是“技术线”新入职员工的职级和薪资情况,非技术线(如产品、运营、…

pbootcms自动配图出图插件

pbootcms文章无图自动出图配图插件的优点 1、提高文章的可读性和吸引力:插入图片可以丰富文章的内容和形式,增强读者的阅读体验和吸引力,提高文章的点击率和转化率。 2、节省时间和精力:手动添加图片需要花费大量时间和精力去寻找…

【LeetCode: 1416. 恢复数组 | 暴力递归=>记忆化搜索=>动态规划 】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

【花雕学AI】超级提问模型大全!150个ChatGPT神奇示例,让你的聊天更有趣!

引言 你是否想要成为聊天高手,让你的对话更加有趣和深入?你是否想要掌握一些超级提问模型,让你的聊天更加有创意和挑战?你是否想要借助人工智能的力量,生成一些适合你的超级提问模型? 如果你的答案是肯定…

浅谈新能源电动汽与汽车传感器充电桩的影响

安科瑞 徐浩竣 江苏安科瑞电器制造有限公司 zx acrelxhj 摘要:随着我国能源战略发展以及低碳行动的实施,电动汽车已逐步广泛应用,而电动汽车的应用非常符合当今社会对环保意识的要求,以及有效节省化石燃料的消耗。由于其无污染…

Flutter+YesAPI 快速构建零运维的APP

前言 移动互联网经过多年的发展,已经进入一个成熟的阶段,几乎每个公司都有自己的移动应用程序或移动网站。随着5G技术的不断发展,也带来了更高效的数据传输速度和更稳定的网络连接,这使得更多的应用程序和服务能够在互联网上运行&…

NFT介绍及监管规则

什么是NFT NFT是Non-Fungible Token(非同质化代币)的缩写。 NFT是“Non-Fungible Token”的缩写,即非同质化代币。不同于FT(Fungible Token,同质化代币),每一个NFT都是独一无二且不可相互替代的…

cmake管理子程序,lib库和so库应用实践

cmake在管理大型项目时经常被用到,本文以简单程序演示来说明camke管理项目应用,其中包括主程序,子程序,so库程序,lib程序。 目录 1.程序目录结构 2.编译执行 3.清除临时文件 4.完整代码 1.程序目录结构 ├── bu…

【PWN刷题__ret2text】[BJDCTF 2020]babystack

新手上路~低速慢行~ 目录 前言 1. checksec 2. IDA 反汇编 3. payload编写 4. exp编写 5. pwntools用法 前言 作为pwn新手,尽可能在刷题中,记录、学习一些通用的知识点,因此wp是少不了的。 本题是一道简单的ret2text 1. checksec 没有…

6.2 龙格—库塔法

学习目标: 学习龙格-库塔法的具体明确的学习目标可以有以下几点: 理解龙格-库塔法的基本思想和原理:我们应该了解龙格-库塔法的数值求解思想和数值误差的概念,包括截断误差和稳定性等基本概念,并且要熟悉龙格-库塔法的…

大学生无线耳机怎么选?内行推荐四款高性价比蓝牙耳机

随着蓝牙耳机的使用频率越来越高,大学生成为了蓝牙耳机的主要用户群体之一。最近看到很多网友问,大学生无线耳机怎么选?针对这个问题,我来给大家推荐几款高性价比蓝牙耳机,一起来看看吧。 一、南卡小音舱Lite2蓝牙耳机…