文档切分实战:5种方法详解,打造高效RAG系统的第一步

【AI实战开发】告别文档解析噩梦:用Unstructured打造企业级RAG数据管道的完整指南 RAG系统文档预处理实战指南 本文介绍了使用Unstructured工具构建企业级RAG系统的关键步骤。文章首先指出PDF等非结构化文档直接输入LLM会导致回答质量低下的问题,提出文档预处理的重要性。 核心内容包括: Unstructured工具的核心能力分析,包括文档分区、清理、分块等功能,对比了与其他解析工具的性能差异 详细的环境搭建指南和5分钟快速入门示例,展示如何解析PDF文档并输出结构化数据 多格式文档统一处理方法 阅读详情

引言:为什么文档切分是RAG的“灵魂一步”?

大家好,我是专注于AI技术实践分享的博主狸猫算君~今天我们来聊聊RAG(检索增强生成)技术中那个看似简单却至关重要的环节——文档切分。

想象一下这个场景:你有一个几百页的产品手册,想让AI助手根据手册内容回答用户问题。如果直接把整个手册扔给模型,就像让人一眼看完百科全书再答题,效果可想而知。而文档切分,就是把这本“百科全书”拆分成一个个有逻辑的“知识点卡片”,让模型能快速找到最相关的那几页。

在实际应用中,文档切分质量直接决定了:

  • 问答准确性:切得不好,模型可能检索到不完整的上下文
  • 响应速度:合理的分块能提升检索效率
  • 成本控制:减少不必要的token消耗

无论是构建企业知识库、智能客服还是个人AI助手,掌握文档切分都是让大模型真正“理解”你专属数据的关键第一步。

技术原理:五大切分策略,哪种适合你的场景?

1. 按句子切分:最自然的语义单元

核心思想:按照自然语言的标点符号(句号、感叹号、问号等)进行分割。
优点:保持了完整的语义边界,最符合人类阅读习惯
适用场景:普通文章、报告、邮件等自然语言文档

python

import re

def split_by_sentences(text):
    # 匹配中英文句末标点
    pattern = r"[。!?.!?]+"
    sentences = re.split(pattern, text)
    return [s.strip() for s in sentences if s.strip()]

# 示例:一段描述春节的文字
text = "春节的脚步越来越近,大街小巷都布满了节日的气氛。商店门口挂满了红灯笼和春联..."
chunks = split_by_sentences(text)

2. 固定字符数切分:简单粗暴的均匀分割

核心思想:像切香肠一样,每段固定长度,不考虑语义完整性。
优缺点:实现简单,但可能从句子中间切断
适用场景:日志文件、代码、结构化数据

python

def split_by_length(text, chunk_size=100):
    return [text[i:i+chunk_size] for i in range(0, len(text), chunk_size)]

3. 固定字符数+重叠窗口:平衡的折中方案

核心思想:在固定长度的基础上,让相邻块有一定重叠,防止关键信息被切断。

python

def split_with_overlap(text, chunk_size=100, overlap=20):
    chunks = []
    start = 0
    while start < len(text):
        end = start + chunk_size
        chunks.append(text[start:end])
        start += chunk_size - overlap  # 滑动窗口,保留重叠部分
    return chunks

为什么需要重叠?
假设我们查询“小朋友们在做什么”,如果关键信息“看到小朋友们手持烟花棒,欢笑声此起彼伏”刚好被切到两个块之间,没有重叠就会丢失上下文。有重叠窗口能确保关键信息在至少一个块中完整存在。

4. 递归切分:LangChain的默认选择

核心思想:智能分层切割,优先用换行符分割,不行再用空格,最后用字符。
工作流程:

  1. 先用\n\n(空行)尝试分割
  2. 如果块还太大,用\n(换行)分割
  3. 继续用空格分割,最后用字符分割
  4. 确保每个块接近但不超预设大小

优势:在保持语义和均匀大小之间取得最佳平衡

5. 语义切分:未来方向

