<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://swinecoder101.github.io/hvec/feed.xml" rel="self" type="application/atom+xml" /><link href="https://swinecoder101.github.io/hvec/" rel="alternate" type="text/html" /><updated>2026-10-13T17:16:07+00:00</updated><id>https://swinecoder101.github.io/hvec/feed.xml</id><title type="html">hvec</title><subtitle>Benchmarking homomorphic vector compression against real RAG pipelines, in Rust.</subtitle><entry><title type="html">Similarity on encrypted vectors: the cost model, before any code</title><link href="https://swinecoder101.github.io/hvec/blog/2026/10/12/encrypted-similarity-cost-model/" rel="alternate" type="text/html" title="Similarity on encrypted vectors: the cost model, before any code" /><published>2026-10-12T18:00:00+00:00</published><updated>2026-10-12T18:00:00+00:00</updated><id>https://swinecoder101.github.io/hvec/blog/2026/10/12/encrypted-similarity-cost-model</id><content type="html" xml:base="https://swinecoder101.github.io/hvec/blog/2026/10/12/encrypted-similarity-cost-model/"><![CDATA[<p>The roadmap’s last track is similarity search on <em>encrypted</em> embeddings: a codec whose
compressed-domain operation is exact, where the thing it buys is not bytes but privacy. This note
works out what such a codec costs before writing any of it, because the arithmetic decides
whether it belongs in hvec’s <code class="language-plaintext highlighter-rouge">Codec</code> trait at all. The short answer is that it does not, yet, and
the reasons are instructive.</p>

<h2 id="the-scheme">The scheme</h2>

<p>CKKS [1] is the homomorphic encryption scheme built for approximate arithmetic on real numbers,
which is what a dot product of embeddings is. A ciphertext holds a vector of up to <code class="language-plaintext highlighter-rouge">N/2</code> complex
“slots” (so <code class="language-plaintext highlighter-rouge">N/2</code> reals), where <code class="language-plaintext highlighter-rouge">N</code> is the ring dimension, and supports slot-wise addition and
multiplication plus rotations of the slot vector. A dot product of two encrypted 384-dim vectors
is one slot-wise multiply followed by <code class="language-plaintext highlighter-rouge">log2(384)</code> rotate-and-add steps to sum the slots. The
result is an encrypted scalar; whoever holds the secret key decrypts it.</p>

<p>That is a homomorphic codec in exactly hvec’s sense: <code class="language-plaintext highlighter-rouge">encode</code> is encryption, <code class="language-plaintext highlighter-rouge">score</code> is the
encrypted dot product, and <code class="language-plaintext highlighter-rouge">decode</code> is decryption. The shape fits the trait. The numbers do not.</p>

<h2 id="sizes">Sizes</h2>

<p>A CKKS ciphertext is two polynomials of degree <code class="language-plaintext highlighter-rouge">N</code> with coefficients modulo a product of primes
<code class="language-plaintext highlighter-rouge">q</code>. For a dot product followed by one rescale, with the precision an embedding needs, a common
parameter set is <code class="language-plaintext highlighter-rouge">N = 8192</code> and <code class="language-plaintext highlighter-rouge">log2(q) ≈ 200</code> bits, giving <code class="language-plaintext highlighter-rouge">2 × 8192 × 200 / 8 ≈ 410 KB</code> per
ciphertext [2]. One ciphertext packs <code class="language-plaintext highlighter-rouge">N/2 = 4096</code> reals, so it can hold about 10 embeddings of
384 dimensions, or one with 3,712 dimensions of padding.</p>

<table>
  <thead>
    <tr>
      <th>representation</th>
      <th style="text-align: right">bytes per 384-dim vector</th>
      <th style="text-align: right">relative to f32</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>f32</td>
      <td style="text-align: right">1,536</td>
      <td style="text-align: right">1×</td>
    </tr>
    <tr>
      <td>int8 (hvec)</td>
      <td style="text-align: right">392</td>
      <td style="text-align: right">0.26×</td>
    </tr>
    <tr>
      <td>binary (hvec)</td>
      <td style="text-align: right">48</td>
      <td style="text-align: right">0.03×</td>
    </tr>
    <tr>
      <td>CKKS, 10 vectors packed per ciphertext</td>
      <td style="text-align: right">≈ 41,000</td>
      <td style="text-align: right">27× <strong>larger</strong></td>
    </tr>
    <tr>
      <td>CKKS, one vector per ciphertext</td>
      <td style="text-align: right">≈ 410,000</td>
      <td style="text-align: right">270× larger</td>
    </tr>
  </tbody>
