(附代码)Langchain中语义文档分割器的使用与介绍

article/2025/6/28 22:52:15

语义文档分割器的使用与背景

在前面文章中使用的文档分割器都是使用 特定字符 对文本进行拆分,这种拆分模式虽然考虑了文档中的上下文切断的问题,但是并没有考虑句子之间的语义相似性。如果有一篇长文本,需要将其分割成语义相关的块,以便更好地理解和处理,这个时候可以使用 LangChain 中的 语义相似性分割器 (SemanticChunker) 来实现这个任务。

语义相似性分割器目前仍处于实验性,这个类目前位于 langchain_experimental 包中(这个包中的类与方法未来极大概率会发生变更,需要谨慎使用),安装命令:

pip install -Uqq langchain_experimental

SemanticChunker 在使用上和其他的文档分割器存在一些差异,并且该类并没有继承 TextSplitter,实例化参数含义如下:

  • embeddings:文本嵌入模型,在该分类器底层使用向量的余弦相似度来识别语句之间的相似性。
  • buffer_size:文本缓冲区大小,默认为 1,即在计算相似性时,该文本会叠加前后各 1 条文本,如果不够则不叠加(例如第 1 条和最后 1 条)。
  • add_start_index:是否添加起点索引,默认为 False
  • breakpoint_threshold_type:断点阈值类型,默认为 percentile 即百分位。
  • breakpoint_threshold_amount:断点阈值金额/得分。
  • number_of_chunks:分割后的文档块个数,默认为 None
  • sentence_split_regex:句子切割正则,默认为 (?<=[.?!])\s+,即以英文的点、问号、感叹号切割语句,不同的文档需要传递不同的切割正则表达式。
    资料推荐
  • 💡大模型中转API推荐
  • ✨中转使用教程
  • ✨模型优惠查询
    例如想要将 科幻短篇.txt 按照语义切割成 10 个文档,可以使用如下代码示例:
import dotenv
from langchain_community.document_loaders import UnstructuredFileLoader
from langchain_experimental.text_splitter import SemanticChunker
from langchain_openai import OpenAIEmbeddingsdotenv.load_dotenv()# 1.构建加载器和文本分割器
loader = UnstructuredFileLoader("./科幻短篇.txt")
text_splitter = SemanticChunker(embeddings=OpenAIEmbeddings(model="text-embedding-3-small"),sentence_split_regex=r"(?<=[。?!])",number_of_chunks=10,
)# 2.加载文本与分割
documents = loader.load()
chunks = text_splitter.split_documents(documents)for chunk in chunks:print(f"块大小: {len(chunk.page_content)}, 元数据: {chunk.metadata}")

输出内容:

块大小: 201, 元数据: {'source': './科幻短篇.txt'}
块大小: 25, 元数据: {'source': './科幻短篇.txt'}
块大小: 31, 元数据: {'source': './科幻短篇.txt'}
块大小: 46, 元数据: {'source': './科幻短篇.txt'}
块大小: 203, 元数据: {'source': './科幻短篇.txt'}
块大小: 19, 元数据: {'source': './科幻短篇.txt'}
块大小: 91, 元数据: {'source': './科幻短篇.txt'}
块大小: 466, 元数据: {'source': './科幻短篇.txt'}
块大小: 116, 元数据: {'source': './科幻短篇.txt'}
块大小: 0, 元数据: {'source': './科幻短篇.txt'}

SemanticChunker 的原理其实非常简单,核心思想是将文档拆分成独立的每一句,接下来根据传递的缓冲大小前后拼接字符串,然后计算拼接后的新字符串的文本嵌入/向量,然后计算这些文本的相似度,并根据传入的分块数和断点类型计算得到一个阈值,最后将相似度超过某个阈值的合并到一起,从而实现相似度分割。

目前在 SemanticChunker 底层检测相似度阈值的方法有 4 种:

  1. 百分位数 (默认)

  2. 标准差

  3. 四分位数

  4. 梯度
    在这里插入图片描述
    LangChain 中,除了 SemanticChunker 这种基于 Embedding 的语义分割器,还提供了 3 种基于自然语言处理的语义分割器:

  5. NLTKTextSplitter
    NLTK(The Natural Language Toolkit)是一套用 Python 编程语言编写的用于英语符号和统计自然语言处理(NLP)的库和程序。

  6. SpacyTextSplitter
    spaCy 是一个用于高级自然语言处理的开源软件库,使用 Python 和 Cython 编程语言编写。

  7. SentenceTransformersTokenTextSplitter
    用于句子转换器模型的文本拆分器。默认行为是将文本拆分为适合您想要使用的句子转换模型的标记窗口的块。
    资料推荐

  • 💡大模型中转API推荐
  • ✨中转使用教程
  • ✨模型优惠查询

