4种通过LLM进行文本知识图谱的构建方法对比介绍

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 我们在以前的文章中已经介绍了使用大语言模型将非结构化文本转换为知识图谱。但是对于知识图谱的创建是一个很复杂的过程,比如需要对属性增加限制,创建符合特定主题/模式的图谱,并且有时文档非常大,无法作为单个提示处理,所以在切分后的提示中创建的图谱需要前后一致。

所以本文将介绍和比较使用LLM转换非结构化文本的四种方法,这些方法在不同的场景中都可能会用到。

使用LLM预训练本体(ontologies)

LLM似乎已经接受了各种标准本体(如SCHEMA)的预先培训。ORG, FOAF, SKOS, RDF, RDFS, OWL等。所以通过适当的系统提示来指导使用这个预训练的本体,再加上包含非结构化文本的用户提示,我们可以获得想要的转换后的图谱结构。

提示如下

 Translate the following user text to an RDF graph using the RDF, RDFS, and OWL ontologies formatted as TTL.
 Use the prefix ex: with IRI <http://example.com/> for any created entities.

LLM的相应如下

 @prefix ex: <http://example.com/> .
 @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
 @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
 @prefix owl: <http://www.w3.org/2002/07/owl#> .
 ex:PeterJones rdf:type ex:Person ;
   rdf:label "Peter Jones" .
 ex:BethHampton rdf:type ex:Person ;
   rdf:label "Beth Hampton" .
 ex:BrunelUniversity rdf:type ex:University ;
   rdf:label "Brunel University" .
 ex:George rdf:type ex:Person ;
   rdf:label "George" .
 ex:James rdf:type ex:Person ;
   rdf:label "James" .
 ex:Harold rdf:type ex:Person ;
   rdf:label "Harold" .
 ex:PeterJones ex:studiedAt ex:BrunelUniversity ;
   ex:marriedTo ex:BethHampton ;
   ex:hasChild ex:George, ex:James, ex:Harold .

对于gpt-3.5-turbo在创建新属性时没有问题。如果我们修改系统提示符,只使用SCHEMA.ORG

 Translate the following user text to an RDF graph using the SCHEMA.ORG ontologies formatted as TTL.
 Use the prefix ex: with IRI <http://example.com/> for any created entities.

也会得到相应的输出

 @prefix ex: <http://example.com/> .
 @prefix schema: <https://schema.org/> .

 ex:PeterJones a schema:Person ;
   schema:spouse ex:BethHampton ;
   schema:alumniOf ex:BrunelUniversity .

 ex:BethHampton a schema:Person ;
   schema:spouse ex:PeterJones .
   ex:BrunelUniversity a schema:EducationalOrganization .

 ex:George a schema:Person .
 ex:James a schema:Person .
 ex:Harold a schema:Person .

 ex:PeterJones schema:children ex:George, ex:James, ex:Harold .
 ex:BethHampton schema:children ex:George, ex:James, ex:Harold .

这是最简单的方法,因为我们不需要做任何的操作,完全的使用LLM已经训练好的内容,并且也能得到很好的输出。提示也非常简洁(约41个token),不会占用太多的字符。

但是转换仅限于LLM预先训练过的那些“标准”本体。如果你问ChatGPT是在什么标准本体上进行训练的,他不会给你想要的答案,这样对我们来说就是一个黑盒。并且在文本到图谱的转换中生成的实体还需要在各个图谱之间进行对齐。

在LLM提示中添加本体

在大多多情况下,我们希望使用非标准或自定义本体。LLM不太可能在这样的本体上进行预训练,因此我们需要在提示中包含完整的本体。

 Translate the following user text to an RDF graph using the following schema1: <http://inova8.com/schema/1/> ontologies formatted as TTL.
 Use the prefix ex: with IRI <http://example.com/> for any created entities.
 Only use pre-defined classes and properties from the schema1: <http://inova8.com/schema/1/> ontology.
 Use the properties and classes in the schema1: ontology.
 Include individuals, their data, and relationships.

 ... the full ontology in TTL format ...

