多文档RAG|一个结构化数据提取工具:Knowledge Table

多文档RAG|一个结构化数据提取工具:Knowledge Table

多文档RAG|一个结构化数据提取工具:Knowledge Table

原创 Johntill  2024年10月18日 11:50 北京

多文档提取和检索是一项艰巨的任务。将信息以结构化的方式进行映射以便于检索,其实比听起来要复杂得多。构建适用于多个文档的 RAG 系统尤为困难,尤其是当你希望确保 LLMs 返回的答案具有一定的细粒度,而不仅仅是QFS(查询聚焦摘要)任务时。为解决这一问题,找到一个基于表格的多文档提取和图谱创建工具:KnowledgeTable

点关注

公众号

www.zeeklog.com  - 多文档RAG|一个结构化数据提取工具:Knowledge Table

介绍 KnowledgeTable(知识表)

KnowledgeTable(知识表)是一款 WhyHow.AI 开源软件包,旨在简化从非结构化文档中提取和探索结构化数据(图结构)的过程。通过自然语言查询界面实现创建表格图表结构化知识表示。凭借可定制的提取规则精细的格式选项以及在用户界面中显示的数据来源追溯功能,KnowledgeTable能够适应很多应用场景。

www.zeeklog.com  - 多文档RAG|一个结构化数据提取工具:Knowledge Table
KnowledgeTable的目标是为商业用户提供类似电子表格的熟悉界面,同时为开发者提供灵活且高度可配置的后端支持。无论您处理的是几个文件还是上百份文档,都确保了与现有RAG应用无缝集成

为什么选择KnowledgeTable(知识表)?

一个优秀的RAG应用系统需要将非结构化数据转换为表格或图表等结构化格式。WhyHow.AI 开源了用于整理文档内容及元数据的工具:KnowledgeTable。这款工具界面友好,无论是技术人员还是非专业用户都能方便地使用它来探索和管理数据。

作为一款开源项目,KnowledgeTable可以根据实际具体需求进行调整。支持整合自定义模型工作流程设定提取规则,其灵活特性均能促进创新,并满足个性化要求。通过恰当的数据结构化处理,简化了数据提取步骤,帮助用户从非结构化信息中快速获取有价值的信息。

功能特性

具备额外的查询和记忆功能

块链接 - 将原始源文本块链接到答案,以便追踪和溯源。

自然语言提取 - 使用自然语言查询从非结构化文档中提取结构化数据。

自定义提取规则 - 定义规则来指导提取过程,并确保数据质量。

自定义输出格式 - 控制提取数据的输出格式。

过滤 - 根据元数据或提取的数据筛选文档。

导出为CSV或三元组 - 以CSV或图三元组的形式下载提取的数据。

链式提取 - 在提取问题中使用花括号引用先前的列,例如“{疾病}的治疗方法是什么?”。

产品优势

多文档准确性提升:相比ChatGPT 4.0(网页版)在多文档检索上的表现,我们的准确性提升了2.5倍,同时超越了Text2Cypher两倍,并优于GraphRAG。

基于规则的提取:通过提取规则和类型对开源多文档提取过程进行细致控制。

基于本体的查询引擎:提供直观的查询引擎,允许用户直接调用特定工具和列,从而无缝结合结构化和非结构化的检索。

基础概念

表格

www.zeeklog.com  - 多文档RAG|一个结构化数据提取工具:Knowledge Table

像电子表格一样,表格是一系列存储结构化数据的行和列。每一代表一个文档,而每一则代表通过一个问题提取并格式化的实体

表格的价值体现在几个方面:

对于商业用户而言,它是从大量文档集合中进行结构化信息提取的一种简便方法。

对于开发者而言,它是在KG-RAG系统中的一个中间步骤,用来解析一系列规则及文档中实体类型的本体控制值,这些都可以转化为图谱。

用于多文档RAG流程的后端处理,帮助创建易于在RAG系统中查询的结构化表示。

文档

每个文档是一个上传至KnowledgeTable中的非结构化数据源(如合同、论文或报告)。当您上传文档时,它会被分割成块,这些块会被向量化并打上元数据标签,然后存储在向量数据库中。

问题

问题是引导提取的核心机制。它定义了您希望从文档中提取哪些数据。

生成表、动作表和知识表是什么?

生成表:将静态数据库表转换为动态的、由AI增强的实体,能够自主生成和交互数据。

www.zeeklog.com  - 多文档RAG|一个结构化数据提取工具:Knowledge Table

生成表的schema

www.zeeklog.com  - 多文档RAG|一个结构化数据提取工具:Knowledge Table

动作表:创建用于用户提示的列,并自动生成API端点来解析和响应查询,LLM(大语言模型)生成的结果直接流向前端。

知识表:作为文档集合的存储库,形成可以集成到应用程序中的多模态上下文,并通过生成的元数据列增强检索系统的结构。

主要内容

www.zeeklog.com  - 多文档RAG|一个结构化数据提取工具:Knowledge Table

提取规则

www.zeeklog.com  - 多文档RAG|一个结构化数据提取工具:Knowledge Table

对提取内容的控制非常重要。需要了解文档中的某些信息,并希望通过尽可能多地提供上下文来改善提取过程。

目前支持的规则,以及将来会继续增加的规则包括:

