【指南】LLM 知识图谱构建器

2025年02月10日 由 alex 发表 4252 0

我们构建、开源并托管了大型语言模型(LLM)知识图谱构建器,让你能够尝试更好的方法来处理非结构化数据。我们将文档、转录本、网页文章等多种来源预处理为块,计算文本嵌入,并将它们连接起来(词汇图)。


但我们并未止步于此。我们还提取实体及其关系,这在你摄入多个文档时尤其相关,因为你可以将分散在多个来源中的片段关联起来(实体图)。


LLM知识图谱构建器是做什么的?

如果你有许多文本文档、网页文章、维基百科页面或类似的非结构化信息,如果能够以结构化的方式挖掘出其中隐藏的所有知识,并利用这些实体及其关系来更好地与你的数据进行交互,那岂不是很棒?


LLM知识图谱构建器:

  1. 导入你的文档
  2. 将它们拆分为块并链接起来
  3. 为向量搜索生成文本嵌入,并连接最相似的那些
  4. 使用各种大型语言模型(LLM)来提取实体及其关系
  5. 可选地使用你提供的图谱模式
  6. 在Neo4j中存储节点和关系
  7. 并且,当在与启用了图数据科学的Neo4j实例运行时,它还会执行主题聚类和摘要生成


17


新功能

让我们深入了解一下新功能。主要功能包括生成社区摘要以及为其新增的本地和全局检索器,还有为你的问题并行运行多个检索器并对它们进行评估的新能力。现在,你还可以使用自定义提示指令来指导提取过程。


更多模型

在开发模式或自部署环境中,我们已经测试并配置了LLM知识图谱构建器,以支持大量新模型,我们也在生产版本中对此进行了暗示:

  • OpenAI GPT-4o(和GPT-4o mini)
  • Google Gemini 1.5和2.0 Pro以及Flash
  • Qwen 2.5
  • Amazon Nova模型
  • Groq
  • Llama 3.x
  • Ollama模型
  • Claude 3.5 Sonnet
  • DeepSeek和即将推出的Microsoft Phi-4


我们还在内部对这些模型进行了集成测试,以查看它们在提取方面的表现如何。


18


社区摘要

一种丰富表示文档的图形内容的方法是运行图形算法,以提取隐藏在图形结构中的额外信息。


提取的社区在你的文档图形可视化中是可见的,因此你可以检查它们及其文本,并查看它们正在概括哪些实体。


19


这些社区摘要随后被用于全局检索器,以回答关于文档的一般性问题,这些问题并不特定于任何一个实体,而是跨文档识别主题。因此,它们并不代表每个文档的垂直内容序列,而是代表了跨越单个文档的主题。


20


在LLM知识图谱构建器中,我们使用了相同的聚类算法来实现这一功能。因此,如果你连接到一个启用了图数据科学(AuraPro with GDS、AuraDS、Neo4j Sandbox或自托管——我们在应用顶部用⚛表示)的Neo4j实例,并在“图增强”>“后处理”中启用“社区摘要”,我们就可以运行该算法并创建摘要树。


21


在我们的全局社区检索器中,我们采用了与论文略有不同的方法。论文中只是将所有(某一级别的)社区摘要填入几个大型语言模型(LLM)提示中来回答问题。我们生成社区摘要的向量嵌入,并使用相似性和全文搜索来找到与问题最相关的摘要,微软研究院最近也提出了这种方法,然后我们使用这些摘要来回答问题。


由于我们现在可以并行运行多个检索器,你可以亲自看看其中的差异。请查看全局和本地实体检索器的比较。


22


这两个检索器(像所有其他检索器一样)都允许显示用于生成答案的检索到的上下文图数据(社区、实体、块),从而支持可解释性。


23


本地实体检索器

本地实体检索器将微软论文实现中的数千行Python代码转化为大约50行Cypher代码(这是使用实际图数据库的一个好处),用于获取以下内容:

  • 通过混合搜索(嵌入和全文)找到的实体
  • 实体之间的关系
  • 与初始集合外部实体之间最常见的关系
  • 提取实体的块和文档
  • 实体所属的社区摘要


