多文档RAG|一个结构化数据提取工具:Knowledge Table
多文档RAG|一个结构化数据提取工具:Knowledge Table
原创 Johntill 2024年10月18日 11:50 北京
多文档
提取和检索是一项艰巨的任务。将信息以结构化
的方式进行映射以便于检索,其实比听起来要复杂得多。构建适用于多个文档的 RAG 系统尤为困难,尤其是当你希望确保 LLMs 返回的答案具有一定的细粒度
,而不仅仅是QFS(查询聚焦摘要)任务
时。为解决这一问题,找到一个基于表格的多文档提取和图谱创建工具:KnowledgeTable。
点关注
公众号
介绍 KnowledgeTable(知识表)
KnowledgeTable(知识表)是一款 WhyHow.AI 开源
软件包,旨在简化从非结构化文档中提取和探索结构化数据(图结构)的过程。通过自然语言查询
界面实现创建表格
和图表
等结构化知识表示
。凭借可定制的提取规则
、精细的格式选项
以及在用户界面中显示的数据来源追溯
功能,KnowledgeTable能够适应很多应用场景。
KnowledgeTable的目标是为商业用户提供类似电子表格的熟悉界面,同时为开发者提供灵活且高度可配置
的后端支持。无论您处理的是几个文件还是上百份文档,都确保了与现有RAG应用
的无缝集成
。
为什么选择KnowledgeTable(知识表)?
一个优秀的RAG应用系统需要将非结构化数据转换为表格或图表等结构化格式。WhyHow.AI 开源了用于整理文档内容及元数据的工具:KnowledgeTable。这款工具界面友好,无论是技术人员还是非专业用户都能方便地使用它来探索和管理数据。
作为一款开源项目,KnowledgeTable可以根据实际具体需求进行调整。支持整合自定义模型
、工作流程
或设定提取规则
,其灵活特性
均能促进创新,并满足个性化要求。通过恰当的数据结构化处理,简化了数据提取步骤,帮助用户从非结构化信息中快速获取有价值的信息。
功能特性
具备额外的查询和记忆功能
块链接 - 将原始源文本块链接到答案,以便追踪和溯源。
自然语言提取 - 使用自然语言查询从非结构化文档中提取结构化数据。
自定义提取规则 - 定义规则来指导提取过程,并确保数据质量。
自定义输出格式 - 控制提取数据的输出格式。
过滤 - 根据元数据或提取的数据筛选文档。
导出为CSV或三元组 - 以CSV或图三元组的形式下载提取的数据。
链式提取 - 在提取问题中使用花括号引用先前的列,例如“{疾病}
的治疗方法是什么?”。
产品优势
多文档准确性提升:相比ChatGPT 4.0(网页版)在多文档检索上的表现,我们的准确性提升了2.5倍,同时超越了Text2Cypher两倍,并优于GraphRAG。
基于规则的提取:通过提取规则和类型对开源多文档提取过程进行细致控制。
基于本体的查询引擎:提供直观的查询引擎,允许用户直接调用特定工具和列,从而无缝结合结构化和非结构化的检索。
基础概念
表格
像电子表格一样,表格
是一系列存储结构化数据的行和列。每一行
代表一个文档
,而每一列
则代表通过一个问题提取并格式化的实体
。
表格的价值体现在几个方面:
对于商业用户而言,它是从大量文档集合中进行结构化信息提取的一种简便方法。
对于开发者而言,它是在KG-RAG系统中的一个中间步骤,用来解析一系列规则及文档中实体类型的本体控制值,这些都可以转化为图谱。
用于多文档RAG流程的后端处理,帮助创建易于在RAG系统中查询的结构化表示。
文档
每个文档
是一个上传至KnowledgeTable中的非结构化数据源(如合同、论文或报告)。当您上传文档时,它会被分割
成块,这些块会被向量化
并打上元数据标签
,然后存储在向量数据库中。
问题
问题是引导提取的核心机制。它定义了您希望从文档中提取哪些数据。
生成表、动作表和知识表是什么?
生成表:将静态数据库表转换为动态的、由AI增强的实体,能够自主生成和交互数据。
生成表的schema
动作表:创建用于用户提示的列,并自动生成API端点来解析和响应查询,LLM(大语言模型)生成的结果直接流向前端。
知识表:作为文档集合的存储库,形成可以集成到应用程序中的多模态上下文,并通过生成的元数据列增强检索系统的结构。
主要内容
提取规则
对提取内容的控制非常重要。需要了解文档中的某些信息,并希望通过尽可能多地提供上下文来改善提取过程。
目前支持的规则,以及将来会继续增加的规则包括:
Must Return:指返回的答案必须符合用户提供的值列表。例如,在医疗应用案例中,你可能已经有了一个罕见病名称列表,你希望能够加载并提取出来。给定的列表是详尽无遗的,返回的结果应该只反映列表中的内容。
May Return:可以给出一些示例,帮助大语言模型在执行提取时进行少量样本学习。提供的列表并不是详尽的,大语言模型可能会找到列表之外的例子。
Allowed of Responses:当你知道预期的响应数量时适用。例如,一个人被分配的ID数量。能够限制响应的数量有助于减少可能出现的幻觉现象。
随着该软件包的开源,你可以贡献其他类型的提取规则加入到代码库中,或者在自己的系统中运行时,调整最适合你的数据和流程的提取过程。
链式提取
你可以选择链接提取过程,这样前一列产生的值就可以定义并决定后续列的提取过程。例如,首先提取文档中提到的所有疾病,然后在随后的列中映射所需的药物。要在问题字段中引用另一列,只需标记与参考列名匹配的词即可,比如:@diseases。
如果你选择了"文本列表"或"数字列表",则可以将包含多个值的单元格拆分为单个值的多行,这使得链式提取变得更加容易。
审计性和来源引用
在RAG过程中,能够追踪提取的信息回到最初的向量信息块是非常基本的要求。对于每个单元格,可以看到答案来源的信息块。这提供了审计性,并且快速参考可以帮助必要时验证大语言模型输出的正确性。
这也是RAG系统中的一个关键步骤,需要访问底层的数据块来帮助构建最终返回给用户的答案。
应用场景
通过输入问题、规则配置和文档,KnowledgeTable就会根据输入处理数据并返回结构化输出。可能需要调整问题或规则设置以优化提取结果。
合同管理:提取关键信息,如当事方名称、生效日期和续签日期
财务报告:从年度报告或收益声明中提取财务数据
研究提取:从一系列研究报告中提取关键信息
元数据生成:通过对文件执行有针对性的问题来对文档和文件信息进行分类和标记(例如:这封电子邮件线程涉及哪个项目?)
可自定义扩展功能
KnowledgeTable构建得非常灵活和可定制,允许您根据工作流程进行扩展:
与您自己的数据库集成。
创建自定义问题和规则。
连接您的模型。
使用自定义嵌入。
扩展以处理更大负载。
可选集成
非结构化API
KnowledgeTable提供了与非结构化API的可选集成,以增强文档处理能力。这种集成为多种文档类型的高级解析和提取提供了可能。
要使用非结构化API集成:
在 Unstructured.io (https://www.unstructured.io)注册获取API密钥
- 在
.env
文件中设置UNSTRUCTURED_API_KEY
环境变量,或使用您的API密钥:
export UNSTRUCTURED_API_KEY=your_api_key_here
- 安装带有非结构化支持的项目:
pip install .[unstructured]
当设置了UNSTRUCTURED_API_KEY
时,KnowledgeTable会自动使用非结构化API进行文档处理。如果没有设置密钥或遇到非结构化API的问题,系统将回退到默认的文档加载器。
注意:使用非结构化API可能会根据在Unstructured.io上的计划产生费用。
引用
https://github.com/whyhow-ai/knowledge-table
KnowledgeTable演示版本:https://knowledge-table-demo.whyhow.ai
关于我
点关注
不迷路
老贾探AI
专注于AI前沿技术分享,涵盖LLM、RAG、知识图谱、NLP工程实践及大数据领域。不定期发布技术文章与最佳实践。 ==> 欢迎关注,持续学习,共同成长 ~
62篇原创内容
公众号