私は、20年以上の関連データベースシステムの経験を持つソリューションアーキテクです。最近、私はMariaDBの新しいベクターエディションを探索し始めました。これがAIデータの挑戦に取り組むことができるかどうか見ました。素早く見るととても信じ易いものでした。特に、通常のデータベース設定でAIの魔法を実際に持ってくることができるという点です。しかし、实践中での性能を見るために、簡単な使用例でテストしたいと思いました。
この記事では、MariaDBのベクター機能に関する簡単な使用例を実行しての手元での経験や観察を共有します。具体的には、サンプルの顧客レビューをMariaDBに読み込み、関連性のあるレビューを快速に探索することです。
環境設定
実験は、MariaDBの最新リリース(11.6)をvector機能を含むDockerコンテナを設定することで始まりました。
# 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
以下は、感情スコアと各レビューに対する embedding を含むサンプル顧客レビューのテーブルを作成し、読み込む方法です。テキスト embedding を生成するために、SentenceTransformer
を使用しています。具体的には、感情分析を行う model called paraphrase-MiniLM-L6-v2 を選び、顧客のレビューを384次元の空間にマッピングします。
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()
今回、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と感情スコアなど)、非構造化されたデータ(レビューテキスト)、そしてそれらのベクトル表現を単一のテーブルに結合することができます。
- SQLスyntaxをvector operationと併用することができることが好きです。これにより、既に関連型データベースに熟悉しているチームが便利です。これは、このリリースでサポートされているvector functionsの完全なリストです。
- HNSW indexは、試したデータセットに対する類似性検索クエリの性能を改善しました。
結論
全体として、印象的です!MariaDBのベクターエディションは、AI駆動のアーキテクチャーを簡素化することになるでしょう。これは、传统のデータベースの世界と、AIツールの進化する要求の間に沟を架けるでしょう。この技術が成熟し、コミュニティが実際のアプリケーションでどのように取り入れるのを、来月から楽しみにしています。
Source:
https://dzone.com/articles/mariadb-vector-edition-hands-on-review