</table>

<p>The first thing the encryption track does is invert hvec’s axis: every other codec makes the
store smaller, this one makes it 27 to 270 times bigger. “Compression” is the wrong word, and
the write-up should say so.</p>

<h2 id="time">Time</h2>

<p>Published library benchmarks put a CKKS ciphertext multiply with relinearisation and a
rotation each at roughly a millisecond at <code class="language-plaintext highlighter-rouge">N = 8192</code> on one core, with the exact figures
depending on the library and the depth budget. A packed dot product against 10 stored vectors
is one multiply and nine rotations: on the order of 10 ms. A brute-force scan of the
8,036-chunk SciFact collection is then about 800 packed operations, or several seconds per
query. hvec’s f32 baseline scans the same collection in 4 ms, int8 in 2 ms.</p>

<table>
  <thead>
    <tr>
      <th>scan of 8,036 chunks, one query</th>
      <th style="text-align: right">time</th>
      <th style="text-align: right">ratio to f32</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>f32, decoded (hvec baseline)</td>
      <td style="text-align: right">4 ms</td>
      <td style="text-align: right">1×</td>
    </tr>
    <tr>
      <td>int8 compressed-domain (hvec)</td>
      <td style="text-align: right">2 ms</td>
      <td style="text-align: right">0.5×</td>
    </tr>
    <tr>
      <td>CKKS packed dot products, one core (estimate)</td>
      <td style="text-align: right">5 to 10 s</td>
      <td style="text-align: right">1,000 to 2,500×</td>
    </tr>
  </tbody>
</table>

<p>Three orders of magnitude slower and 27× bigger, for exact scores. There is a fourth cost: the
query must also be encrypted under the same key, and top-k selection cannot be done on
encrypted scores without further machinery (comparison under CKKS is itself an approximate,
multi-level circuit), so the server returns <em>all</em> encrypted scores and the client decrypts and
ranks them. The bandwidth per query is then 8,036 encrypted scalars, which with packing is 800
ciphertexts, about 330 MB. That is the figure that ends the discussion for anything interactive.</p>

<h2 id="what-would-make-it-interesting">What would make it interesting</h2>

<p>The cost model is not hopeless, only mismatched with brute-force scan. Three changes move it:</p>

<ul>
  <li><strong>Ask a different question.</strong> The agent-memory loop writes often and reads rarely from a
small store (hundreds of entries, not thousands). At 100 memories the scan is 10 packed
operations and 10 ciphertexts back: tens of milliseconds and 4 MB. Encrypted memory for an
agent whose host must not read its memories is a plausible setting.</li>
  <li><strong>Quantize first, then encrypt.</strong> CKKS over sign bits or int8 codes needs far less precision,
which means smaller <code class="language-plaintext highlighter-rouge">q</code>, smaller ciphertexts and shallower circuits. A SimHash-style [4]
encrypted Hamming distance is a well-studied primitive. The codec composition hvec already has
(<code class="language-plaintext highlighter-rouge">mrl&lt;k&gt;+&lt;codec&gt;</code>) is the right shape: <code class="language-plaintext highlighter-rouge">enc+binary</code>.</li>
  <li><strong>Index, don’t scan.</strong> Clustering (as in IVF or PQ [3]) on plaintext centroids with encrypted
residuals confines the encrypted work to one cluster. That leaks which cluster a query lands
in, which is a privacy decision, not an engineering one.</li>
</ul>

<h2 id="decision">Decision</h2>

