Onton, a San Francisco-based search and discovery company, has released Ontology 1, a neurosymbolic model for complex, conversational, multimodal product search. On a 90-query benchmark scored by three independent LLM judges, Ontology 1 reached a mean precision@10 of 0.630, against 0.543 for Google Shopping and 0.469 for Amazon. It did this while indexing roughly 1% of their catalogs.
Is it deployable
Yes, but not as weights you download. Ontology 1 is live for end users at Onton.com, and Onton says partner access is granted case by case for teams building on the agentic web. There is no public API, pricing tier, or open checkpoint for the model itself. Adoption today looks like a partnership, not a pip install.
- Company fit: Mid-market and enterprise retailers, marketplaces, and agentic-commerce platforms whose relevance stack already loses on long, requirements-heavy queries. Small catalogs see less benefit, because the failure mode Ontology 1 targets scales with catalog size and listing noise.
- Industries: Home decor and furniture today, since that is the only vertical Onton indexes. Onton states the methodology generalizes beyond e-commerce, and that Ontology searches non-product data with essentially no reconfiguration.
- Applications: Conversational and multimodal site search, moodboard-driven discovery, negation-heavy filtering, listing and review trust scoring, and grounding layers for shopping agents.
Why keyword and vector retrieval break here
Conventional e-commerce assumes intent maps onto categories and attributes: size, price, material, brand. There is no filter for ‘pet-friendly,’ and none for furniture that fits your room. Onton argues this catalog interface has barely changed in nearly 30 years.
Ontology 1 takes a different route. For ‘pet-friendly sectional,’ it does not trust the seller’s label, which may be absent or untrue. It reasons from properties more likely to be objective — fiber, weave, construction — and flags claims the product data contradicts. It also weighs the source, since some listings game the algorithm and some reviews are bought.
The model builds an explicit, inspectable world model rather than absorbing patterns into weights. When it has no account of ‘pet-friendly,’ it treats that as a gap and works the answer out: cleanability and durability, then polyester upholstery as an indicator. The learning is reused on later queries such as ‘pet-friendly chair’ or ‘cleanable blue couch,’ and the loop runs continuously.
The benchmark: Subtext-Decor-90
Onton released Subtext-Decor-90 with code and data. Three multimodal judges: Claude Opus 4.8, Gemini 3.1 Pro and GPT-5.5, scored the top 10 visible result cards returned by Onton, Amazon and Google Shopping for each of 90 text queries. P@10 was averaged across judges, with 95% confidence intervals from 10,000 bootstrap resamples.
Results: Onton 0.630 [0.571, 0.688], Google Shopping 0.543 [0.490, 0.596], Amazon 0.469 [0.417, 0.521]. Onton won 52 queries outright, Google 19, Amazon 16. Those sum to 87 because Ontology returned fewer than 10 results on three queries, and empty slots were scored as non-relevant. Excluding those slots instead gives Onton 0.665, Google 0.549, Amazon 0.459.
Krippendorff’s alpha across the three judges is 0.465, so absolute P@10 values are noisy and judge-dependent. All three judges still place the engines in the same order.
Image and multimodal queries were excluded from the 90, because Amazon Lens does not support multimodal queries and Google Lens does not return products exclusively. Onton reports a separate 10-query image and multimodal comparison against Google.
Where Ontology 1 loses
Failure cases cluster on functional-spec queries where Amazon’s category metadata dominates: ‘lamp that won’t wake my partner if I read at 3am’ (Onton 0.4, Amazon 0.9) and ‘something to put on a weirdly deep windowsill’ (Onton 0.07, Amazon 0.67). Onton attributes this to catalog breadth and its single-vertical, non-sponsored index, and expects the self-learning loop to narrow the gap.
The infrastructure underneath
Ontology 1’s knowledge graph runs on Ograph, a custom graph database. Onton reports one Ograph core beating SuiteSparse:GraphBLAS running on 14 cores, roughly 100× the throughput per core, and a GPU build running 43× faster than the CPU variant, with early runs touching 1000× as the implementation is tuned.
Interactive explainer
The embed below walks through the same material in four panels: real Subtext-Decor-90 queries with per-query scores, the pet-friendly reasoning graph drawn step by step, the self-learning loop, and the benchmark chart with confidence intervals and alternate scoring views.
<section class="panel" id="p2" role="tabpanel" aria-labelledby="t2">
<p class="lead">Onton’s own worked example: <strong>"pet-friendly sectional."</strong> A keyword engine matches the phrase in the title or description. Ontology 1 refuses to trust the label and decomposes the concept until it reaches properties it can check.</p>
<div class="card">
<svg id="graph" viewBox="0 0 700 300" role="img" aria-label="Knowledge graph expanding from pet-friendly to polyester upholstery"></svg>
<div class="controls">
<button class="btn" id="gplay">Run the reasoning</button>
<button class="btn ghost" id="greset">Reset</button>
<span class="status" id="gstat">Ready.</span>
</div>
<p class="note">Ontology detects that it has no account of "pet-friendly," treats that as a gap, and works the answer out instead of guessing from surface associations. Onton reports that it may find polyester upholstery to be a good indicator, then reuses that on later queries such as "pet-friendly chair" or "cleanable blue couch."</p>
</div>
</section>
<section class="panel" id="p3" role="tabpanel" aria-labelledby="t3">
<p class="lead">Onton describes the learning loop as shaped like the scientific method. It runs continuously, so accuracy compounds with use rather than with a retraining run. Click a stage.</p>
<div class="loop" id="loop"></div>
<div class="card" style="margin-top:-1px;border-top:0">
<p class="qline" id="loopTitle" style="margin-bottom:8px"></p>
<p class="lead" id="loopBody" style="margin-bottom:0"></p>
</div>
<p class="note">Contrast with an LLM, which absorbs patterns into weights that cannot be inspected. Ontology 1 builds an explicit, inspectable world model — and can tell when that model has a hole in it.</p>
</section>
<section class="panel" id="p4" role="tabpanel" aria-labelledby="t4">
<p class="lead">90 text queries, three independent multimodal judges — Claude Opus 4.8, Gemini 3.1 Pro and GPT-5.5 — scoring the top 10 result cards from each engine. Bars show mean P@10; brackets show the 95% bootstrap interval.</p>
<div class="card">
<div class="controls" style="margin:0 0 14px">
<button class="btn" data-view="all">Aggregate</button>
<button class="btn ghost" data-view="trim">Empty slots excluded</button>
<button class="btn ghost" data-view="wins">Outright wins</button>
</div>
<div class="bars" id="bbars"></div>
<p class="note" id="bnote"></p>
<table>
<thead><tr><th>Per-judge avg. P@10</th><th>Onton</th><th>Amazon</th><th>Google</th></tr></thead>
<tbody>
<tr><td>Claude Opus 4.8</td><td class="best">0.759</td><td>0.641</td><td>0.696</td></tr>
<tr><td>Gemini 3.1 Pro</td><td class="best">0.528</td><td>0.342</td><td>0.426</td></tr>
<tr><td>GPT-5.5</td><td class="best">0.603</td><td>0.422</td><td>0.507</td></tr>
</tbody>
</table>
<p class="note">Krippendorff’s alpha across the three judges is 0.465, so absolute scores are noisy and judge-dependent. All three judges still rank the engines in the same order. Onton indexes roughly 1% of the Amazon and Google Shopping catalogs.</p>
</div>
</section>
<div class="foot">
<span>Source: Onton research posts, Jul 29 2026 · Subtext-Decor-90</span>
<span><b>Marktechpost</b></span>
</div>
</div>
</div>
<script>
(function(){
var root = document.getElementById(‘ont1′);
/* ———- data (verbatim from Onton’s published figures) ———- */
var QUERIES = [
{id:14, label:’"Gross looking art"’, q:’Gross looking art’,
reqs:[[‘aesthetic judgement inverted’,0],[‘"gross" as taste, not defect’,0]],
s:{o:1.00,a:0.17,g:0.50},
note:’Onton 1.00 · Amazon 0.17 · Google 0.50. Query 14 in Fig. 2.’},
{id:51, label:’"laundry hamper I wonu2019t hate looking at for 10 years"’, q:’laundry hamper I wonu2019t hate looking at for 10 years’,
reqs:[[‘object: laundry hamper’,0],[‘durability of taste, not material’,0],[‘no filter exists for this’,1]],
s:{o:0.97,a:0.30,g:0.43},
note:’Onton 0.97 · Amazon 0.30 · Google 0.43. Google returned utilitarian, standard-looking hampers.’},
{id:28, label:’"Rug that hides cat puke but isnu2019t beige"’, q:’Rug that hides cat puke but isnu2019t beige’,
reqs:[[‘object: rug’,0],[‘stain concealment’,0],[‘NOT beige’,1]],
s:{o:0.93,a:0.47,g:0.10},
note:’Onton 0.93 · Amazon 0.47 · Google 0.10. Google returned beige rugs for "isnu2019t beige."’},
{id:8, label:’"Lighting that makes my apartment feel like a Tokyo cocktail bar at 11pm"’, q:’Lighting that makes my apartment feel like a Tokyo cocktail bar at 11pm’,
reqs:[[‘object: lighting’,0],[‘cultural reference’,0],[‘low, warm, late-night mood’,0]],
s:{o:0.93,a:0.57,g:0.37},
note:’Onton 0.93 · Amazon 0.57 · Google 0.37. Amazon surfaced LED ice cubes.’},
{id:6, label:’"A sofa my husband wonu2019t call feminine and I wonu2019t call a man cave"’, q:’A sofa my husband wonu2019t call feminine and I wonu2019t call a man cave’,
reqs:[[‘object: sofa’,0],[‘NOT feminine-coded’,1],[‘NOT man-cave-coded’,1],[‘two people, one result set’,0]],
s:{o:0.60,a:0.00,g:0.03},
note:’Onton 0.60 · Amazon 0.00 · Google 0.03. Amazon returned zero results.’},
{id:19, label:’"A chair thatu2019s comfortable for crying in"’, q:’A chair thatu2019s comfortable for crying in’,
reqs:[[‘object: chair’,0],[’emotional framing’,0],[‘enclosure and softness implied’,0]],
s:{o:0.73,a:0.60,g:0.70},
note:’Onton 0.73 · Amazon 0.60 · Google 0.70. A narrower margin — the judges rated all three engines close here.’},
{id:18, label:’"Bedroom furniture similar to Call Me By Your Name"’, q:’Bedroom furniture similar to Call Me By Your Name’,
reqs:[[‘object: bedroom furniture’,0],[‘film as style reference’,0],[‘period and palette inferred’,0]],
s:{o:0.53,a:0.43,g:0.33},
note:’Onton 0.53 · Amazon 0.43 · Google 0.33.’}
];
/* ———- panel 1 ———- */
var chipBox=document.getElementById(‘qchips’), qtext=document.getElementById(‘qtext’),
qreqs=document.getElementById(‘qreqs’), qbars=document.getElementById(‘qbars’), qnote=document.getElementById(‘qnote’);
QUERIES.forEach(function(Q,i){
var b=document.createElement(‘button’);
b.className=’chip’; b.type=’button’; b.textContent=Q.label;
b.setAttribute(‘aria-pressed’, i===0?’true’:’false’);
b.addEventListener(‘click’,function(){ selectQuery(i); });
chipBox.appendChild(b);
});
function bar(name, val, cls){
return ‘<div class="barrow"><span class="barlab">’+name+'</span>’+
‘<span class="bartrack"><span class="barfill ‘+cls+’" data-w="’+(val*100)+’"></span></span>’+
‘<span class="barval">’+val.toFixed(2)+'</span></div>’;
}
function selectQuery(i){
var Q=QUERIES[i];
Array.prototype.forEach.call(chipBox.children,function(c,j){ c.setAttribute(‘aria-pressed’, j===i?’true’:’false’); });
qtext.innerHTML = ‘<span class="qm">→</span> ‘ + Q.q;
qreqs.innerHTML=”;
Q.reqs.forEach(function(r,k){
var s=document.createElement(‘span’);
s.className=’req’+(r[1]?’ neg’:”); s.textContent=r[0];
s.style.animationDelay=(80*k)+’ms’; qreqs.appendChild(s);
});
qbars.innerHTML = bar(‘Onton’,Q.s.o,’onton’)+bar(‘Google’,Q.s.g,’google’)+bar(‘Amazon’,Q.s.a,’amazon’);
qnote.textContent = Q.note;
requestAnimationFrame(function(){
qbars.querySelectorAll(‘.barfill’).forEach(function(f){ f.style.width=f.getAttribute(‘data-w’)+’%’; });
});
sunTo(i);
}
function sunTo(i){
var s=document.getElementById(‘ontSun’);
s.style.transform=’translate(‘+(-i*10)+’px,’+(i*8)+’px) scale(‘+(1+i*0.03)+’)’;
}
/* ———- panel 2: graph ———- */
var GN=[
{id:’q’, x:22, y:128, w:150,h:38, t:’"pet-friendly"’, cls:’seed’},
{id:’c’, x:236, y:60, w:150,h:34, t:’cleanability’, cls:”},
{id:’d’, x:236, y:186, w:150,h:34, t:’durability’, cls:”},
{id:’p’, x:452, y:123, w:186,h:38, t:’polyester upholstery’, cls:’evidence’},
{id:’r1′, x:452, y:22, w:186,h:30, t:’"pet-friendly chair"’, cls:”},
{id:’r2′, x:452, y:232, w:186,h:30, t:’"cleanable blue couch"’, cls:”}
];
var GE=[
{f:’q’,t:’c’,lab:’what makes it?’},
{f:’q’,t:’d’,lab:’what makes it?’},
{f:’c’,t:’p’,lab:’indicated by’},
{f:’d’,t:’p’,lab:’indicated by’},
{f:’p’,t:’r1′,lab:’reused’},
{f:’p’,t:’r2′,lab:’reused’}
];
var svg=document.getElementById(‘graph’);
function nodeById(id){ for(var i=0;i<GN.length;i++){ if(GN[i].id===id) return GN[i]; } }
function buildGraph(){
var h=”;
GE.forEach(function(e,i){
var a=nodeById(e.f), b=nodeById(e.t);
var x1=a.x+a.w, y1=a.y+a.h/2, x2=b.x, y2=b.y+b.h/2, mx=(x1+x2)/2;
var d=’M’+x1+’,’+y1+’ C’+mx+’,’+y1+’ ‘+mx+’,’+y2+’ ‘+x2+’,’+y2;
var len=Math.hypot(x2-x1,y2-y1)+80;
h+='<path class="gedge" id="e’+i+’" d="’+d+’" style="–len:’+len+’"/>’;
h+='<text class="elab" id="l’+i+’" x="’+(mx-26)+’" y="’+((y1+y2)/2-6)+’">’+e.lab+'</text>’;
});
GN.forEach(function(n){
h+='<g class="gnode ‘+n.cls+’" id="n’+n.id+’">’+
‘<rect x="’+n.x+’" y="’+n.y+’" width="’+n.w+’" height="’+n.h+’" rx="3"/>’+
‘<text x="’+(n.x+n.w/2)+’" y="’+(n.y+n.h/2+4)+’" text-anchor="middle">’+n.t+'</text></g>’;
});
svg.innerHTML=h;
}
buildGraph();
var SEQ=[
{sel:[‘#nq’], msg:’Query arrives. No account of "pet-friendly" exists yet — that is a gap.’},
{sel:[‘#e0′,’#l0′,’#e1′,’#l1′,’#nc’,’#nd’], msg:’Decompose: what makes something pet-friendly? Cleanability and durability.’},
{sel:[‘#e2′,’#l2′,’#e3′,’#l3′,’#np’], msg:’Ground it in a checkable property: polyester upholstery is a good indicator.’},
{sel:[‘#e4′,’#l4′,’#e5′,’#l5′,’#nr1′,’#nr2′], msg:’Store it. Later queries reuse the same learned relationship.’}
];
var gi=0, gtimer=null;
var gstat=document.getElementById(‘gstat’);
function gstep(){
if(gi>=SEQ.length){ gstat.textContent=’Done. The graph keeps this, permanently and inspectably.’; return; }
SEQ[gi].sel.forEach(function(s){
var el=svg.querySelector(s); if(!el) return;
el.classList.add(el.classList.contains(‘gedge’)?’drawn’:’shown’);
});
gstat.textContent=SEQ[gi].msg; gi++;
gtimer=setTimeout(gstep,1450);
}
document.getElementById(‘gplay’).addEventListener(‘click’,function(){ greset(); gstep(); });
function greset(){
clearTimeout(gtimer); gi=0; buildGraph(); gstat.textContent=’Ready.’;
}
document.getElementById(‘greset’).addEventListener(‘click’,greset);
/* ———- panel 3: loop ———- */
var LOOP=[
{n:’STAGE 01′,h:’Detect the gap’,p:’A query uses a predicate the world model cannot account for.’,
title:’"Pet-friendly sectional" arrives, and nothing in the graph defines pet-friendly.’,
body:’An LLM would guess from surface associations. Ontology 1 registers the missing account as a hole in its world model rather than papering over it.’},
{n:’STAGE 02′,h:’Decompose’,p:’Ask what the predicate is actually made of.’,
title:’What makes something pet-friendly? Perhaps cleanability and durability.’,
body:’The question is broken into sub-properties that are more likely to be objective than a seller-written label — which may never have been written, or may simply be untrue.’},
{n:’STAGE 03′,h:’Ground in evidence’,p:’Find properties that can be checked against product data.’,
title:’Fiber, weave and construction determine the answer, not the description.’,
body:’Ontology checks the properties that actually decide the question, flags claims the product data contradicts, and weighs the source — some listings game the algorithm and some reviews are bought.’},
{n:’STAGE 04′,h:’Generalise’,p:’Reuse the learned relationship on every later query.’,
title:’Once it works out what makes a few products "cozy," it applies that across millions.’,
body:’The learning runs continuously rather than in a retraining cycle, so Onton reports that accuracy compounds with use. The same relationships serve "pet-friendly chair" and "cleanable blue couch."’}
];
var loopBox=document.getElementById(‘loop’), lt=document.getElementById(‘loopTitle’), lb=document.getElementById(‘loopBody’);
LOOP.forEach(function(S,i){
var b=document.createElement(‘button’);
b.className=’step’+(i===0?’ active’:”); b.type=’button’;
b.innerHTML='<span class="n">’+S.n+'</span><h4>’+S.h+'</h4><p>’+S.p+'</p>’;
b.addEventListener(‘click’,function(){
Array.prototype.forEach.call(loopBox.children,function(c){c.classList.remove(‘active’);});
b.classList.add(‘active’); showLoop(i);
});
loopBox.appendChild(b);
});
function showLoop(i){ lt.innerHTML='<span class="qm">→</span> ‘+LOOP[i].title; lb.textContent=LOOP[i].body; }
showLoop(0);
/* ———- panel 4: benchmark ———- */
var VIEWS={
all:{max:1, note:’Aggregate P@10 across all 90 queries, with empty result slots counted as non-relevant. Brackets mark the 95% bootstrap interval from 10,000 resamples.’,
rows:[[‘Onton’,0.630,’onton’,[0.571,0.688]],[‘Google’,0.543,’google’,[0.490,0.596]],[‘Amazon’,0.469,’amazon’,[0.417,0.521]]]},
trim:{max:1, note:’Ontology returned fewer than 10 results on three queries because of catalog size. Excluding those empty slots from scoring instead of counting them as misses gives these values.’,
rows:[[‘Onton’,0.665,’onton’,null],[‘Google’,0.549,’google’,null],[‘Amazon’,0.459,’amazon’,null]]},
wins:{max:60, fmt:0, note:’Outright wins across the 90 queries. These sum to 87 rather than 90 because of the three short-result queries. Counting total wins including ties gives Onton 58, Google 25, Amazon 19.’,
rows:[[‘Onton’,52,’onton’,null],[‘Google’,19,’google’,null],[‘Amazon’,16,’amazon’,null]]}
};
var bbars=document.getElementById(‘bbars’), bnote=document.getElementById(‘bnote’);
function renderBench(key){
var V=VIEWS[key], h=”;
V.rows.forEach(function(r){
var pct=(r[1]/V.max)*100;
var civ=”;
if(r[3]){ var l=(r[3][0]/V.max)*100, w=((r[3][1]-r[3][0])/V.max)*100; civ='<span class="ci" style="left:’+l+’%;width:’+w+’%"></span>’; }
h+='<div class="barrow"><span class="barlab">’+r[0]+'</span>’+
‘<span class="bartrack">’+civ+'<span class="barfill ‘+r[2]+’" data-w="’+pct+’"></span></span>’+
‘<span class="barval">’+(V.fmt===0?r[1]:r[1].toFixed(3))+'</span></div>’;
});
bbars.innerHTML=h; bnote.textContent=V.note;
requestAnimationFrame(function(){
bbars.querySelectorAll(‘.barfill’).forEach(function(f){ f.style.width=f.getAttribute(‘data-w’)+’%’; });
bbars.querySelectorAll(‘.ci’).forEach(function(c){ c.classList.add(‘show’); });
});
}
root.querySelectorAll(‘[data-view]’).forEach(function(btn){
btn.addEventListener(‘click’,function(){
root.querySelectorAll(‘[data-view]’).forEach(function(b){ b.classList.add(‘ghost’); });
btn.classList.remove(‘ghost’);
renderBench(btn.getAttribute(‘data-view’));
});
});
/* ———- tabs ———- */
var tabs=root.querySelectorAll(‘.tab’);
tabs.forEach(function(tab){
tab.addEventListener(‘click’,function(){
tabs.forEach(function(t){ t.setAttribute(‘aria-selected’,’false’); });
tab.setAttribute(‘aria-selected’,’true’);
root.querySelectorAll(‘.panel’).forEach(function(p){ p.classList.remove(‘on’); });
var p=document.getElementById(tab.getAttribute(‘aria-controls’));
p.classList.add(‘on’);
if(p.id===’p4′) renderBench(‘all’);
if(p.id===’p1′) selectQuery(0);
resize();
});
});
selectQuery(0);
renderBench(‘all’);
/* ———- auto-resize for WordPress ———- */
function resize(){
try{
var h=(root.offsetHeight||600)+40;
if(window.parent && window.parent!==window){ window.parent.postMessage({ontologyHeight:h,frameHeight:h},’*’); }
}catch(e){}
}
window.addEventListener(‘load’,resize);
setInterval(resize,900);
resize();
})();
</script>
</body>
</html>
” style=”width:100%;height:600px;border:0;overflow:hidden;display:block;” scrolling=”no” loading=”lazy” title=”Onton Ontology 1 interactive explainer”>
Key Takeaways
- Ontology 1 scores P@10 0.630 on Subtext-Decor-90, ahead of Google Shopping (0.543) and Amazon (0.469).
- It wins 52 of 90 queries outright while indexing roughly 1% of either competitor’s catalog.
- The architecture is neurosymbolic: an inspectable knowledge graph that decomposes vague predicates into checkable properties.
- Judge reliability is modest (Krippendorff’s alpha 0.465), but all three judges rank the engines identically.
- Availability is product-first — live on Onton.com, partner access case by case, no open weights or public API.
Check out the Technical details and Benchmarks. Also, feel free to follow us on Twitter and don’t forget to join our 150k+ML SubReddit and Subscribe to our Newsletter. Wait! are you on telegram? now you can join us on telegram as well.
Need to partner with us for promoting your GitHub Repo OR Hugging Face Page OR Product Release OR Webinar etc.? Connect with us
The post Onton Releases Ontology 1: A Neurosymbolic Search Model That is 2.7x More Accurate than the World’s Best E-commerce Search Engines appeared first on MarkTechPost.