1. 文档分块策略

文档切分粒度不好把控,既担心噪声太多又担心语义信息丢失

文档索引构建常用思路:

  • 一级索引是关键信息,用于计算相似度
  • 二级索引是原始文本
  • 二者通过索引映射

2. RAG的5种文本分块策略

  1. 字符分割 - 简单的静态字符数据块
  2. 递归字符文本分割 - 基于分隔符列表的递归分块
  3. 特定文档分割 - 针对不同文档类型(PDF、Python、Markdown)的各种分块方法
  4. 语义分割 - 基于嵌入式遍历的分块
  5. LLM 分割 - 使用类似代理系统的实验性文本分割方法。如果您的GPT成本接近于0.00美元,这种方法很好。

3. 不同文本的分类策略(句子、段落、文章)

3.1 句子本身不长,不需要进行额外分割

3.2 语义段的切分及段落(句子)关键信息抽取:

  1. 利用NLP中的成分句法分析(constituency parsing)工具和命名实体识别(NER)工具提取,前者可以提取核心部分(名词短语、动词短语……),后者可以提取重要实体(货币名、人名、企业名……)。
  2. 可以用语义角色标注(Semantic Role Labeling)来分析句子的谓词论元结构,提取“谁对谁做了什么”的信息作为关键信息。
  3. 关键词提取工作(Keyphrase Extraction)。

3.3 文章的切分及关键信息抽取:

  1. nlp篇章分析,把所有包含主从关系的段落合并成一段。
  2. 训练一个bert模型实现语义分割

4. Langchain中的文本分块工具

langchain默认使用RecursiveCharacterTextSplitter

1. RecursiveCharacterTextSplitter():按不同的字符递归地分割文档,同时要兼顾被分割文本的长度和重叠字符,它的默认分割符是一个列表即[“\n\n”, “\n”, " ", “”],因此它会用分割符列表中从左至右的顺序的分割符依次去搜索目标文档中的分割符,然后再分割文档,比如先搜索目标文档中的双换行符\n\n,如果存在,则切割文档,然后依次搜索单分隔符\n,空格等
2. CharacterTextSplitter():按字符数来切割文档。
3. MarkdownHeaderTextSplitter():基于指定的标题来分割markdown 文件,将同一标题下的文本放在了同一个块(chunk)中,而文本对应的标题信息则被存储在块的元数据中。
4. TokenTextSplitter():按token来分割文本。
5. SentenceTransformersTokenTextSplitter() : 是专门用于句子转换模型的文本分割器。默认行为是将文本分割成合适的句子转换模型的标记窗口的块。
6. Language() - 用于 CPP、Python、Ruby、Markdown 等。
7. NLTKTextSplitter():使用 NLTK(自然语言工具包)按句子分割文本,而不仅仅是根据 “\n\n” 进行分割。
8. SpacyTextSplitter() - 使用 Spacy分词器按句子的切割文本。

相关内容解释

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