<p>No CKKS codec in hvec for now. The measurement harness is built around the claim that a codec’s
cost is bytes and the question is whether the answers change; an encrypted codec’s cost is time
and bandwidth and its answers do not change by construction, so almost nothing in <code class="language-plaintext highlighter-rouge">bench recall</code>
or <code class="language-plaintext highlighter-rouge">bench run</code> would measure anything about it. If the track resumes, it starts with the
agent-memory benchmark at a hundred entries and a quantize-then-encrypt codec, where the numbers
above say the costs land within reach, and with a <code class="language-plaintext highlighter-rouge">Codec</code> extension that lets <code class="language-plaintext highlighter-rouge">score</code> return an
opaque value a client decrypts, because the current trait’s <code class="language-plaintext highlighter-rouge">f32</code> result is the one assumption
an encrypted codec cannot meet.</p>

<h2 id="references">References</h2>
<ol class="references">
  <li id="ref-cheon2017ckks">Jung Hee Cheon, Andrey Kim, Miran Kim, Yongsoo Song. <a href="https://eprint.iacr.org/2016/421">Homomorphic Encryption for Arithmetic of Approximate Numbers</a>. <em>ASIACRYPT</em>, 2017. <a class="ref-lib" href="/hvec/references/#cheon2017ckks" title="Open in the references library">library</a></li>
  <li id="ref-gentry2009fhe">Craig Gentry. <a href="https://doi.org/10.1145/1536414.1536440">Fully Homomorphic Encryption Using Ideal Lattices</a>. <em>ACM Symposium on Theory of Computing (STOC)</em>, 2009. <a class="ref-lib" href="/hvec/references/#gentry2009fhe" title="Open in the references library">library</a></li>
  <li id="ref-jegou2011pq">Hervé Jégou, Matthijs Douze, Cordelia Schmid. <a href="https://doi.org/10.1109/TPAMI.2010.57">Product Quantization for Nearest Neighbor Search</a>. <em>IEEE Transactions on Pattern Analysis and Machine Intelligence 33(1)</em>, 2011. <a class="ref-lib" href="/hvec/references/#jegou2011pq" title="Open in the references library">library</a></li>
  <li id="ref-charikar2002simhash">Moses S. Charikar. <a href="https://doi.org/10.1145/509907.509965">Similarity Estimation Techniques from Rounding Algorithms</a>. <em>ACM Symposium on Theory of Computing (STOC)</em>, 2002. <a class="ref-lib" href="/hvec/references/#charikar2002simhash" title="Open in the references library">library</a></li>
</ol>
<p><small>Terms used above are defined in the <a href="/hvec/glossary/">glossary</a>.</small></p>]]></content><author><name></name></author><summary type="html"><![CDATA[The roadmap’s last track is similarity search on encrypted embeddings: a codec whose compressed-domain operation is exact, where the thing it buys is not bytes but privacy. This note works out what such a codec costs before writing any of it, because the arithmetic decides whether it belongs in hvec’s Codec trait at all. The short answer is that it does not, yet, and the reasons are instructive.]]></summary></entry><entry><title type="html">Two layers of compression, and which one the agent never sees</title><link href="https://swinecoder101.github.io/hvec/blog/2026/10/08/two-layers-of-compression/" rel="alternate" type="text/html" title="Two layers of compression, and which one the agent never sees" /><published>2026-10-08T12:00:00+00:00</published><updated>2026-10-08T12:00:00+00:00</updated><id>https://swinecoder101.github.io/hvec/blog/2026/10/08/two-layers-of-compression</id><content type="html" xml:base="https://swinecoder101.github.io/hvec/blog/2026/10/08/two-layers-of-compression/"><![CDATA[<p>A fair objection to hvec goes like this. An embedding is already a compressed representation of
a passage. The text is what a human reads; the vector is what the retrieval system reads. So
quantizing embeddings is compressing something that was compressed once already. What is the
second layer for, and is it even measuring the right thing?</p>

<p>The objection is right about the premise and it sharpens the project rather than undermining it.</p>

<h2 id="layer-one-the-embedding-compresses-an-operation-not-bytes">Layer one: the embedding compresses an operation, not bytes</h2>

<p>Take a 200-word chunk. As UTF-8 it is roughly 1 KB. Its embedding from a 1536-dimension model is
1536 × 4 bytes, about 6 KB. In storage terms the embedding model has made the data six times
larger. Nobody would call that compression.</p>

