Instructions to use kakaocorp/kanana-2-3b-embedding with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- sentence-transformers
How to use kakaocorp/kanana-2-3b-embedding with sentence-transformers:
from sentence_transformers import SentenceTransformer model = SentenceTransformer("kakaocorp/kanana-2-3b-embedding", trust_remote_code=True) sentences = [ "The weather is lovely today.", "It's so sunny outside!", "He drove to the stadium." ] embeddings = model.encode(sentences) similarities = model.similarity(embeddings, embeddings) print(similarities.shape) # [3, 3] - Notebooks
- Google Colab
- Kaggle
π€ 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β | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| full | 512 | 256 | 128 | full | 512 | 256 | 128 | full | 512 | 256 | 128 | full | 512 | 256 | 128 | |
| embeddinggemma-300m | 0.5330 | 0.5059 | 0.4813 | 0.4379 | 0.4564 | 0.4423 | 0.4163 | 0.3764 | 0.6247 | 0.6155 | 0.6097 | 0.5894 | 0.7295 | 0.7172 | 0.6992 | 0.6397 |
| llama-nemotron-embed-1b-v2 | 0.6466 | 0.6259 | 0.5961 | 0.5386 | 0.5471 | 0.5204 | 0.4818 | 0.4225 | 0.6369 | 0.6222 | 0.6055 | 0.5752 | 0.7985 | 0.7787 | 0.7506 | 0.6780 |
| Qwen3-Embedding-0.6B | 0.5822 | 0.5722 | 0.5472 | 0.5316 | 0.4845 | 0.4712 | 0.4494 | 0.4256 | 0.6311 | 0.6268 | 0.6160 | 0.6013 | 0.7279 | 0.7126 | 0.6825 | 0.6365 |
| Qwen3-Embedding-4B | 0.6379 | 0.6187 | 0.5910 | 0.5449 | 0.5522 | 0.5177 | 0.4912 | 0.4515 | 0.6661 | 0.6606 | 0.6470 | 0.6284 | 0.7837 | 0.7617 | 0.7266 | 0.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.6332 | 0.6257 | 0.6078 | 0.5603 | 0.5866 | 0.5812 | 0.5610 | 0.5164 | 0.6197 | 0.6037 | 0.5879 | 0.5572 | 0.7958 | 0.7891 | 0.7706 | 0.7211 |
| kanana-2-3b-embedding | 0.6552 | 0.6327 | 0.6170 | 0.5899 | 0.6088 | 0.5943 | 0.5683 | 0.5206 | 0.6317 | 0.6203 | 0.6057 | 0.5760 | 0.8211 | 0.8066 | 0.7873 | 0.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
- Kanana LLM Team Technical Support: kanana-llm@kakaocorp.com
- Business & Partnership Contact: alpha.k@kakaocorp.com
- Downloads last month
- 23