mhndlabs English

A semantic layer for private-markets data, built so every answer can be checked.

An OWL ontology with SKOS taxonomies, entity resolution over 5,000+ contact records, a knowledge graph where every assertion carries its source, and a natural-language query service that validates the model's SPARQL against the ontology before it runs.

Built for this proposal on invented data. Every firm, fund, company, person and deal is fictional. This is a working demonstration, not a production system.

Running the self-test against the live engine...

Ask the graph

The model (DeepSeek V4.1 Flash, with GPT-4.1 mini as fallback) runs through Vercel AI Gateway. Six questions a minute per visitor.
  1. Link namesto entity IDs, or ask which one when a name is ambiguous
  2. Generate SPARQLgrounded on a schema card built from the ontology
  3. Validateevery term and value against the ontology, before running
  4. Executeon the graph
  5. Citeeach row to the assertions and sources behind it

The ontology and its taxonomies

Two kinds of structure, kept apart on purpose. Ontological relationships say how things act on each other: a firm participated in a deal, a fund is managed by a firm, a person held a role at an organisation. Taxonomies are controlled vocabularies you filter and roll up by: stage, sector, geography, deal type, asset class. A thing becomes a class when it carries its own properties or rules (a family office is a kind of investor firm). A value you group by becomes a SKOS concept.

Class diagram: ontology relationships in blue, taxonomy links in ochre hasAffiliation affiliatedWith participatedIn participatedIn managedBy (Fund to InvestorFirm) targetCompany stage dealType assetClass sector headquarteredIn Person Affiliation Organization InvestorFirm FamilyOffice, VentureCapitalFirm,PrivateEquityFirm, PrivateCredit, Corporate Deal Company Fund Stage ladder Deal type Asset class Sector Geography
Square boxes are OWL classes; rounded boxes are SKOS concept schemes. Grey lines are rdfs:subClassOf. Investor firms also carry focusSector, focusStage and focusGeography preferences, which point into the same schemes. Every arrow is a property in the ontology file, served at its own IRI.

Versioned vocabulary, with a deprecation path

v1.0 had a sector concept called Cleantech. It overlapped two others, so v1.1 deprecates it: the concept keeps its IRI, gets owl:deprecated true and dcterms:isReplacedBy pmv:sector-climate-tech. Loaders migrate records that declare vocabulary v1.0. Records with no version are not migrated silently; the integrity rules flag them instead. The query validator refuses a deprecated concept and names the replacement.

Files: ontology (OWL, Turtle), vocabularies (SKOS), integrity rules (SHACL-SPARQL).

Entity resolution, biased toward precision

Four invented sources (a CRM import, deal documents, a third-party data feed, web profiles) describe the same people with nicknames, initials, transliterations (Mohammed, Muhammad, Mohamed; Chen and Chan), diacritics, swapped name order, firm renames and people who changed firms. Distinct people who share a name, and relatives at the same family office, are planted on purpose as traps.

Blocking keeps candidate pairs small, a logistic model scores each pair, and a merge is refused when a cluster would hold conflicting evidence: two different emails at one firm, or two clearly different given names. That guard stops one "J. Reed" record from chaining Joseph Reed and James Reed into a single person.

Pairwise precision and recall against the auto-link threshold, held-out test split

One person, several records, every assertion sourced

Score a pair yourself

Edit either record. The trained model scores the pair and shows which signals moved the score.

Record A
Record B

Integrity rules, run live

Ontology-level rules written as SHACL-SPARQL shapes. Ten violations were planted in the source data: deals with no company, a stage outside the vocabulary, a zero deal size, legacy Cleantech rows, and affiliations that end before they start. Each one should be caught, and nothing else.

Integrity rules and violation counts

The benchmark, with its failures

Benchmark questions and grades

Query the graph directly

Read-only SPARQL 1.1 against the same store. Prefixes pm:, pmv:, id:, skos:, rdfs: and prov: are declared for you, and the same validator runs first.

What this does not show yet