尽管微调LLM可以使其更了解特定领域,但仍可能存在不准确和幻觉的问题。因此,出现了检索增强生成(RAG)技术,以便让LLM的回答基于具体数据并提供来源支持。

RAG的工作原理

RAG的工作原理是为你想使用的数据片段创建文本嵌入,这样可以将源文本的一部分放入LLM用来生成回答的语义空间中。同时,RAG系统还能返回源文本,这样LLM的回答就有了人类撰写的文本作为支持,并且附带引用。

1722519381162.jpg

1、构建索引

将分块后的文本数据构建索引,以便快速检索相关块。

2、检索相关块

根据查询在索引中检索相关的文本块。

3、生成响应

将检索到的相关块提供给LLM,生成最终的响应。

在RAG系统中,我们需要特别注意数据片段的大小。

 

如何划分数据就是所谓的分块,这比直接嵌入整篇文档要复杂得多。

什么是分块?

分块(Chunking)是将长文档或数据集切割成较小的、独立的部分,以便于处理、存储和检索。

这种方法在处理大规模文本数据时尤为重要,因为LLM对长文本的处理能力有限。

分块的优点

    减少计算资源消耗:处理较小的文本块比处理整篇长文档消耗的资源少。

    提高检索效率:较小的块可以加快搜索和匹配过程,因为每个块包含的信息更集中。

    提升生成质量:模型可以更专注于特定的内容块,从而生成更准确和相关的响应。

 

为什么分块很重要?

在构建基于大型语言模型(LLM)的应用程序时,分块数据的大小对于搜索结果的准确性至关重要。

当你嵌入一段数据时,整个数据会被转换为一个向量

如果一个块包含的内容过多,向量就会失去对特定内容的准确描述。

如果分块太小,则会失去数据的上下文。

Roie Schwaber-Cohen指出:“开始思考如何将我的内容分成更小的块的原因是,这样当我检索时,它实际上能够命中正确的内容。你将用户的查询嵌入,然后将其与内容的嵌入进行比较。如果你嵌入的内容大小与用户查询的大小差异很大,你就更可能得到较低的相似度得分。”

如何考虑大小

 

考虑到查询和响应的大小也至关重要。根据 Schwaber-Cohen 的观点,你将文本块向量与查询向量进行匹配。但你还需要考虑作为响应的块的大小。例如,如果你嵌入了整章的内容而不是一页或一段,向量数据库可能会在查询和整章之间找到一些语义相似性。

但所有章节都相关吗?可能不是。更重要的是,LLM 能否从检索到的内容和用户的查询中产生相关的响应?


点赞(1) 打赏

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部