今天是2024年3月14日,北京,天气晴。
今天,我们来看看两个事情,一个是回顾20240313大模型进展早报,另一个是关于社区最近的两个主要讨论的话题,关于RAG多轮问答以及自动生成FAQ问答数据集。
供大家一起参考并思考。
我们首先来看看大模型进展早报,就继续关注文本嵌入、文档智能鱼RAG结合进展以及知识图谱与大模型的融合工作。
以下是具体文字版:
1、关于大模型llama3:3月13日,社交、科技巨头Meta在官网公布了两个全新的24K H100 GPU集群(49,152个),专门用于训练大模型Llama-3:https://mp.weixin.qq.com/s/xwH4X4lPgVqP-0Y1ZuKjiw
2、知识图谱与大模型用于链接预测,方案思路很粗暴,prompt工程:Knowledge Graph Large Language Model (KG-LLM) for Link Prediction :https://arxiv.org/pdf/2403.07311
3、关于大模型对齐新方案:大模型ReAlign重新对齐方案: 论文地址:https://arxiv.org/pdf/2402.12219.pdf,https://gair-nlp.github.io/ReAlign,https://github.com/GAIR-NLP/ReAlign
https://github.com/GAIR-NLP/ReAlign/blob/main/figs/overall_figs.jpg
4、关于Sora的一个解读视频,可以了解下基本原理。可看看https://m.bilibili.com/video/BV1XJ4m1h7Jd
5、关于文本嵌入embedding。300多种语言的Wikipedia嵌入表示的数据集,Cohere/wikipedia-2023-11-embed-multilingual-v3 · Datasets at Hugging Face,https://huggingface.co/datasets/Cohere/wikipedia-2023-11-embed-multilingual-v3
该数据集包含从2023-11-01年维基百科转储的所有300多种语言的wikimedia/wikipedia 数据集,单篇文章已经过分块处理,并使用最Cohere Embed V3 嵌入模型进行了嵌入,可以轻松地对所有维基百科进行语义搜索,或将其用作RAG的向量索引,总共有近2.5亿个段落/嵌入,也可以使用该模型进行跨语言搜索,用任何语言输入搜索查询,都能得到最相关的结果。
6、关于文档智能与RAG结合新进展。提出一种创新的文档索引自动化方法,整合了Donut和OpenAI GPT-3.5 Turbo。The future of document indexing: GPT and Donut revolutionize table of content processing,https://arxiv.org/abs/2403.07553
7、关于openai开源ransformer Debugger:OpenAI的Superalignment团队开发的模型可解释工具,它可以回答类似于“为什么模型对于这个提示输出Token A而不是Token B?”或“为什么注意力头H在这个提示下关注Token T?”的问题: https://github.com/openai/transformer-debugger
1、关于如何基于大模型对给定的文档生成问答对
如何基于大模型对给定的文档生成问答对是一个经典问题,一般方案都是使用self-instruct的方式对模型进行蒸馏,这是社区最近讨论最多的第一个问题。
例如,《RefGPT: Reference → Truthful & Customized Dialogues Generation by GPTs and for GPTs》地址:https://arxiv.org/abs/2305.14994中的实现思路,为了避免人工标注的昂贵成本,自动生成海量、高质量、事实型多轮对话,用于训练GPT,提升GPT的事实正确性。
其在执行步骤上:
第一步,针对采集优质的事实型文档,reference,其来源可以是电子书、维基百科、优质垂类网站。文档需要涵盖尽量多的主题,包括但不限于人物、机构、科技、医疗、法律、人文、经济、家居、汽车、出行、美食、时尚、体育、教育、宠物。
利用已有的LLM(例如付费API)生成多轮对话。输入是一篇reference,prompt类似“请根据这篇文章生成多轮问答”。API会输出一段多轮对话(dialogue)。这种方法将原本只适合预训练的文档转化成可供微调的多轮对话。
然后第2步收集到大量的reference-dialogue二元组。将reference和prompt作为输入,dialogue作为目标,微调一个GPT模型(可以基于LLaMA或BLOOM的预训练基座),以以此来生成一组对话语料。
又如采用self-qa的方式进行生成,地址:https://arxiv.org/abs/2305.11952
在指令生成阶段:采用语言模型本身来根据无监督的文本生成指令。这种方法使生成的指令具有领域针对性,并与所提供的无监督文本的内容相关。对于非结构化的知识,如网页和书籍数据,直接使用。对于结构化数据,如表格和知识图谱,在被利用之前需要转换为非结构化文本数据。如通过使用模板填充槽或将每个数据条目与相应的属性名称连接起来来实现。
最后在指令答案生成阶段,将生成的指令问题让大模型进行预测,生成答案。
实际上,这是一种很常见的需求,可以直接使用prompt来提示大模型针对给定的文档来直接生成问答对,下面举几个具体的例子:
又如,在现有类chatpdf等软件、网页中直接提供了这类服务。
但是,这种方案并不能保证得到的数据是没有幻觉的,生成的内容并不可控。
2、关于RAG中多轮对话的一些讨论
当前的RAG工作大多都是面向单论问答的,但对于多轮的,涉及的较少,尤其是涉及到多轮问答环节,是需要根据前面的上下文加以问答的。
例如,RAG里面的多轮对话和chat的多轮对话不太一样,RAG需要用query去检索。举个例子:
q1: 张三这个人怎么样?
a1: 张三………
q2: 和李四比呢?
如果拿q2去检索,那拿到的片段全是李四的信息,没有张三的信息,回答会文不对题。
社区最接近也讨论此类问题。rag里面,有时候用户可能问一些问题,必须基于上下文才能看懂的,这些问题一般要怎么改造,然后给到向量数据库去进行文档搜索啊,例如就问了一句,还有吗,这样给过去效果应该很差。要把上下文总结到最终的问题里面,但试了好些prompt,效果也一般般,不是说全部问题都能做到能把这个问题描述清楚。
当前实际情况是,chatgpt里面聊,然后说详细点,效果就可以,用api就很傻。但如果只把详细点这个问题给到向量数据库来做embedding搜索,这个肯定搜不出来啥。
实际上,关于RAG问答,我们可以顺便再回顾下之前已经出现了多个工作,如QAanything,如下所示,,根据文章(https://mp.weixin.qq.com/s/YXWNWUQ-ioKaRzLTWcudIQ)所介绍的,其中一个很重要的模块就是qury understand,这个做的就是对query的理解和改写。
这类问题一个比较显而易见的解决方案是:基于上述对话,对当前问题进行改写,使得语义更明确,完整,处理方式就是改写/复述。,也就是通过LLM大模型把历史对话和当前问题改写成一个独立问题,比如这里会改写成,张三和李四相比怎么样?然后再拿这个新的q去做检索。
但这存在的两个很大的问题,如果只是讲上文所有信息都加载至prompt进行请求,则容易导致长文本过长,并且无效字符串过多。
但是改写问题也要把历史对话传过去,同样也费token,技巧来了,传多少,怎么传。是不是要过滤掉一些无用的上下文?答案是的,可以采用比如限定历史轮次,比如压缩上下文等方案,有一些是每隔一段,做一个总结,特别是咨询场景。
另一个是,因为LLM大模型有幻觉,这个问题改写可能会被改错,这个时候就需要引入一个新的问题,就是受控改写,比如引入知识图谱?
1、https://mp.weixin.qq.com/s/YXWNWUQ-ioKaRzLTWcudIQ
老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。