<p>What the embedding compresses is the cost of a question: are these two passages about the same
thing? Answering that from text means reading and understanding both. Answering it from vectors
is one dot product. The embedding model keeps exactly the information needed for that one
operation and discards the rest, including, mostly, the ability to read the passage back. That is
precisely the definition of homomorphic compression used throughout this project: preserve one
operation on the compressed form, give up everything else.</p>

<p>“Mostly” is doing some work there. Inversion attacks have shown that short texts can be
reconstructed from their embeddings almost word for word [1]. An embedding is a literal
compressed representation of the passage, not an opaque fingerprint, and it should be handled
with the same care as the text.</p>

<h2 id="layer-two-quantization-compresses-the-same-operation-and-returns-the-bytes">Layer two: quantization compresses the same operation and returns the bytes</h2>

<p>hvec’s codecs take the vector the embedding model produced and preserve the same operation,
inner product or cosine, while shrinking the representation 4× to 32×. Product quantization [2]
is the canonical example: the stored vector becomes a handful of byte codes and the distance is
computed by table lookups on those codes, never on a reconstructed vector.</p>

<p>So the stack is two homomorphic codecs in series, both preserving similarity. The interesting
part is that their error models are different in kind.</p>

<ul>
  <li>The embedding’s error is semantic. It is whatever the model thinks “similar” means, and it
cannot be measured against the text in any clean way. There is no ground truth vector.</li>
  <li>The quantizer’s error is geometric. The f32 vector exists, so the quantizer’s score can be
compared with the exact score for every pair. Recall against f32 and mean score error are
well defined.</li>
</ul>

<p>This is why the f32 baseline sits at the centre of hvec. It is the boundary between the two
layers. Everything below it is measured exactly; everything above it is measured only through the
answer.</p>

<h2 id="the-layers-interact-which-is-why-the-embedding-model-is-a-benchmark-axis">The layers interact, which is why the embedding model is a benchmark axis</h2>

<p>Quantization can only damage information the embedding kept. If a model spreads meaning evenly
across its dimensions, a uniform int8 codec treats it fairly. If a model packs most of its
meaning into a few leading dimensions, as Matryoshka-trained models deliberately do [3], the same
codec spends precision on dimensions that carry little and the loss lands unevenly. Two models
with the same dimension can react very differently to the same codec, and the right codec for
one may be the wrong one for the other. ScaNN made a related point about measuring quantization
by its effect on ranking rather than on reconstruction [4]; the same logic says you must measure
it per embedding model.</p>

<p>That is the reason the benchmark matrix is embedding model × codec × chat model × dataset, and
not codec alone.</p>

<h2 id="the-agent-never-reads-a-vector">The agent never reads a vector</h2>

<p>Here is the part the objection gets slightly wrong, and it matters for what hvec claims to
measure. In a retrieval-augmented pipeline [5] the vector is the <strong>key</strong>: it is what you search
by. The chunk text is the <strong>payload</strong>: it is what comes back. The retrieval step scores the query
against stored keys and returns the payloads for the best matches. The agent reads those
payloads, as plain text, in its context window.</p>

<p>So no, the agent does not read from codecs instead of embeddings. It reads neither. Switching
from f32 vectors to int8 codes changes how the keys are stored and how the scores are computed.
It does not change the format of anything the model sees. What it can change is <em>which</em> passages
come back, and that is the only route by which compression can alter the answer.</p>

<p>This is a useful boundary to draw. hvec compresses the key. Compressing the payload, by
summarising or pruning passages before the model reads them [6], is a third layer that changes
what the agent sees rather than what it finds. It is a legitimate axis with its own trade-offs,
and it is out of scope for hvec today. Keeping the two apart makes the question hvec answers
precise: does compressing the retrieval key change what gets retrieved enough to change the
answer, and does that depend on which model is answering?</p>

<h2 id="an-experiment-that-falls-out-of-this">An experiment that falls out of this</h2>

