En tant qu’architecte de solutions avec plus de deux décennies d’expérience dans les systèmes de bases de données relationnelles, j’ai récemment commencé à explorer la nouvelle Édition Vectorielle de MariaDB pour voir si elle pouvait répondre à certains des défis de données AI que nous rencontrons. Un coup d’œil rapide semblait très convaincant, en particulier avec la manière dont elle pouvait faire appel au magie de l’IA directement dans un ensemble de base de données standard. Cependant, j’ai voulu l’essayer avec un cas d’utilisation simple pour voir comment elle se comporte en pratique.
Dans cet article, je partagerai mes expériences et observations sur les capacités vectorielles de MariaDB en effectuant un simple cas d’utilisation. Plus précisément, je chargerez des exemples de critiques de clients dans MariaDB et j’effectuerai des recherches de similarité rapides pour trouver des critiques apparentées.
Configuration de l’environnement
Mon expérience a démarré en configurant un conteneur Docker en utilisant la dernière version (11.6) de MariaDB, qui inclut des capacités vectorielles.
# 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
Maintenant, créez une table et chargez-la avec des avis de clients de base incluant des scores de sentiment et des embeddings pour chaque avis. Pour générer des embeddings de texte, je suis en train d’utiliser SentenceTransformer
, qui vous permet d’utiliser des modèles pré-entraînés. Plus précisément, j’ai décidé d’utiliser un modèle appelé paraphrase-MiniLM-L6-v2 qui prend nos avis de clients et les map dans un espace de 384 dimensions.
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()
Maintenant, exploitez les capacités vectorielles de MariaDB pour trouver des avis similaires. Cela ressemble à poser la question : « Que font d’autres clients qui ont dit ce que cette critique ?« . Dans l’exemple ci-dessous, je vais trouver les deux avis les plus similaires à un avis de client qui dit « Je suis super satisfait!« . Pour ce faire, je suis en train d’utiliser une des fonctions vectorielles (VEC_Distance_Euclidean
) disponibles dans la dernière version.
# 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()
Observations
- Il est facile à installer et nous pouvons combiner à la fois des données structurées (comme les ID de produit et les scores de sentiment), des données non structurées (le texte des avis) et leurs représentations vectorielles dans une seule table.
- J’aime sa capacité à utiliser la syntaxe SQL en parallèle avec les opérations vectorielles, ce qui rend facile pour les équipes déjà familiarisées avec les bases de données relationnelles. Voici la liste complète des fonctions vectorielles prises en charge dans cette version.
- L’index HNSW a amélioré la performance de la requête de recherche de similarité pour les jeux de données plus importants que je viens d’essayer.
Conclusion
Globalement, je suis impressionné ! L’édition Vector de MariaDB simplifiera certainement certaines architectures pilotées par l’IA. Elle brise le fossé entre le monde traditionnel des bases de données et les demandes évoluantes des outils d’IA. Dans les prochains mois, je suis impatient de voir comment cette technologie évolue et comment la communauté l’adopte dans des applications réelles.
Source:
https://dzone.com/articles/mariadb-vector-edition-hands-on-review