RAG101第四课:通过命题切分增强AI系统的检索能力


传统的文本分块方法(如按段落或句子切分)可能存在一些缺陷:

  • 关键信息可能分散在多个文本块中,难以获取完整的要点。
  • 一个文本块可能同时包含相关和无关的信息。
  • 很难准确定位用于回答特定问题的信息。


命题切分(Proposition Chunking)方法旨在通过将信息拆解为最小的有意义单元来解决这些问题。


命题切分的核心目标是构建一个通过将文档拆解为小型事实命题,从而能够实现高度精准的检索,更易于从大规模或复杂文档中提取精确答案的信息检索系统。

使用命题切分能够提供更精细的控制,使系统更好地处理特定查询,尤其是在从复杂或细节丰富的文本中提取知识时效果更佳。

命题是小型的、自包含的信息单元,可以将其视为独立的事实或主张。命题具有以下关键特征:

  • 包含单一信息点。
  • 可以在没有额外上下文的情况下被理解。
  • 陈述一个清晰的事实或主张。
  • 简洁明了。
  • 其自身包含所有必要的上下文信息。


例如,相比于一整段关于第一次世界大战的文字,命题可以拆解为:

  • “第一次世界大战始于1914年。”
  • “奥匈帝国的弗朗茨·斐迪南大公遇刺是第一次世界大战的导火索。”
  • “第一次世界大战涉及多个欧洲国家。”



加载文档  



这里我们加载一段样例文档




生成命题  



让 LLM 以结构化的形式生成命题,先定义好结构和 LLM:



接下来设定一个少样本提示和系统提示,指导 LLM 如何从给定的文本中生成命题:



生成命题:




评估命题  



使用 LLM 对生成的命题进行评估,一共有 4 个评估标准:
  • 准确性(Accuracy)
  • 清晰度(Clarity)
  • 完整性(Completeness)
  • 简洁性(Conciseness)


每个标准的得分区间在 1-10,我们仅保留在所有标准上均达标(>7)的命题,以确保信息质量。



我们定义了两个辅助函数来帮助挑选出满足条件的命题:


开始正式评估,我们会打印出不满足条件的命题:



生成命题嵌入并进行测试  



为了简单起见,我就直接使用了内存向量数据库 FAISS。



然后选择了三个查询测试一下,效果还行。





命题方法提供了一种新的思维方式,帮助我们更高效地表示和检索信息。虽然它并非万能解决方案,但在提高信息检索的精度和有效性方面具有很大潜力。


如果你正在构建需要检索和使用信息的 AI 系统,命题方法或许可以考虑作为提升系统性能的一种策略。

本文源代码:

https://github.com/realyinchen/RAG/blob/main/RAG101/004-Proposition_Chunking.ipynb

查阅此前文章:

《RAG101第三课:通过添加验证和优化构建可靠的RAG》

《RAG101第二课:一个简单的CSV文件RAG工作流》

《RAG101第一课:一个简单的RAG工作流》

文章来源:PyTorch研习社







(文:PyTorch研习社)

欢迎分享

发表评论