小白学大模型 RAG:9种不同的Chunk划分方法

最近已有不少大厂已停止秋招宣讲了。

节前,我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。

针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了深入的讨论。

总结链接如下:

喜欢本文记得收藏、关注、点赞


在RAG(Retrieval Augmented Generation)技术中,划分chunk是将长文档或数据集切割成较小的、独立的部分,以便于处理、存储和检索。

划分Chunk的必要性

RAG技术中划分chunk是为了更好地适应大模型的处理能力,提高检索和生成的效率和准确性,以及优化内容的相关性。

图片

  • 从大模型输入角度

模型在预训练过程中通常有上下文长度限制,如果输入的文本超过这个长度,超出部分会被丢弃,从而影响模型的性能表现。因此,需要将长文档分割成小块,以适应模型的上下文窗口。

  • 从语义表示的差异性角度

长文档中各个片段的语义可能存在较大差异,如果将整个文档作为一个整体进行知识检索,会导致语义杂揉,影响检索效果。 将长文档切分成多个小块,可以使得每个小块内部表意一致,块之间表意存在多样性,从而更充分地发挥知识检索的作用。

如何评价Chunk划分方法?

分块归因(Chunk Attribution)

分块归因用于评估每个检索到的分块是否对模型的响应产生了影响。它使用一个二元指标,将每个分块归类为“有影响”(Attributed)或“无影响”(Not Attributed)。分块归因与分块利用率(Chunk Utilization)密切相关,其中归因确定分块是否对响应产生了影响,而利用率衡量分块文本在影响中所占的程度。 只有被归为“有影响”的分块才能有大于零的利用率得分。

分块利用率(Chunk Utilization)

分块利用率衡量每个检索到的分块中有多少文本对模型的响应产生了影响。这个指标的范围是0到1,其中1表示整个分块影响了响应,而较低的值,如0.5,则表示存在“无关”文本,这部分文本并未对响应产生影响。 分块利用率与分块归因紧密相关,归因确定分块是否影响了响应,而利用率衡量分块文本在影响中所占的部分。只有被归为“有影响”的分块才能有大于零的利用率得分。

划分Chunk的注意事项

在进行chunk划分时,需要保留每个chunk的原始内容来源信息,这包括但不限于:

  • 页面编号:记录每个chunk来自文档的哪一页,有助于在需要时快速定位原始信息。

  • 文档标识:为每个文档分配一个唯一的标识符,以便在检索时能够准确引用。

  • 版本控制:如果文档会更新,记录chunk对应的文档版本,确保内容的一致性和准确性。

随着时间的推移,原始文档可能会更新或修改(可能使用新的文档处理方法重新划分chunk)。因此,在划分chunk时需要考虑:

  • 更新策略:制定一个清晰的策略,以确定何时以及如何更新chunk,以保持信息的最新性。

  • 版本兼容性:确保新旧版本的chunk能够兼容,或者能够明确区分不同版本的chunk。

此外chunk之间的顺序可能对理解整个文档至关重要:

  • 顺序标记:为每个chunk分配顺序编号或时间戳,以保持它们的逻辑顺序。

  • 顺序检索:在检索时,确保能够按照正确的顺序检索和展示chunk。

虽然存在不同的chunk划分方法,但文本内容的复杂性和多样性要求我们在划分chunk时采用灵活和多样的方法:

  • 多种划分方法:根据文本的特点和需求,可能需要结合固定大小、滑动窗口、语义分块等多种方法。

  • 上下文感知:在划分chunk时,考虑上下文的连贯性,避免将语义上紧密相关的信息分割开。

划分Chunk的各种方法

固定大小块分块策略(Fixed Size Chunking)

  • 将文本分成固定大小的块,适用于内容格式和大小相似的数据集。

  • 示例代码:chunk_text(text, chunk_size=500),其中chunk_size是每个块的目标大小。

图片

滑动窗口分块策略(Sliding Windows)

  • 新的块与前一个块的内容重叠,包含部分内容,以更好地捕捉每个块周围的上下文。

  • 可能导致文本被打断,产生无意义的块。

上下文感知分块策略(Context-aware Chunking)

  • 包括基于token、句子、正则表达式和Markdown的分块技术。

  • 例如,TokenSplitter使用token划分文档,SentenceSplitter通过句子边界分割文本。

面向主题的分块技术

  • 使用句子嵌入来识别文档中主题的变化,确保每个块封装一个单一的、连贯的主题。

  • 通过标识主题转移的位置,提高检索性能和响应的准确性。

语义分块(Semantic Chunking)

  • 核心目的是把相同语义的token聚集在一起,不同语义的token分开,利于后续的检索和重排。

  • 通过计算句子组合的相似度来识别局部极小值,这表明潜在的话题转换,可以用阈值来确定重要的边界。

递归分块(Recursive Chunking)

  • 使用一组分隔符,以分层和迭代的方式将文本划分为更小的块。

  • 如果最初分割文本的尝试没有产生所需大小的块,则该方法会使用不同的分隔符递归地调用结果块,直到达到所需的块大小。

基于文档类型的分块(Document Based Chunking)

  • 根据文档的固有结构对其进行拆分,考虑了内容的流和结构。

  • 例如,MarkdownTextSplitter类,以分隔符的方式分割Markdown文件。

