当前位置:   article > 正文

RAG之文本分块策略_rag bedding文本块多大比较合理

rag bedding文本块多大比较合理

rag系统在构建向量库时,调用embedding模型之前需要考虑如何将原始文本做分块,好的分块策略可以帮助我们优化从向量库被召回的内容的准确性。

分块的方法:

固定块大小

我们只需决定块中的tokens的数量,以及它们之间是否应该有任何重叠。一般来说,我们会在块之间保持一些重叠,以确保语义上下文不会在块之间丢失。在大多数情况下,固定大小的分块将是最佳方式。与其他形式的分块相比,固定大小的分块在计算上更加经济且易于使用,因为它在分块过程中不需要使用任何NLP库。

基于langchain的示例代码
  1. text = "..." # your text
  2. from langchain.text_splitter import CharacterTextSplitter
  3. text_splitter = CharacterTextSplitter(
  4. separator = "\n\n",
  5. chunk_size = 256,
  6. chunk_overlap = 20
  7. )
  8. docs = text_splitter.create_documents([text])

内容感知分块:

这是一系列方法的组合,利用我们正在分块的内容的性质,并对其应用更复杂的分块。下面是一些例子:
句分割——Sentence splitting

正如我们之前提到的,许多模型都针对Embedding句子级内容进行了优化。当然,我们会使用句子分块,有几种方法和工具可以做到这一点,包括:

  • NLTK[3]: 自然语言工具包(NLTK)是一个流行的Python库,用于处理自然语言数据。它提供了一个句子标记器,可以将文本分成句子,帮助创建更有意义的分块。例如,要将NLTK与LangChain一起使用,您可以这样做:
  1. text = "..." # your text
  2. from langchain.text_splitter import NLTKTextSplitter
  3. text_splitter = NLTKTextSplitter()
  4. docs = text_splitter.split_text(text)
  • spaCy[4]: spaCy是另一个用于NLP任务的强大Python库。它提供了一个复杂的句子分割功能,可以有效地将文本分成单独的句子,从而在生成的块中更好地保存上下文。例如,要将space与LangChain一起使用,您可以这样做:
  1. text = "..." # 你的文本
  2. from langchain.text_splitter import SpacyTextSplitter
  3. text_splitter = SpaCyTextSplitter()
  4. docs = text_splitter.split_text(text)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/924730
推荐阅读
相关标签
  

闽ICP备14008679号