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.
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]])
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]
KURE-v3 is evaluated on the nine MTEB(kor, v2) Retrieval tasks. We report nDCG@10.
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).
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.
KURE-v3 is released under the Apache License 2.0.
@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}
}