如何可以向 ChatGPT 输入大量文本内容并提问?
问:我跟chatgpt对话,要给他喂大量数据,难道这些数据就都靠那个对话框输入输出吗?比如说我喂它一部三国演义txt文档。然后它就卡住不动了。
答:ChatGPT或者其他同类 LLM,你一次输入的内容是有限的,比如ChatGPT的GPT-4o,一次最多理论上输入输出加起来是32K的上下文窗口,英文也就是50页的样子,中文更少,所以你不可能把一本三国演义、红楼梦这样的全塞进去。
那么怎么绕过限制呢?
有几种办法:
在大语言模型预训练阶段就把这些内容训练进去,比如红楼梦三国演义这种预训练中已经有了,那么就不需要再传入完整内容了。但由于预训练内容很多,所以在针对性提问时还是有可能出现幻觉或者不准确。比如你让它默写三国演义的一些特定章节不一定会很完整。
将输入的内容进行微调,这样模型还是能学习一些新的知识和文本风格,但是微调时要先行对内容分块,也就是一本小说要拆成很多块,每一块可能就几页内容,并且要拆成问题和答案一对一对的,虽然是通过微调“学习”了新知识,但是并不代表它学到的知识是完整的,再加上原有知识库内容混在一起,所以针对微调的内容提问,未必会有好的效果,除非你的问题和微调时喂的问题一样的。另外微调对数据的准备要求很高,微调的成本也不低。
做RAG(检索增强生成),这是目前主流的做法。简单来说就是不需要预训练你的长文本(比如三国演义),而是根据你提问的内容,去长文本里面检索出来最相关的若干段落,然后将问题和检索出来的段落,一起交给ChatGPT,让它根据问题和检索结果,回答你的问题。
比如说,你问ChatGPT:“三顾茅庐是哪三顾?”ChatGPT就根据你的问题,提炼出“三顾茅庐”关键字,找出三顾茅庐相关的几个章节,然后把这几个章节给ChatGPT:“用户问三顾茅庐是哪三顾,这里是我找出来的三顾茅庐之一顾茅庐、二顾茅庐、三顾茅庐内容如下,你来帮助回答用户的问题”,于是ChatGPT给你总结归纳了一下。这样就不需要把整一个本书都扔给它。
当然 RAG 的难点在于怎么检索到最相关的内容,这部分是相当有挑战的。