Kanana

πŸ€— kanana-2-3b-embedding  |  πŸ€— kanana-2-1.3b-embedding  |  πŸ“• Blog

kanana-2-3b-embedding

News πŸ”₯

  • 2026/10/29: πŸ€— Released the kanana-2-3b-embedding and kanana-2-1.3b-embedding model weights.
  • 2026/07/28: πŸ“• Published a blog post about the development of the Kanana-2 SLM series.

Introduction

Kanana-2-embedding is Kakao's text embedding model series for Korean and English retrieval. This release includes 3B and 1.3B models. The models are built on Kakao's Kanana-2 SLMs, converted to bidirectional attention with mean pooling. They produce text embeddings for semantic search, retrieval-augmented generation (RAG), and text similarity.

Highlights

  • Korean retrieval: kanana-2-3b-embedding achieves the best average score on nano-BEIR (ko) and Ko-Retrieval among the compared models at every Matryoshka dimension.
  • Matryoshka representation learning (MRL): Embeddings can be truncated to 1024 / 512 / 256 / 128 dimensions to reduce storage and search cost.
  • Long input: The models accept inputs of up to 4,096 tokens.

Model Downloads

Model Embedding dim Download
kanana-2-3b-embedding 2560 πŸ€— HuggingFace
kanana-2-1.3b-embedding 1280 πŸ€— HuggingFace

Embedding Performance

All models are evaluated with MTEB under the same conditions. Every evaluation runs without any task prompt (raw input text, with no query/document prefix or instruction template). Each cell is the average score of the benchmark, reported per Matryoshka dimension (full / 512 / 256 / 128).

Model nano-BEIR (en) nano-BEIR (ko) MTEB (eng, v2) Ko-Retrieval†
full512256128 full512256128 full512256128 full512256128
embeddinggemma-300m 0.53300.50590.48130.4379 0.45640.44230.41630.3764 0.62470.61550.60970.5894 0.72950.71720.69920.6397
llama-nemotron-embed-1b-v2 0.64660.62590.59610.5386 0.54710.52040.48180.4225 0.63690.62220.60550.5752 0.79850.77870.75060.6780
Qwen3-Embedding-0.6B 0.58220.57220.54720.5316 0.48450.47120.44940.4256 0.63110.62680.61600.6013 0.72790.71260.68250.6365
Qwen3-Embedding-4B 0.63790.61870.59100.5449 0.55220.51770.49120.4515 0.66610.66060.64700.6284 0.78370.76170.72660.6854
kanana-nano-2.1b-embedding-v1.0.0‑ 0.5285β€”β€”β€” 0.4948β€”β€”β€” 0.6028β€”β€”β€” 0.7579β€”β€”β€”
kanana-essence-8b-embedding-v1.0.0‑ 0.6013β€”β€”β€” 0.5518β€”β€”β€” 0.6444β€”β€”β€” 0.7896β€”β€”β€”
kanana-2-1.3b-embedding 0.63320.62570.60780.5603 0.58660.58120.56100.5164 0.61970.60370.58790.5572 0.79580.78910.77060.7211
kanana-2-3b-embedding 0.65520.63270.61700.5899 0.60880.59430.56830.5206 0.63170.62030.60570.5760 0.82110.80660.78730.7488

Per-column best scores are bolded.

† Average over six Korean retrieval tasks: MIRACLRetrieval, Ko-StrategyQA, AutoRAGRetrieval, LawIRKo, SQuADKorV1Retrieval, and PublicHealthQA.

‑ Kanana-1 embedding models do not support Matryoshka truncation, so only the full-dim score is reported.

Library versions used for evaluation: transformers==5.8.0, sentence-transformers==5.5.1, vllm==0.20.2, torch==2.11.0+cu129.

Deployment

The model supports Matryoshka truncation to 1024 / 512 / 256 / 128 dimensions.

sentence-transformers

pip install torch sentence-transformers
from sentence_transformers import SentenceTransformer

model_id = "kakaocorp/kanana-2-3b-embedding"
model = SentenceTransformer(model_id, trust_remote_code=True)

queries = ["What is the capital of France?"]
documents = ["Paris is the capital of France."]

q = model.encode(queries)
d = model.encode(documents)
scores = model.similarity(q, d)
print(scores)

With MRL truncation:

DIM = 256  # one of: 1024, 512, 256, 128

model = SentenceTransformer(model_id, trust_remote_code=True, truncate_dim=DIM)
embeddings = model.encode(["query text", "document text"])

transformers

pip install torch transformers
import torch
import torch.nn.functional as F
from transformers import AutoModel, AutoTokenizer

model_id = "kakaocorp/kanana-2-3b-embedding"

tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModel.from_pretrained(
    model_id,
    trust_remote_code=True,
    dtype=torch.bfloat16,
).cuda().eval()

texts = ["query text", "document text"]
inputs = tokenizer(
    texts,
    padding=True,
    truncation=True,
    return_tensors="pt",
    max_length=4096,
).to("cuda")

with torch.no_grad():
    out = model(**inputs)

hidden = out.last_hidden_state
mask = inputs["attention_mask"].unsqueeze(-1).float()
pooled = (hidden * mask).sum(dim=1) / mask.sum(dim=1)
embeddings = F.normalize(pooled, dim=-1)

With MRL truncation:

DIM = 256  # one of: 1024, 512, 256, 128
embeddings = F.normalize(pooled[:, :DIM], dim=-1)

vLLM

pip install vllm
import numpy as np
from vllm import LLM

model_id = "kakaocorp/kanana-2-3b-embedding"

llm = LLM(
    model=model_id,
    runner="pooling",
    convert="embed",
    trust_remote_code=True,
    enable_prefix_caching=False,
    enable_chunked_prefill=False,
)

outputs = llm.embed(["query text", "document text"])
raw = np.asarray([o.outputs.embedding for o in outputs])
embeddings = raw / np.linalg.norm(raw, axis=-1, keepdims=True)

With MRL truncation:

DIM = 256  # one of: 1024, 512, 256, 128
trunc = raw[:, :DIM]
embeddings = trunc / np.linalg.norm(trunc, axis=-1, keepdims=True)

License

The model weights are released under the KananaOpenLicense.

Citation

@misc{kanana2embedding2026,
  title = {{kanana-2-embedding}},
  author = {Doohae Jung},
  year = {2026},
  url = {https://huggingface.co/collections/kakaocorp/kanana-2-slm}
}

Contact

Downloads last month
23
Safetensors
Model size
3B params
Tensor type
BF16
Β·
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for kakaocorp/kanana-2-3b-embedding

Quantizations
1 model

Collection including kakaocorp/kanana-2-3b-embedding