Continue에서는 내가 원하는 임베딩 모델을 선택하여 사용할 수 있다. 코딩 환경에 어떤 임베딩 모델을 사용하는 것이 좋을지 코드 벤치마크, 모델의 크기와 차원(Dimension), 양자화(Quantization), 한국어 처리 능력을 기준으로 조사해보기로 했다.
임베딩 모델은 텍스트, 코드 등의 데이터를 고정된 크기의 밀집 벡터(dense vector)로 변환하는 기계학습 모델이다. 이러한 벡터는 원본 데이터의 의미론적 특성을 수치화하여 표현한다.
일반 텍스트 임베딩과 달리, 코드 임베딩은 다음과 같은 특별한 고려사항이 있다.
Continue에서 임베딩 모델의 작동 순서는 다음과 같다.
Continue 문서에서 추천하는 7개 모델과 직접 조사했을 때 같이 비교해보면 좋을 것 같은 모델을 추가로 선정해 보았다.
| No. | 모델 | 선정 이유 |
|---|---|---|
| 1 | Voyage AI의 voyage-code-2 | Continue 문서에서 (가장) 추천됨 |
| 2 | Ollama의 nomic-embed-text | Continue 문서에서 추천됨 |
| 3 | Transformers.js의 all-MiniLM-L6-v2 | Continue 문서에서 추천됨 (기본값) |
| 4 | Text Embeddings Inference | Continue 문서에서 추천됨 |
| 5 | Open AI의 text-embedding-3-large | Continue 문서에서 추천됨 |
| 6 | Cohere의 embed-english-v3.0 | Continue 문서에서 추천됨 |
| 7 | Gemini의 models/text-embedding-004 | Continue 문서에서 추천됨 |
| 8 | Upstage의 solar-embedding-1-large-query | 한국어 임베딩 벤치마크 Repo에서 추천됨 |
Microsoft의 CodeXGLUE(General Language Understanding Evaluation benchmark for CODE)

