nomic-embed-text-v1 — 재현 가능한 장문맥 임베딩

nomic-embed-text-v1

OpenAI의 text-embedding-ada-002 수준 성능을 오픈웨이트로 내는 임베딩 모델이 필요했어요. nomic-embed-text-v1은 8,192 컨텍스트를 지원하며 단문·장문 태스크에서 OpenAI의 text-embedding-ada-002text-embedding-3-small을 능가하는 성능을 보여주는 오픈소스 모델이에요. 가중치뿐 아니라 학습 코드와 데이터까지 전부 공개해 재현 가능한 것이 핵심 가치예요.

출처: https://huggingface.co/nomic-ai/nomic-embed-text-v1

벤치마크

Name SeqLen MTEB LoCo Jina Long Context Open Weights Open Training Code Open Data
nomic-embed-text-v1 8192 62.39 85.53 54.16
jina-embeddings-v2-base-en 8192 60.39 85.45 51.90
text-embedding-3-small 8191 62.26 82.40 58.20
text-embedding-ada-002 8191 60.99 52.7 55.25

사용 (프리픽스 필수)

텍스트 프롬프트는 반드시 태스크 인스트럭션 프리픽스를 포함해야 해요. search_document, search_query, clustering, classification를 상황에 맞게 붙여요.

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("nomic-ai/nomic-embed-text-v1")
sentences = ['search_document: TSNE is a dimensionality reduction algorithm created by Laurens van Der Maaten']
embeddings = model.encode(sentences)
print(embeddings)

2048 토큰 너머로 확장

기본 토크나이저는 2048 토큰 제한이지만, 아래처럼 설정하면 네이티브로 8192까지 확장돼요.

tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased', model_max_length=8192)
rope_parameters = {"rope_theta": 1000.0, "rope_type": "dynamic", "factor": 2.0}
model = AutoModel.from_pretrained('nomic-ai/nomic-embed-text-v1', rope_parameters=rope_parameters)

학습 파이프라인

장문맥 BERT(nomic-bert-2048)에서 출발해, 첫 단계는 비지도 대비 학습(StackExchange·Quora의 질문-답변 쌍, Amazon 리뷰의 제목-본문 등), 두 번째 단계는 검색 질의-응답 같은 고품질 라벨 데이터로 파인튜닝해요.

더 알아보기