- Archive items described against one controlled vocabulary instead of free-text tags
- Every machine-suggested label traceable to its model, prompt and reviewer
- Editors searching by meaning as well as by keyword
- A taxonomy that the archive team owns and evolves without engineering help
Anonymised composite. Client names, identifying details and confidential figures are withheld; public facts are cited in the references.
The situation
A media organisation held decades of video, audio and photography. The material was valuable for new programmes, licensing and research, but most of it was hard to find. Cataloguing conventions had changed several times, many items carried only a title and a broadcast date, and the same subject was described in a dozen ways. Search worked if you already knew the exact words a cataloguer had used years earlier, and otherwise depended on a few long-serving people who remembered where things were.
The organisation wanted to use AI to describe the backlog. The concern, rightly, was that a model left to itself would produce confident, inconsistent tags at a scale nobody could review.
What had to be true
- One controlled vocabulary, so a subject, place or person is described the same way across the archive.
- Machine suggestions, human authority: models propose, people decide where confidence is low or the subject is sensitive.
- Provenance on every field, so anyone can see whether a label came from a cataloguer, a model or a reviewer.
- Search by meaning and by exact term, for editors who know what they want and for those who are exploring.
- A taxonomy the archive team owns, not one hidden inside prompts or code.
Architecture
The vocabulary was modelled as a SKOS concept scheme, which gives each concept a preferred label, alternative labels and broader or narrower relationships1. Descriptive fields such as creator, date, subject and rights were aligned with DCMI Metadata Terms so that records stayed portable between systems2.
The data flow, end to end
- SelectPick a collection batch, prioritised by editorial and licensing demand
- DeriveGenerate transcripts, keyframes and on-screen text; keep them as versioned artefacts
- EnrichRun batch inference that returns structured candidate subjects, places, people and a summary
- MapResolve candidates to concepts in the scheme; unmatched terms become proposals, not tags
- ReviewRoute low-confidence and sensitive items to cataloguers; record every decision
- PublishWrite approved metadata to the catalogue and refresh keyword and vector indexes
For semantic search, transcripts and summaries were embedded with a sentence-embedding model, which produces vectors that can be compared with cosine similarity3. Nearest-neighbour lookup used an HNSW index, a graph-based approximate search method that scales well to large collections4. Model choice and storage trade-offs are covered in choosing embedding models and pgvector or a vector database.
The hard part: a vocabulary people agree on
Running models over the archive was the easy part. Agreeing what the labels should be took far longer. The approach that worked:
- Seed the concept scheme from the terms cataloguers already used most, then merge duplicates as alternative labels rather than deleting them, so old records still match.
- Use SKOS mapping properties to link local concepts to external vocabularies where they existed, instead of copying those vocabularies wholesale1.
- Never let the pipeline create a concept. A model suggestion with no match becomes a proposal for the taxonomy owner, with example items attached.
- Treat people and sensitive topics as always-reviewed fields, whatever the model's confidence.
The taxonomy design choices are discussed further in SKOS vs OWL for enterprise taxonomies.
A controlled vocabulary turns a model from an author into an assistant. The model can only choose from concepts people have agreed, and everything else becomes a question for a person.
How the engagement ran
- Derive and enrich a batch
- Map to concepts and score
- Publish approved records
- Work the review queue
- Accept, correct or reject
- Flag missing concepts
- Review concept proposals
- Version the scheme
- Trigger re-mapping
- Collection and rights inventory
- Search pain points
- Seed vocabulary
- End-to-end pipeline
- Review queue design
- Evaluation set
- Confidence thresholds
- Provenance and versioning
- Hybrid search
- Further collections
- Taxonomy governance
- Runbooks and training
Thresholds were set against a hand-labelled evaluation set drawn from the pilot collection, not against the model's own sense of certainty. The method is in LLM evaluation sets that predict production.
Key decisions and trade-offs
| Decision | Alternative | Why |
|---|---|---|
| SKOS concept scheme | Free-text model tags | Consistent labels, synonyms and hierarchy; reusable outside the pipeline |
| Batch enrichment | Real-time tagging on view | Predictable cost, reproducible runs and reviewable outputs |
| Structured model outputs | Prose descriptions parsed later | Fields validate on arrival; failures are visible, not silent |
| Review by confidence and sensitivity | Review everything, or nothing | People spend time where the model is weakest or the risk is highest |
| Hybrid keyword and vector search | Vector search only | Editors still need exact names, dates and identifiers |
What I'd do again, and differently
Again: put the vocabulary at the centre and make provenance a field, not a log file. Differently: involve the cataloguers in designing the review screen from the first week. The speed and quality of review decided the throughput of the whole system, far more than the model did.
If you're planning something similar, the ontology and knowledge graph page describes how I run these engagements, or analyse your challenge and bring the result to a call.
- 1SKOS Simple Knowledge Organization System ReferenceW3C · 2009-08-18
- 2DCMI Metadata TermsDublin Core Metadata Initiative
- 3Sentence-BERT: Sentence Embeddings using Siamese BERT-NetworksarXiv (Reimers and Gurevych)
- 4Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphsarXiv (Malkov and Yashunin)