当前位置: 首页 > news >正文

常见的几种分块策略,每种策略都有适用场景和优缺点

关于医疗文档或长文本的分块策略(chunking strategies),在自然语言处理(特别是在处理医疗数据、问答系统、多轮对话等任务中)中,是非常关键的一步。分块策略决定了文本被切分成多少块、每块包含多少上下文信息,这会直接影响模型的表现。

以下是常见的几种 分块策略,每种策略都有适用场景和优缺点:


🧱 1. 固定窗口滑动(Fixed-size Sliding Window)

描述:

将文本按固定长度(比如 512 个 token)滑动切分,中间允许有重叠(如 50%)。

参数:

  • chunk_size: 每块的最大长度
  • stride: 每次滑动的步长(stride < chunk_size 会产生重叠)

举例:

假设文本为 0~1000 tokens,chunk_size=100,stride=50:

chunk1: tokens 0~99
chunk2: tokens 50~149
chunk3: tokens 100~199
...

优点:

  • 保留上下文连续性
  • 适用于多模态任务或长文档摘要任务

缺点:

  • 重叠增加了计算成本
  • 可能出现重复回答或重复信息提取

📘 2. 按段落分块(Paragraph-based Chunking)

描述:

根据文本原始的段落、换行或标题结构进行切分,每段或每几段构成一个块。

场景:

  • 医疗病历、科研报告、FAQ 等文档往往本身有结构,适合此方式。

优点:

  • 保留自然语义结构,效果通常比固定窗口更自然
  • 避免句子被截断

缺点:

  • 块的长度可能不均匀(过短或过长)
  • 某些段落可能信息密度低

🧩 3. 按句子分块(Sentence-based Chunking)

描述:

先用句子分割器(如 nltk.sent_tokenize),再按一定数量组合成块。

示例:

假设每 3 句为一个块:

chunk1: sentence1 + sentence2 + sentence3
chunk2: sentence4 + sentence5 + sentence6
...

优点:

  • 保证语义连贯
  • 更适合问答任务或摘要任务

缺点:

  • 句子长短不一,token 数量不好控制
  • 可能需要动态裁剪

🧠 4. 基于语义边界的智能分块(Semantic-aware Chunking)

描述:

借助分句模型(如 spaCy、CoreNLP)或 embedding 计算,检测语义边界(如话题变化、主语变化)后分块。

方法:

  • 对句子生成 embedding
  • 相邻句子之间计算余弦相似度
  • 相似度低时认为话题有变化,作为切分点

优点:

  • 准确找到信息“转折点”
  • 更适合用于知识检索、文档问答(RAG)

缺点:

  • 实现复杂,计算开销大

⛓️ 5. 关键词驱动分块(Keyword-guided Chunking)

描述:

设定关键术语(如“诊断”、“用药”、“病史”),在这些关键词处切分文本。

应用场景:

  • 医疗文本中存在固定模式,如“主诉”、“现病史”、“诊断意见”…

优点:

  • 易于提取结构化信息
  • 分块语义明确

缺点:

  • 依赖规则或关键词库
  • 对非标准格式的文本不适用

🧬 6. Token-aware Chunking(基于 tokenizer 分块)

描述:

结合模型 tokenizer(如 Tiktokentransformers tokenizer)进行 token-level 控制:

  • 精确控制 token 数量不超过模型上限(如 512 或 4096)
  • 避免半个单词被切掉

工具:

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
tokens = tokenizer(text)["input_ids"]

优点:

  • 兼容所有模型
  • 不会因字符切分而出错

✅ 实践推荐(针对医疗文档):

任务类型推荐策略
医疗实体识别按句子或段落分块
医疗问答 / 摘要滑动窗口 + 句子结构优化
检索增强生成 RAG按语义边界/关键词分块
医疗知识图谱构建按段落或关键词提取为节点信息

相关文章:

  • 华为L410上制作内网镜像模板:搭建Apache服务器并上传离线WeChat包
  • Linux-05 半个月崩了三次 ubuntu 系统记录
  • 基于STM32、HAL库的ADS1256IDBR模数转换器ADC驱动程序设计
  • 常见的6种外挂获取执行时机方法介绍
  • 安全编排自动化与响应(SOAR):从事件响应到智能编排的技术实践
  • 常见游戏引擎介绍与对比
  • Linux的基础指令
  • Exposure Adjusted Incidence Rate (EAIR) 暴露调整发病率:精准量化疾病风险
  • 关于hbaseRegion和hbaseRowKey的一些处理
  • linux ptrace 图文详解(七) gdb、strace跟踪系统调用
  • Python解析地址中省市区街道
  • Codeforces Round 1020 (Div. 3) A-D
  • 【高频考点精讲】ES6 String的新增方法,处理字符串更方便了
  • Unreal制作角色冲锋时冲击波效果
  • 论文学习:《聚类矩阵正则化指导的层次图池化》
  • 数学基础 -- 欧拉恒等式的魅力:让复数旋转起来!
  • 通信算法之273 : 循环自相关函数和自相关函数
  • LeNet5 神经网络的参数解析和图片尺寸解析
  • uniapp 常用开发技巧与实战指南
  • unity 读取csv
  • 朱守科任西藏自治区政府副主席、公安厅厅长
  • AI翻译技术已走向大规模商用,应用场景覆盖多个关键领域
  • 苗旋已任民航局空管局局长、党委副书记
  • 秭归“橘颂”:屈原故里打造脐橙全产业链,创造12个亿元村,运输用上无人机
  • 金地集团:保交楼为经营的首要任务,将根据融资性现金流恢复程度等进行投资决策
  • 不朽诗篇的现代重生,意大利音乐剧《神曲》将来华15城巡演