核心思想:用嵌入模型计算语义相似度,在语义变化处切分。
技术实现:计算句子向量,检测向量距离突变点
现状:效果最好但计算成本高,适合对质量要求极高的场景

实践步骤:从零开始实现文档切分

环境准备

python

# 基础环境
pip install langchain langchain-text-splitters

# 可选:用于处理特定格式
pip install pypdf markdown

步骤一:处理普通文本文件

python

from langchain.text_splitter import RecursiveCharacterTextSplitter

# 1. 读取文档
with open("document.txt", "r", encoding="utf-8") as f:
    text = f.read()

# 2. 初始化分割器(推荐参数)
splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,      # 每个块约500字符
    chunk_overlap=50,    # 重叠50字符保持连贯
    separators=["\n\n", "\n", " ", ""]  # 分层分割策略
)

# 3. 执行分割
chunks = splitter.split_text(text)
print(f"总文档切分为 {len(chunks)} 个块")

步骤二:处理特殊格式文档

不同的文档类型需要不同的处理策略:

Markdown文档(保持标题结构):

python

from langchain.text_splitter import MarkdownHeaderTextSplitter

headers_to_split_on = [
    ("#", "主标题"),
    ("##", "二级标题"),
    ("###", "三级标题"),
]

splitter = MarkdownHeaderTextSplitter(headers_to_split_on)
md_chunks = splitter.split_text(markdown_content)

PDF文档(先提取文本):

python

from PyPDF2 import PdfReader
from langchain.text_splitter import RecursiveCharacterTextSplitter

reader = PdfReader("document.pdf")
text = ""
for page in reader.pages:
    text += page.extract_text()

splitter = RecursiveCharacterTextSplitter(chunk_size=1000)
pdf_chunks = splitter.split_text(text)

代码文件(按语言特性分割):

python

from langchain.text_splitter import Language, RecursiveCharacterTextSplitter

# 支持Python、Java、JavaScript等15种语言
python_splitter = RecursiveCharacterTextSplitter.from_language(
    language=Language.PYTHON,
    chunk_size=400,
    chunk_overlap=40
)
code_chunks = python_splitter.split_text(python_code)

步骤三:参数调优实战

参数选择没有“银弹”,需要根据数据特点调整:

  1. chunk_size选择指南:

    • 问答系统:200-500字符(精准匹配)
    • 文档总结:800-1500字符(上下文完整)
    • 代码分析:300-600字符(函数级完整)
  2. chunk_overlap经验值:

    • 一般为chunk_size的10%-20%
    • 重要文档可以增加到25%
  3. 快速测试脚本:

python

def test_chunking_params(text, size, overlap):
    splitter = RecursiveCharacterTextSplitter(
        chunk_size=size,
        chunk_overlap=overlap
    )
    chunks = splitter.split_text(text)
    
    # 统计信息
    avg_len = sum(len(c) for c in chunks) / len(chunks)
    print(f"参数:size={size}, overlap={overlap}")
    print(f"块数:{len(chunks)},平均长度:{avg_len:.0f}")
    print(f"前3个块示例:\n{chunks[:3]}\n")
    
    return chunks

# 测试不同参数
test_chunking_params(your_text, 300, 30)
test_chunking_params(your_text, 500, 50)

步骤四:质量检查与修复

切分后务必人工检查:

python

def check_chunk_quality(chunks):
    issues = []
    for i, chunk in enumerate(chunks):
        # 检查是否从句子中间切断
        if chunk and chunk[-1] not in "。.?!!?":
            issues.append(f"块{i}可能不完整")
        
        # 检查长度是否异常
        if len(chunk) < 50:
            issues.append(f"块{i}过短:{len(chunk)}字符")
    
    return issues

# 执行检查
issues = check_chunk_quality(chunks)
if issues:
    print("发现以下问题:")
    for issue in issues:
        print(f"  - {issue}")

效果评估:如何验证切分质量?

在这里插入图片描述

量化评估指标

  1. 检索准确率测试:

