掘金 人工智能 12小时前
3种方法让LLM提取任意文档中的知识点
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了利用大语言模型(LLM)从文档中提取关键信息的多种方法,从预处理到知识提取,涵盖了直接提问、指定提取范式、提取为 JSON 结构,以及提取为 QA 问答对等多种策略,并结合实例进行详细说明,旨在帮助用户根据不同场景选择最优方案,构建高效的知识提取系统。

✨预处理环节至关重要,将各种文档格式统一转换为Markdown文本,结构清晰且便于模型理解,为后续知识提取打下基础,例如使用markitdown库进行自动化转换。

💡直接提问,指定提取范式,适用于对文档内容有先验知识的场景,通过定义提取范式和构建提示词,引导模型提取特定信息,例如提取人物简介的关键信息。

🔑提取为JSON结构,利用JSON的强大数据表达能力,让模型自主发现并组织文档中的知识结构,实现从“填空题”到“简答题”的升级,例如提取玛丽·居里简介的JSON结构。

❓提取为QA问答对,将文档内容转化为一系列直观的、可供问答的知识单元,模拟用户意图,为构建智能问答系统和RAG应用奠定基础,例如提取玛丽·居里简介的QA问答对。

大语言模型(LLM)使得从海量非结构化文档中自动化、规模化地提取关键信息成为可能。无论是处理公司财报、技术白皮书,还是分析法律合同,LLM 都能扮演一个高效的“知识萃取专家”。

本指南将系统介绍从文档预处理到知识提取的三种方法,帮助你根据不同场景选择最优方案。

预处理:将任意文档转换为结构化的纯文本(Markdown)

在将任何文档交给大模型之前,有一个至关重要的预处理步骤:将任意格式的文档转换为大模型可处理的纯文本格式。信息的质量和格式,直接决定了模型提取知识的上限。

大语言模型本身不理解.pdf的视觉布局、不认识.docx的复杂样式,也无法直接解析.html的标签。它们的核心输入是文本序列。因此,我们的首要任务,就是将五花八门的文档格式统一转换成一种既保留了原文结构、又便于模型理解的文本格式。

1. 目标:为什么选择 Markdown?

我们的目标并非简单地将所有内容揉成一团纯文本(.txt),而是将其转换为一种 对大语言模型友好的格式——Markdown

为什么是 Markdown?

2. 核心挑战:格式的繁杂

在实际工作中,我们面临的文档格式多种多样,每种都有其处理难点:

手动处理这些格式费时费力且容易出错。因此,我们需要一个强大的自动化工具来扮演文档清洁工的角色。

3. 推荐方案:使用 Python 的markitdown

在这里,推荐使用一个专为此目的设计的 Python 开源项目——markitdown。它旨在将多种主流文档格式一键转换为干净、高质量的 Markdown。开源地址:github.com/microsoft/m…

总结

文档预处理是构建高质量知识提取系统的基石。通过使用markitdown这类工具将任意文档统一转换为结构化的 Markdown 文本,我们为大语言模型铺平了道路,确保了输入数据的干净、规整和易于理解。

在拥有了这份坚实的地基之后,我们便可以自信地进入知识提取的核心环节,探索如何运用大语言模型从中挖掘出珍贵的知识宝藏了。接下来,我们将介绍第一种提取方法:直接提问,指定提取范式

方法一:直接提问,指定提取范式

这种方法的核心思想是,当我们对目标文档的内容类型有一定先验知识时,可以主动为大模型设定一个清晰的“信息框架”或“提取模板”,引导模型像填写一份结构化表单一样,将文档中的对应信息“填入”我们预设的类别中。

1. 核心原理

此方法模拟了人类专家阅读文档的过程。一位领域专家在阅读材料时,脑海中通常会带着明确的目标,例如:“这份财报的关键财务指标是什么?”或“这篇论文的核心技术贡献有哪些?”。

“指定提取范式”正是将这种目标导向的思维模式,转化为对大模型的明确指令。我们不让模型漫无目的地“阅读全文”,而是给它一个“任务清单”,要求它在文档中寻找并填充我们指定的知识类别。这种方式极大地约束了模型的输出空间,使其专注于提取我们最关心的信息。

2. 具体实现方式

实现此方法非常简单,主要包含两个步骤:

第一步:定义提取范式(Schema)根据你的需求和文档类型,预先定义好需要提取的知识点类别。这个范式可以是一个简单的列表,也可以是更复杂的分类。

例如:

第二步:构建提示词(Prompt)将提取范式和原始文档组合成一个清晰的提示词。一个简洁的提示词结构通常如下:

