摘要:YuLan-RETA-LLM,是一个由中国人民大学高瓴人工智能学院的研究团队开源的一个检索增强大型语言模型的工具包。该工具包提供了请求改写、文档检索、段落提取、答案生成和事实检查等多个模块,旨在帮助LLM更好地使用检索。此外,工具包还提供了一个完整的流程,可协助研究人员和用户构建他们定制的领域内问答系统。
github链接:
尽管大型语言模型(LLM)在许多领域都表现出了非凡的能力,但它们仍然有产生幻觉和产生虚构响应的倾向。以往的研究表明,使用信息检索系统增强大型语言模型(也称为检索增强LLM)可以缓解这个问题。应用该策略,LLM可以根据信息检索(IR)系统从外部语料库中检索到的相关内容作为参考,针对用户的输入生成更符合事实的文本,也能够回答原本存储在参数中的世界知识无法回答的领域内问题。
在检索增强的语言模型的研究方面,中国人民大学高瓴人工智能学院的研究团队已经取得了一系列的成果。为了推动检索增强的语言模型的研究,团队基于高质量的Wikipedia内容以及引用数据,构建了大规模基准数据集(下载地址:),并提出了检索增强的生成任务WebBrain(论文)。WebBrain能够利用检索到的相关文档片段,辅助生成高质量的富含知识的聚合文档,标注出相关引用,从而显著提升用户获取信息的效率,并保证生成内容的事实性和可信性。团队与华为合作在海量互联网数据上进行了模型训练和部署,支持了包括华为阅读在内的多项产品的升级迭代,为全球用户带来了更好的阅读和搜索体验,该合作成果已经在华为开发者大会(HDC2022)上进行了发布。
在检索增强的语言模型的研究上,来自中国人民大学高瓴人工智能学院的研究团队已经开展了一系列工作。为了能够促进检索增强的语言模型的研究,团队基于高质量的Wikiped5ia内容以及引用数据,构建了大规模基准数据集(下载地址:),并提出了检索增强的生成任务WebBrain(论文)。WebBrain能够借鉴检索到的相关文档片段,来辅助生成高质量的富含知识的聚合文档,并能标注出相关引用,既显著提升用户获取信息的效率,又保障生成内容的事实性和可信性。
团队与华为合作在海量互联网数据上进行了模型训练和部署,支撑了包括华为阅读在内的多项产品的升级迭代,为全球用户带来阅读和搜索体验的提升,该合作成果已经在华为开发者大会(HDC2022)上进行了发布。
近日,为了进一步支持检索增强语言模型领域的研究和产业发展,研究团队设计开发了YuLan-RETA-LLM,一个检索增强大型语言模型的工具包。此外,团队还构建了一套完整的流程,帮助用户更加容易地建立自己的域内问答系统。这些工具和流程的推出,将有助于更多的研究人员和开发者参与该领域的研究和应用,推动检索增强语言模型技术的发展。
项目主页:
论文链接:
01
RETA-LLM是什么
大型语言模型(LLM)越来越受到研究界和行业的关注。通过存储在参数中的大量世界知识和从人类反馈中强化学习(RLHF)技术,LLM可以生成有用、详细和得体的文本供用户输入。许多研究证明了LLM在各个领域的非凡能力,包括自然语言处理、信息检索和推荐。
然而,LLM仍然有产生幻觉的倾向,有时会产生与事实相反的文本。为了解决这些问题,研究人员提出了一种新的范式,用信息检索系统来增强LLM(检索增强LLM),这使LLM能够从外部存储库(知识库)中检索相关内容,并基于这些内容生成文本。已经证实的是,检索增强LLM可以针对用户输入以更少的幻觉来生成文本。此外,通过整合定制的数据资源,检索增强LLM可以响应用户输入的域内查询。为了进一步支持这一领域的研究和产业发展,中国人民大学团队设计开发了YuLan-RETA-LLM,一个检索增强大型语言模型的工具包。
与以前的通用LLM增强工具包如LangChain等不同,RETA-LLM专注于检索增强大型语言模型,并提供了更多的插件模块。通常,检索增强LLM使用具有两个模块的检索-生成两步策略:首先,它们根据用户请求检索文档或段落(文档检索模块);然后,他们利用这些相关文档作为参考生成答案(答案生成模块)。除了对这两个基本模块的支持以外,RETA-LLM还提供了三个可选模块:(1)请求改写模块,使用户当前的请求更加完整和清晰;(2)段落提取模块,用于从检索到的整个文档内容中提取相关段落或片段;以及(3)事实检查模块,用于验证生成的答案中是否存在事实错误。这些可选模块可以使信息检索系统和LLM之间的交互更加有效和顺畅。同时,在RETA-LLM中,LLM和检索系统之间的解耦更加彻底,这使得搜索引擎和LLM的定制更加方便。此外,为了让用户使用更容易,RETA-LLM为研究人员和用户提供了一个完整、即用的流程,以基于他们自己的资源库从头开始构建他们的RETA-LLM工具包,用于域内问题回答。
02
RETA-LLM是如何工作的
如前面所述,相较于Langchain等常见的通用LLM增强工具包,研究人员开发的RETA-LLM工具专注于检索增强LLM。RETA-LLM中提供了五个插件模块,用于和LLM和信息检索系统提供交互。这些模块包括请求改写、文档检索、段落提取、答案生成和事实检查。RETA-LLM的框架如图所示,其工作流程如下:
RETA-LLM的整体框架
首先,RETA-LLM使用请求改写模块来修改当前用户请求,使其变得完整和清晰。由于用户会对RETA-LLM提出一系列问题,可能会出现当前请求的表述不完整的情况。例如,用户的当前的请求是“信息学院呢?”, 而其历史请求是”介绍经济学院的专业”。在这种情况下,用户实际希望进行的请求是“介绍信息学院的专业”。由于LLM在对话式稠密检索中表现出了出色的请求改写能力,在这一模块中,RETA-LLM将当前用户请求和之前的对话记录输入LLM进行请求改写。
其次,RETA-LLM使用文档检索模块从外部知识库中召回与改写后查询相关的文档。文档检索模块是与信息检索系统交互的模块,其利用改写后的用户请求,从外部知识库中召回相关的文档。
接下来,RETA-LLM使用段落提取模块抽取出文档与用户请求相关的片段,并将其组合为参考内容。由于本身具有输入长度限制(一般为2048或4096个token),LLM无法接受直接将所有相关的文档内容作为参考一并输入并生成回答。而如果直接将文档内容进行截断以符合输入长度限制,可能会损失其中的重要信息。为了解决这一问题,RETA-LLM再次利用LLM从检索到的文档中提取出相关的片段,以缩减输入的参考内容长度。由于单个文档的长度也可能超出LLM的输入限制,RETA-LLM中使用了滑动窗口策略逐段落地提取文档片段。在抽取完成后,RETA-LLM将抽取出的所有片段拼接作为参考内容。
之后,RETA-LLM使用答案生成模块生成对用户请求的回答。如先前研究结果所证明的,通过将检索到的参考资料输入LLM,可以生成事实更加准确的答案。
最终,RETA-LLM使用事实检查模块来验证生成的答案是否包含事实性错误,并输出符合用户请求的回答。尽管为答案的生成提供了额外的参考资料,LLM仍可能出现幻觉问题。因此,需要设计一个模块来进一步进行事实验证。由于LLM具有强大的自然语言理解能力,REAT-LLM将参考资料和生成的答案提供给它们来做出判断。最终,RETA-LLM可以决定是输出生成的答案还是说“我无法回答这个问题”。
注意到,对LLM的所有输入都被包裹在prompt中,以方便LLM对输入理解。如整体框架图中所示,研究团队在RETA-LLM中完全解耦了信息检索系统和LLM。这种分离式设计使得用户可以自定义其个人搜索引擎和LLM。
03
如何使用RETA-LLM
为了使工具包更方便个人使用,研究团队在Github仓库中提供了一个完整的流程来构建基于html网页资源的领域内问答系统。具体流程如下:
首先,RETA-LLM使用Beautiful Soup包在 HTML 转换器中将原始 html 文件转换为 json 数据。
其次,RETA-LLM按照类似disentangled-retriever的实现方式,建立稠密索引。
第三,用户需要准备用于回答问题的LLM。对于LLM的加载和响应,团队在仓库提供了LLama、YuLan、ChatGLM和GPT-3.5 API的模板。如果用户使用其他LLM,他们可以编辑工具包中的代码和配置。
最后,用户可以使用streamlit软件包来启动他们自己的RETA-LLM 服务。关于使用流程的更多细节可以在Github仓库中找到。
一个RETA-LLM的服务案例:
基于RETA-LLM和上述使用流程,我们利用中国人民大学招生在线平台上的网页,同时加入了一些内部文档问答对,在进行了更精细化的html解析后,构建了一个人大招生辅助支持系统。下图中展示显示了一个使用案例。
04
总结与展望
在完成RETA-LLM工具的初步构建后,研究团队仍然在不断迭代版本,近期计划进一步补充模块,以支持主动检索增强LLM的研究。同时,团队也希望能够通过整个开源社区,让更多的研究人员加入进来,推动该工具包的升级和完善。
END
暂无评论内容