Viso abbracciato

Viso abbracciato / all-mpnet-base-v2

Codificatore di frasi e paragrafi brevi; genera vettori a 768 dimensioni.

Panoramica del modello

Il modello "all-mpnet-base-v2" è un codificatore di frasi e paragrafi brevi che trasforma il testo in ingresso in un vettore a 768 dimensioni. È una versione raffinata del modello microsoft/mpnet-base, messa a punto su un set di dati di 1 miliardo di coppie di frasi utilizzando un obiettivo di apprendimento contrastivo. all-mpnet-base-v2 è perfetto per compiti come il recupero di informazioni, il clustering e la similarità delle frasi.

Per maggiori dettagli, consultate questo post: All-Mpnet-Base-V2: Enhancing Sentence Embedding with AI

Come creare embeddings usando all-mpnet-base-v2

Esistono due modi principali per generare embeddings vettoriali:

  1. PyMilvus: l'SDK Python per Milvus che integra perfettamente il modello all-mpnet-base-v2.
  2. Libreria SentenceTransformer: la libreria Python sentence-transformer.

Una volta create le incorporazioni vettoriali, queste possono essere memorizzate in un database vettoriale come Zilliz Cloud (un database vettoriale completamente gestito da Milvus) e utilizzate per la ricerca di similarità semantica.

Ecco i quattro passaggi chiave:

  • Iscriversi per un account Zilliz Cloud gratuito.
  • Configurare un cluster serverless](https://docs.zilliz.com/docs/create-cluster#set-up-a-free-cluster) e ottenere Endpoint pubblico e chiave API.
  • Creare una collezione di vettori e inserire gli embeddings vettoriali.
  • Eseguire una ricerca semantica sugli embeddings memorizzati.

Creare embeddings tramite PyMilvus e inserirli in Zilliz Cloud per la ricerca semantica.

da pymilvus.model.dense import SentenceTransformerEmbeddingFunction
da pymilvus import MilvusClient

ef = SentenceTransformerEmbeddingFunction("sentence-transformers/all-mpnet-base-v2")

docs = [
   "L'intelligenza artificiale è stata fondata come disciplina accademica nel 1956",
   "Alan Turing è stato il primo a condurre una ricerca sostanziale sull'intelligenza artificiale",
   "Nato a Maida Vale, Londra, Turing è cresciuto nel sud dell'Inghilterra".
]
# Generare le incorporazioni per i documenti
docs_embeddings = ef(docs)

queries = ["Quando è stata fondata l'intelligenza artificiale",
          "Dove è nato Alan Turing?"]
# Generare embeddings per le query
query_embeddings = ef(queries)

# Connettersi a Zilliz Cloud con l'endpoint pubblico e la chiave API
client = MilvusClient(
    uri=ZILLIZ_PUBLIC_ENDPOINT,
    token=ZILLIZ_API_KEY)

COLLEZIONE = "documenti"
if client.has_collection(collection_name=COLLECTION):
    client.drop_collection(nome_raccolta=COLLEZIONE)
client.create_collection(
    nome_collezione=COLLEZIONE,
    dimensione=ef.dim,
    auto_id=True)

per doc, embedding in zip(docs, docs_embeddings):
    client.insert(COLLECTION, {"text": doc, "vector": embedding})
    
risultati = client.search(
    nome_collezione=COLLEZIONE,
    dati=query_embeddings,
    consistency_level="Strong",
    output_fields=["text"])

Per maggiori dettagli su PyMilvus integration with all-mpnet-base-v2, consultare la documentazione.

Creare embeddings tramite la libreria SentenceTransformer e inserirli in Zilliz Cloud per la ricerca semantica

da sentence_transformers importare SentenceTransformer
da pymilvus import MilvusClient

model = SentenceTransformer("sentence-transformers/all-mpnet-base-v2")

docs = [
   "L'intelligenza artificiale è stata fondata come disciplina accademica nel 1956",
   "Alan Turing è stato il primo a condurre una ricerca sostanziale sull'intelligenza artificiale",
   "Nato a Maida Vale, Londra, Turing è cresciuto nel sud dell'Inghilterra".
]
# Generare le incorporazioni per i documenti
docs_embeddings = model.encode(docs, normalize_embeddings=True)


query = ["Quando è stata fondata l'intelligenza artificiale",
          "Dove è nato Alan Turing?"]
# Generare embeddings per le query
query_embeddings = model.encode(queries, normalize_embeddings=True)

# Connettersi a Zilliz Cloud con l'endpoint pubblico e la chiave API
client = MilvusClient(
    uri=ZILLIZ_PUBLIC_ENDPOINT,
    token=ZILLIZ_API_KEY)

COLLEZIONE = "documenti"
if client.has_collection(collection_name=COLLECTION):
    client.drop_collection(nome_raccolta=COLLEZIONE)
client.create_collection(
    nome_collezione=COLLEZIONE,
    dimensione=768,
    auto_id=True)

per doc, embedding in zip(docs, docs_embeddings):
    client.insert(COLLECTION, {"text": doc, "vector": embedding})
    
risultati = client.search(
    nome_collezione=COLLEZIONE,
    dati=query_embeddings,
    consistency_level="Strong",
    output_fields=["text"])

Ulteriori letture