公司网站开源源码,查询网站建立时间,淘客免费网站建设,凡科建站收费价目表Text Splitters
文本分隔
检索的关键部分时仅获取文档的相关部分#xff0c;主要任务之一是将大文档分割为更小的块。
最简单的例子是#xff0c;将长文档分割成更小的块#xff0c;以适合模型的上下文窗口。
LangChain 有许多内置的文档转换器#xff0c;可以轻松地拆…Text Splitters
文本分隔
检索的关键部分时仅获取文档的相关部分主要任务之一是将大文档分割为更小的块。
最简单的例子是将长文档分割成更小的块以适合模型的上下文窗口。
LangChain 有许多内置的文档转换器可以轻松地拆分、组合、过滤和以其他方式操作文档。
理想情况下希望将语义相关的文本片段保留在一起。“语义相关”的含义可能取决于文本的类型。下面展示了实现此目的的几种方法。
在较高层面上文本分割器的工作原理如下
将文本分成小的、具有语义意义的块通常是句子开始将这些小块组合成一个更大的块直到达到一定的大小通过某些函数测量。一旦达到该大小请将该块设为自己的文本片段然后开始创建具有一些重叠的新文本块以保持块之间的上下文。
这意味着可以沿着两个不同的轴自定义文本拆分器
如何分割文本如何测量块大小
Types of Text Splitters
LangChain 提供了多种不同类型的文本分割器。这些都位于 langchain-text-splitters 包中。下表列出了所有这些以及一些特征
Name文本分割器的名称Splits On该文本分割器如何分割文本Adds Metadata该文本拆分器是否添加有关每个块来自何处的元数据Description分割器的描述包括有关何时使用它的建议
NameSplits OnAdds MetadataDescriptionRecursive用户定义的字符列表递归地分割文本递归地分割文本的目的是尝试使相关的文本片段彼此相邻。(推荐)HTMLHTML 特定字符√根据 HTML 特定字符分割文本值得注意的是添加了有关该块来自何处的相关信息基于 HTMLMarkdownMarkdown 特定字符√根据 Markdown 特定字符分割文本值得注意的是这添加了有关该块来自何处的相关信息基于 MarkdownCodecode(Python、JS)特定字符根据特定于编码语言的字符分割文本有 15 种不同的语言可供选择。TokenTokens根据token分隔文本有几种不同的方法衡量tokensCharacter用户定义的字符根据用户定义的字符拆分文本比较简单的方法之一。[Experimental] Semantic Chunker句子首先对句子进行分割。然后如果它们在语义上足够相似则将它们相邻地组合起来。
HTMLHeaderTextSplitter
概念上类似于 MarkdownHeaderTextSplitter、HTMLHeaderTextSplitter是一个“结构感知”分块器它在元素级别拆分文本并为每个与任何给定块“相关”的标题添加元数据。它可以逐个元素返回块或将具有相同元数据的元素组合起来目标是 (a) 保持相关文本在语义上或多或少分组(b)保留文档结构中编码的上下文丰富的信息。它可以与其他文本分割器一起使用作为分块管道的一部分。
使用示例
使用 HTML 字符串通过管道传输到另一个拆分器并从 Web URL 加载 html
局限性
一个 HTML 文档与另一个 HTML 文档之间可能存在相当多的结构变化虽然 HTMLHeaderTextSplitter 会尝试将所有“相关”标头附加到任何给定块但有时可能会丢失某些标头。
Split by character
最简单的方法这基于字符默认为“”进行分割并通过字符数来测量块长度。
通过单个字符进行文本分割按字符数测量块大小
Split code
CodeTextSplitter 允许您使用支持的多种语言拆分代码。
Recursiverly split JSON
递归拆分JSON
JSON分割器首先遍历JSON数据深度并构建更小的JSON块。
它尝试保持嵌套的 json 对象完整但如果需要将块保留在 min_chunk_size 和 max_chunk_size 之间则会将它们分割。
如果该值不是嵌套的 json而是一个非常大的字符串则该字符串将不会被拆分。
如果需要对块大小进行硬性限制请考虑在这些块上使用递归文本拆分器。
有一个可选的预处理步骤来分割列表首先将它们转换为 json (dict)然后这样分割它们。
按json值对文本进行分割按字符数测量块大小
Recursiverly split by character
按字符递归分割
对于一般文本推荐使用此文本分割器。它由字符列表参数化它尝试按顺序分割它们直到块足够小。
默认列表为 [“\n\n”, “\n”, , “”]。
这样做的效果是尝试将所有段落然后是句子然后是单词尽可能长时间地放在一起因为这些通常看起来是语义相关性最强的文本片段。
按字符列表进行文本分割按字符数测量块大小
Semantic Chunking
语义分块根据语义相似性分割文本。
在较高层次上它会分成句子然后分成 3 个句子为一组然后合并嵌入空间中相似的句子。