面包屑图标 当前位置: 首页
AI资讯
热点详情

RAG检索不准?99%的人都忽略了关键一步

AI热点日报
AI热点日报时间:2026-07-18
热点解读

RAG(检索增强生成)检索效果不佳?问题往往出在文本分段方式上。本文将深入解析语义切分技术如何让AI检索更加精准。核心内容:1 传统固定长度切分的局限性与语义切分的核心优势2 语义切分的三大主流算法实现原理详解3 从PDF文档提取到语义切分的完整代码实战今天要分享一个让RAG(检索增强生成)系

RAG(检索增强生成)检索效果不佳?问题往往出在文本分段方式上。本文将深入解析语义切分技术如何让AI检索更加精准。
核心内容:
1. 传统固定长度切分的局限性与语义切分的核心优势
2. 语义切分的三大主流算法实现原理详解
3. 从PDF文档提取到语义切分的完整代码实战

RAG检索不准?99%的人都忽略了这一步!

今天要分享一个让RAG(检索增强生成)系统“脱胎换骨”的利器——语义切分(Semantic Chunking)。别担心,它听起来很专业,但核心其实很简单:如何将一段长文本,切割成AI最容易理解和检索的“小块”。这些精准的小块,正是提升检索质量的关键。

你是否有过这样的体验:明明知识库中信息很丰富,可AI回答起来却答非所问,或者检索到的内容毫无关联?这里需要纠正一个常见误区——问题很可能出在“切块”环节。

接下来,从原理到实践,我们将一步步梳理语义切分的完整流程,让RAG系统从“东拼西凑”进化为“对答如流”。

一、为何需要语义切分?固定长度切分的“先天不足”

传统的文本切分方式,最常见的是固定长度切分:例如每隔500个字符、100个词或10句话就简单断开。这种方法看似规整,实则非常“机械”——

  • 优点:实现简单,一行代码即可完成。
  • 缺点:完全忽略内容语义,可能将一个完整知识点切成两半,或将毫不相关的信息强行拼凑在一起。

举例说明:

“小明喜欢吃苹果。他每天早上都吃一个。苹果富含维生素C。深度学习是一种人工智能方法。”

可以看到,前几句围绕苹果展开,最后一句突然跳到AI。固定长度切分很可能将“苹果”和“深度学习”塞进同一个块中。AI检索时难免困惑:你到底在问水果还是算法?

因此,固定长度切分的“先天不足”在于——它完全不懂内容本身!

二、语义切分:让AI“按内容分块”,检索更精准

语义切分,顾名思义,是根据文本的“语义相似度”来划分段落。其核心原则是:

  • 语义相近的句子放在一起,语义差异大的分开
  • 每个块内部语义连贯,便于AI理解与检索

这样一来,AI在检索时拿到的都是“主题明确”的内容块,回答自然更加可靠。

三、语义切分的三大“切分策略”

要实现语义切分,关键在于找到“语义断点”。目前主流有三种方法,均基于“相邻句子相似度”来判断:

1. 百分位法(Percentile)

  • 算法思路:统计所有相邻句子相似度的差值,找出“下降最剧烈”的那批点(例如前10%),在这些位置进行切分。
  • 适用场景:文本风格多样、主题跳跃明显时,该策略效果显著。

2. 标准差法(Standard Deviation)

  • 算法思路:计算相似度的均值和标准差,将低于“均值减去若干倍标准差”的位置视为“语义断层”,果断切分。
  • 适用场景:文本整体较为均匀,但偶尔出现“断崖式”变化。

3. 四分位法(IQR)

  • 算法思路:借用统计学中的IQR(四分位距,即Q3-Q1),找出那些“极端低”的相似度点作为切分点。
  • 适用场景:数据分布偏态、异常值较多时,IQR方法更稳健。

一句话总结:都是在寻找“语义突变”的位置下刀。

四、代码实战:从PDF到语义切分,步步为营

