터보퀀트

TurboQuant

벡터를 저비트 표현으로 압축해 검색용 저장 공간을 줄입니다.

···
html
<div class="v"><header><b>VECTOR COMPRESSION</b><span id="state"></span></header><main><div class="vectors" id="vectors"></div><div class="footnote" id="footnote"></div></main><footer>storage ↓ · approximation ↑</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} .vectors{height:68%;display:flex;align-items:center;justify-content:space-around;gap:8px}.vector{width:44%;text-align:center;color:var(--muted);font-size:.8em}.vector div{display:flex;justify-content:center;gap:2px;margin-top:7px}.vector i{display:block;width:10px;height:34px;background:var(--accent);border-radius:3px;transition:height .3s}.vector.short i{width:16px;background:var(--accent-3)}.footnote{text-align:center;color:var(--accent);font:600 .85em ui-monospace,monospace}
js
let n=0;function draw(){const a=[28,18,32,22,30,14,26,20],b=[24,16,28,24];document.getElementById("vectors").innerHTML="<div class=vector>original<div>"+a.map(x=>"<i style=\"height:"+x+"px\"></i>").join("")+"</div></div><div class=\"vector short\">compressed<div>"+b.map(x=>"<i style=\"height:"+(x+(n?3:0))+"px\"></i>").join("")+"</div></div>";document.getElementById("footnote").textContent=n?"fewer codes; compare approximate distances":"many values; compare original distances";document.getElementById("state").textContent=n?"low-bit":"original";n=1-n}draw();setInterval(draw,1350)

TurboQuant는 벡터 검색에서 쓰는 고차원 수치 표현을 더 적은 비트로 저장하기 위한 양자화 방법입니다. 먼저 회전과 양자화로 값을 압축하고, 잔여 오차를 별도 단계에서 다룹니다.

압축은 메모리 비용을 줄이지만 거리 비교에 근사 오차를 만듭니다. 데모는 실제 알고리즘 수치를 재현하지 않고, 비트 수가 줄 때 원본과 압축 표현이 달라지는 원리를 시각화합니다.

언제 쓰나

벡터 인덱스 메모리와 검색 품질 사이의 절충을 이해할 때 씁니다.

페이지로 열기 ↗