Model2Vec
Model2Vec è una tecnica di incorporazione leggera e ad alte prestazioni che trasforma i modelli di Sentence Transformer in modelli statici compatti. Riduce le dimensioni del modello fino a 50 volte e accelera l'inferenza fino a 500 volte, con una perdita minima di prestazioni. Model2Vec è ideale quando si dispone di dispositivi con risorse limitate.
Milvus si integra con i modelli di Model2Vec tramite la classe Model2VecEmbeddingFunction. Questa classe fornisce metodi per codificare documenti e query utilizzando i modelli Model2Vec preaddestrati e restituendo le incorporazioni come vettori densi compatibili con l'indicizzazione di Milvus.
Supporta sia il caricamento dei modelli da Hugging Face Hub sia il caricamento dei modelli Model2Vec locali, offrendo flessibilità per la distribuzione in vari ambienti.
Per utilizzare questa funzione, installare le dipendenze necessarie:
pip install --upgrade pymilvus
pip install "pymilvus[model]"
Quindi, istanziare la Model2VecEmbeddingFunction:
from pymilvus import model
model2vec_ef = model.dense.Model2VecEmbeddingFunction(
model_source='minishlab/potion-base-8M', # or local directory
)
Parametri:
model_source(stringa)
Specifica l'origine del modello Model2Vec da usare per generare le incorporazioni. Supporta due metodi di caricamento dei modelli:
Caricamento da Hugging Face Hub (consigliato):
- Fornire il nome del modello come stringa (ad esempio,
"minishlab/potion-base-8M"). - Le opzioni del modello sono elencate di seguito:
minishlab/potion-base-8M(Predefinito)minishlab/potion-base-4Mminishlab/potion-base-2Mminishlab/potion-base-32Mminishlab/potion-retrieval-32M
- Fornire il nome del modello come stringa (ad esempio,
Caricamento locale:
- Fornire il percorso del file locale in cui è memorizzato il modello Model2Vec (ad esempio,
"/path/to/local/model").
- Fornire il percorso del file locale in cui è memorizzato il modello Model2Vec (ad esempio,
Per creare le incorporazioni per i documenti, utilizzare il metodo 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)
L'output previsto è simile al seguente:
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,)
Per creare embeddings per le query, utilizzare il metodo 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)
Il risultato atteso è simile al seguente:
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,)