基于大模型的分块(LLM Based Chunking)

  • 通过大模型来理解文本,并将文本进行拆分为句子或段落。

  • 依赖大模型能力,可以拆分原始文本,也可以从原始文本中生成新的文本

来自jina的Late Chunking

传统的在将长文档分割成多个分块时,可能会丢失重要的上下文信息,导致检索效果不佳。Late Chunking是一种基于语义的分块方法:

图片

  1. 整体文本处理:Late Chunking 首先将整个文本输入到长上下文嵌入模型中,生成每个token的向量表示。这意味着模型能够捕捉到整个文本的上下文信息,而不仅仅是单个分块的局部上下文。

  2. 分块处理:在获得整个文本的token级嵌入后,再将文本分割成多个分块。每个分块包含一定数量的token,并且可能存在重叠部分,以保留边界处的上下文信息。

  3. 条件嵌入生成:对于每个分块,使用mean pooling或其他池化方法,将分块内所有token的向量表示聚合成一个分块嵌入。由于这些分块嵌入是基于整个文本的上下文生成的,因此它们能够保留更多的上下文信息。

图片

Late Chunking 能够更好地保留长距离的上下文信息,此外减少了对完美语义边界的需求,即使使用简单的固定长度分块,也能与使用语义边界线索的传统分块方法相媲美。

图片

Late Chunking 不需要对嵌入模型进行额外训练,可以直接应用于任何使用均值池化的长上下文嵌入模型。Late Chunking 不仅限于特定的嵌入模型,它可以应用于任何支持长上下文和均值池化的嵌入模型。

来自jina的大模型分块

为了解决传统分块技术的局限性,jina开发了以智能识别和保留有意义的边界,提高RAG系统的检索质量。

jina使用qwen2-0.5b-instruct作为基础模型,训练三种变体的SLM。

  • simple-qwen-0.5:基于文档结构元素识别边界。

  • topic-qwen-0.5:基于文本内的主题来定义分块边界。

  • summary-qwen-0.5:识别文本边界并为每个段落生成摘要。

基于大模型的分块模型擅长处理包含代码、表格和列表的复杂文档,这些通常是传统方法难以处理的。上述三个模型能够在Nvidia 4090 GPU上运行,无需大量的计算资源。

图片

图片

尽管这些模型在处理复杂文档方面表现出色,但对于简单的叙述性内容,像Segmenter API这样的简单方法通常就足够了。

参考文献

  • https://www.galileo.ai/blog/mastering-rag-advanced-chunking-techniques-for-llm-applications

  • https://jina.ai/news/late-chunking-in-long-context-embedding-models/

  • https://jina.ai/news/finding-optimal-breakpoints-in-long-documents-using-small-language-models/

<think>好的,用户想了解大模型在信息提取方面的技术和方法,特别是如何从非结构化数据(比如PDF论文)中提取结构化信息。我需要结合提供的引用内容来构建回答。 首先,引用[1]提到了文档解析技术的重要性,尤其是在大模型时代。里面提到文档解析的难点,比如版面复杂、多模态元素等,这对信息提取来说很关键。所以应该先介绍文档解析作为基础,再过渡到大模型的应用。 然后引用[2]讨论了使用本地大模型(如llama3.1)从PDF中提取结构化信息的具体方法。这里提到了OCR集成、文本分块、提示工程和结构化输出。这些步骤需要详细说明,尤其是提示工程部分,如何设计指令让大模型准确提取信息。 接下来,用户的问题可能涉及技术实现的具体步骤,所以需要分点解释。比如文档解析作为预处理,大模型的微调,以及信息提取的流程。同时,要强调文档解析和大模型的结合,如何解决传统方法的不足。 还要考虑生成的相关问题,用户可能想了解技术难点、优化方法或应用场景,所以得提前准备好这些问题,比如文档解析的挑战、大模型优化的方向等。 最后,确保使用正确的中文术语,LaTeX格式的应用,比如数表达式需要用$...$,但当前内容可能涉及较少数,但如果有相关技术名词或公式,需要正确排版。不过目前看来可能不需要太多数表达,但要注意结构清晰,引用标识自然添加。</think>以下是大模型信息提取技术的实现方法及技术分析: ### 一、技术实现流程 1. **文档解析预处理** - 使用OCR技术识别PDF中的文字和表格,解决复杂版式解析问题[^1] - 通过TextIn文档解析算法实现多模态元素分离,准确率可达99.8%[^1] ```python # 示例:文档分块处理 def chunk_document(text, chunk_size=512): return [text[i:i+chunk_size] for i in range(0, len(text), chunk_size)] ``` 2. **大模型微调** - 使用LoRA等参数高效微调方法,在特定领域数据上优化模型表现 - 构建$Loss = \alpha L_{task} + \beta L_{structure}$混合损失函数[^2] 3. **信息提取流程** - 通过提示工程构建结构化指令: ```json { "instruction": "从文本中提取研究方法和实验结果", "output_format": {"methods": [], "results": []} } ``` ### 二、核心技术方法 1. **多模态理解** - 处理文本、公式$E=mc^2$、图表混合内容 - 采用Vision-Language Model架构处理图文信息 2. **结构化输出** - 使用JSON Schema约束输出格式 - 通过解码策略控制生成结构 3. **知识增强** - 注入领域词典和本体库 - 建立实体关系图$G=(V,E)$辅助推理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值