# 任务指令请根据下面提供的 {文档类型} 内容,严格按照我给定的范式提取关键知识点。# 提取范式- {类别一}: [请在此处填写提取内容]- {类别二}: [请在此处填写提取内容]- {类别三}: [请在此处填写提取内容]...# 文档内容{此处粘贴你的完整文档文本}

3. 实战示例:提取一篇人物简介的核心信息

假设我们有一段关于玛丽·居里的简介,希望能快速抽取出其中的核心要素。

第一步:定义范式对于人物简介,我们关心的通常是人物、成就、关键时间和相关领域。因此,我们定义范式如下:

第二步:构建并发送 Prompt

# 任务指令请根据下面提供的人物简介,严格按照我给定的范式提取关键知识点。如果某一项在原文中未提及,请填写“未提及”。# 提取范式- 关键人物: [请在此处填写提取内容]- 国籍/领域: [请在此处填写提取内容]- 主要成就: [请在此处填写提取内容]- 重要时间节点: [请在此处填写提取内容]- 核心概念: [请在此处填写提取内容]# 文档内容玛丽·居里(Marie Curie,1867年11月7日—1934年7月4日),出生于波兰华沙,是世界著名的物理学家、化学家。她是放射性研究的先驱者,与其丈夫皮埃尔·居里共同发现了放射性元素钋(Po)和镭(Ra)。1903年,他们因此与亨利·贝克勒勒共同获得了诺贝尔物理学奖。1911年,玛丽·居里因成功分离出纯的金属镭而再次荣获诺贝尔化学学奖,成为世界上第一位两次获得诺贝尔奖的人。她的研究极大地推动了原子物理学的发展,并为癌症的放射性治疗奠定了基础。

第三步:获取模型输出

大模型会根据指令,生成如下结构清晰的输出:

-   关键人物: 玛丽·居里(Marie Curie)-   国籍/领域: 波兰裔;物理学家、化学家-   主要成就: 发现放射性元素钋和镭;成功分离出纯的金属镭;成为首位两获诺贝尔奖的人。-   重要时间节点: 1867 年(出生),1903 年(获诺贝尔物理学奖),1911 年(获诺贝尔化学学奖),1934 年(逝世)。-   核心概念: 放射性研究、原子物理学、放射性治疗

4. 优点与局限性

优点:

局限性:

5. 适用场景

基于其优缺点,此方法特别适用于以下场景:

    批量处理同类文档:例如,从上千份简历中提取 [姓名, 联系方式, 工作年限, 毕业院校, 技能标签];或从大量财务报告中提取 [公司名称, 报告期, 总收入, 净利润, 资产负债率]特定信息抽取任务:当你的目标非常明确,只关心文档中的某几个特定数据点时,此方法最为直接有效。构建知识图谱的初始数据:提取出的结构化实体和关系,可以作为构建知识图谱的原子数据来源。

总而言之,“指定提取范式”是一种强大而可靠的“精确制导”型知识提取工具。它最适合那些目标明确、结构重复的场景。然而,当我们面对内容多样、结构未知的复杂文档,或希望进行更全面的开放式知识探索时,就需要接下来将要介绍的、更具自适应性的方法了。

方法二:直接提问,提取为 JSON 结构

当方法一中预设的固定范式无法满足我们对知识复杂性和灵活性的要求时,就需要一种更具弹性的提取方式。方法二“提取为 JSON 结构”应运而生。它利用 JSON 的强大数据表达能力,让大语言模型自行发现并组织文档中的知识结构,从而实现从“填空题”到“简答题”的升级。

1. 核心原理

此方法的核心在于,我们不再为模型提供一个僵化的“表单”,而是要求它将文档内容理解、归纳后,以一种通用的、自描述的、层次化的格式——JSON——进行输出。

JSON 格式天然支持键值对、数组和对象嵌套,这使其能够完美地表示现实世界中复杂的、非线性的知识关系。例如,一个“项目”可以包含多个“成员”,每个“成员”又有自己的“姓名”和“职责”。这种层级关系用方法一的扁平列表很难表达,但用 JSON 则轻而易举。

通过要求 LLM 生成 JSON,我们实际上是授权模型:

    识别实体(Entities):找出文档中的关键对象,如人物、公司、产品。提取属性(Attributes):捕捉每个实体的相关信息,如人物的职位、产品的价格。发现关系(Relationships):理解实体间的联系,并用嵌套结构将其组织起来。

2. 具体实现方式

第一步:确定提取的广度和深度你不需要定义每一个具体的字段,但需要给模型一个大致的方向。是希望提取一个扁平的键值对集合,还是一个深度嵌套的复杂结构?希望关注哪些宏观层面的信息?

