T-RAG = RAG + Fine-Tuning + Entity Detection

论文地址:T-RAG: Lessons from the LLM Trenches

原文地址T-RAG = RAG + Fine-Tuning + Entity Detection

T-RAG 方法的前提是将 RAG 架构与开源微调的 LLM 和实体树向量数据库相结合。重点是上下文检索。

2024 年 2 月 15 日

介绍

大型语言模型 (LLM) 越来越多地应用于各个领域,包括对私营企业文档的问答,其中数据安全性稳健性至关重要。

检索增强生成(RAG)是构建此类应用程序的重要框架,但确保其稳健性需要广泛的定制。

本研究分享了部署 LLM 应用程序以对私人组织文档进行问答的经验,使用名为Tree-RAG (T-RAG)的系统,该系统合并了实体层次结构以提高性能。

评估证明了这种方法的有效性,为现实世界的LLMs应用提供了宝贵的见解。

数据隐私

由于这些文档的敏感性,安全风险是首要问题,因此在公共 API 上使用专有的 LLM 模型来避免数据泄露风险是不切实际的。

这就需要使用可以在本地部署的开源模型。

此外,有限的计算资源和基于可用文档的较小的训练数据集也带来了挑战。

此外,确保对用户查询的可靠和准确的响应会增加复杂性,在此类环境中部署强大的应用程序时需要进行广泛的定制和决策。

Take-Aways

我对这项研究感兴趣的是,研究人员开发了一种应用程序,将检索增强生成(RAG)经过微调的开源大型语言模型(LLM)集成起来以生成响应。该模型使用源自组织文档的指令数据集进行训练。

他们引入了一种新颖的评估指标,称为Correct-Verbose,旨在评估生成的响应的质量。该指标根据答案的正确性来评估答案,同时还考虑包含超出原始问题范围的其他相关信息。

T-RAG

Tree-RAG (T-RAG) 的工作流程如下:

对于给定的用户查询,在向量数据库中搜索相关文档块,该块充当LLM上下文学习的上下文参考。

如果查询提到任何组织相关实体,则从实体树中提取有关实体的信息并将其添加到上下文中。经过微调的 Llama-2 7B 模型根据所提供的数据生成响应。

T-RAG 的一个特点是除了用于上下文检索的矢量数据库之外还包含实体树。

实体树

T-RAG 的一个显着特点是它结合了实体树和向量数据库以进行上下文检索。实体树存储有关组织实体及其层次结构排列的详细信息。该树中的每个节点代表一个实体,其父节点指示它们各自的组成员身份。

在检索过程中,该框架利用实体树来增强从向量数据库检索的上下文。

实体树搜索和上下文生成的过程如下:

  1. 最初,解析器模块扫描用户查询以查找与组织内的实体名称相对应的关键字。
  2. 一旦识别出一个或多个匹配,就从树中提取有关每个匹配实体的详细信息。
  3. 这些详细信息被转换为文本陈述,提供有关实体及其在组织层次结构中的位置的信息。
  4. 随后,该信息与从向量数据库检索的文档块合并以构建上下文。
  5. 通过采用这种方法,当用户询问实体时,模型可以获得有关实体及其在组织内的层次定位的相关信息。

考虑上图,上下文生成的检索过程涉及利用组织图中的说明性示例来演示如何执行树搜索和检索。

除了获取上下文文档之外,spaCy 库还与自定义规则一起使用来识别组织内的命名实体。

如果查询包含一个或多个此类实体,则从树中提取有关该实体的分层位置的相关信息并将其转换为文本语句。然后将这些语句与检索到的文档一起合并到上下文中。

但是,如果用户的查询未提及任何实体,则省略树搜索,并且仅利用检索到的文档中的上下文。

综上所述

我发现这项研究很有趣,因为它结合了 RAG 和微调。利用本地托管的开源模型来解决数据隐私问题,同时解决推理延迟、令牌使用成本以及区域和地理可用性问题。

同样有趣的是如何通过 spaCy 框架使用实体进行实体搜索和上下文生成。事实上,这不仅仅是一项研究成果,而是基于构建供实际使用的LLMs应用程序的经验而得出的经验教训。

  • 29
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,可以得知prompt+RAG的流程如下: 1. 首先,使用Retriever部分在知识库中检索出top-k个匹配的文档zi。 2. 然后,将query和k个文档拼接起来作为QA的prompt,送入seq2seq模型。 3. seq2seq模型生成回复y。 4. 如果需要进行Re-rank,可以使用LLM来rerank,给LLM写好prompt即可。 下面是一个简单的示例代码,演示如何使用prompt+RAG: ```python from transformers import RagTokenizer, RagRetriever, RagSequenceForGeneration # 初始化tokenizer、retriever和seq2seq模型 tokenizer = RagTokenizer.from_pretrained('facebook/rag-token-base') retriever = RagRetriever.from_pretrained('facebook/rag-token-base', index_name='exact', use_dummy_dataset=True) model = RagSequenceForGeneration.from_pretrained('facebook/rag-token-base') # 设置query和context query = "What is the capital of France?" context = "France is a country located in Western Europe. Paris, the capital city of France, is known for its romantic ambiance and iconic landmarks such as the Eiffel Tower." # 使用Retriever部分检索top-k个匹配的文档 retrieved_docs = retriever(query) # 将query和k个文档拼接起来作为QA的prompt input_dict = tokenizer.prepare_seq2seq_batch(query, retrieved_docs[:2], return_tensors='pt') generated = model.generate(input_ids=input_dict['input_ids'], attention_mask=input_dict['attention_mask']) # 输出生成的回复 generated_text = tokenizer.batch_decode(generated, skip_special_tokens=True)[0] print(generated_text) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值