未结构化数据不仅仅是给嵌入用的:利用隐藏结构提升检索性能

2024/11/15 21:03:11

本文主要是介绍未结构化数据不仅仅是给嵌入用的:利用隐藏结构提升检索性能,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

矢量搜索不需要做所有的工作。

AI冒险:寻找结构。由Brian Godsey用DALL-E生成。

在生成式人工智能(GenAI)应用中,特别是在检索增强生成(RAG)系统中,我们往往高度依赖于嵌入向量来处理非结构化数据。嵌入向量将文本文档的语义意义以高维向量的形式表示,使得机器可以读取。但实际上,有一种常见的误解:认为唯一能对“非结构化”文本做的就是将其嵌入到向量中,这种看法。向量是AI系统的语言,比如。

在某种程度上,有时候感觉我们好像集体忘记了,在词嵌入和生成式AI出现之前,有过不用词嵌入分析和转换文本的方法。词嵌入确实很有用,能解决很多问题,但它们不是万能的。

在这篇文章中,我们将探讨为什么仅仅依赖嵌入通常不足以从文本中获取最大化的信息和知识,为什么我们应该考虑其他互补的方法来从我们的文档中获取最大化的信息和知识。非结构化数据,按定义来说,没有被整齐地组织进表格或经典算法可以使用的格式中。然而,这并不意味着我们应该简单地剥离这些固有的结构,例如标题、超链接、段落关系、元数据,而只是将数据嵌入到向量中。实际上,忽视这些结构可能会无意中使我们的系统变得更弱、效率更低,并且更容易遗漏关键信息。保留并利用这些现有结构可以构建更有效和强大的检索系统。

AI之旅:探索结构层次。由Brian Godsey利用DALL-E生成。

只依赖嵌入的问题

语义搜索本身往往不足以完全满足复杂信息检索的需求,但通过结合结构化方法可以弥补这一不足。通过结合诸如保存文档关系、元数据和主题背景等结构化方法,我们可以使检索系统更加有效和智能。嵌入式方法非常强大,但与结构化数据结合使用时,它们成为更智能、更具能力的混合方法的一部分。

向量嵌入不是十全十美

向量嵌入确实很厉害。它们使AI系统能够将文档表示成高维空间中的向量,通过简单的向量运算,比如余弦相似度,来评估文本之间的关系。这有助于找到语义相关的文档——即使措辞不同,模型也能发现相关的思想。但是,完全依赖向量存在一个根本性的问题:嵌入存在信息损失的问题。

在嵌入过程中,我们将内容丰富的详细文档转换为固定长度的向量,在这一过程中,一些细微之处将会丢失。正如我在最近的文章《向量嵌入存在损失》中讨论的,嵌入可能无法捕捉到细微但重要的细节、特定的措辞,或者文档不同部分之间的关系。生成的向量擅长总结主要内容,但它们并不能完美保留所有有价值的细节,特别是在查询较为复杂或多细节时。

想象一下你向AI系统询问某个特定历史事件的细节,该事件中的某个方面。如果该细节被嵌入到一个没有足够突出该方面的向量中,检索可能会完全忽略它。问题不仅在于模型如何理解问题,还在于数据本身的表示方式。嵌入是一种抽象,就像任何抽象一样,都会带来相应的权衡。

非确定性检索带来的难题

仅依赖嵌入的另一个问题是大型语言模型(LLM)的不确定性。一旦检索到文档,即使输入的是相同的向量,LLM的响应每次可能都会有所不同。虽然这种变化有助于生成感觉自然的对话,但也可能使提供的细节变得不一致。这种随机性意味着,即便找到了相关文档,所需的特定信息也不一定会完整地出现在回复中。

此外,嵌入式表示捕捉语义相似性,但这并不总意味着确切匹配或所需的特定信息。有时,我们真正需要的并不是概念上最接近的文档,而是包含精确事实或细节的文档。嵌入式表示本质上并不优先考虑完全匹配,而是优先考虑概念上的相似性。这在尝试检索特定明确信息时是一个根本性的限制。

AI探索之旅:表象下的结构。由Brian Godsey使用DALL-E生成。

所谓的“非结构化”数据其实并不完全无结构。

