分塊大小對(duì)語義檢索結(jié)果有何影響?
照片由 Steve Johnson 在 Unsplash 上拍摄
在自然语言处理和人工智能的世界里,分段是一项至关重要的技术,它涉及将大量文本拆分成更小、更易于管理的片段。当与大型语言模型(LLM)和语义检索系统一起工作时,这一过程尤其重要,因为它直接影响从这些模型获得的结果的相关性和准确性。在这篇博客文章中,我们将深入了解分段的概念,探讨其在与LLM相关应用中的重要性,并分享我们在不同分段大小上的实验心得。
分块:简单解释这篇博客提到我们的Unacog的AI档案示例。该演示使用了大量关于AI和LLM的研究文章(从Arxiv.org收集的2800篇,截至2024年2月4日),让你探索不同chunk大小(100、200、300和400个tokens)对检索增强生成的影响。
切分是指将一大篇文本数据分割成较小的、语义上有意义的单元。通过这样做,我们可以确保每个切分单元包含相关的信息,同时尽量减少噪音干扰,使得大型语言模型更易于处理和理解这些内容。这些切分单元的大小可以根据具体应用场景和预期结果的不同而有所变化。
当谈到语义检索时,分块在确定检索结果的相关性方面起着关键作用。大型语言模型(LLM)具有有限的上下文窗口,这意味着它们只能一次处理一定量的文本。通过将数据划分为较小的部分,我们可以确保每个片段都适合大型语言模型的上下文窗口,从而使其能够更有效地处理和理解这些信息。这在利用检索结果来增强大型语言模型的知识时尤为关键,因为它直接影响输出的质量和准确性。
然而,找到最合适的分块大小并不总是那么简单。如果分块太小,它们可能缺乏捕捉文本完整含义所需的上下文。另一方面,如果分块太大,它们可能包含多个想法或主题,导致分块对特定查询的相关性减弱。这就是实验和评估发挥作用的时候,因为即使使用相同的查询,不同的分块大小也会导致获取到的信息有所不同。
基于块的表示与检索的理解为了更好地理解分块大小如何影响语义检索结果,我们首先需要了解分块是如何数学表示的,以及用户查询如何与这些表示相互作用。
在语义检索系统中,通常会使用诸如词向量或基于变压器的模型等技术将每个文本片段转换成密集向量。这些密集向量在高维空间中捕捉文本的语义。
将文本块转换成向量嵌入后,几乎总是会被放入向量数据库中,以便更加方便和高效地使用。
存储文本片段向量嵌入的过程
这意味着你不能只是在运行时随意调整片段大小;需要回到原文本,重新运行嵌入模型,并保存新的嵌入。这样可以确保向量数据库经过优化,从而能够快速进行相似性搜索和检索。
当用户提交查询时,该查询也会被转换成密集向量,使用同样的技术。语义检索系统使用余弦相似度等方法,将查询向量与数据库中各片段的向量表示进行比较。最后,检索出相似度最高的前k个片段,并展示给用户。
将前K个结果注入提示词中
段的大小会影响向量表示,从而影响相似度分数。较小的段可能具有更集中的表示,而较大的段可能具有更复杂的表示,更能捕捉广泛上下文。
检索结果会受到分块大小的影响。不仅分块大小由于大型语言模型的上下文限制很重要,还因为它可以影响检索到的内容的相关性。即使我们有一个具有大上下文窗口的模型,也不一定意味着我们应该始终使用大量的文本块。
使用大块文本的一个缺点是,它过于依赖LLM从大块文本中找出并使用最关键信息的能力。研究表明,当前的模型在处理这种情况时可能会遇到困难,尤其是当最关键的信息夹杂在大块文本的中间时。
另一个问题是,在使用语义检索系统时会很明显,即使使用同样的查询词,不同的分块大小也可能会产生不同的检索结果。这是因为分块的语义会随着其大小和包含的上下文变化而变化。
“检索增强生成”前十结果 —查看演示 …
例如,当你搜索“retrieval augmented generation”并将结果分别与200和400个片段进行比较时,你会注意到不同的结果。如上图所示,在大多数情况下,200和400的差异可能不会很大。上面的截图显示了典型的案例:在两种情况下,大多数相关的相同信息都可能出现,然而,相似度评分和结果排名可能会有所不同。这是因为较小的片段会有更集中的上下文,而较大的片段则可能包含更多与用户查询相关的额外信息,但也可能包含不那么相关的额外信息。
过大的数据块当段落过大时,它们可能包含多个不同的想法或主题。这会削弱段落与特定查询的相关性,因为段落可能涵盖了广泛的信息,其中一些内容可能与用户的搜索不直接相关。比如,段落可能太大以至于包含了太多无关紧要的信息,这会让段落与用户的具体查询不那么相关。
在检索增强生成的情境下,较大的段落可能使结果不够集中,相关性降低。这是因为相似度分数是基于整个段落来计算的,如果段落包含多种想法,分数可能无法准确反映其中最关键信息的相关性,这可能是导致幻觉的一个因素。
通过使用更小、更集中的片段,排名前 K 的结果更有可能更直接地与用户的查询相关,因为每个片段通常只关注一个主要思想或主题。这可以使得检索增强生成应用的结果更加准确和实用。
在不增加内容块大小的情况下嵌入更多内容一种在语义检索中包含更多上下文而不增加块尺寸的方法是嵌入上下文(通常称为“从小到大”)。
在这个方法中,不仅仅是嵌入该块本身的内容,还会嵌入块周围的内容(例如,前面和后面的块)。这样语义检索系统就能在不增加LLM处理块大小的情况下,考虑该块更广泛的背景。
前K个结果带有扩展上下文——示例演示的配置选项
例如,假设你有一个200词的段落。而不是仅仅嵌入这个200词的段落,你也可以嵌入该段落前后各200词。这样,你可以考虑总共600词的上下文,但实际处理的段落大小仍然是200词。
“从细到粗”技术在需要更细粒度搜索时特别有用。通过嵌入周围的环境,可以捕获每个块的更详细信息,而不改变块本身的语义表示。
最佳的数据块大小似乎并没有一个适合所有情况的理想块尺寸。理想的块尺寸取决于具体的应用场景和系统期望实现的目标。
例如,如果目标是创建一个能够在大量文本语料库中查找特定主题的所有相关提及内容的系统,更小的分块可能更为合适,因为更小的分块可以确保即使是简短的提及也能被捕捉到。更小的分块允许更集中的搜索,并有助于确保捕捉到该主题的即使是简短的提及也能被捕捉到。
另一方面来说,如果系统设计为优先考虑总结和决策过程,较大的块可能更合适。较大的块提供了更多的上下文,有助于LLM生成更连贯且有信息量的总结或回答。
有意思的是,流行的向量数据库 Pinecone(一种流行的选择)建议在一个数据库里使用不同长度的段落可能有助于优化结果。通过结合长短不一的片段,数据库能够捕捉到更多样化的上下文和信息,更好地应对各种查询。
最终来说,为您的具体应用场景找到最佳的分段大小需要仔细考虑您的用例、内容的特性以及所选嵌入模型的能力。通过尝试使用不同的分段大小并评估其性能,可以帮助您找到粒度和上下文之间的最佳平衡,确保您的语义检索系统能够提供最相关、最准确的结果。
最后。解释:在中文语境中,"最后" 是一个更口语化的表达方式,用来表示一段讨论或展示的结尾。同时,根据中文的标点规则,句子结尾加上了句号。
在考虑对你特定用例最适合的块大小时,你可以问自己几个关键问题,
1. 索引的内容是什么类型的?您处理的是长篇内容,比如研究论文,还是较短、更简洁的内容,比如社交媒体帖子?这将影响您应用程序中选择的嵌入模型和分块方法。
2. 你在用哪种嵌入模型,它在哪些分块大小上表现最好?不同的模型对不同的分块大小有不同的表现,所以了解你所选模型的能力和局限性很重要。
3. 你预期用户查询的长短和难易程度会是怎样的?用户的问题是简短还是更详尽?根据这种情况调整你的分块方法可以更准确地回答用户的问题。
4. 您打算如何在应用程序中使用检索到的结果?您是打算用它们来进行语义搜索、问答、摘要还是其他用途?如果这些结果需要输入到另一个令牌有限制的LLM中,您需要仔细考虑分块大小,以确保在这些限制内包含最重要的信息。
通过花时间仔细考虑这些因素,尝试不同的块的大小,您就可以开发出一个语义检索系统,该系统能有效地满足您应用程序的独特需求,并向用户提供最相关和准确的结果。
最后的说明 — 通过我们的演示亲自体验一下为了体验本文讨论的概念,您能够查看我们的实时演示(Live Demo):Unacog的AI档案库。这个交互示例让您能够探索不同大小的块(100、200、300和400个token)对使用包含2,800篇关于AI和LLM的研究文章的Arxiv.org集合进行检索增强生成技术的影响。这些文章归档于2024年2月4日前。
要了解更多关于演示的信息并深入了解该主题,请阅读我们在 Medium 上的相关文章:“在 2,800 份 AI 文档上的检索增强生成:实时演示版本”(https://medium.com/@lamslide/retrieval-augmented-generation-on-2800-ai-documents-live-demo-2cd11d0ff732 )
对于那些对技术细节和代码示例感兴趣的人来说,该项目可以在GitHub上找到。共同學(xué)習(xí),寫下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章