<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Braincache - Seminar</title>
        <link>https://teddynote-lab.github.io/brain-cache/seminar</link>
        <description>팀 내부 세미나 발표자료 및 스터디 정리</description>
        <lastBuildDate>Fri, 27 Mar 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>ko</language>
        <item>
            <title><![CDATA[SEISMIC: Learned Sparse Retrieval을 위한 효율적 역색인 구조]]></title>
            <link>https://teddynote-lab.github.io/brain-cache/seminar/seismic-efficient-inverted-indexes-for-approximate-retrieval-over-lsr</link>
            <guid>https://teddynote-lab.github.io/brain-cache/seminar/seismic-efficient-inverted-indexes-for-approximate-retrieval-over-lsr</guid>
            <pubDate>Fri, 27 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[SIGIR 2024 논문 리뷰 — LSR 벡터의 Concentration of Importance를 활용하여 기존 대비 100배 이상 빠른 근사 검색을 달성하는 SEISMIC 알고리즘]]></description>
            <content:encoded><![CDATA[<blockquote>
<p><strong>논문</strong>: Bruch et al., <em>"Efficient Inverted Indexes for Approximate Retrieval over Learned Sparse Representations"</em>, SIGIR 2024 (<a href="https://arxiv.org/abs/2404.18812" target="_blank" rel="noopener noreferrer" class="">arXiv:2404.18812</a>)</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tldr">TL;DR<a href="https://teddynote-lab.github.io/brain-cache/seminar/seismic-efficient-inverted-indexes-for-approximate-retrieval-over-lsr#tldr" class="hash-link" aria-label="TL;DR에 대한 직접 링크" title="TL;DR에 대한 직접 링크" translate="no">​</a></h2>
<blockquote>
<p>Splade 같은 Learned Sparse Representation(LSR) 모델은 해석 가능한 희소 벡터를 생성하지만, 기존 역색인(WAND/MaxScore)으로는 쿼리당 약 100ms가 걸려 실시간 서비스가 어렵습니다. SEISMIC은 LSR 벡터의 "소수 좌표에 L1 mass가 집중되는 현상"을 발견하고, 이를 활용한 Static Pruning + Geometric Blocking + Summary Vector 기반의 새로운 인덱스 구조를 제안하여, 95% 정확도에서 <strong>303μs</strong>(기존 대비 100~330배 빠름)의 검색 속도를 달성합니다.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="배경-lsr의-등장과-역색인의-한계">배경: LSR의 등장과 역색인의 한계<a href="https://teddynote-lab.github.io/brain-cache/seminar/seismic-efficient-inverted-indexes-for-approximate-retrieval-over-lsr#%EB%B0%B0%EA%B2%BD-lsr%EC%9D%98-%EB%93%B1%EC%9E%A5%EA%B3%BC-%EC%97%AD%EC%83%89%EC%9D%B8%EC%9D%98-%ED%95%9C%EA%B3%84" class="hash-link" aria-label="배경: LSR의 등장과 역색인의 한계에 대한 직접 링크" title="배경: LSR의 등장과 역색인의 한계에 대한 직접 링크" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="information-retrieval-파이프라인">Information Retrieval 파이프라인<a href="https://teddynote-lab.github.io/brain-cache/seminar/seismic-efficient-inverted-indexes-for-approximate-retrieval-over-lsr#information-retrieval-%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8" class="hash-link" aria-label="Information Retrieval 파이프라인에 대한 직접 링크" title="Information Retrieval 파이프라인에 대한 직접 링크" translate="no">​</a></h3>
<p>First-stage Retrieval은 수백만~수십억 문서에서 관련 후보를 밀리초 내에 추출하는 단계입니다. 이후 Cross-encoder 등의 Re-ranker가 정밀하게 재순위화합니다.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="dense-vs-sparse-retrieval">Dense vs Sparse Retrieval<a href="https://teddynote-lab.github.io/brain-cache/seminar/seismic-efficient-inverted-indexes-for-approximate-retrieval-over-lsr#dense-vs-sparse-retrieval" class="hash-link" aria-label="Dense vs Sparse Retrieval에 대한 직접 링크" title="Dense vs Sparse Retrieval에 대한 직접 링크" translate="no">​</a></h3>

























<table><thead><tr><th>구분</th><th>Dense (DPR, ColBERT)</th><th>Sparse (BM25, Splade)</th></tr></thead><tbody><tr><td>벡터 차원</td><td>768차원 실수 벡터</td><td>30,000차원 희소 벡터</td></tr><tr><td>인덱스</td><td>HNSW, IVF 등 ANN</td><td>역색인 (Inverted Index)</td></tr><tr><td>장점</td><td>의미적 매칭</td><td>해석 가능성</td></tr></tbody></table>
<p><strong>Learned Sparse Retrieval (LSR)</strong> 은 두 장점을 결합합니다. BERT 기반 모델이 희소 벡터를 출력하되, 원래 쿼리에 없던 단어("paris" 등)도 활성화하여 어휘 불일치 문제를 해결합니다.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="기존-역색인의-문제">기존 역색인의 문제<a href="https://teddynote-lab.github.io/brain-cache/seminar/seismic-efficient-inverted-indexes-for-approximate-retrieval-over-lsr#%EA%B8%B0%EC%A1%B4-%EC%97%AD%EC%83%89%EC%9D%B8%EC%9D%98-%EB%AC%B8%EC%A0%9C" class="hash-link" aria-label="기존 역색인의 문제에 대한 직접 링크" title="기존 역색인의 문제에 대한 직접 링크" translate="no">​</a></h3>
<p>BM25에서 잘 작동하는 Dynamic Pruning(WAND/MaxScore)이 LSR에서 실패하는 이유:</p>
<ul>
<li class=""><strong>쿼리 길이</strong>: BM25는 2~5 단어, Splade는 약 43개 non-zero 좌표</li>
<li class=""><strong>리스트 분포</strong>: Zipfian이 아닌 비교적 균일한 분포</li>
<li class=""><strong>가중치</strong>: 정수가 아닌 실수값</li>
</ul>
<p>결과적으로 최적화된 역색인 엔진(Pisa)에서도 Splade 검색에 쿼리당 약 100ms가 소요됩니다.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="핵심-관찰-concentration-of-importance">핵심 관찰: Concentration of Importance<a href="https://teddynote-lab.github.io/brain-cache/seminar/seismic-efficient-inverted-indexes-for-approximate-retrieval-over-lsr#%ED%95%B5%EC%8B%AC-%EA%B4%80%EC%B0%B0-concentration-of-importance" class="hash-link" aria-label="핵심 관찰: Concentration of Importance에 대한 직접 링크" title="핵심 관찰: Concentration of Importance에 대한 직접 링크" translate="no">​</a></h2>
<p>논문의 핵심 발견은 LSR 벡터에서 <strong>L1 mass가 소수의 좌표에 집중</strong>된다는 것입니다.</p>
<ul>
<li class=""><strong>쿼리</strong>: 상위 10개 좌표 → 전체 L1 mass의 약 75%</li>
<li class=""><strong>문서</strong>: 상위 50개 좌표 → 전체 L1 mass의 약 75%</li>
</ul>
<p>이 성질을 <strong>alpha-mass subvector</strong>(L1 mass의 alpha 비율을 담는 최소 좌표 집합)로 정의하며, 양쪽에서 상위 좌표만 사용해도 inner product의 90~98%가 보존됩니다.</p>
<p>이 관찰에서 세 가지 설계 원칙이 도출됩니다:</p>
<ol>
<li class=""><strong>Static Pruning</strong> — 각 리스트에서 가중치 높은 문서만 유지</li>
<li class=""><strong>Summary Vectors</strong> — 블록의 상위 좌표만으로 빠른 상한 추정</li>
<li class=""><strong>Query Truncation</strong> — 쿼리의 상위 좌표만 순회</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="seismic-알고리즘">SEISMIC 알고리즘<a href="https://teddynote-lab.github.io/brain-cache/seminar/seismic-efficient-inverted-indexes-for-approximate-retrieval-over-lsr#seismic-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98" class="hash-link" aria-label="SEISMIC 알고리즘에 대한 직접 링크" title="SEISMIC 알고리즘에 대한 직접 링크" translate="no">​</a></h2>
<p><strong>S</strong>pilled clustering of inverted lists with <strong>E</strong>fficient <strong>I</strong>ndexing and <strong>S</strong>ummaries for <strong>M</strong>aximum <strong>I</strong>nner product searc<strong>C</strong>h</p>
<p>Inverted Index(후보 문서 빠른 결정)와 Forward Index(정확한 IP 계산)를 결합한 구조입니다.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-1-static-pruning">Step 1: Static Pruning<a href="https://teddynote-lab.github.io/brain-cache/seminar/seismic-efficient-inverted-indexes-for-approximate-retrieval-over-lsr#step-1-static-pruning" class="hash-link" aria-label="Step 1: Static Pruning에 대한 직접 링크" title="Step 1: Static Pruning에 대한 직접 링크" translate="no">​</a></h3>
<p>각 posting list에서 가중치 기준 <strong>상위 λ개 문서만 유지</strong> (MS MARCO 기준 λ=6,000). Concentration of Importance에 의해 높은 가중치 문서가 IP에 가장 많이 기여하므로 정확도 손실이 미미합니다.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-2-geometric-blocking">Step 2: Geometric Blocking<a href="https://teddynote-lab.github.io/brain-cache/seminar/seismic-efficient-inverted-indexes-for-approximate-retrieval-over-lsr#step-2-geometric-blocking" class="hash-link" aria-label="Step 2: Geometric Blocking에 대한 직접 링크" title="Step 2: Geometric Blocking에 대한 직접 링크" translate="no">​</a></h3>
<p>Pruning 후 남은 각 리스트를 <strong>β개 블록으로 K-Means 클러스터링</strong> (β=400). 벡터가 유사한 문서끼리 묶어, Summary 벡터의 상한이 더 tight해집니다. 1-pass Shallow K-Means로 빠르게 수행합니다.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-3-summary-vectors">Step 3: Summary Vectors<a href="https://teddynote-lab.github.io/brain-cache/seminar/seismic-efficient-inverted-indexes-for-approximate-retrieval-over-lsr#step-3-summary-vectors" class="hash-link" aria-label="Step 3: Summary Vectors에 대한 직접 링크" title="Step 3: Summary Vectors에 대한 직접 링크" translate="no">​</a></h3>
<p>각 블록에서 좌표별 최대값을 취한 뒤, <strong>alpha-mass subvector(상위 40% L1 mass)만 유지</strong>하고 <strong>8-bit scalar quantization</strong>으로 메모리를 4배 절감합니다. 이 Summary는 conservative(상한)하므로 안전한 pruning이 가능합니다.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="query-processing">Query Processing<a href="https://teddynote-lab.github.io/brain-cache/seminar/seismic-efficient-inverted-indexes-for-approximate-retrieval-over-lsr#query-processing" class="hash-link" aria-label="Query Processing에 대한 직접 링크" title="Query Processing에 대한 직접 링크" translate="no">​</a></h3>
<ol>
<li class="">쿼리의 상위 <code>query_cut</code>개 좌표 선택</li>
<li class="">각 좌표의 inverted list에서 블록 순회</li>
<li class="">Summary와 쿼리의 IP가 현재 top-k heap 최솟값 × <code>heap_factor</code>보다 크면 블록 방문</li>
<li class="">Forward Index에서 정확한 IP 계산 → heap 업데이트</li>
</ol>
<p><code>query_cut</code>과 <code>heap_factor</code> 두 파라미터로 동일 인덱스에서 다양한 정확도-속도 트레이드오프를 탐색할 수 있습니다.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="실험-결과">실험 결과<a href="https://teddynote-lab.github.io/brain-cache/seminar/seismic-efficient-inverted-indexes-for-approximate-retrieval-over-lsr#%EC%8B%A4%ED%97%98-%EA%B2%B0%EA%B3%BC" class="hash-link" aria-label="실험 결과에 대한 직접 링크" title="실험 결과에 대한 직접 링크" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="accuracy-vs-latency-ms-marco-splade">Accuracy vs Latency (MS MARCO, Splade)<a href="https://teddynote-lab.github.io/brain-cache/seminar/seismic-efficient-inverted-indexes-for-approximate-retrieval-over-lsr#accuracy-vs-latency-ms-marco-splade" class="hash-link" aria-label="Accuracy vs Latency (MS MARCO, Splade)에 대한 직접 링크" title="Accuracy vs Latency (MS MARCO, Splade)에 대한 직접 링크" translate="no">​</a></h3>








































<table><thead><tr><th>방법</th><th>95% Accuracy 기준 Latency</th><th>SEISMIC 대비</th></tr></thead><tbody><tr><td><strong>SEISMIC</strong></td><td><strong>303 μs</strong></td><td><strong>1x</strong></td></tr><tr><td>PyAnn</td><td>1,016 μs</td><td>3.4x 느림</td></tr><tr><td>GrassRMA (BigANN 2023 우승)</td><td>1,271 μs</td><td>4.2x 느림</td></tr><tr><td>SparseIvf</td><td>10,254 μs</td><td>34x 느림</td></tr><tr><td>Ioqp</td><td>31,843 μs</td><td>105x 느림</td></tr><tr><td>Pisa (정확 검색)</td><td>100,325 μs</td><td>331x 느림</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="index-size--build-time">Index Size &amp; Build Time<a href="https://teddynote-lab.github.io/brain-cache/seminar/seismic-efficient-inverted-indexes-for-approximate-retrieval-over-lsr#index-size--build-time" class="hash-link" aria-label="Index Size &amp; Build Time에 대한 직접 링크" title="Index Size &amp; Build Time에 대한 직접 링크" translate="no">​</a></h3>

























<table><thead><tr><th>방법</th><th>빌드 시간</th><th>인덱스 크기</th></tr></thead><tbody><tr><td><strong>SEISMIC</strong></td><td><strong>5분</strong></td><td><strong>2,500 MiB</strong></td></tr><tr><td>PyAnn</td><td>45분</td><td>-</td></tr><tr><td>GrassRMA</td><td>120분</td><td>4,100 MiB</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="직접-실험-핵심-포인트">직접 실험: 핵심 포인트<a href="https://teddynote-lab.github.io/brain-cache/seminar/seismic-efficient-inverted-indexes-for-approximate-retrieval-over-lsr#%EC%A7%81%EC%A0%91-%EC%8B%A4%ED%97%98-%ED%95%B5%EC%8B%AC-%ED%8F%AC%EC%9D%B8%ED%8A%B8" class="hash-link" aria-label="직접 실험: 핵심 포인트에 대한 직접 링크" title="직접 실험: 핵심 포인트에 대한 직접 링크" translate="no">​</a></h2>
<p>MS MARCO Splade 데이터셋으로 직접 실험한 결과:</p>
<ul>
<li class=""><strong>Concentration of Importance 확인</strong>: 쿼리 상위 10개 좌표 → 약 75% L1 mass (논문과 일치)</li>
<li class=""><strong>Sub-millisecond Latency</strong>: 95% recall에서 약 300μs 달성</li>
<li class=""><strong>하이퍼파라미터 분석</strong>: <code>query_cut</code> 증가 시 recall이 빠르게 수렴, <code>heap_factor</code>는 pruning 강도를 세밀하게 조절</li>
<li class=""><strong>MRR@10</strong>: ground truth 대비 95% 이상의 검색 품질 유지</li>
</ul>
<blockquote>
<p>실험 코드: <a href="https://github.com/TusKANNy/seismic" target="_blank" rel="noopener noreferrer" class="">seismic-experiment.ipynb</a></p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="시사점">시사점<a href="https://teddynote-lab.github.io/brain-cache/seminar/seismic-efficient-inverted-indexes-for-approximate-retrieval-over-lsr#%EC%8B%9C%EC%82%AC%EC%A0%90" class="hash-link" aria-label="시사점에 대한 직접 링크" title="시사점에 대한 직접 링크" translate="no">​</a></h2>
<ul>
<li class="">Splade 등 LSR 모델의 <strong>실시간 서비스 가능성</strong>을 열었음</li>
<li class="">E-Splade 같은 효율성을 위한 정확도 타협이 더 이상 불필요</li>
<li class="">기존 역색인 인프라 위에 구축 가능 (Rust 오픈소스 공개)</li>
<li class="">Dense Retrieval의 ANN 인덱스(HNSW 등)에 대한 <strong>Sparse 진영의 경쟁력 있는 대안</strong></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="references">References<a href="https://teddynote-lab.github.io/brain-cache/seminar/seismic-efficient-inverted-indexes-for-approximate-retrieval-over-lsr#references" class="hash-link" aria-label="References에 대한 직접 링크" title="References에 대한 직접 링크" translate="no">​</a></h2>
<ul>
<li class="">Bruch et al., "Efficient Inverted Indexes for Approximate Retrieval over Learned Sparse Representations", SIGIR 2024</li>
<li class=""><a href="https://github.com/TusKANNy/seismic" target="_blank" rel="noopener noreferrer" class="">GitHub: TusKANNy/seismic</a></li>
<li class=""><a href="https://arxiv.org/abs/2404.18812" target="_blank" rel="noopener noreferrer" class="">arXiv:2404.18812</a></li>
</ul>]]></content:encoded>
            <category>Retrieval</category>
            <category>Seminar</category>
        </item>
    </channel>
</rss>