OpenAI의 HumanEval
Google Research의 MBPP (Mostly Basic Python Programming)
Microsoft Research의 CodeSearchNet
Accuracy (정확도):
Precision@k:
Pass@k:
MRR (Mean Reciprocal Rank, 평균 역순위):
F1 Score:
8개 모델의 벤치마크를 직접 확인할 수 있는 방법을 찾지 못해서 GPT와 Claude에게 결과를 산출해달라고 요청해보았다.
| 모델 | CodeXGLUE 성능 | HumanEval 성능 | MBPP 성능 | CodeSearchNet 성능 | 기타 참고 사항 | |||
|---|---|---|---|---|---|---|---|---|
| 지표 | accuracy | F1 스코어 | pass@k | accuracy | pass@k | MRR | Precision@k | |
| Voyage AI의 voyage-code-2 | 92% | 90% | 85% | 75% | 80% | 70% | 75% | 코드 관련 작업에서 강력한 성능을 보임 |
| Ollama의 nomic-embed-text | 80% | 75% | 70% | 60% | 65% | 85% | 70% | 코드와 자연어 검색 작업에 적합 |
| Transformers.js의 all-MiniLM-L6-v2 | 75% | 70% | 65% | 65% | 60% | 70% | 65% | 소형 모델로 경량화된 환경에서 성능 발휘 |
| Text Embeddings Inference | 90% | 85% | 75% | 70% | 72% | 80% | 80% | 검색과 코드 매핑 작업에서 우수한 성능 |
| OpenAI의 text-embedding-3-large | 95% | 93% | 90% | 90% | 88% | 95% | 92% | 다목적 임베딩 모델로, 다양한 작업에서 강력 |
| Cohere의 embed-english-v3.0 | 70% | 68% | 65% | 60% | 55% | 75% | 70% | 영어 기반 코드 생성과 검색에서 안정적 성능 |
| Gemini의 models/text-embedding-004 | 88% | 82% | 72% | 80% | 78% | 85% | 80% | 다양한 언어와 코드 검색 작업에 강점 |
| Upstage의 solar-embedding-1-large-query | 78% | 74% | 70% | 68% | 66% | 80% | 76% | 한국어 코드 관련 작업에서 특히 우수 |
| 모델 | CodeXGLUE 성능 | HumanEval 성능 | MBPP 성능 | CodeSearchNet 성능 | 주요 특징 | ||||
|---|---|---|---|---|---|---|---|---|---|
| 지표 | accuracy | F1 score | pass@1 | pass@100 | accuracy | pass@k | MRR | Precision@10 | |
| Voyage AI의 voyage-code-2 | 88% | 86% | 45% | 72% | 70% | 75% | 0.68 | 72% | 코드 특화 임베딩으로 우수한 성능 |
| Ollama의 nomic-embed-text | 82% | 79% | 38% | 65% | 65% | 68% | 0.72 | 68% | 오픈소스로 유연한 활용 가능 |
| Transformers.js의 all-MiniLM-L6-v2 | 78% | 75% | 35% | 60% | 62% | 65% | 0.65 | 64% | 경량화 모델로 빠른 처리 속도 |
| Text Embeddings Inference | 85% | 82% | 42% | 70% | 68% | 72% | 0.70 | 70% | 높은 정확도와 빠른 추론 속도 |
| OpenAI의 text-embedding-3-large | 92% | 90% | 48% | 78% | 75% | 80% | 0.75 | 78% | 전반적으로 최고 수준의 성능 |
| Cohere의 embed-english-v3.0 | 84% | 81% | 40% | 68% | 66% | 70% | 0.69 | 69% | 영어 텍스트에 최적화 |
| Gemini의 models/text-embedding-004 | 90% | 87% | 46% | 75% | 72% | 77% | 0.73 | 75% | 멀티모달 지원으로 확장성 높음 |
| Upstage의 solar-embedding-1-large-query | 86% | 83% | 41% | 69% | 67% | 71% | 0.71 | 71% | 한국어 코드 관련 작업에 강점 |
CodeXGLUE (코드 이해 및 분석)
상위 성능
| 순위 | GPT 결과 | Claude 결과 |
|---|---|---|
| 1 | OpenAI의 text-embedding-3-large | OpenAI의 text-embedding-3-large |
| 2 | Voyage AI의 voyage-code-2 | Gemini의 models/text-embedding-004 |
| 3 | Text Embeddings Inference | Voyage AI의 voyage-code-2 |
적합한 코딩 작업:
HumanEval (코드 생성)
상위 성능
| 순위 | GPT 결과 | Claude 결과 |
|---|---|---|
| 1 | OpenAI의 text-embedding-3-large | OpenAI의 text-embedding-3-large |
| 2 | Voyage AI의 voyage-code-2 | Gemini의 models/text-embedding-004 |
| 3 | Text Embeddings Inference | Voyage AI의 voyage-code-2 |
적합한 코딩 작업:
MBPP (기초 프로그래밍)
상위 성능
| 순위 | GPT 결과 | Claude 결과 |
|---|---|---|
| 1 | OpenAI의 text-embedding-3-large | OpenAI의 text-embedding-3-large |
| 2 | Gemini의 models/text-embedding-004 | Gemini의 models/text-embedding-004 |
| 3 | Voyage AI의 voyage-code-2 | Voyage AI의 voyage-code-2 |
적합한 코딩 작업:
CodeSearchNet (코드 검색)
상위 성능
| 순위 | GPT 결과 | Claude 결과 |
|---|---|---|
| 1 | OpenAI의 text-embedding-3-large | OpenAI의 text-embedding-3-large |
| 2 | Gemini의 models/text-embedding-004 | Ollama의 nomic-embed-text |
| 3 | Text Embeddings Inference | Gemini의 models/text-embedding-004 |
적합한 코딩 작업:
| 모델 | 모델 사이즈 | 임베딩 차원 | 비고 |
|---|---|---|---|
| OpenAI text-embedding-3-large | 공개되지 않음 | 3,072 | API로만 제공되어 정확한 모델 크기는 알 수 없음 |
| Gemini text-embedding-004 | 공개되지 않음 | 1,408 | API로만 제공되어 정확한 모델 크기는 알 수 없음 |
| Voyage AI voyage-code-2 | 공개되지 않음 | 1,024 | API로만 제공 |
| Ollama nomic-embed-text | 560MB | 768 | 오픈소스, 로컬 실행 가능 |
| Transformers.js all-MiniLM-L6-v2 | 92MB | 384 | 가장 작은 모델 사이즈, 브라우저에서도 실행 가능 |
| Text Embeddings Inference | ~400MB | 768 | Rust 기반 최적화로 빠른 추론 속도 |
| Cohere embed-english-v3.0 | 공개되지 않음 | 1,024 | API로만 제공 |
| Upstage solar-embedding-1-large-query | ~1.5GB | 1,024 | 한국어 특화 모델 |
리소스 제약 환경
온프레미스 요구사항
클라우드/API 기반
양자화는 모델의 파라미터를 더 적은 비트로 표현하여 모델 크기를 줄이고 추론 속도를 향상시키는 기법이다.
INT4와 INT8은 정수형 데이터 타입으로, 양자화에서 중요한 역할을 한다.
| 모델 | 양자화 지원 | 지원 형식 | 성능 영향 | 크기 감소율 |
|---|---|---|---|---|
| OpenAI text-embedding-3-large | API만 제공 | - | - | - |
| Gemini text-embedding-004 | API만 제공 | - | - | - |
| Voyage AI voyage-code-2 | API만 제공 | - | - | - |
| Ollama nomic-embed-text | 지원 | INT8 | -2~3% | ~75% |
| Transformers.js all-MiniLM-L6-v2 | 지원 | INT8 | -1~2% | ~75% |
| Text Embeddings Inference | 지원 | INT8, INT4 | -3~5% | ~75-87% |
| Cohere embed-english-v3.0 | API만 제공 | - | - | - |
| Upstage solar-embedding-1-large-query | 지원 | INT8 | -2~4% | ~75% |
리소스 제한 환경
성능 중심 환경
현재 한국어 '코드' 관련 임베딩 모델의 성능을 직접적으로 비교할 수 있는 표준화된 벤치마크를 찾을 수 없었다😭.
코드가 아닌 한국어 텍스트 처리에 관한 임베딩 벤치마크는 Upstage의 AutoRAG Korean Embedding Benchmark가 있다.
(실제 벤치마크 결과가 있는 모델만 포함)
Upstage solar-embedding-1-large-query
OpenAI text-embedding-3-large
Ollama nomic-embed-text