数据是现代企业的生命线,推动着从创新到战略决策的方方面面。然而,随着企业组织积累了越来越多的信息 (从技术文档到内部沟通),他们面临着艰巨的挑战:如何从海量非结构化数据中提取有意义的见解和可行结构。
检索增强型生成 (Retrieval-augmented generation, RAG) 已成为一种热门解决方案,可通过集成相关企业数据来增强 AI 生成的响应。传统的 RAG 方法虽然对简单查询有效,但在解决需要推理和交叉参考的复杂多层问题时往往有所欠缺。
问题在于:简单的向量搜索可以检索数据,但通常无法提供复杂推理所需的细致入微的上下文。即使是多 查询 RAG 、 查询增强 和 混合检索 等高级技术也很难处理需要中间推理步骤或跨数据类型复杂连接的任务。
本文将探讨如何将 大语言模型 (LLMs) 的强大功能与 知识图形 相结合,应对这些挑战,使企业能够将非结构化数据集转换为结构化、互连的实体。这种集成增强了推理能力,提高了准确性,并减少了幻影:传统 RAG 系统无法解决的问题。
本文涵盖以下领域:
- LLM 生成的知识图如何改进 RAG 技术。
- 构建这些图形的技术流程,包括使用 cuGraph 的 GPU 加速 。
- 对高级 RAG 方法的比较评估,以突出优势和实际应用:
- VectorRAG
- GraphRAG
- HybridRAG (向量 RAG 和图形 RAG 的组合)
借助 LLM 驱动的知识图谱,企业可以获得更深入的见解、简化运营并获得竞争优势。
了解知识图谱
知识图 是信息的结构化表示,由实体(节点)、属性及其之间的关系组成。通过在庞大的数据集之间建立联系,知识图形使数据探索更直观、更强大。
大规模知识图形的突出示例包括 DBpedia (维基百科)、 LinkedIn 和 Facebook 等平台使用的社交网络图形,或 Google Search 创建的知识面板。
Google 率先使用知识图形来更好地理解真实世界的实体及其互连。 这项创新通过多跃点查询等技术显著提高了搜索准确性和内容探索能力。
Microsoft 通过 GraphRAG 扩展了这一概念,展示了 LLM 生成的知识图形如何通过减少幻觉和实现整个数据集的推理来增强 RAG。这种方法使 AI 系统能够通过图形机器学习发现数据中的关键主题和关系。
知识图形已成为解决复杂问题以及深入了解各行各业和用例不可或缺的工具:
- 医疗健康:通过映射医疗知识 、患者记录和 治疗途径 ,实现高级研究和明智决策。
- 推荐系统 :通过将用户偏好与相关产品、服务或内容关联起来,提供个性化体验,丰富用户体验。
- 搜索引擎:提高搜索结果的准确性和相关性 ,正如 2012 年 Google 集成知识图形所证明的那样,彻底改变了信息传递方式。
- 社交网络 :利用助力社交图形分析,在 LinkedIn 和 Facebook 等平台上提供有意义的联系建议、发现趋势并提高用户参与度。
- 金融:通过分析交易图形和 识别金融数据中隐藏的关系 ,检测欺诈活动并发现见解。
- 学术研究:通过连接科 学出版物和研究数据集 中的数据点 ,促进复杂查询并发现新见解。
通过构建和连接不同领域的数据,知识图形为 AI 系统提供先进的推理能力,从而为复杂的行业挑战提供更精确、上下文感知的解决方案。
用于构建由 LLM 生成的知识图的先进技术和最佳实践
在现代 LLM 兴起 (即所谓的 ChatGPT 时代之前) 之前,知识图形是使用传统的 自然语言处理 (NLP) 技术构建的。此过程通常涉及三个主要步骤:
这些方法严重依赖语音部分(PoS)标记、广泛的文本预处理和启发式规则来准确捕捉语义和关系。这些方法虽然有效,但劳动密集型,通常需要大量人工干预。
如今,指令微调 LLM 彻底改变了这一过程。通过将文本分割成块,并使用 LLM 根据用户定义的提示提取实体和关系,企业现在可以更轻松、更高效地自动创建知识图形。
然而,构建可靠且准确的基于 LLM 的知识图形仍然需要仔细关注某些关键方面:
- 模式或本体定义 :数据之间的关系通常必须受特定用例或领域的约束。这是通过模式或本体实现的,它为结构化图形提供了正式的语义规则。定义良好的模式可指定每个实体的类、类别、关系和属性,从而确保一致性和相关性。
- 实体一致性:保持一致的实体表示对于避免重复或不一致至关重要。例如,美国、美国、美国和美国应映射到同一节点。形式语义和消歧义技术可以显著减少这些问题,但可能仍需要额外的验证。
- 强制结构化输出:确保 LLM 输出符合预定义结构对于可用性至关重要。有两种主要方法可以做到这一点::
- 后处理 :如果 LLM 未按所需格式输出数据,则必须手动处理响应以满足所需结构。
- 使用 JSON 模式或函数调用 :一些 LLM 提供了将输出限制为特定格式 (例如 JSON) 的功能。在原生支持不可用时,微调可以通过持续的基于指令的训练训练模型以生成 JSON 输出。
通过解决这些问题并适当微调模型,企业可以使用 LLM 生成的知识图形来构建稳健、准确且可扩展的数据表示。这些图表为高级 AI 应用开启了新的可能性,从而提供更深入的见解并增强决策能力。
LLM 生成知识图形的实验性设置
为演示如何使用 LLM 创建知识图形,我们开发了一个结合 NVIDIA NeMo 、 LoRA 和 NVIDIA NIM 微服务的优化实验工作流(图 1)。此设置可高效生成 LLM 驱动的知识图形,并为企业用例提供可扩展的解决方案。
数据采集
在此实验中,我们使用了来自 arXiv 的学术研究数据集 ,其中包含丰富的元数据,例如文章来源、作者详细信息、出版日期和随附的图像。为便于复制,我们在 GitHub 上提供了开源代码,包括用于下载特定领域研究论文样本的脚本。
知识图形创建
该过程使用了 Llama-3 70B NIM 模型 ,并提供了从文本块中提取实体关系三元组的详细提示。虽然初始模型表现相当不错,但某些输出不准确。
为解决此问题,我们使用 NVIDIA NeMo 框架和低阶自适应(LoRA)对较小的模型 Llama3-8B 进行了进一步优化。 Mixtral-8x7B 生成用于微调的三元组数据,与更大的模型相比,这提高了准确性、降低了延迟并降低了推理成本。
该过程将生成的三元组解析为 Python 列表或字典,并将其编入索引至图形数据库。我们通过以下优化解决了格式不正确的三元组 (例如缺少标点符号或括号) 等难题:
- 增强的解析功能 :使用改进文本处理的最新 LLM 模型。
- 微调三元组提取 :添加指令以规范化标点符号,并确保实体格式的一致性。
- 重新提示: 通过提示 LLM 进行优化响应来纠正格式错误的输出,从而显著提高准确性。
准确性比较
为了评估用于三元组提取的不同模型和方法的有效性,我们在一组由 100 个新闻文档组成的测试集中比较了这些模型和方法的准确性。结果凸显了通过微调和优化实现的性能提升。
考虑以下示例段落:
”Exxon Mobil, Royal Dutch Shell, Total and their peers are set to cut spending on oil and gas exploration for a fifth year in a row in 2018, according to consultancy Wood Mackenzie (WoodMac), despite a growing urgency to replenish reserves after years of reining back investment.”
在微调 Llama-3-8B 模型之前,提取的三元组不完整,导致后处理函数在解析期间出错。
[('Exxon Mobil', 'ORG', 'Announce', 'Cut Spending', 'EVENT'),
('Exxon Mobil', 'ORG', 'Operate_In', 'Oil and Gas Exploration', 'FIELD'),
('Exxon Mobil', 'ORG', 'Control', 'Oil and Gas Exploration', 'FIELD'),
('Royal Dutch Shell', 'ORG', 'Announce', 'Cut Spending', 'EVENT'),
('Royal Dutch Shell', 'ORG', 'Operate_In', 'Oil and Gas Exploration', 'FIELD')]'
经过微调后,该模型的完成率和准确性有了显著提高。经过优化的三元组更精确,并能更好地与文本上下文保持一致:
[['Exxon Mobil', 'COMP', 'Cut', 'Spending on oil and gas exploration', 'ACTIVITY'],
['Royal Dutch Shell', 'COMP', 'Cut', 'Spending on oil and gas exploration', 'ACTIVITY'],
['Total', 'COMP', 'Cut', 'Spending on oil and gas exploration', 'ACTIVITY'],
['World’s top oil companies', 'ORG', 'Hesitate', 'Accelerate the search for new resources', 'ACTIVITY']]
用于三元组提取的代码和模式
以下是 /NVIDIA/GenerativeAIExamples 代码示例,其中展示了用于三元组提取的架构和方法:
def process_response(triplets_str):
triplets_list = ast.literal_eval(triplets_str)
json_triplets = []
for triplet in triplets_list:
try:
subject, subject_type, relation, object, object_type = triplet
json_triplet = {
"subject": subject,
"subject_type": subject_type,
"relation": relation,
"object": object,
"object_type": object_type
}
json_triplets.append(json_triplet)
except ValueError:
# Skip the malformed triplet and continue with the next one
continue
return json_triplets
def extract_triples(text, llm):
prompt = ChatPromptTemplate.from_messages(
[("system", """Note that the entities should not be generic, numerical, or temporal (like dates or percentages). Entities must be classified into the following categories:
- ORG: Organizations other than government or regulatory bodies
- ORG/GOV: Government bodies (e.g., "United States Government")
- ORG/REG: Regulatory bodies (e.g., "Food and Drug Administration")
- PERSON: Individuals (e.g., "Marie Curie")
- GPE: Geopolitical entities such as countries, cities, etc. (e.g., "Germany")
- INSTITUTION: Academic or research institutions (e.g., "Harvard University")
- PRODUCT: Products or services (e.g., "CRISPR technology")
- EVENT: Specific and Material Events (e.g., "Nobel Prize", "COVID-19 pandemic")
- FIELD: Academic fields or disciplines (e.g., "Quantum Physics")
- METRIC: Research metrics or indicators (e.g., "Impact Factor"), numerical values like "10%" is not a METRIC;
- TOOL: Research tools or methods (e.g., "Gene Sequencing", "Surveys")
- CONCEPT: Abstract ideas or notions or themes (e.g., "Quantum Entanglement", "Climate Change")
The relationships 'r' between these entities must be represented by one of the following relation verbs set: Has, Announce, Operate_In, Introduce, Produce, Control, Participates_In, Impact, Positive_Impact_On, Negative_Impact_On, Relate_To, Is_Member_Of, Invests_In, Raise, Decrease.
Remember to conduct entity disambiguation, consolidating different phrases or acronyms that refer to the same entity (for instance, "MIT" and "Massachusetts Institute of Technology" should be unified as "MIT"). Simplify each entity of the triplet to be less than four words. However, always make sure it is a sensible entity name and not a single letter or NAN value.
From this text, your output Must be in python list of tuple with each tuple made up of ['h', 'type', 'r', 'o', 'type'], each element of the tuple is the string, where the relationship 'r' must be in the given relation verbs set above. Only output the list. As an Example, consider the following news excerpt:
Input :'Apple Inc. is set to introduce the new iPhone 14 in the technology sector this month. The product's release is likely to positively impact Apple's stock value.'
OUTPUT : ```
[('Apple Inc.', 'COMP', 'Introduce', 'iPhone 14', 'PRODUCT'),
('Apple Inc.', 'COMP', 'Operate_In', 'Technology Sector', 'SECTOR'),
('iPhone 14', 'PRODUCT', 'Positive_Impact_On', 'Apple's Stock Value', 'FIN_INSTRUMENT')]
```
The output structure must not be anything apart from above OUTPUT structure. NEVER REPLY WITH any element as NAN. Just leave out the triple if you think it's not worth including or does not have an object. Do not provide ANY additional explanations, if it's not a Python parseable list of tuples, you will be penalized severely. Make the best possible decisions given the context."""), ("user", "{input}")])
chain = prompt | llm | StrOutputParser()
response = chain.invoke({"input": text})
print(response)
return process_response(response)
这种结构化方法可确保更清晰、更准确的三元组提取。
优化推理
为扩展数千个文档块的工作流程,我们执行了以下优化:
- 转换的模型权重 :将经过 NeMo 训练的模型权重转换为 TensorRT-LLM 检查点。
- 优化的推理引擎 :使用 GPU 加速的推理来提高性能。
- 已部署的可扩展系统: 使用优化的模型检查点实现高吞吐量推理,从而显著提升大型数据集的性能。
通过集成先进的 LLM 优化技术和微调工作流程,我们实现了高效且可扩展的知识图形生成,为企业 AI 应用奠定了坚实的基础。
借助 NVIDIA cuGraph 加速知识图形,实现可扩展的 AI 工作流
多年来,NVIDIA 一直致力于推进 GPU 上的 AI 工作流,尤其是在 图形神经网络 (GNN) 和复杂数据表示等领域。基于这些专业知识, NVIDIA RAPIDS 数据科学团队开发了 cuGraph ,这是一种用于图形分析的 GPU 加速框架。cuGraph 通过实现可扩展的高速图形操作,显著提高了 RAG 系统的效率。
在知识图形检索增强生成(KRAG)中,我们会查询知识图形以检索相关信息,从而在文本生成过程中增强语言模型的上下文。cuGraph 高性能算法(例如 最短路径 、PageRank 和 社区检测 )可快速识别大规模知识图形中的相关节点和边缘并对其进行排序。因此,cuGraph 可确保更快、更准确地检索上下文相关的信息,从而提高 AI 生成输出的质量。
cuGraph 之所以特别强大,是因为它与 NetworkX 、 RAPIDS cuDF 和 cuML 等广泛使用的开源工具无缝集成。此集成使您能够在尽可能减少代码更改的情况下加速图形工作流,从而实现快速采用并立即提升性能。
在我们的开源实现中,我们使用 cuGraph 通过 NetworkX 加载和管理图形表示,实现了多 GPU 系统上数十亿个节点和边缘的可扩展性。cuGraph 还支持高效的图形查询和多跳搜索,这使其成为处理大型复杂知识图形不可或缺的工具。
对 VectorRAG、GraphRAG 和 HybridRAG 的见解
我们对三种 RAG 技术进行了全面的比较分析:VectorRAG、GraphRAG 和 HybridRAG。我们使用 nemotron-340b 奖励模型 来评估其输出质量。
评估指标
评估侧重于以下关键指标,评分为 0 到 4 (越高越好):
- 有用性: 衡量响应解决提示的效果。
- 正确性: 评估是否纳入所有相关事实,且不存在不准确之处。
- 一致性:评估响应中表达式的一致性和清晰度 。
- 复杂性: 确定生成响应所需的知识深度 (例如,是需要深度领域专业知识,还是可以使用基本语言能力生成响应)。
- 详细程度: 根据提示的要求分析所提供的详细程度。
有关更多信息,请参阅 模型卡 。
数据集和实验设置
本研究使用的数据集包含从 arXiv 收集的研究论文。使用 nemotron-340b 合成数据生成模型合成生成真值 (GT) 问答对。
包含关键见解的结果摘要
分析揭示了不同技术之间的显著性能差异:
- 正确性 :GraphRAG 在正确性方面表现出色,提供高度准确且与源数据保持一致的响应。
- 整体性能 :GraphRAG 在所有指标方面表现出卓越性能,提供准确、一致且符合上下文的响应。它的优势在于使用关系上下文进行更丰富的信息检索,这使得它对需要高准确性的数据集特别有效。
- HybridRAG 的潜力 :根据数据集和上下文注入,HybridRAG 在几乎所有指标上都表现出优于传统 VectorRAG 的潜力。它基于图形的检索功能可以改进对复杂数据关系的处理,尽管这可能会导致一致性略有下降。
- HybridRAG 作为一种平衡的方法 :HybridRAG 作为一种平衡且有效的技术出现,将语义 VectorRAG 的灵活性与高级多跳推理和全局上下文摘要无缝结合在一起。这使得它特别适合金融和医疗健康等受监管领域,在这些领域,强有力的响应基础至关重要。其方法可实现准确高效的信息提取,满足这些行业的严格要求。
图形检索技术的集成有可能重新定义 RAG 方法处理复杂、大规模数据集的方式,使其成为需要跨关系进行多跳推理、高准确性和深入理解上下文的应用的理想选择。
探索由 LLM 提供支持的知识图形的未来
在本文中,我们探讨了将大型语言模型(LLMs)与知识图形集成如何增强 AI 驱动的信息检索,并在多跳推理和高级查询响应等领域表现出色。VectorRAG、GraphRAG 和 HybridRAG 等技术展现出非凡的潜力,但随着我们不断突破这项技术的界限,仍然存在一些挑战。
以下是一些主要挑战:
- 动态信息更新: 将实时数据整合到知识图形中,添加新的节点和关系,并确保大规模更新期间的相关性。
- 可扩展性: 管理增长到数十亿个节点和边缘的知识图形,同时保持效率和性能。
- 三元组提取细化: 提高实体关系提取的精度,以减少错误和不一致。
- 系统评估: 开发稳健的领域特定指标和基准,用于评估基于图形的检索系统,以确保一致性、准确性和相关性。
未来的方向可能包括以下内容:
- 动态知识图形 :改进技术以无缝扩展动态更新,使图形能够随最新数据发展。
- 专家代理集成 :探索知识图形检索如何作为专家系统发挥作用,为特定领域的应用提供专业见解。
- 图形嵌入 :为整个知识图形开发嵌入的语义表示,以解锁图形分析和信息检索的新功能。
使用 NVIDIA 工具构建和优化知识图形
要深入了解这些创新,请探索 NVIDIA NeMo 框架 、 NVIDIA NIM 微服务 以及用于 GPU 加速知识图形创建和优化的 cuGraph 。
要复制博文中讨论的工作流程和其他开源示例,请参阅/ NVIDIA/GenerativeAIExamples GitHub 存储库 。无论您是构建动态知识图、微调 LLMs 还是优化 inference pipelines,这些工具都能助力您高效扩展系统。
立即借助 NVIDIA 尖端技术推动 AI 创新,突破极限!