Condividi tramite


Vettori e incorporamenti: domande frequenti

Si applica a: Sql Server 2025 (17.x) DatabaseSQL di Azure Istanza gestita di SQL di Azurein Microsoft Fabric

Questo articolo contiene domande frequenti sui vettori e sugli incorporamenti nel motore di database SQL.

Annotazioni

Le funzionalità vettoriali sono disponibili in Istanza gestita di SQL di Azure configurata con i criteri Always-up-to-date .

Come si mantiene aggiornato l'embedding?

Aggiornare gli incorporamenti ogni volta che i dati sottostanti cambiano. Ciò è particolarmente importante per gli scenari in cui i dati sono dinamici, ad esempio il contenuto generato dall'utente o i database aggiornati di frequente. Per altre informazioni sulle diverse strategie per mantenere aggiornati gli incorporamenti, vedere Database e intelligenza artificiale: soluzioni per mantenere aggiornati gli incorporamenti.

Il sovraccarico per la ricerca vettoriale comporta principalmente l'archiviazione del tipo di dati vettoriale e le risorse di calcolo necessarie per l'indicizzazione e la ricerca. Il tipo di dati vettoriale è progettato per essere efficiente in termini di archiviazione, ma l'overhead esatto può variare in base alle dimensioni, ovvero al numero di dimensioni, dei vettori archiviati.

Per altre informazioni su come scegliere le dimensioni del vettore corrette, vedere Incorporamento di modelli e dimensioni: ottimizzazione del rapporto di utilizzo delle risorse per le prestazioni.

Una pagina di dati di SQL Server può contenere fino a 8.060 byte, quindi la dimensione del vettore influisce sul numero di vettori che possono essere archiviati in una singola pagina. Ad esempio, se si dispone di un vettore con 1.024 dimensioni e ogni dimensione è un float a precisione singola (4 byte), la dimensione totale del vettore sarà di 4.104 byte (4096 byte di payload + 8 byte di intestazione). Questo limita il numero di vettori che possono essere inseriti in una singola pagina a uno.

Quale modello di incorporamento è consigliabile usare e quando?

Sono disponibili molti modelli di incorporamento e la scelta di quale usare dipende dal caso d'uso specifico e dal tipo di dati in fase di elaborazione. Alcuni modelli supportano più lingue, mentre altri supportano dati multipli (testo, immagini e così via). Alcuni sono disponibili solo online, altri possono essere eseguiti in locale.

Oltre al modello stesso, prendere in considerazione la grandezza del modello e il numero di dimensioni che esso produce. I modelli di dimensioni maggiori possono offrire una maggiore precisione, ma richiedono più risorse di calcolo e spazio di archiviazione, ma in molti casi la dimensione non modifica effettivamente la qualità, per i casi d'uso comuni.

Per altre informazioni su come scegliere il modello di incorporamento corretto, vedere Incorporamento di modelli e dimensioni: ottimizzazione del rapporto di utilizzo delle risorse per le prestazioni.

Come decidere quando usare valori a virgola mobile a precisione singola (4 byte) e a metà precisione (2 byte) per i vettori?

Quando si archiviano vettori di incorporamento in un database, la scelta tra float a precisione singola (float32) e a metà precisione (float16) spesso dipende dal bilanciamento dell'efficienza di archiviazione con fedeltà numerica.

Fortunatamente, gli incorporamenti non sono in genere altamente sensibili alle piccole modifiche di precisione.

Gli incorporamenti sono rappresentazioni vettoriali dense usate nelle attività come la ricerca semantica, i sistemi di raccomandazione e l'elaborazione del linguaggio naturale. Questi vettori sono spesso l'output delle reti neurali, che sono intrinsecamente tolleranti a piccole variazioni numeriche. Di conseguenza, la riduzione della precisione da float32 a float16 in genere ha un impatto minimo sulla qualità dei confronti di somiglianza o attività downstream, in particolare durante l'inferenza.

L'uso float16 di può ridurre significativamente l'utilizzo di memoria e archiviazione, particolarmente utile quando si usano set di dati di incorporamento su larga scala.

Che ne dici dei vettori sparsi?

Al momento, il tipo di dati vector nel motore di database SQL è progettato per vettori densi, ovvero matrici di numeri a virgola mobile in cui la maggior parte degli elementi è diversa da zero. I vettori di tipo sparse, che contengono un numero significativo di elementi zero, non sono supportati in modo nativo.

Le prestazioni possono variare notevolmente in base al caso d'uso specifico, alle dimensioni del set di dati e alla complessità delle query. Tuttavia, le funzionalità di ricerca vettoriale di SQL Server sono progettate per essere efficienti e scalabili, sfruttando tecniche di indicizzazione per ottimizzare le prestazioni di ricerca.

Cosa accade se sono presenti più colonne da usare per la generazione di incorporamenti?

