Como arquitecto de soluciones con más de dos décadas de experiencia en sistemas de bases de datos relacionales, recientemente empecé a explorar la nueva Edición Vector de MariaDB para ver si podía abordar algunos de los desafíos de datos de IA que estamos enfrentando. Una rápida mirada pareció bastante convincente, especialmente con cómo podía traer la magia de IA directamente a un ajuste de base de datos regular. Sin embargo, quería probarlo con un caso de uso simple para ver cómo se desempeña en la práctica.
En este artículo, compartiré mi experiencia y observaciones prácticas sobre las capacidades vectoriales de MariaDB al ejecutar un caso de uso simple. Específicamente, cargaré reseñas de clientes de muestra en MariaDB y realizaré búsquedas de similitud rápidas para encontrar reseñas relacionadas.
Configuración del Entorno
Mi experimento comenzó configurando un contenedor de Docker usando la última versión (11.6) de MariaDB que incluye funcionalidades vectoriales.
# 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
Ahora, cree una tabla y carguela con reseñas de clientes de muestra que incluyen puntuaciones de sentimento y embedding para cada reseña. Para generar embeddings de texto, estoy usando SentenceTransformer
, que le permite usar modelos preentrenados. específicamente, decidí usar un modelo llamado paraphrase-MiniLM-L6-v2 que toma nuestras reseñas de clientes y las mapea a un espacio de 384 dimensiones.
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()
Ahora, aprovecharemos las capacidades vectoriales de MariaDB para encontrar reseñas similares. Esto es más como preguntar “¿Qué otras reseñas de clientes dijeron similares a esta reseña?“. En el ejemplo de abajo, voy a encontrar las 2 reseñas más similares a una reseña de cliente que dice “¡Soy super satisfecho!“. Para hacer esto, estoy usando una de las funciones vectoriales (VEC_Distance_Euclidean
) disponibles en la versión más reciente.
# 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()
Observaciones
- Es fácil de configurar y podemos combinar tanto datos estructurados (como ID de producto y puntuaciones de sentimento) como datos no estructurados (texto de reseña) y sus representaciones vectoriales en una sola tabla.
- Me gusta su capacidad para usar sintaxis SQL junto a operaciones vectoriales, lo que hace que sea fácil para equipos que ya están familiarizados con bases de datos relacionales. Aquí está la lista completa de funciones vectoriales supported in this release.
- The HNSW index improved the performance of the similarity search query for larger datasets that I tried so far.
Conclusion
En general, me impresiona! La Edición Vector de MariaDB va a simplificar ciertas arquitecturas basadas en AI. bridges the gap entre el mundo de las bases de datos tradicionales y las demandas evolutivas de las herramientas de AI. En los próximos meses, espero ver cómo esta tecnología se madura y cómo la comunidad la adopta en aplicaciones del mundo real.
Source:
https://dzone.com/articles/mariadb-vector-edition-hands-on-review