我们构建、开源并托管了大型语言模型(LLM)知识图谱构建器,让你能够尝试更好的方法来处理非结构化数据。我们将文档、转录本、网页文章等多种来源预处理为块,计算文本嵌入,并将它们连接起来(词汇图)。
但我们并未止步于此。我们还提取实体及其关系,这在你摄入多个文档时尤其相关,因为你可以将分散在多个来源中的片段关联起来(实体图)。
LLM知识图谱构建器是做什么的?
如果你有许多文本文档、网页文章、维基百科页面或类似的非结构化信息,如果能够以结构化的方式挖掘出其中隐藏的所有知识,并利用这些实体及其关系来更好地与你的数据进行交互,那岂不是很棒?
LLM知识图谱构建器:
新功能
让我们深入了解一下新功能。主要功能包括生成社区摘要以及为其新增的本地和全局检索器,还有为你的问题并行运行多个检索器并对它们进行评估的新能力。现在,你还可以使用自定义提示指令来指导提取过程。
更多模型
在开发模式或自部署环境中,我们已经测试并配置了LLM知识图谱构建器,以支持大量新模型,我们也在生产版本中对此进行了暗示:
我们还在内部对这些模型进行了集成测试,以查看它们在提取方面的表现如何。
社区摘要
一种丰富表示文档的图形内容的方法是运行图形算法,以提取隐藏在图形结构中的额外信息。
提取的社区在你的文档图形可视化中是可见的,因此你可以检查它们及其文本,并查看它们正在概括哪些实体。
这些社区摘要随后被用于全局检索器,以回答关于文档的一般性问题,这些问题并不特定于任何一个实体,而是跨文档识别主题。因此,它们并不代表每个文档的垂直内容序列,而是代表了跨越单个文档的主题。
在LLM知识图谱构建器中,我们使用了相同的聚类算法来实现这一功能。因此,如果你连接到一个启用了图数据科学(AuraPro with GDS、AuraDS、Neo4j Sandbox或自托管——我们在应用顶部用⚛表示)的Neo4j实例,并在“图增强”>“后处理”中启用“社区摘要”,我们就可以运行该算法并创建摘要树。
在我们的全局社区检索器中,我们采用了与论文略有不同的方法。论文中只是将所有(某一级别的)社区摘要填入几个大型语言模型(LLM)提示中来回答问题。我们生成社区摘要的向量嵌入,并使用相似性和全文搜索来找到与问题最相关的摘要,微软研究院最近也提出了这种方法,然后我们使用这些摘要来回答问题。
由于我们现在可以并行运行多个检索器,你可以亲自看看其中的差异。请查看全局和本地实体检索器的比较。
这两个检索器(像所有其他检索器一样)都允许显示用于生成答案的检索到的上下文图数据(社区、实体、块),从而支持可解释性。
本地实体检索器
本地实体检索器将微软论文实现中的数千行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
对于实体检索器,我们不仅可以显示文本块,还可以显示实体及其检索到的关系。
多检索器
如前一节所示,你现在可以选择一个或多个检索器并行运行,以生成问题的答案,并可以直接在答案结果之间进行切换以进行比较。
在每个答案之后的“详细信息”链接中,检索器还提供了从数据库中检索到的上下文事实,这些事实随后会被发送到大型语言模型(LLM),以及有关模型、运行时间和标记数的额外信息。
在开发模式或自托管环境中,还有更多检索器可供你测试和比较。
为了更方便地使用,右侧的窄对话侧边栏可以最大化,甚至可以弹出到全帧模式,这样还可以进行共享。这在只读数据库连接设置中尤其有用,我们现在也支持共享你生成的知识图谱。
对话的底层数据可以下载为JSON文件,因此你可以根据自己的需求进行处理。
检索器评估
并行检索器评估的一个原因是增加了生成评估指标的能力。
我们使用RAGAs架来运行评估。目前,我们计算以下指标,其中一些需要你提供真实值:
最新版本的指导提取说明
在最新版本中,我们增加了通过允许用户向大型语言模型(LLM)传递额外提示来更精确地指导提取的功能。因此,你可以强制它仅关注文档的某些部分、某些主题或使用特定的附加指令。
我通过从几篇关于阿尔伯特·爱因斯坦工作的文章中提取实体和关系来测试这一功能,但指示大型语言模型(LLM)不要提取与他物理学工作相关的任何内容。结果正是如此——提取出了他的生活、人物、奖项、和平活动以及其他发明,但关于他在物理学方面的巨大贡献则提及甚少。
总结
构建这样的开源工具是一次令人满足的经历——特别是当我们收到如此多的反馈时。我们已经处理了400多个GitHub问题(包括内部计划的任务),并获得了超过2,800个GitHub点赞。