我们需要对转换的内容进行详细的说明,这导致提示token增加到了~3567,使用与之前相同的输入提示,LLM也可以很好地转换文本:

 ex:PeterJones rdf:type schema1:CC ;
   :dc "Peter" ;
   :de "Jones" ;
   :oa ex:BrunelUniversity ;
   :oh ex:BethHampton ;
   :of ex:business .
 ex:BethHampton rdf:type schema1:CC ;
   :dc "Beth" ;
   :de "Hampton" ;
   :oa ex:BrunelUniversity ;
   :oh ex:PeterJones ;
   :of ex:business .
 ex:BrunelUniversity rdf:type schema1:CA ;
   rdfs:label "Brunel University" .
 ex:George rdf:type schema1:CC ;
   rdfs:label "George" ;
   :od ex:PeterJones ;
   :od ex:BethHampton .
 ex:James rdf:type schema1:CC ;
   rdfs:label "James" ;
   :od ex:PeterJones ;
   :od ex:BethHampton .
 ex:Harold rdf:type schema1:CC ;
   rdfs:label "Harold" ;
   :od ex:PeterJones ;
   :od ex:BethHampton .
 ex:PeterJones :oh ex:BethHampton .
 ex:BethHampton :oh ex:PeterJones .

当我们将自定义的内容包含在提示中时,LLM似乎可以理解用RDF、RDFS和OWL表示的本体,并且能够将非结构化文本转换为自定义本体。

但是这导致提示现在非常长,以为系统提示token开销很大。这将增加成本也会减慢响应时间,因为时间与要处理的token成正比。并且这个结果仍然需要对齐。

使用本体进行微调

前两种方法的主要问题是局限于预训练的本体,或者在提示中包含自定义本体时开销很大。所以我们可以对LLM进行微调使用KG对LLM进行微调是非常简单的,因为图的本质是三元组:

 {:subject :predicate :object}

我们可以将其映射到提示中进行训练。下面的内容都是可以从图中自动生成的。

 {“messages”: [
   {"role": "system", "content": "Complete the following graph edge"},
   {"role": "user", "content": "What is <:subject> <predicate>?"},
   {"role": "assistant", "content": " <:subject> is <:predicate> <:object>."}]
 }
 …

这个问题就变成了训练LLM将一种语言(非结构化英语文本)翻译成另一种语言(使用微调本体语义的高度结构化rdf图)。

 messages”: [
   {"role": "system", "content": "Translate the following user text to an RDF graph using the Schema1 ontology."},
   {"role": "user", "content": "{example unstructured text}"},
   {"role": "assistant", "content": "{RDF graph using custom Schema1 ontology semantics}"}]
 }
 …

