모델별 실행 레시피
최종 업데이트
카카오 Kanana-2 3B 임베딩으로 한국어 RAG 색인 만들기
한국어 검색 점수는 앞서고, 벡터는 128차원까지 줄일 수 있어요.
모델 카드의 한국어 검색 점수와 3B 가중치·벡터 크기를 계산해 맥 메모리에 맞는 구성을 고르고, sentence-transformers로 색인을 만드는 예제를 담았어요.
임베딩 모델은 질문과 문단을 같은 좌표에 놓아요
Kanana-2 임베딩은 카카오가 2026년 10월 29일 공개한 한국어·영어 검색용 모델이에요. 문서를 잘라 만든 문단과 사용자의 질문을 각각 숫자 벡터로 바꾸고, 두 벡터가 가까운 순서로 문단을 꺼내요. 3B 모델은 2,560차원, 1.3B 모델은 1,280차원 벡터를 만들고 한 번에 4,096토큰1까지 받아요.
Kanana-2 SLM을 양방향 어텐션2으로 바꾸고 평균 풀링으로 문장 하나를 벡터 하나로 모아요. 생성 모델처럼 다음 토큰을 이어 쓰지 않고 입력 전체를 한 번 읽은 뒤 벡터를 돌려주기 때문에, 검색과 RAG3, 문장 유사도 계산에 써요.

한국어 검색 점수는 어느 정도인가요
MTEB 평가는 과제별 지시문 없이 원문만 넣은 조건이에요. nano-BEIR(ko) 평균은 3B가 0.6088, 1.3B가 0.5866이고, 한국어 검색 과제 6개의 평균(Ko-Retrieval)은 3B가 0.8211이에요. 같은 표에서 Qwen3-Embedding-4B는 0.5522와 0.7837, Qwen3-Embedding-0.6B는 0.4845와 0.7279를 기록했어요.
영어 쪽은 순서가 달라요. MTEB(eng, v2)에서 Qwen3-Embedding-4B가 0.6661로 3B의 0.6317보다 높아요. 한국어 문서가 중심인지, 영어 문서 비중이 큰지에 따라 고를 모델이 갈려요.
좌우로 밀어 표 전체를 비교하세요.
| 모델 | nano-BEIR(ko) | Ko-Retrieval | MTEB(eng v2) |
|---|---|---|---|
| kanana-2-3b-embedding | 0.6088 | 0.8211 | 0.6317 |
| kanana-2-1.3b-embedding | 0.5866 | 0.7958 | 0.6197 |
| Qwen3-Embedding-4B | 0.5522 | 0.7837 | 0.6661 |
| Qwen3-Embedding-0.6B | 0.4845 | 0.7279 | 0.6311 |
| EmbeddingGemma-300m | 0.4564 | 0.7295 | 0.6247 |
벡터를 128차원으로 줄이면 저장량이 20분의 1이 돼요
Matryoshka 표현 학습(MRL)은 벡터 앞부분만 잘라 써도 검색이 버티도록 학습하는 방식이에요. 3B 모델은 1,024·512·256·128차원으로 줄일 수 있고, 256차원에서도 nano-BEIR(ko) 0.5683, Ko-Retrieval 0.7873을 유지해요.
저장량은 차원 수에 4바이트를 곱해 계산해요. 2,560차원은 문단 하나에 10,240바이트이고, 10만 문단이면 약 1.0GB예요. 256차원으로 줄이면 102MB로 10분의 1, 128차원이면 51MB로 20분의 1이 돼요. 같은 디스크에 10~20배 많은 문단을 담을 수 있어요.
| 차원 | 문단 1만 개 | 문단 10만 개 |
|---|---|---|
| 2,560 | 102MB | 1.0GB |
| 1,024 | 41MB | 410MB |
| 512 | 20MB | 205MB |
| 256 | 10MB | 102MB |
| 128 | 5MB | 51MB |

맥에서 색인을 만드는 순서
sentence-transformers로 모델을 불러오고 truncate_dim에 256을 넣으면 절단까지 한 번에 처리해요. Apple Silicon에서는 device를 mps로 지정해 GPU4를 써요. 처음 실행할 때 가중치를 내려받으므로 3B 기준 6GB 안팎의 저장공간과 메모리가 필요해요.
문단은 4,096토큰을 넘지 않게 나누고, 질문과 문단에 같은 모델과 같은 차원을 써야 해요. 검색은 코사인 유사도로 정렬하고 상위 후보는 리랭커로 다시 볼 수 있어요. 색인 파일에 모델 이름과 차원을 남겨 두면 벡터를 섞는 실수를 막아요.
from sentence_transformers import SentenceTransformer
model = SentenceTransformer(
"kakaocorp/kanana-2-3b-embedding",
trust_remote_code=True,
truncate_dim=256,
device="mps",
)
vectors = model.encode(chunks, batch_size=8, normalize_embeddings=True)
print(vectors.shape) # (문단 수, 256)라이선스와 한계
가중치는 Kanana Open License로 배포돼요. 직접 서비스에 쓰는 것은 허용되지만 API5로 재판매하거나 SI·온디바이스 형태로 제3자에게 파는 경우에는 카카오의 별도 상업 라이선스가 필요해요. 재배포할 때는 "Powered by Kanana" 문구와 라이선스 사본을 함께 넣어야 해요.
3B는 bf166 가중치만 6GB라 16GB 맥에서도 여유가 있지만, 문단이 많아지면 벡터와 원문이 메모리를 더 써요. 영어 비중이 큰 검색이라면 MTEB 점수가 더 높은 모델과 같은 질문으로 비교하고, 한국어 문서 검색이 중심이면 이 모델로 색인을 먼저 만들어 원하는 문단이 상위에 오는지 보세요.

용어 각주
토큰 — 모델이 입력이나 출력을 나누어 처리하는 단위입니다.
본문으로 돌아가기어텐션 — 입력 토큰 사이의 관련도를 계산해 각 위치의 정보를 현재 표현에 반영하는 신경망 연산입니다.
본문으로 돌아가기검색 증강 생성 — 질문과 관련된 자료를 검색해 모델 입력에 추가한 뒤, 그 문맥을 바탕으로 답변을 생성하는 방식입니다.
본문으로 돌아가기GPU — 많은 계산을 병렬로 처리하는 프로세서입니다. AI 모델 실행에서는 모델 계산을 맡습니다.
본문으로 돌아가기API — 프로그램의 기능을 다른 코드에서 호출하기 위한 약속된 인터페이스입니다.
본문으로 돌아가기BF16 — 모델 수치를 저장하고 계산하는 16비트 부동소수점 형식입니다. FP32와 같은 폭의 지수부를 써 넓은 값 범위를 표현합니다.
본문으로 돌아가기
자주 묻는 질문
- 이 글에서 가장 먼저 확인할 것은 무엇인가요?
- 모델 카드의 한국어 검색 점수와 3B 가중치·벡터 크기를 계산해 맥 메모리에 맞는 구성을 고르고, sentence-transformers로 색인을 만드는 예제를 담았어요.
- 필요한 메모리는 어느 정도인가요?
- sentence-transformers로 모델을 불러오고 truncate_dim에 256을 넣으면 절단까지 한 번에 처리해요. Apple Silicon에서는 device를 mps로 지정해 GPU를 써요. 처음 실행할 때 가중치를 내려받으므로 3B 기준 6GB 안팎의 저장공간과 메모리가 필요해요.