python

# 模拟查询测试
test_queries = ["文档提到哪些关键点?", "具体操作步骤是什么?"]
for query in test_queries:
    # 检索相关块(简单模拟)
    relevant_chunks = retrieve_chunks(query, chunks)
    print(f"查询:{query}")
    print(f"检索到{len(relevant_chunks)}个相关块")
    # 人工评估相关性...
  1. 块完整性评分(0-1分):

    • 1分:完整句子/段落
    • 0.5分:语义基本完整
    • 0分:明显截断
  2. 重叠必要性分析:

    • 统计有多少查询需要跨块信息
    • 计算重叠部分的使用频率

真实场景测试建议

  1. 准备测试集:包含各种类型的查询
  2. A/B测试:比较不同切分策略的问答效果
  3. 用户反馈收集:实际使用中的准确率

经验法则:好的切分应该让AI回答时像“引用书中的某一页”,而不是“复述整本书”。

总结与展望

核心要点回顾

  1. 没有最好,只有最适合:根据文档类型选择切分策略
  2. 参数需要调优:chunk_size和overlap需要实验确定
  3. 格式感知:不同格式文档使用专用分割器
  4. 质量检查必不可少:自动检查+人工抽样

常见误区提醒

  • ❌ 盲目追求小块:可能导致上下文不足
  • ❌ 忽视重叠窗口:可能切断关键信息
  • ❌ 一成不变:不同文档可能需要不同策略
  • ❌ 忽视格式:PDF、Word需要先正确提取文本

未来发展趋势

  1. 自适应切分:AI自动学习最佳切分参数
  2. 多模态切分:同时处理文本、表格、图片
  3. 实时动态切分:根据查询动态调整块大小

掌握了文档切分的理论基础后,如果你想快速实践一个完整的RAG应用,LLaMA-Factory Online提供了从文档上传、智能切分、向量化存储到模型微调的全流程支持。即使没有编程基础,也能通过可视化界面完成整个流程,真正实现“把自己的数据喂给大模型”,打造出理解你业务场景的专属AI助手。

动手实践建议

  1. 从小开始:先用100KB以内的文档测试
  2. 多样化测试:尝试不同参数组合
  3. 记录结果:建立自己的参数经验库
  4. 持续迭代:随着数据变化调整策略

文档切分是连接原始数据与智能应用的桥梁。掌握好这项技术,你就能让大模型真正“读懂”你的数据,释放私有数据的最大价值。记住,好的开始是成功的一半,在RAG系统中,好的文档切分就是那个“好的开始”。

有任何问题或实践心得,欢迎在评论区交流讨论。下次我们将深入探讨向量化存储的最佳实践,敬请期待!


声明:本文所有代码示例均可直接运行,建议在Jupyter Notebook中逐步实践。技术细节基于LangChain 0.1.x版本,具体实现可能随版本更新有所变化。

AI Agent + RAG 打造专属知识库:从原理到实战的完整指南 在大型语言模型应用落地过程中,企业私有知识库往往是最先被验证的场景。通用模型无法理解团队内部的业务术语、历史决策和项目细节,这就要求我们借助检索增强生成(RAG)技术,为模型外接一个可实时更新的档案室。RAG的核心在于文档的向量化与语义检索,配合混合检索与重排序,才能准确召回足够支撑答案的证据。然而面对多跳推理、信息整合与工具调用等复杂需求,标准RAG力不从心,需要进一步引入AI Agent进行任务规划与编排,从而演进为Agentic RAG。当前Dify、LangChain、AnythingLLM等开源框 阅读详情

相关推荐

【大模型】SpringBoot整合LangChain4j实现RAG检索实战详解

SpringBoot整合LangChain4j实现RAG检索实战详解

congge 1万+

大模型入门实战:通过 HuggingFace 调用 Llama3

