Als een architect van oplossingen met meer dan twee decennia ervaring in relatieve database systemen, heb ik recentelijk begonnen met exploren van de nieuwe Vector Edition van MariaDB, om te zien of hij enkele van de AI-gerelateerde data uitdagingen die we aan het bezitten zijn, kan aanpakken. Een kijkje liet mij al vrij overtuigd achterblijven, vooral met hoe het de AI-magic rechtstreeks in een normale databaseinstelling kan brengen. Echter, ik wilde het testen met een eenvoudige use case om te zien hoe het in de praktijk presteert.
In dit artikel deel ik mijn hands-on ervaring en waarnemingen over de vectorcapaciteiten van MariaDB door middel van een eenvoudige use case uit te voeren. Specifiek zal ik voorbeeldfuncties voor klantrecensies in MariaDB laden en snelle gelijkaardigheidsschermen uitvoeren om gerelateerde recensies te vinden.
Omgeving Setup
Mijn experiment begon met het opzetten van een Docker container met behulp van MariaDB’s nieuwste uitgave (11.6), die vectorcapaciteiten bevat.
# 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
Nu maak ik een tabel aan en voeg ik er een aantal voorbeeldige klantrecensies aan toe met sentimentscores en embeddings voor elke recensie. Om tekstembeddings te genereren, gebruik ik SentenceTransformer
, dat laat u gebruiken van voorgezet trainende modellen. Specifiek heb ik gekozen voor een model genaamd paraphrase-MiniLM-L6-v2 dat onze klantrecensies in een 384-dimensionele ruimte toewijst.
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()
Nu gaan we de vectorcapabilities van MariaDB gebruiken om gelijke recensies te vinden. Dit is misschien als vragen: “Wat hebben andere klanten gezegd die op ditzelfde moment gelijkaardig was?“. In het volgende voorbeeld zoek ik de twee beste recensies die op een klantrecensie lijken die zegt: “Ik ben super tevreden!“. Hiervoor gebruik ik een van de vectorfuncties (VEC_Distance_Euclidean
) beschikbaar in de nieuwste uitgave.
# 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()
Observaties
- Het is gemakkelijk in te stellen en we kunnen zowel gestructureerde data (zoals product-ID’s en sentimentscores), ongestructureerde data (recensie tekst) en hun vectorrepresentaties in één tabel combineren.
- Ik vind het leuk dat we SQL-syntaxis kunnen gebruiken naast vectoroperaties, wat het gemakkelijker maakt voor teams die al bekend zijn met relatiedatabassen. Hier is de volledige lijst van vectorfuncties die in deze uitgave worden ondersteund.
- De HNSW-index heeft de prestaties van de zoekquery voor gelijke recensies verbeterd voor grotere datasets die ik tot nu toe heb getest.
Conclusie
Over het algemeen ben ik onder de indruk! MariaDB Vector Edition zal bepaalde AI-gebaseerde architecturen vereenvoudigen. Het overbrugt de kloof tussen de traditionele databasewereld en de evoluerende eisen van AI-gereedschappen. In de komende maanden verwacht ik dat deze technologie meer volwassen wordt en hoe de gemeenschap hem in echte wereldtoepassingen opneemt.
Source:
https://dzone.com/articles/mariadb-vector-edition-hands-on-review