Must Return:指返回的答案必须符合用户提供的值列表。例如,在医疗应用案例中,你可能已经有了一个罕见病名称列表,你希望能够加载并提取出来。给定的列表是详尽无遗的,返回的结果应该只反映列表中的内容。

May Return:可以给出一些示例,帮助大语言模型在执行提取时进行少量样本学习。提供的列表并不是详尽的,大语言模型可能会找到列表之外的例子。

Allowed of Responses:当你知道预期的响应数量时适用。例如,一个人被分配的ID数量。能够限制响应的数量有助于减少可能出现的幻觉现象。

随着该软件包的开源,你可以贡献其他类型的提取规则加入到代码库中,或者在自己的系统中运行时,调整最适合你的数据和流程的提取过程。

链式提取

你可以选择链接提取过程,这样前一列产生的值就可以定义并决定后续列的提取过程。例如,首先提取文档中提到的所有疾病,然后在随后的列中映射所需的药物。要在问题字段中引用另一列,只需标记与参考列名匹配的词即可,比如:@diseases。

如果你选择了"文本列表"或"数字列表",则可以将包含多个值的单元格拆分为单个值的多行,这使得链式提取变得更加容易。

审计性和来源引用

在RAG过程中,能够追踪提取的信息回到最初的向量信息块是非常基本的要求。对于每个单元格,可以看到答案来源的信息块。这提供了审计性,并且快速参考可以帮助必要时验证大语言模型输出的正确性。

这也是RAG系统中的一个关键步骤,需要访问底层的数据块来帮助构建最终返回给用户的答案。

应用场景

通过输入问题、规则配置和文档,KnowledgeTable就会根据输入处理数据并返回结构化输出。可能需要调整问题或规则设置以优化提取结果。

合同管理:提取关键信息,如当事方名称、生效日期和续签日期

财务报告:从年度报告或收益声明中提取财务数据

研究提取:从一系列研究报告中提取关键信息

元数据生成:通过对文件执行有针对性的问题来对文档和文件信息进行分类和标记(例如:这封电子邮件线程涉及哪个项目?)

可自定义扩展功能

KnowledgeTable构建得非常灵活和可定制,允许您根据工作流程进行扩展:

与您自己的数据库集成

创建自定义问题和规则

连接您的模型

使用自定义嵌入

扩展以处理更大负载

可选集成

非结构化API

KnowledgeTable提供了与非结构化API的可选集成,以增强文档处理能力。这种集成为多种文档类型的高级解析和提取提供了可能。

要使用非结构化API集成:

在 Unstructured.io (https://www.unstructured.io)注册获取API密钥

  1. .env文件中设置UNSTRUCTURED_API_KEY环境变量,或使用您的API密钥:
export UNSTRUCTURED_API_KEY=your_api_key_here
  1. 安装带有非结构化支持的项目:
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

关于我

点关注

www.zeeklog.com  - 多文档RAG|一个结构化数据提取工具:Knowledge Table

不迷路

www.zeeklog.com  - 多文档RAG|一个结构化数据提取工具:Knowledge Table

老贾探AI

专注于AI前沿技术分享,涵盖LLM、RAG、知识图谱、NLP工程实践及大数据领域。不定期发布技术文章与最佳实践。 ==> 欢迎关注,持续学习,共同成长 ~

62篇原创内容

公众号

往期推荐

Read more

深入理解 Proxy 和 Object.defineProperty

在JavaScript中,对象是一种核心的数据结构,而对对象的操作也是开发中经常遇到的任务。在这个过程中,我们经常会使用到两个重要的特性:Proxy和Object.defineProperty。这两者都允许我们在对象上进行拦截和自定义操作,但它们在实现方式、应用场景和灵活性等方面存在一些显著的区别。本文将深入比较Proxy和Object.defineProperty,包括它们的基本概念、使用示例以及适用场景,以帮助读者更好地理解和运用这两个特性。 1. Object.defineProperty 1.1 基本概念 Object.defineProperty 是 ECMAScript 5 引入的一个方法,用于直接在对象上定义新属性或修改已有属性。它的基本语法如下: javascript 代码解读复制代码Object.defineProperty(obj, prop, descriptor); 其中,obj是目标对象,prop是要定义或修改的属性名,descriptor是一个描述符对象,用于定义属性的特性。 1.2 使用示例 javascript 代码解读复制代码//

By Ne0inhk

Proxy 和 Object.defineProperty 的区别

Proxy 和 Object.defineProperty 是 JavaScript 中两个不同的特性,它们的作用也不完全相同。 Object.defineProperty 允许你在一个对象上定义一个新属性或者修改一个已有属性。通过这个方法你可以精确地定义属性的特征,比如它是否可写、可枚举、可配置等。该方法的使用场景通常是需要在一个对象上创建一个属性,然后控制这个属性的行为。 Proxy 也可以用来代理一个对象,但是相比于 Object.defineProperty,它提供了更加强大的功能。使用 Proxy 可以截获并重定义对象的基本操作,比如访问属性、赋值、函数调用等等。在这些操作被执行之前,可以通过拦截器函数对这些操作进行拦截和修改。因此,通过 Proxy,你可以完全重写一个对象的默认行为。该方法的使用场景通常是需要对一个对象的行为进行定制化,或者需要在对象上添加额外的功能。 对比 以下是 Proxy 和 Object.defineProperty 的一些区别对比: 方面ProxyObject.defineProperty语法使用 new Proxy(target,

By Ne0inhk