Com mais de duas décadas de experiência em sistemas de bases de dados relacionais, recentemente comecei a explorar a nova Edição Vector do MariaDB para ver se poderia resolver alguns dos desafios de dados de AI que estamos enfrentando. Uma olhada rápida pareceu bastante convincente, especialmente com o quanto poderia trazer o milagre do AI diretamente em um ambiente de banco de dados padrão. No entanto, quis testá-lo com um caso de uso simples para verificar sua performance prática.
Neste artigo, compartilharia minha experiência e observações práticas sobre as capacidades vetoriais do MariaDB executando um simples caso de uso. Especificamente, vou carregar avaliações de clientes de exemplo no MariaDB e executar buscas de similaridade rápida para encontrar avaliações relacionadas.
Configuração do Ambiente
Meu experimento começou com a configuração de um container Docker usando a última versão (11.6) do MariaDB que inclui capacidades vetoriais.
# 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
Agora, crie uma tabela e preencha-a com avaliações de clientes de exemplo que incluem pontuações de sentimento e embeddings para cada avaliação. Para gerar embeddings de texto, estou usando SentenceTransformer
, que permite que use modelos pré-treinados. especificamente, decidi usar um modelo chamado paraphrase-MiniLM-L6-v2 que leva as nossas avaliações de clientes e as mapeadas para um espaço de 384 dimensões.
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()
Agora, vamos aproveitar as capacidades vetoriais do MariaDB para encontrar avaliações semelhantes. Isto é mais como perguntar “O que outros clientes disseram semelhantes a esta avaliação?“. No exemplo abaixo, eu vou encontrar as duas avaliações semelhantes à de um cliente que diz “Estou super satisfeito!“. Para fazer isso, estou usando uma das funções vetoriais (VEC_Distance_Euclidean
) disponíveis na versão mais 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()
Observações
- É fácil de configurar e podemos combinar ambos dados estruturados (como ID do produto e pontuações de sentimento), dados não estruturados (texto da avaliação) e suas representações vetoriais em uma única tabela.
- Gosto de sua capacidade de usar sintaxe SQL juntamente com operações vetoriais, o que torna fácil para equipes que já estão familiarizadas com bases de dados relacionais. Aqui está a lista completa de funções vetoriais suportadas nesta versão.
- O índice HNSW melhorou a performance da consulta de busca de similaridade para conjuntos de dados maiores que eu tentei até agora.
Conclusão
Geralmente, estou impressionado! A Edição Vector de MariaDB vai simplificar certas arquiteturas baseadas em AI. Ela atua como ponte entre o mundo tradicional das bases de dados e as demandas evolutivas de ferramentas de AI. Nas próximas meses, aguardo com interesse ver como essa tecnologia se desenvolve e como a comunidade a adota em aplicações do mundo real.
Source:
https://dzone.com/articles/mariadb-vector-edition-hands-on-review