潇大

Mar 07, 2023

2023-03-07 回顾:与pdf聊天

🐟
GPT-3等语言模型的出现,会不断改变人机交流的方式。 本文结合当前的技术,对这个想法进行一些延展。可以参考之前的文章。
本文概要:
 

PDF 对话的应用场景

上周末有个叫做 chatpdf 的应用很有意思,上传一个pdf文件,就能实现和它对话。
在辉哥奇谭的这篇文章中,提到了几种应用,它们背后,都是上传大量的文字资料,再借助 ChatGPT 对语言的理解能力,开始对话。
  • 与名人对话。尤其是与逝去的名人对话。当我们把名人的相关数据导入以后,就可以直接提出相关领域的问题,来获得回答。一般来说,这些名人的讲演、文章等作为训练语料都是公开的。
  • 与文件对话。随着问题不断深入,原本一堆静止的文字,变成了一本「活的书」。ChatPDF网站提供的能力如下:只要你上传一份PDF文档,网站就会自动分析文件内容,对内容做出总结,并给出可以与这个文件讨论的问题。其实 New Bing 也有类似的功能,问一本书里面内容写了什么,它也可以概括,但是两者实现的技术路径不太一样。
  • 与博客对话。有一些知名的博主,会在博客上写很多文章。只需要一个网址,就可以立即获取他的内容。从而实现与这个人对话的效果。这其实是上面一些场景的延伸。
这样的想法,其实很早就有了,并且还涌现出了很多的产品,例如 chatbase.co 已经开始做产品化方向。也可以支持自定义数据来源。我很喜欢其官网的设计,可以直接通过询问,来了解产品本身,这个很有意思。
notion image
在更垂类的领域,例如论文阅读,也出现了一些诸如 scispace 的网站(typeset.io),可以上传论文然后向其提问,在论文这个细分语境下,会做得更好。
 
目前 SciSpace 的功能已经逐渐成熟,不仅可以用问答提问,还可以复制公式或者图片进行提问,如下是效果的展示。
notion image
 

使用 vector database 进行高效搜索

这件事情是如何做到的?
最直接想到的办法,便是把整个pdf的内容转换成文字,作为问答的上下文。但目前这种做法是行不通的,因为gpt3.5模型开放的接口最大只支持 4096 的token数。所以还需要借助一些压缩的方法。
无独有偶,我找到了 https://v2ex.com/t/921750 上一个解释,原作者找到了类似的产品,并且阅读了代码。大致原理分成如下几个步骤:
  1. 用 embedding + word2vec 技术,将自然语言文本转换成向量,同时确保相近意思的文本,对应的向量距离更加小。
  1. 在用户提问时,先借助 vector database 之类的数据库,进行高效的搜索,匹配出最接近的3-5条原始文本。
  1. 接着再用这3-5条内容,作为用户提问的参考内容,一起构造到传入gpt3.5模型的prompt中
  1. 得到gpt3.5的结果,作为回复展示给用户。
这里的关键,还是如何将预料数据进行切分、预处理成词向量的形式,里面有很多技术点,这里不详细展开。大体的制作思路便是如此。
当然,针对具体的场景,这种预处理过程势必是不同的,这里的方法只是提供一个思路。

Haystack QA - 一个 GPT 知识管理的例子

后来,我在 HuggingFace 上又找到了一个类似的功能实现。它允许用户上传文件并提问,但限制较少,即使上传了一个170+页的pdf文件,也能提取其中的内容。我使用一种特殊的 plantUML 语法编写了代码,用于回答问题。
notion image
可以看到它的回答确实参考了pdf中的这一段内容。这个例子不是很明显,因为不太确定 startgantt 是否是gpt模型内置。
链接放上面了,感兴趣可以研究下细节。
 
对于那些有大量背景世界观设定的应用场景来说,不失为一种有趣的工程技巧。
 
总结(written by Notion AI)
本文介绍了一些利用语言模型进行人机交流的应用场景,包括与名人、文件、博客对话等。同时,还介绍了使用向量数据库进行高效搜索的方法,并提供了一个 GPT3 知识管理的例子。这些应用场景和技术手段为人机交流提供了新的思路和工程技巧。

Copyright © 2025 潇大

logo