EmbeddingGemma-2용 jeffhub 사용 사례 구현은 실행 가능한 데모와 지연 시간·품질 벤치마크를 제공한다. jeffhub의 0.8B ‘System 1’ 판정 모델을 EmbeddingGemma-2 임베딩으로 대체해, 입력과 선택지 목록을 받아 각 선택지의 확률을 반환하는 형태를 유지한다.
구현한 사용 사례는 다음 네 가지다.
ground: 문서 검색·재순위화. 품질 지표는 Recall@1, Recall@5, MRR이다.support-intents: 가장 가까운 예시를 이용한 지원 문의 의도 분류. 정확도와 macro-F1을 측정한다.spam: 정상·스팸·피싱 분류. 정확도와 macro-F1을 측정한다.triage: 문의를 담당 팀으로 분류한다. 정확도와 macro-F1을 측정한다.
실행 환경과 설정
프로젝트 환경은 Python과 GPU가 없고 디스크 공간이 제한된 환경을 전제로 한다. Node.js와 @huggingface/transformers v4를 사용하며, ONNX Runtime에서 CPU로 실행한다. 모델은 onnx-community/embeddinggemma-2-ONNX의 int8 양자화 버전으로, dtype: "q8" 설정이 약 314MB의 model_quantized.onnx 파일을 사용한다.
EmbeddingGemma-2는 7억 4,000만 개의 파라미터를 가진 모델이며 텍스트 백본은 2억 7,000만 개다. 텍스트를 768차원 공간에 매핑하고, 표현할 목적을 짧은 지시문 접두어로 지정한다. 이 프로젝트는 모델 카드에 나온 접두어를 사용한다.
- 검색 질의:
task: search result | query: - 문서:
title: none | text: - 분류:
task: classification | query:
설정 및 실행은 다음 명령으로 진행한다.
`npm install # installs transformers.js + onnxruntime-node
npm run demo # runs every use case on sample inputs
npm run bench # latency + quality benchmark (writes bench/results.json)
npm run bench:quick # smaller timing loops`
첫 실행에서는 세 인코더의 ONNX 가중치 약 850MB를 내려받아 Git 추적 대상에서 제외된 ./models/에 저장한다. 이후 실행에서는 디스크에서 불러오며, 페이지 캐시가 예열된 경우 약 1~2초가 걸린다고 프로젝트는 설명한다.
프로젝트 구성은 모델 로더와 분류·유사도·평가 지표, 네 가지 사용 사례, 소규모 데이터셋, 데모와 벤치마크 코드로 이뤄진다.
벤치마크와 한계
벤치마크 결과는 GPU 없이 CPU에서 int8 모델을 단일 프로세스로 실행해 측정했다. 실행마다 기기 부하에 따라 수치가 조금 달라질 수 있다.
- 단일 텍스트 임베딩 지연 시간은 p50 168ms, p95 177ms, 평균 168ms였다(n=30).
- 배치 처리량은 초당 24개 문서였다. 128개 문서를 5.36초에 처리해 문서당 41.8ms가 걸렸다.
- 각 사례의 품질 지표는 모두 100%였다.
ground는 Recall@1·Recall@5가 100%, MRR이 1.000이었고, 나머지 세 분류 사례는 정확도와 macro-F1이 100%였다. 사례별 테스트 표본 수는 12~17개였다.
프로젝트는 품질 점수가 100%인 이유로 데이터셋이 작고 선별됐으며, 테스트 항목이 예시 데이터의 바꿔 쓴 문장이라고 밝힌다. 따라서 이 결과는 구현된 파이프라인이 처음부터 끝까지 동작한다는 것을 보여줄 뿐, 경쟁력 있는 정확도를 입증하지 않는다. 더 엄밀한 평가에는 MTEB 검색 하위 데이터셋이나 실제 지원 문의처럼 현실적인 라벨 데이터가 필요하다고 설명한다.
점수 산출 방식과 적용 조건
방법 설명에 따르면 임베딩은 평균 풀링 후 L2 정규화한다. 따라서 내적은 코사인 유사도와 같다. 분류에서는 각 선택지를 라벨이 붙은 가장 가까운 예시와 비교하고, 온도 0.05의 소프트맥스로 선택지별 확률을 계산한다. 검색에서는 문서와 질의에 각각 문서용·검색 질의용 접두어를 붙여 임베딩한 뒤 코사인 유사도로 순위를 매긴다.
Matryoshka 표현 학습(MRL)을 이용하면 embed(texts, { dim: 256 })처럼 임베딩을 128·256·512차원으로 줄이고 다시 정규화할 수 있다. 프로젝트는 이를 통해 품질을 조금 희생하는 대신 벡터 저장소 크기를 3~6배 줄일 수 있다고 설명한다.
제약 사항으로는 GPU가 없어 처리량이 CPU 성능에 좌우된다는 점이 있다. 같은 코드는 loadModel에 device: "webgpu"를 전달해 WebGPU에서도 실행할 수 있다. ONNX 빌드는 텍스트·비전·오디오 인코더 세 개를 모두 불러오며, 텍스트 전용 배포에서는 onnx/model_quantized.*만 포함해 공간을 줄일 수 있다고 프로젝트는 안내한다. 데이터셋은 파이프라인 시연용으로 작게 구성됐다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요