Come soluzioni architetto con oltre due decenni di esperienza in sistemi di database relazionali, di recente ho iniziato a esplorare la nuova Edizione Vector di MariaDB per vedere se potesse risolvere alcuni dei挑战 ambienti nei dati AI. Un’occhiata rapida sembrava piuttosto convincente, soprattutto con come avrebbe portato la magia dell’AI direttamente in un setup di database normale. Tuttavia, volevo testarlo con un semplice caso d’uso per vedere come si comporta in pratica.
Nell’articolo presente, condividerò le mie esperienze e osservazioni sulla capacità vettoriale di MariaDB attraverso l’esecuzione di un semplice caso d’uso. In particolare, caricherò recensioni di clienti campione in MariaDB e eseguirò ricerche di similitudine rapide per trovare recensioni relative.
Configurazione dell’ambiente
La mia sperimentazione è iniziata impostando un container Docker utilizzando la ultima versione (11.6) di MariaDB che include capacità vettoriali.
# Pull the latest release
docker pull quay.io/mariadb-foundation/mariadb-devel:11.6-vector-preview
# Update password
docker run -d --name mariadb_vector -e MYSQL_ROOT_PASSWORD=<replace_password> quay.io/mariadb-foundation/mariadb-devel:11.6-vector-preview
Ora, creiamo una tabella e cariciamo dentro esempi di recensioni clienti che includono punteggi di sentimento e embedding per ogni recensione. Per generare embedding di testo, sto usando SentenceTransformer
, che consente di usare modelli pre-addestrati. In particolare, ho deciso di utilizzare un modello chiamato paraphrase-MiniLM-L6-v2 che prende le nostre recensioni clienti e le mappa in uno spazio di 384 dimensioni.
import mysql.connector
import numpy as np
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('paraphrase-MiniLM-L6-v2')
# I already have a database created with a name vectordb
connection = mysql.connector.connect(
host="localhost",
user="root",
password="<password>", # Replace me
database="vectordb"
)
cursor = connection.cursor()
# Create a table to store customer reviews with sentiment score and embeddings.
cursor.execute("""
CREATE TABLE IF NOT EXISTS customer_reviews (
id INT PRIMARY KEY AUTO_INCREMENT,
product_name INT,
customer_review TEXT,
customer_sentiment_score FLOAT,
customer_review_embedding BLOB,
INDEX vector_idx (customer_review_embedding) USING HNSW
) ENGINE=ColumnStore;
""")
# Sample reviews
reviews = [
(1, "This product exceeded my expectations. Highly recommended!", 0.9),
(1, "Decent quality, but pricey.", 0.6),
(2, "Terrible experience. The product does not work.", 0.1),
(2, "Average product, ok ok", 0.5),
(3, "Absolutely love it! Best purchase I have made this year.", 1.0)
]
# Load sample reviews into vector DB
for product_id, review_text, sentiment_score in reviews:
embedding = model.encode(review_text)
cursor.execute(
"INSERT INTO customer_reviews (product_id, review_text, sentiment_score, review_embedding) VALUES (%s, %s, %s, %s)",
(product_id, review_text, sentiment_score, embedding.tobytes()))
connection.commit()
connection.close()
Adesso, sfrutteremo le capacità vettoriali di MariaDB per trovare recensioni simili. Questo è più come chiedere “Cosa hanno detto altri clienti simili a questa recensione?“. Nell’esempio seguente, troverò le prime 2 recensioni simili a una recensione cliente che dice “Sono sorprendentemente soddisfatto!“. Per fare questo, sto usando una delle funzioni vettoriali (VEC_Distance_Euclidean
) disponibili nella versione più recente.
# Convert the target customer review into vector
target_review_embedding = model.encode("I am super satisfied!")
# Find top 2 similar reviews using MariaDB's VEC_Distance_Euclidean function
cursor.execute("""
SELECT review_text, sentiment_score, VEC_Distance_Euclidean(review_embedding, %s) AS similarity
FROM customer_reviews
ORDER BY similarity
LIMIT %s
""", (target_review_embedding.tobytes(), 2))
similar_reviews = cursor.fetchall()
Osservazioni
- È facile da installare e possiamo combinare sia i dati strutturati (come il ID del prodotto e i punteggi di sentimento) che i dati non strutturati (testo recensione) e le loro rappresentazioni vettoriali in una singola tabella.
- MI piace la sua capacità di usare la sintassi SQL insieme alle operazioni vettoriali, che rende facile per team già familiarizzati con i database relazionali. Ecco l’elenco completo delle funzioni vettoriali supportate in questo rilascio.
- L’indice HNSW ha migliorato le prestazioni della query di ricerca di similitudine per dataset più grandi che ho provato fino ad ora.
Conclusione
In generale, sono impressionato! La Vector Edition di MariaDB sta per semplificare certe architetture basate su tecnologie AI. Accorcia il gap tra il mondo tradizionale delle basi di dati e le richieste in evoluzione degli strumenti AI. Nei prossimi mesi, mi aspetto di vedere come questa tecnologia matura e come la comunità la adotti in applicazioni reali.
Source:
https://dzone.com/articles/mariadb-vector-edition-hands-on-review