Se sono presenti più colonne da usare per la generazione di incorporamenti, sono disponibili due opzioni principali:

  • Creare un incorporamento per ogni colonna o
  • Concatenare i valori di più colonne in una singola stringa e quindi generare un singolo incorporamento per tale stringa concatenata.

Per ulteriori informazioni sulle due opzioni e sulle considerazioni correlate alla progettazione del database, vedere Modellare gli Embedding in Modo Efficiente ed Elegante.

Che ne dici della ri-classificazione?

La riclassitura è una tecnica usata per migliorare la pertinenza dei risultati della ricerca rivalutando i risultati iniziali in base a criteri o modelli aggiuntivi. Nel motore di database SQL è possibile implementare la rivalutazione combinando la ricerca vettoriale con full-text (che fornisce la classificazione BM25) o query SQL aggiuntive o modelli di Machine Learning per perfezionare i risultati in base a specifiche preferenze dell'utente o logica di business.

Per altre informazioni, vedere Miglioramento delle funzionalità di ricerca con ricerca ibrida e RRF Re-Ranking.

Quando usare La ricerca di intelligenza artificiale (ora AI Foundry) e l'uso di SQL per gli scenari di ricerca vettoriali?

Ricerca di intelligenza artificiale (ora AI Foundry) è un servizio specializzato progettato per scenari di ricerca avanzati, tra cui la ricerca vettoriale, l'elaborazione del linguaggio naturale e le informazioni dettagliate basate sull'intelligenza artificiale. Offre un set completo di funzionalità per la creazione di applicazioni di ricerca intelligenti, ad esempio il supporto predefinito per vari modelli di intelligenza artificiale, algoritmi di classificazione avanzati e integrazione con altri servizi di intelligenza artificiale.

Il motore di database SQL consente di archiviare qualsiasi tipo di dati ed eseguire qualsiasi tipo di query: strutturata e non strutturata e di eseguire ricerche vettoriali su tali dati. È una buona scelta per gli scenari in cui è necessario eseguire ricerche in tutti questi dati insieme e non si vuole usare un servizio separato per la ricerca che complica l'architettura. Il motore di database SQL offre funzionalità di sicurezza aziendali critiche per assicurarsi che i dati siano sempre protetti, ad esempio la sicurezza a livello di riga(RLS), la maschera dati dinamica (DDM), Always Encrypted, le tabelle libro mastro non modificabili e transparent data encryption (TDE).

Di seguito è riportato un esempio di una singola query che può essere eseguita in Azure SQL o SQL Server che combina dati vettoriali, geospaziali, strutturati e non strutturati contemporaneamente. La query di esempio recupera i primi 50 ristoranti più rilevanti in base alla descrizione del ristorante, alla posizione del ristorante e alle preferenze dell'utente, usando la ricerca vettoriale per la descrizione e la ricerca geospaziale per la posizione, filtrando anche in base ai numeri di stella, al numero di recensioni, alla categoria e così via:

DECLARE @p AS GEOGRAPHY = GEOGRAPHY::Point(47.6694141, -122.1238767, 4326);
DECLARE @e AS VECTOR(1536) = AI_GENERATE_EMBEDDINGS('I want to eat a good focaccia' USE MODEL Text3Embedding);

SELECT TOP (50) b.id AS business_id,
                b.name AS business_name,
                r.id AS review_id,
                r.stars,
                r.review,
                VECTOR_DISTANCE('cosine', re.embedding, @e) AS semantic_distance,
                @p.STDistance(geo_location) AS geo_distance
FROM dbo.reviews AS r
     INNER JOIN dbo.reviews_embeddings AS re
         ON r.id = re.review_id
     INNER JOIN dbo.business AS b
         ON r.business_id = b.id
WHERE b.city = 'Redmond'
      AND @p.STDistance(b.geo_location) < 5000 -- 5 km
      AND r.stars >= 4
      AND b.reviews >= 30
      AND JSON_VALUE(b.custom_attributes, '$.local_recommended') = 'true'
      AND VECTOR_DISTANCE('cosine', re.embedding, @e) < 0.2
ORDER BY semantic_distance DESC;

Nell'esempio precedente, la ricerca Exact Nearest Neighbor (ENN) viene usata per trovare le recensioni più rilevanti in base alla distanza semantica degli incorporamenti, filtrando anche in base alla distanza geospaziale e ad altri attributi aziendali. Questa query illustra la potenza di combinare la ricerca vettoriale con le funzionalità SQL tradizionali per creare un'esperienza di ricerca avanzata ed efficiente.

Se si vuole usare la ricerca Approssimata vicina (ANN), è possibile creare un indice vettoriale nella reviews_embeddings tabella e usare la VECTOR_SEARCH funzione per eseguire la ricerca.

Rivedi il laboratorio a ritmo autonomo sulle incorporazioni per l'intelligenza artificiale nella criptozoologia di Azure SQL.