<p>If both layers compress the same operation, you can collapse them. Pick an embedding model that
emits int8 or binary vectors natively and compare it against post-hoc quantization of an f32
model to the same byte budget, on the same questions, with the same chat model. If native
low-precision wins, the right codec is “none, change layer one”. If post-hoc wins, quantization
earns its place as a separate layer. Either result is worth publishing, and it will be one of the
first experiments on this site.</p>

<p>Terms used here are defined in the <a href="/hvec/glossary/">glossary</a>, including
new entries for <em>embedding as compression</em> and <em>key versus payload</em>.</p>

<h2 id="references">References</h2>
<ol class="references">
  <li id="ref-morris2023vec2text">John X. Morris, Volodymyr Kuleshov, Vitaly Shmatikov, Alexander M. Rush. <a href="https://arxiv.org/abs/2310.06816">Text Embeddings Reveal (Almost) As Much As Text</a>. <em>Conference on Empirical Methods in Natural Language Processing (EMNLP)</em>, 2023. <a class="ref-lib" href="/hvec/references/#morris2023vec2text" title="Open in the references library">library</a></li>
  <li id="ref-jegou2011pq">Hervé Jégou, Matthijs Douze, Cordelia Schmid. <a href="https://doi.org/10.1109/TPAMI.2010.57">Product Quantization for Nearest Neighbor Search</a>. <em>IEEE Transactions on Pattern Analysis and Machine Intelligence 33(1)</em>, 2011. <a class="ref-lib" href="/hvec/references/#jegou2011pq" title="Open in the references library">library</a></li>
  <li id="ref-kusupati2022mrl">Aditya Kusupati, Gantavya Bhatt, Aniket Rege, Matthew Wallingford, Aditya Sinha, Vivek Ramanujan, William Howard-Snyder, Kaifeng Chen, Sham Kakade, Prateek Jain, Ali Farhadi. <a href="https://arxiv.org/abs/2205.13147">Matryoshka Representation Learning</a>. <em>Advances in Neural Information Processing Systems (NeurIPS)</em>, 2022. <a class="ref-lib" href="/hvec/references/#kusupati2022mrl" title="Open in the references library">library</a></li>
  <li id="ref-guo2020scann">Ruiqi Guo, Philip Sun, Erik Lindgren, Quan Geng, David Simcha, Felix Chern, Sanjiv Kumar. <a href="https://arxiv.org/abs/1908.10396">Accelerating Large-Scale Inference with Anisotropic Vector Quantization</a>. <em>International Conference on Machine Learning (ICML)</em>, 2020. <a class="ref-lib" href="/hvec/references/#guo2020scann" title="Open in the references library">library</a></li>
  <li id="ref-lewis2020rag">Patrick Lewis, Ethan Perez, Aleksandra Piktus, Fabio Petroni, Vladimir Karpukhin, Naman Goyal, Heinrich Küttler, Mike Lewis, Wen-tau Yih, Tim Rocktäschel, Sebastian Riedel, Douwe Kiela. <a href="https://arxiv.org/abs/2005.11401">Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks</a>. <em>Advances in Neural Information Processing Systems (NeurIPS)</em>, 2020. <a class="ref-lib" href="/hvec/references/#lewis2020rag" title="Open in the references library">library</a></li>
  <li id="ref-jiang2023llmlingua">Huiqiang Jiang, Qianhui Wu, Chin-Yew Lin, Yuqing Yang, Lili Qiu. <a href="https://arxiv.org/abs/2310.05736">LLMLingua: Compressing Prompts for Accelerated Inference of Large Language Models</a>. <em>Conference on Empirical Methods in Natural Language Processing (EMNLP)</em>, 2023. <a class="ref-lib" href="/hvec/references/#jiang2023llmlingua" title="Open in the references library">library</a></li>
