وهو مختص بتخطيط الحلول وله خبرة تتجاوز عشرين عامًا في الأنظمة ال关系ية البياناتية، بدأت مؤخرًا في استكشاف نسخة الـ MariaDB الجديدة والتي تحتوي على الوسيلة الجديدة لرؤية إذا كانت قادرة على معالجة بعض تحديات البيانات التي نواجهها الآن. وكان النظر السريع مقنعًا بشكل كبير، وخاصة مع كيفية جلبها السحر التعلمي الى مجال القاعدة البياناتية العادية. ومع ذلك، أردت إختبارها بحالة سهلة لرؤية كيف تؤدي فعلًا.
في هذا المقال، سأشارك خبرتي التجريبية وملاحظاتي حول قدرات MariaDB التوافر المبادئ الخط المتوسطبواسطة تنفيذ حالة سهلة. بالتحديد، سأقوم بتحميل مراسلات معرفية للعملاء إلى 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
الآن، أنشئ جدولًا وقم بتحميله بمراجعات العملاء العينة التي تتضمن درجات المشاعر والتجسيدات لكل مراجعة. لتوليد تجسيدات النص، أستخدم SentenceTransformer
، الذي يتيح لك استخدام نماذج مدربة مسبقًا. على وجه التحديد، قررت أن أستخدم نموذجًا يسمى 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 مراجعات مشابهة لمراجعة عميل تقول “أنا راضٍ جدًا!“. للقيام بذلك، أستخدم واحدة من وظائف المتجهات (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()
الملاحظات
- من السهل إعدادها ويمكننا دمج كل من البيانات الهيكلية (مثل معرفات المنتجات ودرجات المشاعر)، والبيانات غير الهيكلية (نص المراجعة)، وتمثيلاتها المتجهية في جدول واحد.
- أحب قدرتها على استخدام صيغة SQL بجانب عمليات المتجهات مما يجعلها سهلة للفرق التي اعتادت بالفعل على قواعد البيانات العلائقية. إليك القائمة الكاملة لـ وظائف المتجهات المدعومة في هذا الإصدار.
- حسن مؤشر HNSW أداء استعلام البحث عن التشابه للبيانات الكبيرة التي جربتها حتى الآن.
الخاتمة
في المجموع، أنا مُدهش! وال版本文本 الويكتوريا لماريا دبلوماسيوس ستبسم الأمور البسيطة للهياكل المقاولة بالتعلم التجازي. وهي تبني فجوة بين عالم البيانات التقليدية ومتطلبات الأدوات التعلمية التي تتطور. في الشهور القادمة، أتطلع لرؤية كيف يتطور هذه التكنولوجيا وكيف تتبنيه المجموعة في التطبيقات العالمية.
Source:
https://dzone.com/articles/mariadb-vector-edition-hands-on-review