http://www.hkcw.cn/article/ERPZOngWTQ.shtml

相关文章

南航通报客机起飞15分钟紧急降落 电池冒烟引发返航

中国南方航空在微博上发布消息称,5月31日,CZ6850杭州飞往深圳的航班上发生了一起电池冒烟事件。一名乘客携带的相机电池和充电宝突然冒烟,乘务组迅速采取措施,及时处理了这一突发情况,消除了安全隐患。为了保障所有人的安全,机组决定立即返航,最终航班在起飞15分钟后安全…

华为OD机试真题——通过软盘拷贝文件(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《通过…

msvcp140.dll丢失?6种有效解决方法,解决程序启动错误!

“msvcp140.dll 丢失&#xff0c;无法启动程序&#xff01;” —— 当你运行某些软件或游戏时&#xff0c;是否遇到这样的错误提示&#xff1f;msvcp140.dll 是 Microsoft Visual C 2015-2022 运行时库的核心文件&#xff0c;许多应用程序依赖它才能正常运行。一旦该文件缺失、…

本周披露并购重组进展的A股名单一览 并购活跃注入新动能

A股市场并购重组持续活跃,产业整合与战略转型交织,为资本市场注入新动能。二级市场上,拟购买包装饮用水公司江西润田实业100%股权的ST联合周五收盘实现3连板,拟跨界收购超高速视觉仪器厂商中科视界的富煌钢构斩获2连板。本周披露并购重组进展的A股上市公司共有16家,包括渤…

车辆坠桥致5死的断头路已加高护栏 新防护装置到位

近日,广东省东莞市环莞快速路虎门段发生了一起小汽车坠桥事故,导致5人死亡,引起了广泛关注。据通报,5月19日18时23分,一辆小汽车搭载4人沿环莞快速路行驶至虎门一水库特大桥路段时,因超速冲破防撞沙桶和护栏后坠桥,车上5名司乘人员受伤,送医抢救无效死亡。死者家属在接…

李连杰邀请头条网友提问 探讨武术与公益

62岁的李连杰在今年4月19日回归微博后,又于5月31日宣布入驻今日头条和抖音平台,让影迷们感叹“失踪人口重回大众视野”。当天,李连杰在抖音上发布了三条视频,讲述了自己开设抖音账号的原因,并介绍了端午节的习俗。他在视频中表示,希望与大家探讨武术、公益、电影和慈善等…

卫星地图 App 的实测体验深度解析

卫星地图 App 的实测体验深度解析 奥维互动地图 国内领先的地理数据平台&#xff1a; 整合天地图、百度地图、高德地图等主流数据源&#xff0c;国内高清卫星影像覆盖率高达98%&#xff0c;农村地区影像分辨率可达0.5米。支持BIM建模与实景三维模型加载&#xff0c;工程测绘…

【速写】PPOTrainer样例与错误思考(少量DAPO)

文章目录 序言1 TRL的PPO官方样例分析2 确实可行的PPOTrainer版本3 附录&#xff1a;DeepSeek关于PPOTrainer示例代码的对话记录Round 1&#xff08;给定模型数据集&#xff0c;让它开始写PPO示例&#xff09;Round 2 &#xff08;指出PPOTrainer的参数问题&#xff09;关键问题…

特朗普称将提高进口钢材关税激怒美盟友

“经济自残” 特朗普称将提高进口钢材关税激怒美盟友当地时间5月30日,美国总统特朗普称,将把美国进口钢铁和铝的关税从目前的25%上调至50%,引发加拿大和澳大利亚多方反对。加拿大劳工大会主席贝娅布鲁斯克表示,特朗普决定提高美国进口钢材关税是“对加拿大的又一次直接攻击…

你的龙舟我的龙舟好像不一样 端午风俗各具特色

划龙舟是端午节最热闹、最让人激动的内容之一。孩子们除了插艾草、挂菖蒲、吃粽子外,最喜欢的就是观看划龙舟。初夏的天气,天蓝水碧,轻风拂面。端午节那天,几艘龙舟一字排列停泊在河里。两岸彩旗飘扬,人山人海。哨声一响,顿时锣鼓喧天,喊声阵阵。几条龙舟像离弦的箭在水…

神二十乘组太空送来端午祝福 天地共享粽香

神舟二十号航天员乘组三名航天员陈冬、陈中瑞、王杰进驻中国空间站已经一个多月。5月31日,他们在太空迎来第一个中国传统节日端午节,并从太空发来祝福。他们祝愿祖国蒸蒸日上,亿万同胞幸福美满、端午安康。此前,不少航天员也在太空中度过端午节。2012年6月23日,神舟九号航…

记者租7辆车有6辆是“非营运”性质 隐患重重引关注

在租车平台租赁车辆时,很多人可能不会特别关注车辆是“营运”还是“非营运”的使用性质。然而,根据《中华人民共和国道路运输条例》规定,非营运车辆不得从事租赁经营活动。如果租到非营运车辆,一旦发生交通事故,保险公司可能会因为车辆用途不符而拒保。胡女士今年刚拿到驾…

《脱缰者也》入围上影节金爵奖 津式黑色幽默引期待

5月31日,第二十七届上海国际电影节金爵奖入围名单揭晓。12部来自全球各地的优秀影片脱颖而出,其中多部中国影片凭借独特的题材、深刻的内涵和出色的创作团队备受关注。曹保平的新作《脱僵者也》再度入围,郭麒麟和齐溪联袂为观众呈现独特的“津式黑色幽默”。青年导演仇晟携新…

新加坡公开赛女单4强国羽占3席 展现强大实力

在北京时间5月30日结束的2025年新加坡羽毛球公开赛1/4决赛中,中国队表现优异。女单方面,陈雨菲、王祉怡和韩悦均晋级四强;男单陆光祖也成功晋级;女双刘圣书/谭宁和贾一凡/张殊贤顺利进入下一轮;混双郭新娃/陈芳卉同样闯入四强。陈雨菲在女单赛场上的表现尤为抢眼,她以两局…

NodeMediaEdge接入NodeMediaServer

如何使用NME接入NMS 简介 NodeMediaEdge是一款部署在监控摄像机网络前端中&#xff0c;拉取Onvif或者rtsp/rtmp/http视频流并使用rtmp/kmp推送到公网流媒体服务器的工具。 通过云平台协议注册到NodeMediaServer后&#xff0c;可以同NodeMediaServer结合使用。使用图形化的管理…

相关部门回应西瓜扔鱼塘喂鱼 尾瓜处理非滞销所致

近日,有博主发布视频称广西崇左扶绥县的西瓜价格大幅下跌,部分瓜农将西瓜扔进鱼塘喂鱼,导致几万斤西瓜烂在地里。网传视频中显示,果农将西瓜扔进池塘喂鱼。5月30日,扶绥县经济作物站工作人员表示,被扔进鱼塘的主要是尾瓜和次瓜,质量不好无法销售,因此用这种方式处理。当…

今年端午节粽子刮起“低卡风” 健康轻食成新宠

临近端午,粽子成为餐桌上的主角。在全民体重管理的热潮下,“低卡”“低脂”成为今年粽子市场的新卖点。沈阳市铁西区一家生鲜超市内,各式粽子的促销柜台前挤满了前来选购的顾客。十色糙米粽子、粗粮低脂无糖粽子等主打“低糖”“低卡”的产品受到消费者青睐。销售人员表示,…

北方人不擅水战具象化了 龙舟赛翻船趣事

端午佳节当天,山东济南大明湖景区举行了一场龙舟赛,吸引了众多游客观赛。上午9时39分许,两只龙舟敲鼓出发展开角逐。然而比赛刚开始不久,一艘龙舟就翻船了,围观人群中随即传来呼声,有游客感叹道:“刚开始,就结束了。”尽管发生了意外,但所有船员都身着救生衣,应急救援…

今年1号台风迟迟不来 好事还是坏事 台风“空窗期”延长

今年北半球台风集体“迟到”。截至5月30日,西北太平洋未生成任何热带气旋。这一现象在有气象记录的76年间仅出现过6次,分别是1952年、1973年、1983年、1984年、1998年和2016年,今年可能成为第七个1至5月“零台风”开局的特殊年份。从历史统计来看,历年1号台风平均生成日期为…

龙舟赛刚开始就翻船救援队成全场最快 北方水战再添趣闻

北方人不擅水战这一说法在一次龙舟赛中再次得到印证。5月31日端午节当天,山东济南大明湖景区举办了一场龙舟比赛,吸引了大量游客前来观赛。上午9时39分左右,两只龙舟敲鼓出发开始角逐。然而比赛刚开始不久,围观人群中就传来了惊呼声,原来有一艘龙舟翻船了,有人调侃说:“…