</ol>
<p><small>Terms used above are defined in the <a href="/hvec/glossary/">glossary</a>.</small></p>]]></content><author><name></name></author><summary type="html"><![CDATA[An embedding is already a lossy codec. hvec adds a second one. Here is what each layer compresses, how they interact, and why the agent reads text, not codes.]]></summary></entry><entry><title type="html">hvec: measuring vector compression where it matters</title><link href="https://swinecoder101.github.io/hvec/blog/2026/10/08/hello-hvec/" rel="alternate" type="text/html" title="hvec: measuring vector compression where it matters" /><published>2026-10-08T00:00:00+00:00</published><updated>2026-10-08T00:00:00+00:00</updated><id>https://swinecoder101.github.io/hvec/blog/2026/10/08/hello-hvec</id><content type="html" xml:base="https://swinecoder101.github.io/hvec/blog/2026/10/08/hello-hvec/"><![CDATA[<p>Vector databases quantize embeddings to save memory, and the papers that introduce those
quantizers, from product quantization [1] onward, report recall@k against an exact search. That is
the right metric for a search engine, and it is how the field benchmarks itself [4]. It is an
indirect metric for a retrieval-augmented generation (RAG) system [3], where the retrieved passages
are consumed by a language model that may or may not notice a slightly worse ranking. ScaNN made a
version of this argument one level down, measuring quantization error by its effect on ranking
rather than on reconstruction [2]. hvec moves it one level up, to the answer.</p>

<figure>
  <img src="/hvec/assets/homomorphic-compression.svg" width="960" alt="Animated diagram of homomorphic compression in a RAG and agent-memory loop" />
  <figcaption>The loop hvec measures. Memory and documents become f32 embeddings, a codec shrinks them, the query is scored directly on the compressed codes with no decode step, and the top passages enter the agent's context. The agent's new memory goes back through the same path. One-minute loop: the sequence plays in about thirteen seconds, then holds on the finished picture for forty-five before restarting; honours reduced-motion settings.</figcaption>
</figure>

<p>hvec exists to measure the direct thing: run the same questions through the same pipeline with
different codecs and different chat models, and compare the answers, the latency, and the token
cost. The benchmark is a matrix of embedding model × codec × chat model × dataset. Compression
behaviour depends on the embedding model. Tolerance to degraded retrieval depends on the chat
model. Both axes are recorded on every run.</p>

<h2 id="what-milestone-1-ships">What milestone 1 ships</h2>

<ul>
  <li>A Cargo workspace with a <code class="language-plaintext highlighter-rouge">Codec</code> trait whose <code class="language-plaintext highlighter-rouge">score</code> method works on the compressed form.
Only the f32 baseline exists so far; it is the thing every other codec will be measured against.</li>
  <li>Connectors for Anthropic, any OpenAI-compatible server (OpenAI, Ollama, vLLM), and local
ONNX embeddings (BGE small by default [6]), all behind named profiles in a TOML config.</li>
  <li>A SQLite store that scores through the codec by brute force. Deliberately no index such as
HNSW [5]: the point is to measure the codec, not the ANN structure.</li>
  <li>An interactive shell. Type <code class="language-plaintext highlighter-rouge">hvec</code>, point it at a folder with <code class="language-plaintext highlighter-rouge">/new docs ./docs</code>, ask questions,
switch models with <code class="language-plaintext highlighter-rouge">/model</code>, and every turn lands in a run log with timings, tokens, retrieved
chunk ids and the prompt version.</li>
</ul>

<h2 id="what-comes-next">What comes next</h2>

<p>Int8 and binary codecs selectable per collection, then product quantization, then a <code class="language-plaintext highlighter-rouge">bench</code>
command that runs a question set across the matrix and a <code class="language-plaintext highlighter-rouge">report</code> that summarises the log. The
first published experiment will be int8 and binary against f32 on a few hundred QA pairs with a
small local embedding model and two chat models. Generation-side scoring will start with exact
match and add faithfulness in the RAGAS sense [7], graded by a cheaper model with the usual
caveats about LLM judges [8].</p>

<p>Jargon used here is defined in the <a href="/hvec/glossary/">glossary</a>.</p>

<p>If that sounds useful, the repository is at
<a href="https://github.com/SwineCoder101/hvec">github.com/SwineCoder101/hvec</a> and contributions are
welcome.</p>

