在自然语言处理和人工智能领域,分块是一项关键技术,它将大段文本分解成更小、更易于管理的片段。在使用大型语言模型(LLM)和语义检索系统时,这一过程尤为重要,因为它直接影响到这些模型所获得结果的相关性和准确性。在这篇文中,我们将深入探讨分块的概念,探讨它在 LLM 相关应用中的意义,并分享我们自己在不同分块大小的实验的见解。
分块: 解释
分块是将大量文本数据分割成语义上有意义的较小单元的过程。通过这样做,我们可以确保每个分块都包含相关信息,噪音最小,从而使 LLM 更容易处理和理解内容。这些语块的大小可以根据具体的使用情况和系统的预期结果而有所不同。
说到语义检索,分块在确定检索结果的相关性方面起着至关重要的作用。LLM 的上下文窗口有限,这意味着它们一次只能处理一定量的文本。通过将数据分块成较小的片段,我们可以确保每个分块都在 LLM 的上下文窗口内,使其能够更有效地处理和理解信息。这一点在使用检索结果扩充 LLM 的知识时尤为重要,因为它直接影响到生成输出的质量和准确性。
然而,找到最佳的分块大小并不总是那么简单。如果语块太小,可能会缺乏必要的上下文来捕捉文本的全部含义。另一方面,如果分块过大,可能会包含多个观点或主题,从而削弱分块与特定查询的相关性。这就是实验和评估发挥作用的地方,因为即使使用相同的查询,不同的分块大小也会导致不同的检索结果。
了解块表示和检索
要想更好地理解块大小对语义检索结果的影响,就必须了解块在数学上是如何表示的,以及用户查询是如何与这些表示进行交互的。
在语义检索系统中,每个文本块通常都会使用单词嵌入或基于转换器的模型等技术转换成密集的向量表示。这些向量表示法在高维空间中捕捉文本的语义。
文本块转换为矢量嵌入后,几乎都会在矢量数据库中建立索引,以便于高效使用。
这就意味着不能随心所欲地调整块的大小;这需要返回原始文本,再次通过嵌入模型运行,并存储新的嵌入以供使用。这一过程可确保优化向量数据库,以实现快速的相似性搜索和检索。
当用户提交查询时,查询本身也会使用同样的技术转换成密集向量。然后,语义检索系统会使用余弦相似度等相似度量,将查询向量与数据库中所有块的向量表示进行比较。然后检索出相似度得分最高的 k 个数据块,并将其呈现给用户。
数据块的大小会影响向量表征,进而影响相似性得分。较小的数据块可能具有更集中的表征,而较大的数据块可能具有更复杂的表征,能捕捉到更广泛的背景。
数据块大小影响检索结果
块大小的重要性不仅在于 LLM 的上下文限制,还在于它会影响检索结果的相关性。即使我们的模型具有较大的上下文窗口,也并不一定意味着我们应该总是使用大块文本。
使用大块文本的一个缺点是,它过于依赖 LLM 识别和使用文本块中最相关信息的能力。研究表明,目前的模型在这方面可能存在问题,尤其是当最相关的内容位于大块文本中间时。
另一个问题在使用语义检索系统时也很明显,那就是即使使用相同的查询,不同大小的数据块也会检索出不同的结果。这是因为语块的语义会根据其大小和所包含的上下文而发生变化。
例如,当你搜索 "检索增强生成 "并比较 200 和 400 块的结果时,你会发现结果是不同的。如上图所示,在大多数情况下,200 和 400 的结果差异可能不会很大。上面的截图显示了典型的情况:两种情况下可能会出现大部分相同的相关信息,但相似度得分和结果排名可能会有所不同。这是意料之中的事,因为较小的信息块会有更集中的上下文,而较大的信息块则会包含额外的信息,这些信息可能与用户的查询相关,也可能不相关。
过大的信息块
如果信息块过大,可能会包含多个不同的想法或主题。这会削弱信息块与特定查询的相关性,因为信息块可能涵盖广泛的信息,其中一些可能与用户的搜索并不直接相关。
在检索增强生成的情况下,当你根据相似性得分检索前 K 个结果时,较大的信息块可能会导致搜索结果重点不突出、相关性较低。这是因为相似性得分是根据整个信息块计算的,如果信息块包含多个想法,那么得分可能无法准确反映信息块中最重要信息的相关性(这是造成幻觉的潜在原因)。
通过使用更小、更集中的数据块,前 K 个结果更有可能与用户的查询直接相关,因为每个数据块通常只涵盖一个主要观点或主题。这可以为检索增强生成应用带来更准确、更有用的结果。
嵌入更多上下文,同时不增加分块大小
在语义检索中包含更多上下文而不增加分块大小的一种方法是嵌入周围上下文(通常称为 "由小到大")。
在这种方法中,不只是嵌入语块本身,还要嵌入语块的周围上下文(如前面和后面的语块)。这样,语义检索系统就能考虑到语块更广泛的上下文,而不会实际增加 LLM 处理的语块大小。
例如,假设你的语块大小为 200 字。与其只嵌入 200 字的语块,你还可以嵌入语块之前的 200 个字和语块之后的 200 个字。这样,你就能有效地考虑到 600 个字的上下文,而实际的语块大小仍然保持在 200 个字。
由小到大 "技术在需要对语块进行更精细搜索时特别有用。通过嵌入周边上下文,可以在不改变语块大小(也就是语义表示)的情况下获取每个语块的更详细信息。
最佳块大小
似乎没有一个放之四海而皆准的最佳块大小。理想的分块大小取决于具体的使用情况和系统的预期结果。
例如,如果目标是创建一个系统,在大量文本语料库中查找特定主题的所有相关提及,那么较小的块大小可能更合适。较小的语块可以让搜索更有针对性,并有助于确保即使是简短的话题提及也能被捕捉到。
另一方面,如果系统的设计优先考虑总结和决策,那么较大的语块可能更适合。较大的信息块能提供更多的上下文,有助于 LLM 生成更连贯、更翔实的摘要或回复。
有趣的是,流行的矢量数据库 Pinecone 认为,在一个数据库中包含不同长度的片段可能会改善结果。通过将短块和长块结合在一起,数据库可以捕捉到更广泛的上下文和信息,更灵活地适应不同类型的查询。
最终,要为你的特定应用找到最佳的分块大小,需要仔细考虑你的使用案例、内容性质以及所选嵌入模型的功能。试验不同的块大小并评估其性能可以帮助你在粒度和上下文之间取得适当的平衡,确保语义检索系统提供最相关、最准确的结果。
结论
花时间仔细考虑这些因素并尝试不同的块大小,你就能开发出有效满足应用独特需求的语义检索系统,并为用户提供最相关、最准确的结果。
最后说明--使用我们的现场演示
要亲身体验本博文中讨论的概念,请查看我们的现场演示: Unacog 的人工智能档案。通过这个交互式示例,你可以使用 Arxiv.org 提供的 2024 年 2 月 4 日之前存档的 2,800 篇人工智能和 LLM 研究文章,探索不同块大小(100、200、300 和 400 标记)对检索增强生成的影响。