Late-interaction retrieval

토큰 단위 지연 상호작용 검색

Match each query token to its best document token and sum the scores.

···
html
<div class="v"><header><b>TOKEN MATCH MATRIX</b><span id="state"></span></header><main><div class="matrix" id="matrix"></div><div class="formula" id="formula"></div></main><footer>one best match per query token</footer></div>
css
.v{width:min(92vw,660px);height:min(86vh,310px);box-sizing:border-box;padding:clamp(9px,2.5vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);display:flex;flex-direction:column;gap:7px;color:var(--fg);font:500 clamp(15px,4.5vmin,19px)/1.25 var(--font-sans, sans-serif)}.v header,.v footer{display:flex;justify-content:space-between;align-items:center;gap:8px;white-space:nowrap}.v header b{color:var(--accent);font-size:.9em}.v header span,.v footer{color:var(--muted);font-size:.82em}.v main{flex:1;min-height:0;position:relative;overflow:hidden}.v .mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.v .active{background:var(--accent)!important;color:var(--bg)!important;border-color:var(--accent)!important}.v .muted{opacity:.45} .matrix{height:78%;display:grid;grid-template-columns:38px repeat(4,1fr);grid-template-rows:repeat(3,1fr);gap:3px}.matrix b,.matrix span{display:grid;place-items:center;border:1px solid var(--line);border-radius:4px;font:600 .72em ui-monospace,monospace}.matrix b{color:var(--muted);border:0}.matrix span.win{background:color-mix(in srgb,var(--accent) 26%,var(--surface));border-color:var(--accent)}.formula{text-align:center;color:var(--accent);font:600 .75em ui-monospace,monospace}
js
const values=[[.8,.1,.4,.2],[.2,.3,.9,.1],[.1,.7,.2,.4]],labels=["blue","car","fast"];let step=0;function draw(){document.getElementById("matrix").innerHTML=values.map((row,i)=>"<b>"+labels[i]+"</b>"+row.map((v,j)=>"<span class='"+(i<=step&&j===row.indexOf(Math.max(...row))?"win":"")+"'>"+v.toFixed(1)+"</span>").join("")).join("");document.getElementById("formula").textContent="MaxSim: "+values.slice(0,step+1).map(row=>Math.max(...row).toFixed(1)).join(" + ");document.getElementById("state").textContent="query token "+(step+1)+" / 3";step=(step+1)%3}draw();setInterval(draw,950)

Late-interaction retrieval encodes queries and documents as token vectors. At search time, it takes the best document-token match for each query token and sums those maxima.

This preserves fine-grained clues that a single document vector can lose. Storing token vectors and comparing many pairs increases index size and compute cost.

When to use

Use it when each detail in a query should contribute to document relevance.

Open as page ↗