<h2 id="references">References</h2>
<ol class="references">
  <li id="ref-jegou2011pq">Hervé Jégou, Matthijs Douze, Cordelia Schmid. <a href="https://doi.org/10.1109/TPAMI.2010.57">Product Quantization for Nearest Neighbor Search</a>. <em>IEEE Transactions on Pattern Analysis and Machine Intelligence 33(1)</em>, 2011. <a class="ref-lib" href="/hvec/references/#jegou2011pq" title="Open in the references library">library</a></li>
  <li id="ref-guo2020scann">Ruiqi Guo, Philip Sun, Erik Lindgren, Quan Geng, David Simcha, Felix Chern, Sanjiv Kumar. <a href="https://arxiv.org/abs/1908.10396">Accelerating Large-Scale Inference with Anisotropic Vector Quantization</a>. <em>International Conference on Machine Learning (ICML)</em>, 2020. <a class="ref-lib" href="/hvec/references/#guo2020scann" title="Open in the references library">library</a></li>
  <li id="ref-lewis2020rag">Patrick Lewis, Ethan Perez, Aleksandra Piktus, Fabio Petroni, Vladimir Karpukhin, Naman Goyal, Heinrich Küttler, Mike Lewis, Wen-tau Yih, Tim Rocktäschel, Sebastian Riedel, Douwe Kiela. <a href="https://arxiv.org/abs/2005.11401">Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks</a>. <em>Advances in Neural Information Processing Systems (NeurIPS)</em>, 2020. <a class="ref-lib" href="/hvec/references/#lewis2020rag" title="Open in the references library">library</a></li>
  <li id="ref-aumuller2020annb">Martin Aumüller, Erik Bernhardsson, Alexander Faithfull. <a href="https://arxiv.org/abs/1807.05614">ANN-Benchmarks: A Benchmarking Tool for Approximate Nearest Neighbor Algorithms</a>. <em>Information Systems 87</em>, 2020. <a class="ref-lib" href="/hvec/references/#aumuller2020annb" title="Open in the references library">library</a></li>
  <li id="ref-malkov2020hnsw">Yury A. Malkov, Dmitry A. Yashunin. <a href="https://arxiv.org/abs/1603.09320">Efficient and Robust Approximate Nearest Neighbor Search Using Hierarchical Navigable Small World Graphs</a>. <em>IEEE Transactions on Pattern Analysis and Machine Intelligence 42(4)</em>, 2020. <a class="ref-lib" href="/hvec/references/#malkov2020hnsw" title="Open in the references library">library</a></li>
  <li id="ref-xiao2023bge">Shitao Xiao, Zheng Liu, Peitian Zhang, Niklas Muennighoff. <a href="https://arxiv.org/abs/2309.07597">C-Pack: Packed Resources For General Chinese Embeddings</a>. <em>arXiv:2309.07597</em>, 2023. <a class="ref-lib" href="/hvec/references/#xiao2023bge" title="Open in the references library">library</a></li>
  <li id="ref-es2023ragas">Shahul Es, Jithin James, Luis Espinosa-Anke, Steven Schockaert. <a href="https://arxiv.org/abs/2309.15217">Ragas: Automated Evaluation of Retrieval Augmented Generation</a>. <em>arXiv:2309.15217</em>, 2023. <a class="ref-lib" href="/hvec/references/#es2023ragas" title="Open in the references library">library</a></li>
  <li id="ref-zheng2023judge">Lianmin Zheng, Wei-Lin Chiang, Ying Sheng, Siyuan Zhuang, Zhanghao Wu, Yonghao Zhuang, Zi Lin, Zhuohan Li, Dacheng Li, Eric P. Xing, Hao Zhang, Joseph E. Gonzalez, Ion Stoica. <a href="https://arxiv.org/abs/2306.05685">Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena</a>. <em>Advances in Neural Information Processing Systems (NeurIPS)</em>, 2023. <a class="ref-lib" href="/hvec/references/#zheng2023judge" title="Open in the references library">library</a></li>
</ol>
<p><small>Terms used above are defined in the <a href="/hvec/glossary/">glossary</a>.</small></p>]]></content><author><name></name></author><summary type="html"><![CDATA[Why hvec exists, what milestone 1 ships, and what comes next.]]></summary></entry></feed>