第二步:构建提示词(Prompt)提示词是这里的关键。一个好的提示词应该清晰地传达以下几点:

一个通用的提示词模板如下:

# 任务指令请仔细阅读下方的文档,并提取其中所有的关键知识点。请将提取的结果组织成一个结构清晰、多层嵌套的JSON对象。JSON的结构应该能反映信息之间的逻辑层级关系。# 文档内容{此处粘贴你的完整文档文本}

3. 实战示例:再次提取玛丽·居里的简介

我们继续使用相同的玛丽·居里简介文本,但这次采用 JSON 提取方法,以对比其与方法一的差异。

构建并发送 Prompt

# 任务指令请仔细阅读下方的个人简介,并提取其中所有的关键信息。请将提取的结果组织成一个结构清晰的JSON对象,其中应包含人物的基本信息、教育背景以及其主要科学成就(成就应作为一个列表,每个成就包含年份和描述)。# 文档内容玛丽·居里(Marie Curie,1867年11月7日—1934年7月4日),出生于波兰华沙,是世界著名的物理学家、化学家。她是放射性研究的先驱者,与其丈夫皮埃尔·居里共同发现了放射性元素钋(Po)和镭(Ra)。1903年,他们因此与亨利·贝克勒勒共同获得了诺贝尔物理学奖。1911年,玛丽·居里因成功分离出纯的金属镭而再次荣获诺贝尔化学学奖,成为世界上第一位两次获得诺贝尔奖的人。她的研究极大地推动了原子物理学的发展,并为癌症的放射性治疗奠定了基础。

获取模型输出

模型会生成一个结构化的 JSON 对象,能够清晰地展示信息层级:

{    "person": {        "name": "玛丽·居里",        "english_name": "Marie Curie",        "lifespan": {            "birth": "1867-11-07",            "death": "1934-07-04"        },        "birthplace": "波兰华沙",        "fields": ["物理学", "化学"],        "titles": ["物理学家", "化学家", "放射性研究的先驱者"],        "achievements": [            {                "year": 1903,                "award": "诺贝尔物理学奖",                "description": "与皮埃尔·居里、亨利·贝克勒勒共同因对放射性的研究获奖。",                "related_discoveries": ["钋 (Po)", "镭 (Ra)"]            },            {                "year": 1911,                "award": "诺贝尔化学学奖",                "description": "因成功分离出纯的金属镭而获奖,成为首位两次获得诺贝尔奖的人。"            }        ],        "legacy": "极大地推动了原子物理学的发展,并为癌症的放射性治疗奠定了基础。"    }}

对比方法一的扁平列表,这个 JSON 输出显然包含了更丰富、更有条理的结构化信息。

4. 优点与局限性

优点:

局限性:

5. 适用场景

尽管存在局限性,JSON 提取方法依然在许多场景下表现出色:

    探索性知识发现:当你对一份文档的内容结构不甚了解,希望模型帮助你梳理出其中的知识脉络时,此方法是理想选择。处理半结构化数据:对于那些本身就包含一定结构(如产品规格表、组织架构图描述)的文档,JSON 能很好地还原并规范化这些结构。为 API 或应用准备数据:当最终目的是将提取的知识点通过 API 提供服务或存入数据库时,JSON 是天然的、最适配的格式。

总的来说,将知识提取为 JSON 是一种兼具灵活性和强大表达能力的先进方法。它将知识提取的自主权更多地交给了模型。然而,要真正发挥其威力,开发者必须正视并解决其在稳定性和长文档处理上的挑战,通常需要结合后续的数据校验、清洗以及更精巧的文档分块处理策略(如参考下文中提到的“两阶段记忆-聚焦对话机制”)。

方法三:直接提问,提取为 QA 问答对

前面两种方法分别解决了“按固定模板填空”和“按内容自主构建层级结构”的问题。然而,知识的最终目的是被应用和查询。方法三“提取为 QA 问答对”将知识提取的焦点从“存储”转向了“使用”,它将文档内容转化为一系列直观的、可供问答的知识单元,是构建智能问答系统和 RAG(Retrieval-Augmented Generation)应用的核心基石。

1. 核心原理

此方法的核心思想是 将陈述性知识转换为可对话的、可检索的原子单元。它不再问“这份文档里有什么?”,而是问“这份文档能回答哪些问题?”。

模型被要求扮演一个“出题老师”的角色,通读全文后,针对其中的每一个关键知识点,设计一个问题(Question)并给出精准的答案(Answer)。这种转换具有深远的意义:

2. 具体实现方式

实现 QA 提取,需要根据文档的长度采用不同的策略,下面给出非常成熟的工程实践。

