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

Late-interaction retrieval

질의 토큰마다 가장 잘 맞는 문서 토큰을 찾아 점수를 합칩니다.

···
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)

지연 상호작용 검색은 질의와 문서를 각각 토큰 벡터로 인코딩합니다. 검색 시 질의 토큰마다 문서 토큰과 유사도를 비교하고 가장 높은 값을 골라 합칩니다.

문서 전체를 벡터 하나로 압축하는 방식보다 단어별 단서를 보존합니다. 대신 토큰 벡터를 저장하고 여러 비교를 수행해야 하므로 인덱스 크기와 계산 비용을 관리해야 합니다.

언제 쓰나

검색어의 여러 세부 단서가 각각 문서와 맞는지 평가할 때 씁니다.

페이지로 열기 ↗