至此,我们成功演示了如何通过 Hugging Face 的 Transformers 调用 Llama 模型,并获取了模型的回答。但是如果你的需求只是简单地调用模型,而无需进行微调或复杂的部署,可以尝试使用 Ollama。它不仅操作更加便捷,还提供了开箱即用的 RESTful 接口,适合快速集成到生产环境中。下一篇,我将会讲解如何通过 Ollama 下载部署 Llama 模型并调用。

python12345_的博客 2602

Chapter 7 Linear Voltage Regulators

这一章我们介绍LDO.

2304_76736886的博客 2764

文档切分实战:5种方法详解,打造高效RAG系统的第一步|TaoToken统一Key调用

用 LangChain 递归字符切分中文文档时,在 separators 里加入「。!?」可避免退化成按空格切分。本文详解固定长度、递归字符、语义、文档结构、父子块 5 种切分方法,附 chunk_size 与 chunk_overlap 参数对照表及检索命中率对比脚本,切分后可用 TaoToken 统一 Key 串联模型调用,详见 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 。

weixin_42600128的博客 23

Qt Design Studio 入门指南:从零开始打造炫酷UI(详细+实用+轻松上手)

本文是Qt Design Studio的详细入门指南,旨在帮助UI设计新手从零开始轻松打造炫酷界面。文章系统介绍了软件的核心概念、安装步骤、主界面解析,并通过创建一个完整的登录界面实例,手把手教学如何拖拽组件、设置属性、添加交互状态与动画。同时,分享了创建自定义组件、管理资源以及提升效率的实用技巧与常见问题解决方案,让读者能够快速上手并应用于实际项目开发。

devops8pract的博客 588

编译opencv4.2时出现undefined reference to `jpeg_default_qtables‘错误的解决方案

操作系统:kylinV10 opencv版本:4.2.0 在编译opencv4.2.0的版本时,出现undefined reference to `jpeg_default_qtables’的错误提示,导致openc编译中断,不能继续编译,所以这个错误必须解决。 解决方案 查看错误的名字,根据名字分析,很有可能是当前系统中没有安装jpeg第三方库,到 http://www.ijg.org/上下载最新的源码包 jpegsrc.v9e.tar.gz,按如下顺序开始编译安装: tar -xzvf jpegsr.

jndingxin的专栏 5106

RAG 文档切分攻略:做好这步,检索精度提升 50%

切分的片段过长,主题杂乱,向量表示模糊,大模型回答答非所问;新手无需追求复杂的切分算法,优先根据文档类型选择合适的切分方法 —— 通用文本用固定长度切分,结构化文档用语义结构化切分,复杂场景用混合切分,再结合片段长度、重叠长度、元数据标注等细节优化,就能大幅提升检索效果。简单来说,好的文档切分能让 RAG 系统 “找得到、找得准”,差的切分则会让后续的向量数据库和大模型都 “无用武之地”—— 哪怕向量数据库算法再优秀,大模型能力再强,也无法基于残缺或杂乱的片段生成精准回答。

2601_94871669的博客 566

代码生成 | 安时积分法模型搭建

