Model2Vec
Model2Vec은 문장 트랜스포머 모델을 컴팩트한 정적 모델로 변환하는 경량 고성능 임베딩 기법입니다. 성능 손실을 최소화하면서 모델 크기를 최대 50배까지 줄이고 추론 속도를 최대 500배까지 높일 수 있습니다. Model2Vec은 리소스 제약이 있는 디바이스에 이상적입니다.
Milvus는 Model2VecEmbeddingFunction 클래스를 통해 Model2Vec의 모델과 통합됩니다. 이 클래스는 사전 학습된 Model2Vec 모델을 사용하여 문서와 쿼리를 인코딩하고 임베딩을 Milvus 인덱싱과 호환되는 고밀도 벡터로 반환하는 메서드를 제공합니다.
허깅 페이스 허브에서 모델을 로드하는 것과 로컬 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(문자열)
임베딩 생성에 사용할 Model2Vec 모델의 소스를 지정합니다. 두 가지 모델 로드 방법을 지원합니다:
허깅 페이스 허브에서 로드(권장):
- 모델 이름을 문자열로 입력합니다(예:
"minishlab/potion-base-8M"). - 모델 옵션은 다음과 같습니다:
minishlab/potion-base-8M(기본값)minishlab/potion-base-4Mminishlab/potion-base-2Mminishlab/potion-base-32Mminishlab/potion-retrieval-32M
- 모델 이름을 문자열로 입력합니다(예:
로컬로 로드:
- Model2Vec 모델이 저장된 로컬 파일 경로를 입력합니다(예:
"/path/to/local/model").
- Model2Vec 모델이 저장된 로컬 파일 경로를 입력합니다(예:
문서 임베딩을 만들려면 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,)