所以问题就变成了创建一个具有代表性的微调训练集(100~200个)和RDF转换集。但是如何设计提示呢?我们来直接问问LLM,因为她最了解自己,哈。

 I want to fine-tune an LLM on this Schema1 ontology. 
 This training aims to take an example user text and the assistant translates it into an RDF graph based on the Schema1 ontology. 
 Please create a comprehensive set of 50 example system, user, and assistant messages in JSONL message conversational chat format format for fine-tuning an LLM to translate text to Schema1 ontology RDF.
 The system content should be the instruction to translate the user text to the assistant RDF graph response using Sxchema1 ontology.
 The user text should be examples that cover all the concepts within the Schema1 ontology.
 The assistant content should be an RDF graph using the Schema1 ontology of the translation of the user text examples.
 Use the prefix ex: with IRI <http://example.com/> for any created entities.
 Use the message format as follows:
   {"messages": [
     {"role": "system", "content": "<system_content>"}, 
     {"role": "user", "content": "<user_content>}, 
     {"role": "assistant", "content": "<assistant_content>"}
   ]}

gpt-3.5-turbo以正确的格式做出了回应。

 {“messages”: [
   {“role”: “system”, “content”: “
       Translate the following user text to an RDF graph using the Schema1 ontology.”}, 
   {“role”: “user”, “content”: “
       John Smith is a professor who graduated from a reputed college.”}, 
   {“role”: “assistant”, “content”: “
       @prefix ex: <http://example.com/> .
       @prefix schema1: <http://inova8.com/schema/1/> .
       ex:JohnSmith rdf:type schema1:CC ;
         schema1:dc \”John\” ;
         schema1:de \”Smith\” ;
         schema1:of schema1:professor ;
         schema1:oa ex:ReputedCollege .
       ex:ReputedCollege rdf:type schema1:CA .”}]}

 … and so on

我们来试试效果,使用它生成了一个适当大小的(160)转换调优数据集。使用3和10个epoch对LLM进行了微调。

System-prompt (34 tokens):

 Translate the following user text to an RDF graph using the Schema1 ontology.
 Use the prefix ex: with IRI <http://example.com/> for any created entities.

User-prompt (28 tokens):

 Peter Jones and Beth Hampton both studied at Brunel University, then got married, and have three children: George, James, and Harold.

LLM的结果

 @prefix ex: <http://example.com/> .
 ex:PeterJones a schema1:CC ;
   schema1:dc "Peter" ;
   schema1:de "Jones" ;
   schema1:of schema1:student .
 ex:BethHampton a schema1:CC ;
   schema1:dc "Beth" ;
   schema1:de "Hampton" ;
   schema1:of schema1:student .
 ex:JonesHamptonMarriage a schema1:CG ;
   schema1:og ex:PeterJones ;
   schema1:oh ex:BethHampton .
 ex:GeorgeJones a schema1:CD ;
   schema1:dc "George" ;
   schema1:od ex:PeterJones ;
   schema1:of ex:BethHampton .
 ex:JamesJones a schema1:CD ;
   schema1:dc "James" ;
   schema1:od ex:PeterJones ;
   schema1:of ex:BethHampton .
 ex:HaroldJones a schema1:CD ;
   schema1:dc "Harold" ;
   schema1:od ex:PeterJones ;
   schema1:of ex:BethHampton .

可以看到,工作的还不错,LLM自己给自己上了一课,我们只是动动嘴(手)。另外在质量上3 epoch和10 epoch微调的LLM之间的转换质量似乎没有什么差别。

LLM可以使用自定义本体进行微调,调优LLM的提示可以非常简洁(约41个token),因此大部分token成本由要转换的非结构化文本组成。

但是微调需要度量llm理解自定义本体的准确性和图谱转换的准确性的指标,如何判断好坏就是一个需要仔细研究的问题,我们生成的图谱仍然需要对齐。

改进微调的提示

通常情况下,单个本体/模式不足以捕获文本的完整语义,所以需要使用两个或更多本体。这里的一个好消息是经过微调,LLM并没有忘记预训练的本体,所以我们可以将它们结合使用。

 Translate the following user text to an RDF graph using both the FOAF, and Schema1 ontologies.
 Use the prefix ex: with IRI <http://example.com/> for any created entities.
 Peter Jones and Beth Hampton both studied at Brunel University, then got married, and have three children: George, James, and Harold. 
 Peter, email address peter.jones@inova8.com, has been friends with Paul Williams because of their shared interest in ornithology.

结果如下:

 @prefix ex: <http://example.com/> .
 ex:PeterJones a schema1:Thing, foaf:Person ;
   schema1:email "peter.jones@inova8.com" ;
   foaf:name "Peter Jones" ;
   foaf:interest ex:Ornithology .
 ex:BethHampton a schema1:Thing, foaf:Person ;
   foaf:name "Beth Hampton" .
 ex:GeorgeJones a schema1:Thing, foaf:Person ;
   foaf:name "George Jones" ;
   foaf:maker ex:PeterJones .
 ex:JamesJones a schema1:Thing, foaf:Person ;
   foaf:name "James Jones" ;
   foaf:maker ex:PeterJones .
 ex:HaroldJones a schema1:Thing, foaf:Person ;
   foaf:name "Harold Jones" ;
   foaf:maker ex:PeterJones .
 ex:BrunelUniversity a schema1:Thing, foaf:Document ;
   foaf:name "Brunel University" .
 ex:JonesHamptonMarriage a schema1:Thing ;
   schema1:spouse ex:PeterJones, ex:BethHampton .
 ex:JonesHamptonFamily a schema1:Thing ;
   schema1:parent ex:PeterJones, ex:BethHampton ;
   schema1:child ex:GeorgeJones, ex:JamesJones, ex:HaroldJones .
 ex:PeterJones foaf:knows ex:PaulWilliams .
 ex:PaulWilliams a schema1:Thing, foaf:Person ;
   foaf:name "Paul Williams" .

可以看到,回复中不仅包含了我们微调的结果,还包含了模型预训练时返回的结果

但是这里有一个问题,当同一概念在本体之间重叠时,我们需要控制LLM返回使用哪个。

总结

对于上面几种方法的对比,我们总结了一个图表:

llm可以有效地将非结构化文本转换为RDF图。自定义本体微调模型的token效率要高得多,因为它不需要在每个转换请求提示符中提供完整本体的开销,当需要转换多个文本时,这可以降低生产环境中的转换成本。

但是我们还没有提到如何建立文本到KG转换的“准确性”测试,并且转换后如何进行实体对齐,我们将在后面的文章中继续介绍。

https://avoid.overfit.cn/post/486b8b13131641509d0ae4a6ade4156d

作者:Peter Lawrence

目录
相关文章
|
1月前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
312 2
|
22天前
|
JSON 数据可视化 NoSQL
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
本文介绍了LangChain的LLM Graph Transformer框架,探讨了文本到图谱转换的双模式实现机制。基于工具的模式利用结构化输出和函数调用,简化了提示工程并支持属性提取;基于提示的模式则为不支持工具调用的模型提供了备选方案。通过精确定义图谱模式(包括节点类型、关系类型及其约束),显著提升了提取结果的一致性和可靠性。LLM Graph Transformer为非结构化数据的结构化表示提供了可靠的技术方案,支持RAG应用和复杂查询处理。
75 2
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
|
14天前
|
自然语言处理 开发者
多模态大模型LLM、MLLM性能评估方法
针对多模态大模型(LLM)和多语言大模型(MLLM)的性能评估,本文介绍了多种关键方法和标准,包括模态融合率(MIR)、多模态大语言模型综合评估基准(MME)、CheckList评估方法、多模态增益(MG)和多模态泄露(ML),以及LLaVA Bench。这些方法为评估模型的多模态和多语言能力提供了全面的框架,有助于研究者和开发者优化和改进模型。
|
1月前
|
存储 人工智能 算法
精通RAG架构:从0到1,基于LLM+RAG构建生产级企业知识库
为了帮助更多人掌握大模型技术,尼恩和他的团队编写了《LLM大模型学习圣经》系列文档,包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构,基于LLM+RAG构建生产级企业知识库》和《从0到1吃透大模型的顶级架构》。这些文档不仅系统地讲解了大模型的核心技术,还提供了实战案例和配套视频,帮助读者快速上手。
精通RAG架构:从0到1,基于LLM+RAG构建生产级企业知识库
|
27天前
|
JSON 人工智能 算法
探索LLM推理全阶段的JSON格式输出限制方法
文章详细讨论了如何确保大型语言模型(LLMs)输出结构化的JSON格式,这对于提高数据处理的自动化程度和系统的互操作性至关重要。
|
1月前
|
自然语言处理 数据中心
Scaling LLM Test-Time Compute Optimally: 一种更有效的方法
【10月更文挑战第14天】本文探讨了大型语言模型(LLMs)在测试时通过增加计算资源来提升性能的可能性。研究发现,通过优化测试时计算的分配,特别是采用基于过程的验证器搜索和自适应更新响应分布的方法,LLM可以显著提高对复杂问题的应对能力,甚至在某些情况下超越更大规模的模型。论文提出了“计算最优”策略,旨在根据问题难度自适应调整计算资源,以最大化性能提升。未来工作将聚焦于增强测试时计算缩放、快速评估问题难度及实现自我改进循环。
55 6
|
1月前
|
人工智能 搜索推荐 API
用于企业AI搜索的Bocha Web Search API,给LLM提供联网搜索能力和长文本上下文
博查Web Search API是由博查提供的企业级互联网网页搜索API接口,允许开发者通过编程访问博查搜索引擎的搜索结果和相关信息,实现在应用程序或网站中集成搜索功能。该API支持近亿级网页内容搜索,适用于各类AI应用、RAG应用和AI Agent智能体的开发,解决数据安全、价格高昂和内容合规等问题。通过注册博查开发者账户、获取API KEY并调用API,开发者可以轻松集成搜索功能。
|
1月前
|
机器学习/深度学习 数据采集 人工智能
文档智能和检索增强生成(RAG)——构建LLM知识库
本次体验活动聚焦于文档智能与检索增强生成(RAG)结合构建的LLM知识库,重点测试了文档内容清洗、向量化、问答召回及Prompt提供上下文信息的能力。结果显示,系统在自动化处理、处理效率和准确性方面表现出色,但在特定行业术语识别、自定义向量化选项、复杂问题处理和Prompt模板丰富度等方面仍有提升空间。
69 0
|
2月前
|
Cloud Native 关系型数据库 Serverless
基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践
本文带大家了解一下如何使用阿里云Serverless计算产品函数计算构建生产级别的LLM Chat应用。该最佳实践会指导大家基于开源WebChat组件LobeChat和阿里云函数计算(FC)构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。
438 16
|
1月前
|
机器学习/深度学习 数据采集 人工智能
大模型体验报告:阿里云文档智能 & RAG结合构建LLM知识库
大模型体验报告:阿里云文档智能 & RAG结合构建LLM知识库
下一篇
无影云桌面