安时积分法是电池电量计量最基础的方法,今天我们用simulink建模的方式做一个安时积分模型,从而更好地理解安时积分的思想也掌握建模的基础操 ​新建文件 打开MATLAB启动simulink新建一个模型文件 定义变量 和手写代码一样,先定义几个后面要用到的变量,在simulink建模时新建变量用Data Store Memory模块。双击填入要定义的变量名,然后在signal attributes赋初值 如此方法新建四个变量current(电流)初值1000mA、tatol_cap(总容量

ningvay的博客 1万+

RAG 实战指南(三):一文搞懂RAG的切分策略

在RAG系统的构建中,文档切分策略很大程度上决定着模型检索质量,切分的好,信息命中更精准,生成回答更有上下文逻辑;切分的差,AI或许会变成“口吃患者”。

DEVELOPERAA的博客 1038

AutoModelForCausalLM 加载失败:flash_attn 缺失的三种解决方案

本文针对使用AutoModelForCausalLM加载大语言模型时因缺失flash_attn依赖而报错的问题,提供了三种实用解决方案。最推荐通过修改模型配置文件或代码动态指定注意力实现为“eager”模式来绕过检查,也介绍了临时修改库源码的应急方法,并解释了flash_attn的作用及正确安装指南。

html8的博客 269

基于单片机控制双向可控硅灯光强度设计

*单片机设计介绍,基于单片机控制双向可控硅灯光强度设计。

QQ2193276455的博客 2457

RAG 的 5 种切分策略

对于专业领域的文本,则在基于领域知识切分的基础上,结合用户需求进一步优化切分结果。然而,这种策略的实现难度相对较高,需要依赖较为复杂的语义分析算法和模型,并且在处理一些语义模糊或者结构复杂的文本时,可能会出现切分不准确的情况。例如,当用户咨询关于某种疾病的治疗方案时,基于医学领域知识切分后的文本能够快速定位到相关的治疗方法和案例信息,为用户提供更有针对性的解答。但是,这种策略对用户问题的理解和分析能力要求较高,需要建立精准的用户需求模型,并且在处理一些复杂、模糊的用户问题时可能会出现偏差。

2401_85379281的博客 725

【AutoDL + Langchain-Chatchat】从零构建高效本地 RAG 知识库问答系统:实战保姆级教程(含避坑指南)

本文详细阐述如何在AutoDL云平台,如何利用Langchain-Chatchat构建高效的本地RAG知识库问答系统,并深入解析RAG架构。从环境搭建到实战部署,从问题排查到性能优化,提供一份全面实用的指南,助力开发者快速构建智能问答应用。

拾光夕拾的博客 1803

【AI大模型】RAG 的 5 种切分策略,看完这一篇你就知道了!!!

在当今的 AI 技术浪潮中,RAG 作为一种强大的技术手段,正逐渐在众多应用场景中崭露头角。 它巧妙地结合了信息检索与文本生成,能够为用户提供更加精准、丰富的回答。然而,要想充分发挥 RAG 的优势,合理的切分策略至关重要。

2401_85327249的博客 1167

Android车载音频系统概览

官网有些部分的内容描述比较简单,对没有app、系统和底层开发经验,容易一眼扫过,没有留意到相关细节。 本节补充车载音频相关细节。

hwj的博客 785

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

详解RAG技术:从原理到优化,打造高效私域知识问答系统(含通俗案例+深度解析)

原理:当检索到的参考文档过多(如20份),LLM无法一次性处理时,采用“树形总结”:先分组总结每5份文档,再汇总各组总结结果,最终生成回答。案例应用:用户问“本公司设备的保修政策有哪些?”,检索到20份相关文档(涵盖不同设备、不同故障类型的保修规则):第一层总结:将20份文档分成4组(每组5份),分别总结“硬件故障保修”“软件故障保修”“人为损坏保修”“保修期延长政策”;第二层总结:将4组总结结果整合,生成完整的保修政策回答;

m0_60299014的博客 797

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

RAG 架构地基工程-Retrieval 模块的系统设计分享

Retrieval-Augmented Generation(RAG)架构在大模型时代大放异彩,而其中的 Retrieval 模块往往被低估。本文系统梳理了 Retrieval 模块的关键设计点,包括数据源类型、文档切分策略、向量化与存储结构、语义检索方式,以及多文档融合机制。通过图示与表格对比,揭示不同设计选择对生成效果的深远影响,强调 Retrieval 不仅是召回,更是影响最终答案质量的“地基工程”。本文旨在为研发者构建可控、可调、可解释的 RAG 系统提供结构化参考。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 16万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

释放数据价值:RAG 系统构建实战,打造高精度知识型 AI 助手

构建高性能 RAG 系统是一个渐进的过程。通过合理应用本文介绍的优化技术,可以显著提升系统性能。关键是要根据具体应用场景和需求,选择合适的优化策略组合。正如原文总结:在实施过程中,建议采取循序渐进的方式,从基础优化开始,逐步引入更复杂的技术,确保每一步优化都能带来实质性的性能提升。

优快云_430422的博客 1109

从文档海洋到智能问答:用大模型和RAG打造下一代企业知识库的实战之路

在信息爆炸的今天,企业内部文档(如SOP、技术手册、FAQ)数量激增,传统的关键词搜索常常让我们在“文档海洋”中迷失。本文将分享一次从0到1的实战探索,讲述如何利用大语言模型(LLM)和检索增强生成(RAG)技术,将静态、孤立的知识库,重塑为一个能“思考”和“对话”的智能问答系统。我们将从理念澄清、技术选型、代码实战到未来展望,一步步揭示AI如何成为解锁企业知识效率的密码。

一位热衷于机器学习的博主,致力于将复杂的AI算法化繁为简。分享代码实战与前沿洞见,与你一同探索人工智能的奇妙世界。 1473

如何高效处理长文档?15种Chunking策略全面解析(打造高性能RAG系统)

RAG(Retrieval-Augmented Generation)系统,已经是NLP圈的“顶流”了。无论是智能问答、知识库、文档摘要,还是企业内部的智能检索,RAG都能大显身手。但你要让它“吃得好、消化快、输出香”,Chunking绝对是核心秘诀。

2401_85375186的博客 1307

手把手带你徒手打造一个RAG系统!

在AI的世界里,我们惊叹于大语言模型(LLM)的博学与聪慧,但你是否也曾遇到过它们的“窘境”?

瓦罗兰特顶级C位的博客 873

构建个人安全知识库:利用 RAG 技术打造私有安全大脑

技术背景:在网络安全的攻防体系中,信息处理的速度和精度决定了对抗的成败。无论是攻击者需要快速从海量漏洞库中找到可用信息,还是防御者需要从日志和威胁情报中定位攻击来源,本质都是信息检索与分析。检索增强生成 (Retrieval-Augmented Generation, RAG)技术,作为大语言模型(LLM)应用的前沿范式,正好解决了 LLM 内部知识陈旧、无法访问私有数据以及容易产生“幻觉”的核心痛点。

Alfadi联盟 萧瑶的博客 1422

LLMFarm RAG功能详解:构建智能文档问答系统的终极教程

想在iOS和macOS上构建一个完全离线的智能文档问答系统吗?LLMFarm的RAG功能为你提供了完美的解决方案!📱💻 本文将详细介绍如何使用LLMFarm的检索增强生成技术,让你轻松打造个性化的文档智能助手。 ## 🚀 什么是RAG功能? RAG(Retrieval-Augmented Generation,检索增强生成)是LLMFarm的核心功能之一,它结合了文档检索和大语言模型生成

gitblog_00335的博客 681

腾讯云RAG实践指南:从文档解析到多模态,大模型落地全链路拆解

这份指南详细剖析了RAG技术从数据处理到智能检索的全链路实践,为企业构建高效、可靠的RAG应用提供了重要参考。

python1234567_的博客 708

打造个人知识库问答机器人:RAG选型、切分策略与LangChain/Dify实战

在信息碎片化时代,如何将公众号文章、Obsidian笔记和PDF等非结构化数据转化为可检索、可问答的私有知识库,是个人知识管理的关键挑战。检索增强生成(RAG)通过语义相似度检索为开放式问答提供了低成本的解决方案,其核心在于将文档按Markdown标题层级切块并向量化,保留标题上下文以提升召回质量。借助LangChain的灵活编排或Dify的可视化流水线,可以构建一个由AI Agent驱动的问答系统,让模型自主完成意图路由、工具调度与多轮检索规划,从而精准回答“提到过某原则的文章是哪篇”这类复杂查询。本文从

weixin_29055699的博客 264
上一篇: AI也能“专业进修”?不用写代码,教你用微调打造行业专属模型
下一篇: 让你的AI更“懂你”:零代码实践指令微调
狸奴算君
博客等级 码龄1年 2粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值