Skip to main content

arXiv

ELITE: Embedding-Less retrieval with Iterative Text Exploration

Large Language Models (LLMs) have achieved impressive progress in natural language processing, but their limited ability to retain long-term context constrains performance on document-level or multi-turn tasks. Retrieval-Augmented Generation (RAG) mitigates this by retrieving relevant information from an external corpus. However, existing RAG systems often rely on embedding-based retrieval trained on corpus-level semantic similarity, which can lead to retrieving content that is semantically similar in form but misaligned with the question's true intent. Furthermore, recent RAG variants construct graph- or hierarchy-based structures to improve retrieval accuracy, resulting in significant computation and storage overhead. In this paper, we propose an embedding-free retrieval framework. Our method leverages the logical inferencing ability of LLMs in retrieval using iterative search space refinement guided by our novel importance measure and extend our retrieval results with logically related information without explicit graph construction. Experiments on long-context QA benchmarks, including NovelQA and Marathon, show that our approach outperforms strong baselines while reducing storage and runtime by over an order of magnitude.

Table of Contents

Features

  • Embedding-Free Retrieval: Eliminates the reliance on embedding models and dense retrievers.

  • Fast Response & Deployment: Minimal offline preparation and indexing time enables fast responses and rapid deployment.

  • Lightweight Reasoning: Utilizes LLMs’ native lexical and reasoning abilities—no need to construct graph or tree databases.

  • Strong Performance: Outperforms baselines on long-context QA benchmarks such as NovelQA and Marathon.

Project Structure

  • src/: Core implementation of the embedding-free RAG framework.
  • reproduce/: Scripts for reproducing experiments.
  • demo.py: A runnable demo to test the pipeline.
  • requirements.txt: List of dependencies.
  • .gitignore: Standard ignored files.
  • Readme.md: Project documentation.

🔧 Installation & Quick Start

Environment setup

# Clone the repository
git clone https://github.com/tjzvbokbnft/ELITE-Embedding-Less-retrieval-with-Iterative-Text-Exploration.git
cd ELITE-Embedding-Less-retrieval-with-Iterative-Text-Exploration

# Create & activate a clean conda env (Python 3.11)
conda create -n ELITE python=3.11 -y
conda activate ELITE

# Install core dependencies
pip install -r requirements.txt

Quick demo

#string_noise --> optional (To use this package, you must manually add it to your site-packages directory.
#If you don't need it, simply delete the related code. -->using without the importance metric)

#play with demo
#config your txt path in demo.py
#config other parameters in scr/local_config.py

python demo.py

Benchmark reproduction

# Reproduce on NovelQA benchmark
python reproduce/test_novelQA.py

# Reproduce on Marathon benchmark
python reproduce/test_marathon.py

Command-line interface (CLI)

# Minimal run (uses default novel path)
python cli_agent.py
# Change only the model & neighbor count
python cli_agent.py --common_model llama3.1:latest --neighbor_num 2
# Full control
python cli_agent.py \
  --novel nvQA/Frankenstein.txt \
  --recall_index 6 \
  --neighbor_num 15 \
  --deep_search_index 4 \
  --deep_search_num 25 \
  --voter_num 5 \
  --num_ctx 10000 \
  --common_model llama3.1:latest

Use as an API

from pathlib import Path
from src import core_functions

# 1️⃣  Load text
context = Path("nvQA/Frankenstein.txt").read_text(encoding="utf-8")

# 2️⃣  Bootstrap cache & query
keywords_cache = ""        # Empty on first call
question       = "What motivates Victor to create life?"

# 3️⃣  Retrieve
resp = core_functions.retrieve_useful(
    text_input=context,
    query=question,
    cached_keywords=keywords_cache,
)

# 4️⃣  Grab results
relevant_text   = resp["retrieve_data"]
new_keywords    = resp["keywords_extracted"]
keywords_cache += new_keywords      # accumulate for next round

print(relevant_text)
print("Newly mined keywords:", new_keywords)

Framework

framework

Performance Analysis

QA Retrieval Accuracy

QA Retrieval Accuracy

Average Query Time by Context Length and Query Volume

Average Query Time

Total Time Consumption by Context Length

Total Time Consumption

📄 How to Get Results on NovelQA and Marathon

📊 Benchmark & Evaluation

To evaluate the performance of this framework on NovelQA and Marathon, please follow the official benchmarking instructions:

📘 NovelQA

🏃 Marathon

License

  • MIT

Citation

If ELITE assists in your research, please cite us:

@misc{wang2025elite,
  title     = {ELITE: Embedding-Less Retrieval with Iterative Text Exploration},
  author    = {Wang, Zhangyu and Gao, Siyuan and Zhou, Rong and Wang, Hao and Ning, Li},
  year      = {2025},
  eprint    = {2505.11908},
  archivePrefix = {arXiv},
  primaryClass  = {cs.CL},
  url       = {https://arxiv.org/abs/2505.11908}
}

Metadata

Release files for eliteRAG 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for eliteRAG 0.1.1
File Size Uploaded Provenance
eliterag-0.1.1.tar.gz 28.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for eliteRAG 0.1.1
File Interpreter ABI Platform
eliterag-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 60.2 kB

Release files / eliterag-0.1.1.tar.gz

Download URL eliterag-0.1.1.tar.gz
Size 28.8 kB
Tags Source
SHA-256 checksum
How to use checksums
b87cea3b1f1a48f1aeae2aa0a0f0a5646fa3be676d4b801468a33f6e7bb71c98
BLAKE2b-256 checksum
How to use checksums
1912a255ac375d0d864623034c7b75667b5576e11c0d8eb1119bf46e39f62b68
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.13

Release files / eliterag-0.1.1-py3-none-any.whl

Download URL eliterag-0.1.1-py3-none-any.whl
Size 31.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4b03a917d66ec92f23c1be7ab41c48a6acadef0d48e16977373b264178203718
BLAKE2b-256 checksum
How to use checksums
18a8cacb2d012e21bc3d5f5aca96d23a18342982e88750f4a8ded8202c52a86b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.13

Security for eliteRAG 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page