我们常称其为“非结构化”数据,但实际上大多数文档集包含了大量的隐性结构。文档不仅仅是文字的混合——它们包含标题、章节和子段落、目录、引用和超链接。这种结构不仅帮助读者理解信息的流动以及哪些部分相互关联,还作为检索目的的重要元数据。忽略这些结构会丢失很多有用的上下文信息。

在另一篇最近的文章《哪些内容相关,您的文档会告诉您》(https://bit.ly/3BKZAJv)中,我强调了文档如何通过超链接、脚注和引用自然地指向其他知识。这些引用本身就是一种现有的结构,可以被保留并用于检索。当我们把文本嵌入到向量中时,我们通常会失去这种互相关联性,从而使检索过程变得不那么强大。如果我们选择保留这些引用并在检索时利用它们,我们可以提高检索到的文档的质量和相关性。

根据文章中的例子,一个文档包含一个超链接到另一个文档。超链接有意表明该文档包含相关或补充信息。如果我们只是将这两个文档作为独立向量进行嵌入,而不考虑它们之间的连接,那么在检索过程中,我们就无法理解这种关系。相反,我们应该保留这些半结构化的层次,明确维护这些连接,以便检索系统能够获取更丰富的背景信息。

正如文章所展示的,通过文档结构改进检索的一种直接的方式是采用图检索(Graph RAG)方法——即构建一个连接文档与概念的知识图,在检索过程中遍历知识图,从而可能找到仅靠语义向量搜索无法找到的文档。

AI探索之旅:重大隐藏结构发现。由Brian Godsey使用DALL-E生成。

管理非结构化信息的其他方法

除了向量嵌入技术之外,还有多种方法可以通过利用文档内在的结构来丰富检索过程的方式。结构化的方法,如主题划分、保留元数据和基于关键词的分组方法,可以显著提升RAG系统的性能。通过整合这些策略,我们可以弥补仅依赖嵌入的不足,从而提高检索的整体效果。

主题分类,以便更好地检索

要从非结构化数据中提高检索效率,我们应经常思考如何将文档分块和嵌入。通常,文档会根据大小限制被分割成块,很少考虑主题的一致性。优化分块策略,比如根据主题或逻辑部分来划分文档,能显著帮助保持内容的意义和结构。

主题分块创建了自包含且连贯的文本段落,提升了嵌入质量。主题分块有助于保持思想的逻辑连贯性,而不是随意分割可能会丢失上下文信息的段落。例如,将产品手册分为“设置说明”、“故障排除”和“维护”等部分,能产生更有意义的嵌入,而不会像按大小随意分割那样失去意义。

主题一致的嵌入能带来更准确的检索,因为每个片段代表一个独立的主题,而不是一堆不相关的信息。这种方法可以大幅提升检索质量,尤其是在RAG系统中,上下文连贯性对于生成有见地的回复非常重要。

在《你的文档告诉你哪些信息最重要》(https://bit.ly/3BKZAJv)中,我创建了一个示例,展示了检索系统在提取所有相关文档时可能遇到的困难,尤其是在回答有关西雅图太空针塔的问题时。例如,查询“太空针塔附近有哪些”可能会遗漏那些虽然没有明确提到太空针塔,但包含附近区域相关信息的文档。

在这种情况下,按主题分块处理可以确保有关西雅图地标的相关文档被视为连贯的整体,即使这些文档并没有直接提及太空针塔。通过按主题内容(例如,下皇后区的所有地标等)对文档进行分组,可以提高在检索过程中保留相关背景信息的几率。

保留文档元数据

利用文档的元数据是提高检索效果的另一个有效方法。作者姓名、出版日期、章节标题和引用主题等元数据对提高检索准确性非常有帮助。与其仅仅依赖文本内容,元数据还能提供更多关于相关度的线索。

当被询问某个领域最近的发展时,元数据如出版日期对于识别最相关的文档至关重要。在检索过程中保留和使用元数据可以让系统优先处理较新的文档,提供更准确、更及时的信息。章节标题有助于保持文档的内部结构,引导系统找到与查询最相关的部分或内容。将元数据视为检索过程中的关键部分有助于捕捉仅靠嵌入信息往往无法捕捉到的上下文和具体细节。

在关于太空针塔的例子中,元数据可以表明与其他著名地标或地区之间的联系。如果一份关于太空针塔的文档包含链接到下皇后区的元数据,检索系统可以更有效地找到相关文档,即使这些文档在向量搜索中没有被标记为语义上相似。

对于特定时间的查询,例如“最近的太空针翻新”,元数据中的发布日期允许系统过滤和优先处理文档。虽然向量嵌入可以捕捉通用内容,但是元数据通过添加特定和结构化的提示来确保其相关性。

关键词链接及特定目标的检索

关键词链接和搜索提供了一种不同于纯向量嵌入的替代方案。与嵌入将文档表示在高维空间不同,关键词链接和搜索在检索时优先考虑特定的词或短语,确保精确。这在需要精确匹配而非仅仅语义相似的查询中特别有效。常见的关键词链接和/或搜索方法包括:构建包含关键词和概念的知识图,用于图RAG搜索,将全文搜索与向量搜索相结合,以及为文本文档建立倒排索引。

例如,比如说一个数据集包含关于不同机器学习模型的文档,而用户询问关于“随机森林”的具体信息,关键词链接确保所有提到“随机森林”的文档会被优先显示。相比之下,向量搜索则可能会找到关于更广泛的集成方法的文档,但这可能并不能直接回答用户的查询。

虽然关键词链接在理解更广泛的概念上没有向量嵌入那么灵活,但它在精确度上更胜一筹。通过同时使用嵌入和关键词链接,我们可以在语义理解和目标检索之间取得平衡——提供两种方法的最佳效果。

假设有一个关于机器学习的技术文档场景。如果用户提问“使用随机森林有什么缺点?”,关键词链接和搜索功能会优先展示明确提到“随机森林”的文档,这样的文档会优先于仅讨论集成学习的文档被展示出来。

基于嵌入的方法可能会找到与集成学习相关的文档,但这可能无法满足用户对随机森林细节的需求。关键词链接以及搜索功能确保系统能够直接提供符合用户需求的精确信息。

AI探索之旅:隐藏结构的全景图。由Brian Godsey用DALL-E生成。

混合方法:结构化检索作为嵌入的补充手段

这里的关键点并不是说向量嵌入就不好——它们是表示和检索非结构化数据的非常强大的工具。然而,通过结构化方法可以缓解它们的一些明显局限性。一个混合检索系统,结合了主题分块、元数据保存和基于关键词的分组等多种结构化方法,可以显著提升检索到的文档质量和相关性。通过平衡嵌入的优势(语义相似性)与结构化检索的精确性,我们可以创建既全面又精确的系统——能够处理复杂的查询需求,同时保持一致可靠。

这种混合方法在RAG系统中特别有效,其目标是基于检索到的多种文档提供知情的回答。通过在检索流程中加入结构,确保我们的AI系统不仅能理解每个文档的意思,还能理解这些文档之间的关系和联系。

一个不仅有嵌入的未来,而不仅仅是嵌入。

向量嵌入非常有用,真是太棒了,但它们并不是处理非结构化数据的唯一方法。非结构化数据并非完全无序——文档包含标题、链接、引用和元数据等内在结构,所有这些都可以被用来改善检索。

如上文提到的文章中所述,向量嵌入经常会丢失重要的细节和结构,这会降低检索质量。并且,保持文档之间的关系和引用可以提高检索性能,通过保持重要上下文。通过优化文本划分、保留元数据以及基于关键词的分组,我们能够提升AI系统的准确性和可靠性,尤其是在检索增强生成应用方面。

最终,一种结合了向量嵌入带来的语义搜索优势和结构化方法提供的精确性和上下文的平衡方法将产生更智能、更强大的AI系统。让我们开始将无结构数据视为隐藏结构等待发掘——而不是在嵌入过程中被忽视。可以查看我在DataStax博客上的文章,了解我们如何通过知识图谱和图RAG实现这一点的一个方法。

_by Brian Godsey, Ph.D. (LinkedIn ) — 数据科学家和工程师 // 做 AI 和 ML 产品 // 著有 Think Like a Data Scientist_

探索AI:半结构化数据架构。由Brian Godsey利用DALL-E生成。

向量嵌入存在信息损失。这里有一些应对方法。AI系统也不完美(哎呀!)这里有一些原因。towardsdatascience.com
检查你对数据的假设,这在数据科学或其他任何领域都是一个一直适用的建议。towardsdatascience.com


这篇关于未结构化数据不仅仅是给嵌入用的:利用隐藏结构提升检索性能的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程