Knowledge Graph
Um grafo de conhecimento armazena factos como triplos entidade-relação-entidade, permitindo que sistemas de IA os consultem, relacionem e utilizem para raciocinar. RDF, GraphRAG e código.
Um grafo de conhecimento é uma representação estruturada de fatos na qual os nós são entidades, como pessoas, lugares, produtos ou conceitos, e as arestas rotuladas representam as relações entre elas. Cada fato é uma tripla de sujeito, predicado e objeto, como (Marie Curie, nasceu em, Varsóvia), e um esquema ou ontologia define quais tipos de entidades e relações são permitidos. Como as relações são armazenadas explicitamente, um sistema pode responder a perguntas seguindo caminhos pelo grafo, combinar fatos de diferentes fontes sobre a mesma entidade e inferir fatos que nunca foram declarados diretamente. O Knowledge Graph do Google, lançado em 2012, fornece os painéis de informações ao lado dos resultados de busca, e a Wikidata, o grafo de conhecimento livre mantido por voluntários da Wikimedia, contém mais de 100 milhões de itens.
Entidades, relações e triplas#
- Entidades (nós): Coisas com uma identidade, cada uma tipada pela ontologia, como uma pessoa, uma cidade ou um composto químico.
- Relações (arestas): Ligações direcionadas e rotuladas, como "nasceu em" ou "capital de". O rótulo carrega significado, então (Varsóvia, capital de, Polônia) e (Polônia, capital de, Varsóvia) são afirmações diferentes.
- Atributos: Valores literais associados a uma entidade, como uma data de nascimento ou uma população.
- Ontologia: O esquema de classes, tipos de relação e regras — por exemplo, que toda capital é uma cidade — que permite a um mecanismo de inferência deduzir novos fatos a partir dos existentes.
Dois modelos de dados predominam. O Resource Description Framework (RDF) do W3C identifica cada entidade e relação com um URI da Web e armazena triplas puras consultadas com SPARQL, o que é adequado para dados abertos e interligados, como a Wikidata. Grafos de propriedades, usados por bancos de dados de grafos como o Neo4j, permitem que nós e arestas tenham propriedades de chave-valor e sejam consultados com linguagens como Cypher ou GQL, que a ISO publicou como padrão em abril de 2024.
Neste pequeno grafo, a pergunta "em que país Marie Curie nasceu?" corresponde a um caminho de dois saltos de Marie Curie, passando por Varsóvia, até a Polônia; as arestas "ganhou" compartilhadas conectam ambas as Curie ao prêmio conjunto de 1903.
Criação e consulta de um grafo de conhecimento#
Os grafos são preenchidos com bancos de dados selecionados, com texto processado por reconhecimento de entidades nomeadas (NER) e extração de relações, cada vez mais realizadas por grandes modelos de linguagem (LLMs), e com imagens. A resolução de entidades então combina diferentes menções à mesma coisa, como "M. Curie" e "Marie Skłodowska-Curie", em um único nó. Além das consultas explícitas, embeddings de grafos de conhecimento, como o TransE, representam cada entidade e relação como um vetor e calculam a pontuação de uma tripla candidata com base em quão perto a soma do sujeito com a relação chega ao objeto, o que permite prever ligações ausentes; as redes neurais de grafos aprendem diretamente com a estrutura do grafo.
A visão computacional fornece entidades e relações a partir de imagens. A saída de um detector YOLO26 se transforma em triplas (imagem, contém, classe), e combiná-las com fatos contextuais permite responder a perguntas que o detector sozinho não consegue responder, como quais tipos de veículos aparecem em uma imagem:
import networkx as nx
from ultralytics import YOLO
# Detect objects in an image
model = YOLO("yolo26n.pt")
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
# Each detected class becomes an entity node linked to the image
graph = nx.DiGraph()
for class_id in result.boxes.cls.int().tolist():
graph.add_edge("bus.jpg", result.names[class_id], relation="contains")
# Background knowledge as (subject, relation, object) triples
for subject, relation, obj in [("bus", "is_a", "vehicle"), ("car", "is_a", "vehicle"), ("person", "is_a", "human")]:
graph.add_edge(subject, obj, relation=relation)
# Two-hop query: which detected entities are vehicles?
vehicles = [node for node in graph.successors("bus.jpg") if graph.has_edge(node, "vehicle")]
print(f"Vehicles in bus.jpg: {vehicles}")Grafos de conhecimento e grandes modelos de linguagem#
Os LLMs armazenam conhecimento implicitamente em seus pesos, o que dificulta inspecionar ou atualizar seus fatos e os torna propensos a alucinações. Os grafos de conhecimento armazenam fatos explicitamente, com fontes que podem ser citadas e edições que entram em vigor imediatamente. O GraphRAG combina os dois: amplia a geração aumentada por recuperação (RAG) ao recuperar entidades conectadas e caminhos de relações, ou resumos de comunidades do grafo, em vez de trechos de texto isolados, o que ajuda a responder perguntas com múltiplos saltos, como quais fornecedores de uma peça atrasada também atendem outra fábrica. Os LLMs também traduzem perguntas em linguagem natural em consultas SPARQL ou Cypher sobre grafos existentes.
Aplicações no mundo real#
- Busca e assistentes: Painéis de entidades, respostas diretas e assistentes de voz consultam fatos sobre pessoas, lugares e organizações em grandes grafos selecionados.
- Descoberta de medicamentos: Grafos biomédicos conectam genes, proteínas, compostos, doenças e efeitos colaterais; a previsão de ligações propõe possíveis alvos de medicamentos ou novos usos para medicamentos aprovados.
- Detecção de fraude: Contas que compartilham dispositivos, endereços ou cartões de pagamento formam redes conectadas que se destacam ao percorrer o grafo, mesmo quando cada conta parece normal isoladamente.
- Compreensão de cenas: Grafos de cenas descrevem uma imagem como objetos e suas relações, como (pessoa, montando, cavalo). O conjunto de dados Visual Genome anota mais de 100,000 imagens dessa forma para treinar modelos que respondem a perguntas sobre cenas.
Grafos de conhecimento vs. armazenamentos de dados relacionados#
- Bancos de dados relacionais: Armazenam registros em tabelas vinculadas por chaves estrangeiras, o que é adequado para transações com um esquema fixo. Perguntas com múltiplos saltos, como "amigos de amigos que compraram este produto", exigem uma junção por salto, enquanto um grafo percorre diretamente as arestas armazenadas.
- Bancos de dados vetoriais: Recuperam itens pela similaridade entre embeddings, encontrando conteúdo relacionado sem ligações explícitas. Um grafo de conhecimento registra exatamente como duas entidades se relacionam, e os sistemas híbridos usam ambos.
- Ontologias: Uma ontologia é o esquema de tipos e regras, e um grafo de conhecimento é esse esquema preenchido com fatos de instâncias, como os milhões de pessoas, lugares e obras individuais da Wikidata.