1. PDF文本提取

首先,获取“原材料”。假设你有一本AI教材的PDF,使用PyMuPDF轻松提取:

import fitz

def extract_text_from_pdf(pdf_path):
mypdf = fitz.open(pdf_path)
all_text = ""
for page in mypdf:
all_text += page.get_text("text") + " "
return all_text.strip()

pdf_path = "data/AI_Information.pdf"
extracted_text = extract_text_from_pdf(pdf_path)
print(extracted_text[:500]) # 预览前500字符

2. 句子切分与句向量生成

文本提取后,接下来“分句”,然后利用大模型(如OpenAI、BAAI/bge等)为每句话生成向量(embedding):

from openai import OpenAI
import numpy as np
import os

client = OpenAI(
base_url="https://api.studio.nebius.com/v1/",
api_key=os.getenv("OPENAI_API_KEY")
)

def get_embedding(text, model="BAAI/bge-en-icl"):
response = client.embeddings.create(model=model, input=text)
return np.array(response.data[0].embedding)

sentences = extracted_text.split(". ")
embeddings = [get_embedding(sentence) for sentence in sentences]
print(f"Generated {len(embeddings)} sentence embeddings.")

3. 计算相邻句子相似度

使用余弦相似度衡量每对相邻句子的“亲近程度”:

def cosine_similarity(vec1, vec2):
return np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2))

similarities = [cosine_similarity(embeddings[i], embeddings[i + 1]) for i in range(len(embeddings) - 1)]

4. 寻找“断点”:以百分位法为例

def compute_breakpoints(similarities, method="percentile", threshold=90):
if method == "percentile":
threshold_value = np.percentile(similarities, threshold)
# ... 省略其他方法
return [i for i, sim in enumerate(similarities) if sim < threshold_value]

breakpoints = compute_breakpoints(similarities, method="percentile", threshold=90)

5. 正式“切块”

def split_into_chunks(sentences, breakpoints):
chunks = []
start = 0
for bp in breakpoints:
chunks.append(". ".join(sentences[start:bp + 1]) + ".")
start = bp + 1
chunks.append(". ".join(sentences[start:]))
return chunks

text_chunks = split_into_chunks(sentences, breakpoints)
print(f"Number of semantic chunks: {len(text_chunks)}")
print("nFirst text chunk:n", text_chunks[0])

6. 块级向量与语义检索

每个块再生成一个embedding,检索时直接比对块向量:

def create_embeddings(text_chunks):
return [get_embedding(chunk) for chunk in text_chunks]

chunk_embeddings = create_embeddings(text_chunks)

def semantic_search(query, text_chunks, chunk_embeddings, k=5):
query_embedding = get_embedding(query)
similarities = [cosine_similarity(query_embedding, emb) for emb in chunk_embeddings]
top_indices = np.argsort(similarities)[-k:][::-1]
return [text_chunks[i] for i in top_indices]

五、实战演练:让AI“只回答上下文中的内容”

假设你遇到以下问题:

“什么是可解释AI(Explainable AI),为什么它很重要?”

使用上述方法,检索到的块内容大致如下:

Context 1:
Explainable AI (XAI) aims to make AI systems more transparent and understandable. Research in XAI focuses on developing methods for explaining AI decisions, enhancing trust, and improving accountability.
========================================
Context 2:
Transparency and explainability are essential for building trust in AI systems. Explainable AI (XAI) techniques aim to make AI decisions more understandable, enabling users to assess their fairness and accuracy.
========================================

然后,调用大模型生成答案,并严格要求模型仅依据检索到的内容作答

system_prompt = "You are an AI assistant that strictly answers based on the given context. If the answer cannot be derived directly from the provided context, respond with: 'I do not ha ve enough information to answer that.'"

user_prompt = "n".join([f"Context {i + 1}:n{chunk}n=====================================n" for i, chunk in enumerate(top_chunks)])
user_prompt = f"{user_prompt}nQuestion: {query}"

