【AI大模型学习路线】第三阶段之RAG与LangChain——第十七章(Advanced RAG[2])Sentence windows retrieval?

【AI大模型学习路线】第三阶段之RAG与LangChain——第十七章(Advanced RAG[2])Sentence windows retrieval?

【AI大模型学习路线】第三阶段之RAG与LangChain——第十七章(Advanced RAG[2])Sentence windows retrieval?



欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “学术会议小灵通”或参考学术信息专栏:https://fighting.blog.csdn.net/article/details/148709313


📌 一、背景介绍:为什么需要 Sentence Windows Retrieval?

在标准的 RAG 流程中,向量检索(如通过 FAISS)通常是基于完整的 chunk(文档块)进行的。但实际场景中,一个段落的某一句话可能才是用户问题的核心答案,而这句话所在 chunk 太大、或者语义分散,可能导致:

  • 检索到相关性低的 chunk;
  • 或者检索到包含答案但生成模型无法聚焦其位置,导致 hallucination(幻觉)。

👉 为解决这个问题,Sentence Windows Retrieval 提出了基于“句子粒度”的检索方式,同时在每个相关句子周围添加窗口上下文,提升信息的精确度和完整性

📘 二、什么是 Sentence Windows Retrieval?

定义:

  • Sentence Windows Retrieval 是将文档切分为句子级单位,然后检索最相关的句子,并在其上下添加固定数量的上下文句子,组成一个“窗口”,作为最终返回的内容给 RAG 模型使用。

优点:

  • 提高检索粒度:避免冗余信息;
  • 保留上下文语义:不因句子独立而丢失上下文;
  • 提升生成模型理解力:答案精度更高。

🧠 三、LangChain 中的 Advanced RAG(2): Sentence Windows Retrieval

LangChain 在第十七章“Advanced RAG(2)”中内置支持此方式,主要流程如下:

✅ 步骤简述:

  1. 文本按句子切分
  2. 每句做 Embedding 向量化
  3. 用户提问 → 检索最相关句子
  4. 在该句子周围向前向后扩展 N 个句子
  5. 拼接窗口,作为最终检索文档
  6. 传入 LLM(大模型)用于生成回答

🧪 四、Python 实战:LangChain 中实现 Sentence Windows Retrieval

from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import SentenceTransformersTokenTextSplitter
from langchain.document_loaders import TextLoader
from langchain.retrievers import SentenceWindowRetriever
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI

# 加载文档
loader = TextLoader("your_document.txt")
docs = loader.load()

# 步骤 1:句子切分(使用句子级切割器)
splitter = SentenceTransformersTokenTextSplitter()
split_docs = splitter.split_documents(docs)

# 步骤 2:Embedding 向量化 + 建立 FAISS 向量库
embedding_model = OpenAIEmbeddings()
vectordb = FAISS.from_documents(split_docs, embedding_model)

# 步骤 3:构造 Sentence Windows 检索器
retriever = SentenceWindowRetriever.from_vectorstore(
    vectordb,
    window_size=2,              # 向前/向后各扩展2句
    search_type="similarity",   # 使用相似度检索
)

# 步骤 4:构建 RAG QA 链
qa_chain = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(temperature=0),
    retriever=retriever,
    return_source_documents=True
)

# 步骤 5:提问
query = "人工智能大模型是如何实现多模态理解的?"
result = qa_chain(query)
print(result["result"])

⚙️ 参数说明

参数含义
window_size向左右各扩展几句
SentenceWindowRetrieverLangChain 提供的句子级检索封装
splitter可替换为自定义句子切分器
retriever可与任意 FAISS/HNSW 向量库配合使用
search_type支持 "similarity""mmr"

🎯 五、与大模型结合的意义

RAG + Sentence Window Retrieval 是当前大模型应用的重要发展方向,解决了大模型:

  • 知识有限(非实时)
  • 长文档无法精读
  • 生成偏离源事实

等问题。结合 LangChain,你可以构建自己的问答系统,具备高精度检索 + 上下文理解能力

✅ 总结一句话:

  • Sentence Windows Retrieval 是将文档拆分为句子,通过检索关键句并附加上下文窗口,提升 RAG 系统的检索精度与生成效果,是当前 LangChain 和大模型融合应用中的关键技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

985小水博一枚呀

祝各位老板前程似锦!财源滚滚!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值