第一步:基础实现 - 简单提示词对于中短篇幅、信息密度适中的文档,一个简单的指令即可生效。

构建提示词(Prompt):提示词需要明确任务目标和输出格式。

# 任务指令请仔细阅读以下文档,并将其中的核心知识点提取为一系列「一问一答」的QA问答对。请确保问题具有代表性,答案严格来源于原文内容。# 输出格式请以JSON数组的格式输出,每个对象包含"Question"和"Answer"两个键。[  {"Question": "string", "Answer": "string"},  {"Question": "string", "Answer": "string"}]# 文档内容{此处粘贴你的完整文档文本}

第二步:进阶策略 - 应对复杂文档简单的全文输入在处理极短或极长的文档时会遇到瓶颈。因此,必须采用更精巧的策略。

3. 实战示例:依然是玛丽·居里的简介

我们使用基础实现方式来处理这段文本。

构建并发送 Prompt

# 任务指令请仔细阅读以下文档,并将其中的核心知识点提取为一系列「一问一答」的QA问答对。请确保问题具有代表性,答案严格来源于原文内容。# 输出格式请以JSON数组的格式输出,每个对象包含"Question"和"Answer"两个键。# 文档内容玛丽·居里(Marie Curie,1867年11月7日—1934年7月4日),出生于波兰华沙,是世界著名的物理学家、化学家。她是放射性研究的先驱者,与其丈夫皮埃尔·居里共同发现了放射性元素钋(Po)和镭(Ra)。1903年,他们因此与亨利·贝克勒勒共同获得了诺贝尔物理学奖。1911年,玛丽·居里因成功分离出纯的金属镭而再次荣获诺贝尔化学学奖,成为世界上第一位两次获得诺贝尔奖的人。她的研究极大地推动了原子物理学的发展,并为癌症的放射性治疗奠定了基础。

获取模型输出

模型会生成一个可以直接用于知识库的 JSON 数组:

[    {        "Question": "玛丽·居里的出生地和职业是什么?",        "Answer": "她出生于波兰华沙,是一位世界著名的物理学家和化学家。"    },    {        "Question": "玛丽·居里在放射性研究领域的主要贡献是什么?",        "Answer": "她是放射性研究的先驱者,并与其丈夫皮埃尔·居里共同发现了放射性元素钋(Po)和镭(Ra)。"    },    {        "Question": "玛丽·居里分别在哪一年获得了诺贝尔奖?获得了什么奖项?",        "Answer": "她于1903年获得了诺贝尔物理学奖,并于1911年再次荣获诺贝尔化学学奖。"    },    {        "Question": "玛丽·居里为何成为世界上第一位两次获得诺贝尔奖的人?",        "Answer": "她因在1903年获得诺贝尔物理学奖,并在1911年因成功分离出纯的金属镭而再次获得诺贝尔化学学奖。"    },    {        "Question": "玛丽·居里的研究对后世产生了哪些重要影响?",        "Answer": "她的研究极大地推动了原子物理学的发展,并为癌症的放射性治疗奠定了基础。"    }]

4. 优点与局限性

优点:

局限性:

5. 适用场景

    构建企业级智能问答系统或知识库:这是最核心、最普遍的应用场景,用于内部知识管理、外部客户支持等。自动化生成 FAQ 页面:将冗长的产品文档、服务条款或技术手册,一键转化为用户易于查询的 FAQ 列表。创建学习和培训材料:从教材、讲义或规章制度中提取 QA 对,用于制作学习卡片、在线测验或培训考核。为模型微调准备高质量数据集:生成的 QA 对可以作为有监督微调(SFT)的优质数据,用于训练更小、更专注的垂直领域问答模型。

综上所述,提取 QA 问答对是一种面向应用的、高级的知识提取范式。它虽然实现起来最具挑战性,但其产出物在知识检索和人机交互场景中具有无与伦比的价值,是打通“文档”到“智能服务”最后一公里的关键技术。

进阶优化:多维度的知识增强与扩展

至此,我们已经掌握了三种核心的知识提取方法。然而,在追求卓越的知识服务时,仅仅“提取”出知识是不够的。就像从矿石中提炼出黄金后,我们还需要将其打磨、雕琢,才能制成精美的饰品。同样,提取出的基础知识点(如 QA 对),其“价值”可以通过进一步的加工和扩展得到极大的提升。

在我们的实践中,我们探索并验证了一些行之有效的知识增强手段。这些方法尤其在构建先进的 RAG 检索增强系统中,能够发挥出巨大的威力。下面,我们分享三种主要的增强策略。

