



























from langchain_experimental.text_splitter import SemanticChunker
SemanticChunker 不是 LangChain 的内置组件,而是属于 langchain-experimental 包,这是一个 实验性功能 的扩展库,包含了一些尚未稳定或官方不推荐生产使用的模块。
SemanticChunker是一个基于 语义相似性 进行文本分块的实验性工具,它通过嵌入模型判断段落之间的语义距离,动态决定在哪里切分文本。
SemanticChunker 的核心思想是:
不是按字符数或token数硬切,而是根据语义相似度“智能”切分。
表格
复制
| 步骤 | 描述 |
|---|---|
| 1. 句子分割 | 先用正则或NLTK等方式把文本切成句子列表。 |
| 2. 嵌入向量化 | 对每个句子调用嵌入模型(如OpenAI、SentenceTransformer)生成向量。 |
| 3. 计算相似度 | 计算相邻句子之间的余弦相似度。 |
| 4. 断点检测 | 如果相似度低于某个阈值,就认为这里是“语义断裂点”,可以切分。 |
| 5. 合并块 | 根据断裂点将句子合并成块,控制块的最大长度(如token数)。 |
SemanticChunker(
embeddings, # 嵌入模型,如 OpenAIEmbeddings()
buffer_size=1,
from langchain_experimental.text_splitter import SemanticChunker
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
text_splitter = SemanticChunker(embeddings)
text = "你的长文本内容..."
docs = text_splitter.create_documents([text])
for doc in docs:
print(doc.page_content)
表格
复制
| 项目 | 说明 |
|---|---|
| 性能 | 每句都要调嵌入模型,速度慢,不适合大批量实时处理。 |
| 成本 | 如果用OpenAI嵌入,token费用高。 |
| 实验性 | 接口可能随时变,不建议生产环境使用。 |
如果你需要稳定的语义分块,可以考虑:
RecursiveCharacterTextSplitter(LangChain内置)
自定义语义分块:用SentenceTransformer + 聚类/滑动窗口自己实现。
SemanticChunker是 langchain-experimental 提供的“语义感知”分块器,用嵌入模型找语义断点,聪明但贵慢,适合实验,不适合量产。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。