ai_response = generate_response(system_prompt, user_prompt)
print(ai_response.choices[0].message.content)

六、自动评测:让AI自行打分,实现闭环优化

最后,别忘记利用AI自动评估答案质量,形成闭环优化:

evaluate_system_prompt = "You are an intelligent evaluation system tasked with assessing the AI assistant's responses. If the AI assistant's response is very close to the true response, assign a score of 1. If the response is incorrect or unsatisfactory in relation to the true response, assign a score of 0. If the response is partially aligned with the true response, assign a score of 0.5."

evaluation_prompt = f"User Query: {query}nAI Response:n{ai_response.choices[0].message.content}nTrue Response: {data[0]['ideal_answer']}n{evaluate_system_prompt}"

evaluation_response = generate_response(evaluate_system_prompt, evaluation_prompt)
print(evaluation_response.choices[0].message.content)

七、语义切分的“隐藏价值”:让RAG系统更像“知识专家”

  • 检索更精准:每个块语义连贯,AI不再“东拉西扯”。
  • 上下文更相关:减少无关内容混入,提升答案质量。
  • 可扩展性强:新文档、新领域,通用性极高。
  • 自动化闭环:配合自动评测,持续优化切分策略。

八、实战Tips与避坑指南

  1. 句子切分要可靠:英文可用.split(". "),中文建议使用snownlpjieba等分句工具,避免因断句错误导致AI困惑。
  2. embedding模型选对,检索效率高:推荐bgetext-embedding-ada-002等主流模型。
  3. 切分阈值需调优:不同文档风格,阈值应动态调整。多试几次,效果肉眼可见。
  4. 块大小要适中:太大则检索不准,太小则上下文不全。建议每块200-500字,根据场景微调。
  5. 自动评测并非万能:AI评测有时会“自嗨”,建议辅以人工抽检。

九、总结:让你的RAG系统“既聪明又懂你”

语义切分,本质上就是让AI“按内容分块”,而非“按长度分尸”。它是RAG系统“检索-生成”闭环中的关键环节,直接影响AI的“知识召回率”和“答案准确率”。

一句话,想让你的AI像“知识专家”一样,问什么都能答到点子上?先把语义切分练到极致!

热点追踪提示词
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:RAG检索不准?99%的人都忽略了关键一步要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
来源:https://www.53ai.com/news/RAG/2025071431589.html
ai 人工智能

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关热点
AI热点2026-07-18 22:35
Codeium提示词太长?入门教程教你解决

提示词过长易被截断,应删除客套话与空泛描述,用函数签名锚定类型行为;以符号替代自然语言缩短字符;分阶段提交任务降低出错率;预校验提示词长度,控制在1800字符以内。

AI热点2026-07-18 22:33
机器学习VSM算法原理与实战解析

向量空间模型将文本转为高维向量,通过余弦相似度计算文本相似性。TF-IDF算法通过词频与逆文档频率加权,提升特征词区分度。该模型在文本分类、情感分析等任务中广泛应用,但忽略语义关系,常需结合神经网络等方法弥补不足。

AI热点2026-07-18 22:33
AI大模型与智能驾驶技术融合应用解析

AI大模型为智能驾驶提供精准决策支持,提升数据处理与自适应学习能力;智能驾驶的高实时性、安全性与鲁棒性需求倒逼大模型在计算效率、可解释性等方面持续进化。两者深度结合,共同推动自主驾驶升级与城市交通智能化。

AI热点2026-07-18 22:32
摩尔线程推全功能GPU集群异地算力调度方案

摩尔线程在2023算力技术大会上发布全功能GPU算力集群的异地调度方案,实现跨地域集群化处理。该方案支持自动选择最优节点、负载均衡及成本优化,服务于智算、科学计算、数字文旅等场景。会上还成立校企智算联盟,推动西部算网融合。

延伸阅读