让ChatGPT根据你自己的数据库作答 - 新瓶装旧酒
原创 数字生命卡兹克 数字生命卡兹克 2023-04-19 00:23 天津
互动数据
- 阅读:4062
- 点赞:94
- 转发:22
- 喜欢:20
- 留言:13
ChatGPT越来越广为人知之后,有越来越多人将他用在实际场景中。
但是ChatGPT也不是神,4096Token也如同梦魇般旋绕在头顶。
越来越多的问题暴露了出来:
比如,发现这玩意没有最新数据,问一些最新的数据毫无意义。
比如,一篇超长的PDF文档根本灌不进去。
诸如此类。
今天,想写一篇浅显的文章,跟大家聊聊OpenAI开放的能力,也是你们所见到的ChatPDF、ChatDOC、所谓Chrome联网插件等工具的原理。让大家人人都能将自己的数据灌给ChatGPT,让他根据你的数据来做答。
首先,非常推荐想研究的人去读一遍OpenAI的官方文档,里面很多东西其实已经写的非常非常傻瓜简单了,而且并不难。
在关于如何将自己的数据灌给GPT上,OpenAI官方提供了两种可以直接调用他们接口的做法:
Fine-tuning(微调)和Embeddings(嵌入)
两者的优劣简单概括如下:
Fine-tuning(微调)只能基于GPT3的分类模型去训练,比如davinci、ada等等,是预训练模型,一次训练终身受益,适合很久知识都不变且数据集较小的情况。
Embeddings(嵌入)无需训练模型,是将自己的预设Pormpt+数据+问题打包,当作一整段话发送给GPT。让GPT根据这个预设的Prompt和灌给的数据再加问题做回答。适合数据量超大且实时更新的一些数据。
在我实际使用中,嵌入方法可能更适合大多数场景一些。ChatPDF和所谓的那个假实时联网的插件也都是这种方式。
以下,我来举个小栗子:
我现在有10000只基金的所有的最新的涨跌数据,在一个excel里,我想让ChatGPT在回答这10000只基金的相关问题时,使用我excel的数据来回答,别用他那老掉牙的21年的数据。
这是我的需求,当然正常做法可能是去数据库里面扒数据,当然原理跟从excel里取数没什么本质区别。
现在,我想问“诺安成长这只基金怎么样?”
首先,先使用jieba分词,把这句话给拆了,变成“诺安成长”“这”“只”“基金”“怎么样”“?”
然后拿这些分词出来的字段去跟搜索我们的分词表。然后发现跟分词表匹配上了,就去我们的excel里搜“诺安成长”
搜到了诺安成长这个基金之后,把整行数据提取出来,加上我们的prompt和这行数据和“诺安成长这只基金怎么样?”这个问题,一起送给GPT。
这样,GPT就会根据我们这么长的一大段,用自然语义重新组装,给我们回答。
其实,懂一点技术的就能明白,为了解决token的问题,在外面包了一层搜索,先搜索,再嵌入。
现在很多的长文本的处理方式,也是如此。
比如我们常用的ChatDOC。
先做了一层语义搜索,然后用嵌入的方式去总结并做答。
而所谓的WebChatGPT,可访问互联网的ChatGPT。
也是将网页里的HTML文字内容给扒下来,当作数据嵌入,让ChatGPT根据这扒下来的数据回答。实现假联网。
说了这么多,相信大家对如何使用自己的数据库有一定的了解了,一篇文章,肯定不可能手把手教大家会,抛砖引玉,可以自己再去研究一下。知道该如何让ChatGPT根据自己的数据作答。
最后,因为4096token的限制,长文本处理一直是一个非常头疼的问题。
嵌入,能解决部分问题。
而长时记忆区,矢量数据库,我觉得才是解决的唯一真谛。
这也是OpenAI推荐的方式,更是大火的AutoGPT真正驱动核心。
同时,也是我现在无法理解和触及的领域。
呵,记忆,真的是人类生命长河中,最深奥的殿堂。
以上。