Как специалист по решениям с опытом работы более двух десятилетий в системах реляционных баз данных, недавно я начал исследовать новую Векторную Ediţie MariaDB, чтобы увидеть, может ли она решить некоторые из проблем с данными, с которыми наблюдается AI. Быстрое ознакомление казалось довольно убедительным, особенно с точки зрения того, как она может принести магию AI прямо в обычную установку базы данных. However, я хотел протестировать ее с простым casem, чтобы увидеть, как она работает в практике.
В этой статье я поделюсь своим опытом и наблюдениями о векторных возможностях MariaDB, проведя простую use case. SPECIFICALLY, я загружу примеры отзывов клиентов в MariaDB и выполняю быстрые поиски сходства, чтобы найти связанные отзывы.
Установка среды
Мой опыт начался с установки контейнера Docker с использованием последнего выпуска MariaDB (11.6), включающего векторные возможности.
# 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
Теперь создадим таблицу и заполним ее примерными отзывами клиентов, включая оценки настроения и embeddings для каждого отзыва. Для генерации текстовых embeddings я использую SentenceTransformer
, который позволяет использовать предобученные модели. SPECIFICALLY, I DECIDED TO USE A MODEL CALLED paraphrase-MiniLM-L6-v2, WHICH MAPS OUR CUSTOMER REVIEWS INTO A 384-DIMENSIONAL SPACE.
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()
Теперь воспользуемся vector capabilities MariaDB, чтобы найти схожие отзывы. Это скорее вопрос “Что другие клиенты говорили похоже на этот отзыв?“. В приведенном ниже примере я найду два топ-2 отзыва, схожих с отзывом клиента, где сказано “Я очень доволен!“. Для этого я использую одну из vector functions (VEC_Distance_Euclidean
), доступных в последнем релизе.
# 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()
Отметки
- Удобно настраивается, и мы можем объединить и структурированные данные (как продукт ID и оценки настроения), и неструктурированные данные (текст отзыва), и их vector представления в одной таблице.
- Я нравится ее способность использовать SQL синтаксис вместе с vector операциями, что делает его простым для команд, уже знакомых с relational databases. Вот полный список vector functions поддерживаемых в этом релизе.
- HNSW индекс улучшил производительность запроса поиска сходства для больших dataset, которые я протестировал до сих пор.
Заключение
В целом, я был впечатлен! Версия Vector Edition MariaDB упростят certain AI-driven архитектуры. Она может закрыть пробел между традиционным миром баз данных и развивающимися требованиями инструментов AI. В следующие месяцы я с нетерпением жду, как эта технология созреет и как сообщество примет ее в реальных приложениях.
Source:
https://dzone.com/articles/mariadb-vector-edition-hands-on-review