// previous hybrid search on entities, then graph expansion
WITH collect(node) AS nodes,
    avg(score) AS score,
    collect({id: elementId(node), score: score}) AS metadata
RETURN score, nodes, metadata,
    collect {
        UNWIND nodes AS n
        MATCH (n)<-[:HAS_ENTITY]->(c:Chunk)
        WITH c, count(distinct n) AS freq
        RETURN c
        ORDER BY freq DESC
        LIMIT 3
    } AS chunks,
    collect {
        UNWIND nodes AS n
        OPTIONAL MATCH (n)-[:IN_COMMUNITY]->(c:__Community__)
        WITH c, c.community_rank AS rank, c.weight AS weight
        RETURN c
        ORDER BY rank, weight DESC
        LIMIT 3
    } AS communities,
    collect {
        UNWIND nodes AS n
        UNWIND nodes AS m
        MATCH (n)-[r]->(m)
        RETURN DISTINCT r
    } AS rels,
    collect {
        UNWIND nodes AS n
        MATCH path = (n)-[r]-(m:__Entity__)
        WHERE NOT m IN nodes
        WITH m, collect(distinct r) AS rels, count(*) AS freq
        ORDER BY freq DESC
        LIMIT 10
        WITH collect(m) AS outsideNodes, apoc.coll.flatten(collect(rels)) AS rels
        RETURN { nodes: outsideNodes, rels: rels }
    } AS outside


24


对于实体检索器,我们不仅可以显示文本块,还可以显示实体及其检索到的关系。


25


26


多检索器

如前一节所示,你现在可以选择一个或多个检索器并行运行,以生成问题的答案,并可以直接在答案结果之间进行切换以进行比较。


27


在每个答案之后的“详细信息”链接中,检索器还提供了从数据库中检索到的上下文事实,这些事实随后会被发送到大型语言模型(LLM),以及有关模型、运行时间和标记数的额外信息。


在开发模式或自托管环境中,还有更多检索器可供你测试和比较。


为了更方便地使用,右侧的窄对话侧边栏可以最大化,甚至可以弹出到全帧模式,这样还可以进行共享。这在只读数据库连接设置中尤其有用,我们现在也支持共享你生成的知识图谱。


对话的底层数据可以下载为JSON文件,因此你可以根据自己的需求进行处理。


检索器评估

并行检索器评估的一个原因是增加了生成评估指标的能力。


我们使用RAGAs架来运行评估。目前,我们计算以下指标,其中一些需要你提供真实值:

  • 相关性:答案对用户问题的回答程度
  • 忠实性:答案反映提供信息的准确性
  • 上下文相关性:确定生成答案和检索上下文中存在的实体的召回率
  • 语义相关性:生成答案对参考答案意义的理解程度
  • ROUGE:逐字逐句与真实答案的相似度


28


最新版本的指导提取说明

在最新版本中,我们增加了通过允许用户向大型语言模型(LLM)传递额外提示来更精确地指导提取的功能。因此,你可以强制它仅关注文档的某些部分、某些主题或使用特定的附加指令。


29


我通过从几篇关于阿尔伯特·爱因斯坦工作的文章中提取实体和关系来测试这一功能,但指示大型语言模型(LLM)不要提取与他物理学工作相关的任何内容。结果正是如此——提取出了他的生活、人物、奖项、和平活动以及其他发明,但关于他在物理学方面的巨大贡献则提及甚少。


总结

构建这样的开源工具是一次令人满足的经历——特别是当我们收到如此多的反馈时。我们已经处理了400多个GitHub问题(包括内部计划的任务),并获得了超过2,800个GitHub点赞。




文章来源:https://medium.com/neo4j/llm-knowledge-graph-builder-first-release-of-2025-532828c4ba76
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消