Ontologia ESCO
Índice
O que é
A ESCO (European Skills, Competences, Qualifications and Occupations) é uma ontologia multilíngue mantida pela Comissão Europeia que cataloga e classifica conceitos do mundo do trabalho: ocupações profissionais, habilidades, competências e qualificações. Ela é publicada em formato RDF/SKOS e disponibilizada em 27 idiomas, incluindo o Português de Portugal.
A ESCO serve como um vocabulário controlado para desambiguação: em vez de associar currículos e vagas a competências em strings livres como "React.js", "reactjs" ou "React Developer", o sistema mapeia todos esses termos para um único URI canônico da ontologia, garantindo consistência nas operações de matching e travessia de grafo.
A ontologia ESCO está disponível em esco.ec.europa.eu. O Kairos utiliza a taxonomia de Skills e Competências (não de Ocupações).
Como Funciona
Por que o Kairos Adotou a ESCO
O Problema de Vocabulary Mismatch
Currículos e vagas de emprego descrevem as mesmas habilidades com terminologias completamente diferentes. Sem um vocabulário canônico, comparar "Python" de um currículo com "Desenvolvimento em Python" de uma vaga exige heurísticas frágeis.
A ESCO resolve isso fornecendo um label canônico (preferredLabel) e uma lista de rótulos alternativos (alternativeLabels) para cada conceito, tornando o matching determinístico e auditável.
Inferência Hierárquica
A ontologia ESCO estrutura os conceitos em uma hierarquia via relações SKOS:
skos:broader— conceito pai (mais genérico)skos:narrower— conceito filho (mais específico)
Isso permite inferências semânticas no grafo de conhecimento: quem domina "React" implicitamente conhece "JavaScript", que por sua vez é uma instância de "Programação Frontend". Essas relações estão persistidas no Neo4j como arestas [:BROADER] e [:NARROWER].
Suporte Nativo ao PT-PT, Próximo ao PT-BR
A ESCO inclui labels em Português de Portugal para a grande maioria de seus conceitos, os quais são próximos a conceitos em Português do Brasil, o que foi determinante para a adoção no Kairos — um sistema voltado ao mercado brasileiro.
Estrutura ESCO Utilizada no Kairos
Taxonomia de Tipos de Skill
A ESCO classifica habilidades pela classe SkillCompetenceType. O Kairos mapeia essa classificação para três categorias internas utilizadas pelo LLM e pelo Entity Linker:
| Tipo Interno | Classe ESCO | Descrição | Exemplos |
|---|---|---|---|
hard | Skill/Competence | Habilidades técnicas práticas e mensuráveis | Python, Docker, SQL, AutoCAD |
soft | Transversal Skills | Competências comportamentais e interpessoais | Liderança, Comunicação, Trabalho em equipe |
knowledge | Knowledge | Conhecimento teórico e domínio conceitual | Teoria de Grafos, LGPD, UX Research |
Relações no Grafo
As três relações mapeadas da ontologia ESCO para o grafo Neo4j:
| Relação SKOS | Aresta Neo4j | Semântica |
|---|---|---|
skos:broader | [:BROADER] | Skill aponta para seu conceito pai |
skos:narrower | [:NARROWER] | Skill aponta para uma especialização sua |
isEssentialSkillOf | [:ESSENTIAL] | Skill é essencial para uma ocupação |
Armazenamento no Neo4j
Cada conceito ESCO é persistido como um nó (:Skill) no Neo4j com as seguintes propriedades:
| Propriedade | Tipo | Descrição |
|---|---|---|
name | string | Nome/Label canônico do conceito no idioma de referência (PT-PT) |
type | string | Tipo da skill: hard, soft, knowledge ou unknown |
uri | string | Identificador único (URI) na ontologia ESCO |
embedding | float[768] | Vetor semântico gerado pelo embeddinggemma |
globalPageRank | float | Score da execução de PageRank no grafo. Ver Personalized PageRank(PPR) |
Os campos alternativeLabels e description presentes nos arquivos CSV da ESCO são utilizados pelo embeddinggemma para enriquecer semanticamente o texto que gera o vetor de embedding, mas não são persistidos individualmente como propriedades no nó do Neo4j para otimizar o armazenamento.
A base ESCO carregada no Neo4j contém aproximadamente 34.843 nós (:Skill), todos com embedding de 768 dimensões indexados em um HNSW Vector Index com função de similaridade cosseno.
Pipeline de Normalização Ontológica (3 Estágios)
O Kairos integra o LLM (Gemma3 1B) com busca semântica ou léxica na ontologia ESCO em 3 estágios sequenciais para garantir extração precisa e normalizada:
| Estágio | Responsável | Entrada | Saída |
|---|---|---|---|
| 1. Instrução | Prompt Templates | Descrição de Vaga/ Currículo + definição de competências e seus tipos na ESCO | Prompt enriquecido com dados de entrada e conceitos ESCO |
| 2. Extração | LLM (Ollama Gemma3 1B) | Prompt enriquecido | Lista de skills candidatas com tipo (hard, soft, knowledge ou unknown) |
| 3. Vinculação | Entity Linker | Skills candidatas | Skills vinculadas a URIs ESCO ou não vinculadas |
Demonstração / Exemplos
Resolução de Vocabulary Mismatch
O exemplo abaixo mostra como três strings semanticamente equivalentes — com grafias e formatos diferentes — são resolvidas para o mesmo conceito canônico na ESCO:
| Texto extraído pelo LLM | URI ESCO canônico | Label canônico PT-BR |
|---|---|---|
"Python" | http://data.europa.eu/esco/skill/...python | Python (Linguagem de Programação) |
"programação em Python" | http://data.europa.eu/esco/skill/...python | Python (Linguagem de Programação) |
"Desenvolvimento em Python" | http://data.europa.eu/esco/skill/...python | Python (Linguagem de Programação) |
O resultado em todos os três casos é o mesmo nó (:Skill) no Neo4j. Isso significa que um currículo com "Desenvolvimento em Python" e uma vaga que exige "Python" produzem o mesmo nó, auxiliando na descoberta de competências em comum.
Inferência Hierárquica no Grafo
Dado o grafo ESCO persistido no Neo4j, é possível rastrear a cadeia de conceitos relacionados a partir de qualquer skill:
MATCH path = (s:Skill {preferredLabel: "React"})-[:BROADER*1..3]->(parent:Skill)
RETURN [node IN nodes(path) | node.preferredLabel] AS hierarquia
Resultado:
["React", "JavaScript", "Programação Frontend", "Linguagens de Programação"]
Essa cadeia permite que o sistema infira que um candidato com "React" tem domínio implícito de "JavaScript" — relação explorada nas versões futuras do Jaccard com traversal hierárquico.
ADR's Relacionadas
| ADR | Data | Decisão |
|---|---|---|
| ADR-002 | Dez 2025 | Adoção da ontologia ESCO como vocabulário canônico do sistema; alternativas consideradas: ontologia própria e O*NET |
| ADR-011 | Jan 2026 | Formalização da arquitetura de 4 estágios ESCO–LLM; alternativa de delegar toda a normalização ao LLM foi rejeitada pelo risco de alucinações de URIs |