1. 摘要生成 (Summary):为知识片段添加“导航标签”

在处理长文档时,我们通常会将其切分为多个片段进行处理(如方法三所述)。这时,我们可以顺便为每个片段生成一个高度浓缩的摘要。

实现方式

这通常不是一个独立的操作,而是可以整合在 QA 提取的提示词中。在要求模型提取 QA 对的同时,额外增加一条指令:

...# 任务指令1. 提取当前文档片段的QA问答对。2. 为该片段生成一个不超过50字的简洁摘要。# 输出格式请以JSON格式输出,包含"Summary"和"PossibleQA"两个键。...

价值所在

这个简单的摘要,为每个知识片段贴上了一个清晰的“内容导航标签”。它的价值体现在多个层面:

示例(玛丽·居里)

假设一个片段同时包含了居里夫人的两次诺奖经历,其增强后的输出可能如下:

{    "Summary": "本片段介绍了玛丽·居里分别在1903年和1911年因放射性研究和分离纯镭而两次荣获诺贝尔奖的经历。",    "PossibleQA": [        {            "Question": "玛丽·居里在哪两年获得了诺贝尔奖?",            "Answer": "她分别在1903年和1911年获得了诺贝尔奖。"        }        // ... 其他QA ...    ]}

2. 答案扩展 (Full Answer):从“一句话答案”到“一段话解释”

模型提取的答案(Answer)为了精准,往往非常简洁。但在某些场景下,用户可能需要更详尽的解释。为此,我们可以对核心的 QA 进行“答案扩展”。

实现方式

这是一个二次处理过程。在生成基础 QA 对之后,可以对每个简略的 QA 对,再次调用大模型:

# 原始信息- 问题: "玛丽·居里为何成为世界上第一位两次获得诺贝尔奖的人?"- 简洁答案: "她因在1903年获得诺贝尔物理学奖,并在1911年因成功分离出纯的金属镭而再次获得诺贝尔化学学奖。"# 相关原文"{...粘贴相关的原文...}"# 任务指令请基于上述原文,为这个问题提供一个更详细、更完整的回答。

价值所在

这个“完整答案”(Full Answer)同样是宝贵的元数据,存入payload中。

3. 同义问法扩增 (Question Variants):让知识库“听得懂人话”

一个知识点往往可以用无数种方式来提问。我们的标准问题可能只是其中最规范的一种,但用户的实际提问却是五花八门的。为了弥补这一差距,同义问法扩增应运而生。

实现方式

这也是一个二次处理步骤。针对每个生成的标准问题,再次调用大模型:

# 标准问题"玛丽·居里在哪两年获得了诺贝尔奖?"# 任务指令请为上面的问题生成3-5个语义完全相同,但表述方式不同的同义问法。

价值所在

我们认为,这是*显著提升检索系统召回率的手段。用户不会总是按照我们预设的标准问题来提问。

示例(玛丽·居里)

一个完整的、经过多维度增强的知识单元,在数据库中可能看起来是这样的:

{  "id": "doc_chunk_123",  "question_vector": [0.12, -0.45, ...], // 这是问题的向量(也可以同时有稀疏向量和稠密语义向量)  "answer_vector": [0.12, -0.45, ...], // 这是答案的向量(也可以同时有稀疏向量和稠密语义向量)  "summary_vector": [0.12, -0.45, ...], // 这是片段概要的向量(可选的)  "payload": {    "Summary": "本片段介绍了玛丽·居里分别在1903年和1911年因放射性研究和分离纯镭而两次荣获诺贝尔奖的经历。",    "Question": "玛丽·居里在哪两年获得了诺贝尔奖?",    "Answer": "她分别在1903年和1911年获得了诺贝尔奖。",    "FullAnswer": "玛丽·居里于1903年,因对亨利·贝克勒勒发现的放射性现象的深入研究,与丈夫皮埃尔·居里及贝克勒勒本人共同荣获诺贝尔物理学奖。随后,她继续不懈努力,于1911年成功分离出纯的金属镭,并精确测定了其性质,因此独立获得了诺贝尔化学学奖,这一成就使她成为历史第一人。"    "...":"..." // 其他属性  }}

通过这三种进阶优化,我们手中的知识点不再是孤立、单薄的条目,而是转化为了信息层次丰富的知识对象,为构建真正智能、强大且用户友好的知识应用奠定了坚实的基础。

附:开源项目 GC-QA-RAG

以上知识增强方法,源自项目 GC-QA-RAG,这是一个面向高质量知识检索与问答的开源解决方案。项目地址:github.com/GrapeCity-A… (MIT License)

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

大语言模型 知识提取 文档处理 LLM
相关文章