Model2Vec
Model2Vec은 Sentence Transformer 모델을 컴팩트하고 정적인 모델로 변환하는 가볍고 고성능의 임베딩 기법이에요. 모델 크기를 최대 50배 줄이고 추론 속도를 최대 500배 높이면서 성능 손실은 최소화해요. Model2Vec은 리소스가 제한된 기기에서 특히 이상적이에요.
Milvus는 Model2VecEmbeddingFunction 클래스를 통해 Model2Vec 모델과 통합돼요. 이 클래스는 사전 학습된 Model2Vec 모델을 사용해 문서와 쿼리를 인코딩하고, Milvus 인덱싱과 호환되는 밀집 벡터로 임베딩을 반환하는 메서드를 제공해요.
Hugging Face Hub에서 모델을 불러오는 방식과 로컬 Model2Vec 모델을 업로드하는 방식을 모두 지원해서 다양한 환경에서의 배포 유연성을 제공해요.
이 기능을 사용하려면 필요한 의존성을 설치해요.
pip install --upgrade pymilvus
pip install "pymilvus[model]"
그런 다음 Model2VecEmbeddingFunction을 인스턴스화해요.
from pymilvus import model
model2vec_ef = model.dense.Model2VecEmbeddingFunction(
model_source='minishlab/potion-base-8M', # or local directory
)
파라미터:
- model_source (string) 임베딩을 생성할 때 사용할 Model2Vec 모델의 소스를 지정해요. 모델을 불러오는 두 가지 방식을 지원해요.
Hugging Face Hub에서 불러오기 (권장):
모델 이름을 문자열로 제공해요(예: "minishlab/potion-base-8M").
- 사용 가능한 모델 옵션은 다음과 같아요.
minishlab/potion-base-8M (Default)
-
minishlab/potion-base-4M -
minishlab/potion-base-2M -
minishlab/potion-base-32M -
minishlab/potion-retrieval-32M
로컬에서 불러오기:
Model2Vec 모델이 저장된 로컬 파일 경로를 제공해요(예: "/path/to/local/model").
문서에 대한 임베딩을 만들려면 encode_documents() 메서드를 사용해요.
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
docs_embeddings = model2vec_ef.encode_documents(docs)
# Print embeddings
print("Embeddings:", docs_embeddings)
# Print dimension and shape of embeddings
print("Dim:", model2vec_ef.dim, docs_embeddings[0].shape)
예상 출력은 다음과 비슷해요.
Embeddings: [array([ 0.02220882, 0.11436888, -0.15094341, 0.08149259, 0.20425692,
-0.15727402, -0.25320682, -0.00669029, 0.03157463, 0.08974048,
-0.00148778, -0.01803541, 0.00230828, -0.0137875 , -0.19242321,
...
-7.29782460e-03, -2.15345751e-02, -4.13905866e-02, 3.70773636e-02,
5.45082428e-02, 1.36436718e-02, 1.38598625e-02, 3.91175086e-03],
dtype=float32)]
Dim: 256 (256,)
쿼리에 대한 임베딩을 만들려면 encode_queries() 메서드를 사용해요.
queries = ["When was artificial intelligence founded",
"Where was Alan Turing born?"]
query_embeddings = model2vec_ef.encode_queries(queries)
# Print embeddings
print("Embeddings:", query_embeddings)
# Print dimension and shape of embeddings
print("Dim", model2vec_ef.dim, query_embeddings[0].shape)
예상 출력은 다음과 비슷해요.
Embeddings: [array([-1.87109038e-02, -2.81724217e-03, -1.67356253e-01, -5.30372337e-02,
1.08304240e-01, -1.09269567e-01, -2.53464818e-01, -1.77880954e-02,
3.05427872e-02, 1.68244764e-01, -7.25950347e-03, -2.52178032e-02,
...
8.60440824e-03, 2.12906860e-03, 1.50156394e-02, -1.29304864e-02,
-3.66544276e-02, 5.01735881e-03, -1.53137008e-02, 9.57900891e-04],
dtype=float32)]
Dim 256 (256,)
출처: Milvus 문서
본문
의존성 설치
앞서 설명한 대로 pymilvus[model] 패키지를 설치해 Model2Vec 임베딩 기능을 사용할 수 있게 해요.
Model2VecEmbeddingFunction 인스턴스화
model_source를 지정해 임베딩 함수를 만들어요. Hugging Face Hub 모델 이름이나 로컬 경로 둘 다 사용할 수 있어요.
문서 임베딩 생성
encode_documents()로 문서 목록을 밀집 벡터로 변환해요. 반환된 벡터의 차원은 model2vec_ef.dim으로 확인할 수 있어요.
쿼리 임베딩 생성
encode_queries()로 쿼리 목록을 밀집 벡터로 변환해요. 검색 시 쿼리 벡터를 문서 벡터와 같은 임베딩 함수로 변환해야 일관된 유사도를 얻을 수 있어요.
더 알아보기 (Learn more)
- Model2Vec GitHub — 모델과 프로젝트 정보
- Milvus의 다른 임베딩 함수는 Embedding functions를 참고하세요.