🔎 KURE-v3
KURE-v3 is a Korean-English bilingual dense retrieval model. With 1.1B parameters, it averages 0.8027 nDCG@10 on MTEB(kor, v2) Retrieval. It outperforms 8B dense models such as comsat-embed-ko-8b-preview and Qwen3-Embedding-8B. It is also served through the KURE API.
Key Characteristics
- Dense (single-vector): one 2,048-dimensional vector per text, scored by cosine similarity.
- Matryoshka embeddings: trained at 2,048, 1,024, 512 and 256 dimensions, so vectors can be truncated.
- Long documents: up to 8,192 tokens.
Usage
Sentence Transformers
pip install -U sentence-transformers
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("nlpai-lab/KURE-v3", model_kwargs={"attn_implementation": "flash_attention_2"})
# model = SentenceTransformer("nlpai-lab/KURE-v3", model_kwargs={"attn_implementation": "flash_attention_2"}, truncate_dim=1024) # smaller Matryoshka vectors
query = "훈민정음은 언제 만들어졌나요?"
documents = [
"세종대왕은 1443년에 훈민정음을 창제하고 1446년에 이를 반포하였다.",
"김치는 배추나 무를 소금에 절인 뒤 고춧가루와 젓갈을 넣어 발효시킨 음식이다.",
"한라산은 해발 1,947m로 남한에서 가장 높은 산이며 제주도 중앙에 자리한다.",
]
# encode_query / encode_document add the "query: " / "passage: " prompts KURE-v3 expects
query_embeddings = model.encode_query(query)
document_embeddings = model.encode_document(documents)
print(query_embeddings.shape, document_embeddings.shape)
# (2048,) (3, 2048)
# Cosine similarity (higher is more relevant)
scores = model.similarity(query_embeddings, document_embeddings)
print(scores)
# tensor([[ 0.5386, 0.0152, -0.0211]])
API
KURE-v3 is served at kure.kullm.ai through an OpenAI-compatible endpoint. Sign in with GitHub there to get an API key.
import os
import numpy as np
from openai import OpenAI
client = OpenAI(base_url="https://kure.kullm.ai/api/v1", api_key=os.environ["KURE_API_KEY"])
query = "훈민정음은 언제 만들어졌나요?"
documents = [
"세종대왕은 1443년에 훈민정음을 창제하고 1446년에 이를 반포하였다.",
"김치는 배추나 무를 소금에 절인 뒤 고춧가루와 젓갈을 넣어 발효시킨 음식이다.",
"한라산은 해발 1,947m로 남한에서 가장 높은 산이며 제주도 중앙에 자리한다.",
]
# input_type adds the query or document prompt. Vectors are 2048-d, pass dimensions=(256 to 2048) for a smaller Matryoshka size
query_embedding = client.embeddings.create(model="kure-v3", input=query, extra_body={"input_type": "query"})
document_embeddings = client.embeddings.create(model="kure-v3", input=documents, extra_body={"input_type": "document"})
# Vectors are L2-normalized, so the dot product is the cosine similarity
q = np.array(query_embedding.data[0].embedding)
d = np.array([e.embedding for e in document_embeddings.data])
print((d @ q).round(4))
# [ 0.5384 0.0145 -0.0207]
Evaluation
KURE-v3 is evaluated on the nine MTEB(kor, v2) Retrieval tasks. We report nDCG@10.
| Model | Type | Params | Avg | AutoRAG | PubHealthQA | Ko-StrategyQA | LawIRKo | SQuADKorV1 | Belebele (ko-ko) | MrTidy | MLDR | MIRACL |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KURE Models | ||||||||||||
| nlpai-lab/KURE-v3 | Dense | 1.1B | 0.8027 | 0.9324 | 0.8639 | 0.8192 | 0.8158 | 0.9666 | 0.9673 | 0.6320 | 0.4781 | 0.7489 |
| nlpai-lab/KURE-v2 | Late-interaction | 0.2B | 0.8160 | 0.9718 | 0.8228 | 0.8070 | 0.7550 | 0.9846 | 0.9660 | 0.5974 | 0.7158 | 0.7237 |
| nlpai-lab/KURE-Sparse-base | Sparse | 0.6B | 0.7984 | 0.9445 | 0.8099 | 0.8188 | 0.7244 | 0.9815 | 0.9703 | 0.6255 | 0.5716 | 0.7395 |
| nlpai-lab/KURE-Sparse-nano | Sparse | 0.1B | 0.7716 | 0.9360 | 0.7711 | 0.7924 | 0.7226 | 0.9774 | 0.9608 | 0.5618 | 0.5133 | 0.7091 |
| nlpai-lab/KURE-v1 | Dense | 0.6B | 0.7616 | 0.8708 | 0.8193 | 0.7999 | 0.7426 | 0.9357 | 0.9502 | 0.5909 | 0.4637 | 0.6816 |
| nlpai-lab/KoE5 | Dense | 0.6B | 0.7337 | 0.8434 | 0.8351 | 0.8001 | 0.7756 | 0.8980 | 0.9425 | 0.5841 | 0.3015 | 0.6235 |
| Dense (Single-Vector) Models | ||||||||||||
| nvidia/Nemotron-3-Embed-8B-BF16 | Dense | 8.0B | 0.8127 | 0.9311 | 0.8898 | 0.8405 | 0.8481 | 0.9650 | 0.9714 | 0.6540 | 0.4785 | 0.7363 |
| sionic-ai/comsat-embed-ko-8b-preview | Dense | 7.6B | 0.7927 | 0.8518 | 0.8871 | 0.8394 | 0.8164 | 0.9168 | 0.9853 | 0.6253 | 0.5157 | 0.6964 |
| Qwen/Qwen3-Embedding-8B | Dense | 7.6B | 0.7826 | 0.8276 | 0.8721 | 0.8363 | 0.8171 | 0.9063 | 0.9824 | 0.6187 | 0.5046 | 0.6783 |
| nvidia/Nemotron-3-Embed-1B-BF16 | Dense | 1.1B | 0.7817 | 0.9074 | 0.8642 | 0.8136 | 0.7758 | 0.9505 | 0.9629 | 0.6084 | 0.4202 | 0.7325 |
| Qwen/Qwen3-Embedding-4B | Dense | 4.0B | 0.7737 | 0.8431 | 0.8693 | 0.8270 | 0.7769 | 0.9044 | 0.9522 | 0.6076 | 0.5022 | 0.6803 |
| perplexity-ai/pplx-embed-v1-4b | Dense | 4.0B | 0.7705 | 0.8321 | 0.9042 | 0.8326 | 0.7736 | 0.9402 | 0.9624 | 0.5778 | 0.4343 | 0.6775 |
| microsoft/harrier-oss-v1-27b | Dense | 27.0B | 0.7667 | 0.8176 | 0.8971 | 0.8361 | 0.8737 | 0.9204 | 0.9546 | 0.5306 | 0.4046 | 0.6653 |
| dragonkue/snowflake-arctic-embed-l-v2.0-ko | Dense | 0.6B | 0.7653 | 0.9093 | 0.8337 | 0.8050 | 0.7735 | 0.9447 | 0.9518 | 0.5712 | 0.4304 | 0.6685 |
| codefuse-ai/F2LLM-v2-8B | Dense | 7.6B | 0.7638 | 0.7678 | 0.9380 | 0.8371 | 0.8405 | 0.8874 | 0.9513 | 0.6162 | 0.4047 | 0.6313 |
| telepix/PIXIE-Rune-v1.5 | Dense | 0.6B | 0.7618 | 0.8927 | 0.8426 | 0.8064 | 0.7705 | 0.9457 | 0.9617 | 0.5492 | 0.4482 | 0.6393 |
| nvidia/llama-nemotron-embed-1b-v2 | Dense | 1.2B | 0.7564 | 0.8708 | 0.8177 | 0.8055 | 0.7329 | 0.9345 | 0.9519 | 0.5988 | 0.3952 | 0.7004 |
| dragonkue/BGE-m3-ko | Dense | 0.6B | 0.7547 | 0.8738 | 0.8155 | 0.7959 | 0.7322 | 0.9414 | 0.9503 | 0.6099 | 0.3899 | 0.6833 |
| BAAI/bge-m3 | Dense | 0.6B | 0.7509 | 0.8301 | 0.8041 | 0.7941 | 0.7174 | 0.9038 | 0.9315 | 0.6471 | 0.4287 | 0.7015 |
| jinaai/jina-embeddings-v5-text-small-retrieval | Dense | 0.6B | 0.7419 | 0.8409 | 0.8664 | 0.8096 | 0.7483 | 0.8926 | 0.9346 | 0.5779 | 0.3315 | 0.6752 |
| perplexity-ai/pplx-embed-v1-0.6b | Dense | 0.6B | 0.7390 | 0.8414 | 0.8255 | 0.8100 | 0.7444 | 0.9174 | 0.9393 | 0.5524 | 0.3179 | 0.7026 |
| google/embeddinggemma-300m | Dense | 0.3B | 0.7254 | 0.8187 | 0.8170 | 0.8008 | 0.6850 | 0.9114 | 0.9430 | 0.5253 | 0.3844 | 0.6434 |
| Qwen/Qwen3-Embedding-0.6B | Dense | 0.6B | 0.7140 | 0.8338 | 0.8107 | 0.7586 | 0.7526 | 0.8490 | 0.9124 | 0.4870 | 0.4199 | 0.6023 |
| Late-interaction (Multi-Vector) Models | ||||||||||||
| lightonai/mLateOn | Late-interaction | 0.3B | 0.7906 | 0.9392 | 0.8061 | 0.7905 | 0.6431 | 0.9803 | 0.9608 | 0.5817 | 0.7005 | 0.7135 |
| perplexity-ai/pplx-embed-v1-late-0.6b | Late-interaction | 0.6B | 0.7381 | 0.8557 | 0.8089 | 0.7973 | 0.7285 | 0.9696 | 0.9548 | 0.5400 | 0.2816 | 0.7064 |
| dragonkue/colbert-ko-0.1b | Late-interaction | 0.1B | 0.6776 | 0.9700 | 0.7482 | 0.7364 | 0.4475 | 0.9794 | 0.9644 | 0.3966 | 0.2872 | 0.5685 |
| Sparse Models | ||||||||||||
| omai-research/milco-650m | Sparse | 0.6B | 0.7824 | 0.9483 | 0.8219 | 0.8143 | 0.6724 | 0.9700 | 0.9623 | 0.6997 | 0.4318 | 0.7209 |
| telepix/PIXIE-Splade-v1.5 | Sparse | 0.1B | 0.7608 | 0.9412 | 0.7910 | 0.7993 | 0.7667 | 0.9687 | 0.9651 | 0.5132 | 0.4938 | 0.6085 |
Matryoshka Dimensions
Truncated to 1,024 dimensions, KURE-v3 keeps 99% of its full-size score and still outperforms comsat-embed-ko-8b-preview and Qwen3-Embedding-8B (4,096 dimensions).
RTEB (Retrieval Embedding Benchmark)
We also evaluate dense (single-vector) models on RTEB, an English retrieval benchmark that combines open and private datasets to measure how well models generalize to real-world data. We evaluate its eight public English tasks outside the code domain, so the average differs from the RTEB leaderboard score. We report nDCG@10.
| Model | Params | Avg | CUREv1 | ChatDoctor | FinQA | AILACasedocs | LegalSummarization | HC3Finance | FinanceBench | AILAStatutes |
|---|---|---|---|---|---|---|---|---|---|---|
| nvidia/Nemotron-3-Embed-8B-BF16 | 8.0B | 0.7390 | 0.6691 | 0.7695 | 0.8849 | 0.4908 | 0.7677 | 0.7990 | 0.9502 | 0.5804 |
| sionic-ai/comsat-embed-ko-8b-preview | 7.6B | 0.6921 | 0.5983 | 0.7337 | 0.6476 | 0.4689 | 0.6987 | 0.7084 | 0.8430 | 0.8385 |
| Qwen/Qwen3-Embedding-8B | 7.6B | 0.6861 | 0.6084 | 0.7323 | 0.6339 | 0.4409 | 0.7069 | 0.7196 | 0.8280 | 0.8190 |
| nlpai-lab/KURE-v3 | 1.1B | 0.6859 | 0.6315 | 0.6713 | 0.8632 | 0.4267 | 0.7180 | 0.7018 | 0.8753 | 0.5997 |
| perplexity-ai/pplx-embed-v1-4b | 4.0B | 0.6812 | 0.5637 | 0.7407 | 0.8358 | 0.4546 | 0.6806 | 0.7289 | 0.8438 | 0.6012 |
| nvidia/Nemotron-3-Embed-1B-BF16 | 1.1B | 0.6650 | 0.5960 | 0.6809 | 0.8242 | 0.4287 | 0.7267 | 0.6444 | 0.8540 | 0.5649 |
| Qwen/Qwen3-Embedding-4B | 4.0B | 0.6549 | 0.5684 | 0.7138 | 0.6339 | 0.3938 | 0.6612 | 0.6877 | 0.7662 | 0.8140 |
| codefuse-ai/F2LLM-v2-8B | 7.6B | 0.6403 | 0.5356 | 0.7975 | 0.6108 | 0.4498 | 0.6499 | 0.7596 | 0.8744 | 0.4448 |
| perplexity-ai/pplx-embed-v1-0.6b | 0.6B | 0.6369 | 0.5578 | 0.6885 | 0.7333 | 0.3865 | 0.6804 | 0.6822 | 0.7875 | 0.5788 |
| jinaai/jina-embeddings-v5-text-small-retrieval | 0.6B | 0.6069 | 0.5364 | 0.7113 | 0.5563 | 0.4378 | 0.6485 | 0.6220 | 0.8076 | 0.5352 |
| Qwen/Qwen3-Embedding-0.6B | 0.6B | 0.5802 | 0.4603 | 0.6208 | 0.5740 | 0.3525 | 0.6234 | 0.5471 | 0.7375 | 0.7261 |
| google/embeddinggemma-300m | 0.3B | 0.5531 | 0.5713 | 0.6342 | 0.5437 | 0.3468 | 0.6833 | 0.5997 | 0.7748 | 0.2706 |
| telepix/PIXIE-Rune-v1.5 | 0.6B | 0.5457 | 0.5494 | 0.5976 | 0.6228 | 0.3590 | 0.6711 | 0.5252 | 0.7865 | 0.2540 |
| nlpai-lab/KURE-v1 | 0.6B | 0.5202 | 0.5214 | 0.5665 | 0.5977 | 0.3685 | 0.6300 | 0.5080 | 0.7457 | 0.2235 |
| BAAI/bge-m3 | 0.6B | 0.5151 | 0.5191 | 0.5797 | 0.5570 | 0.3597 | 0.6329 | 0.5100 | 0.6667 | 0.2961 |
License
KURE-v3 is released under the Apache License 2.0.
Citation
@misc{kure-v3,
title = {KURE-v3: a Korean-English bilingual dense retriever},
author = {Jang, Youngjoon and Son, Junyoung and Lee, Taemin and Hong, Seongtae and Lim, Heuiseok},
year = {2026},
url = {https://huggingface.co/nlpai-lab/KURE-v3},
}
@inproceedings{jang2025kure,
title={KURE: Embedding Model for Korean-Specific Retrieval},
author={Jang, Youngjoon and Son, Junyoung and Lee, Taemin and Hong, Seongtae and Park, JeongBae and Lim, Heuiseok},
booktitle={Annual Conference on Human and Language Technology},
pages={129--134},
year={2025},
organization={Human and Language Technology}
}