MariaDB 向量版-專為人工智慧設計

PetterLiu發表於2024-10-22

image

作為一名在關係型資料庫系統領域擁有二十多年經驗的解決方案架構師,我最近開始探索 MariaDB 的新向量版,看看它能否解決我們面臨的一些人工智慧資料挑戰。快速瀏覽一下似乎很有說服力,尤其是它如何將人工智慧的魔力直接帶入常規資料庫設定中。不過,想透過一個簡單的用例對它進行測試,看看它的實際表現如何。在本文中,將透過執行一個簡單的用例,分享對 MariaDB 向量功能的實踐經驗和觀察結果。具體來說,將把客戶評論樣本載入到 MariaDB 中,並執行快速相似性搜尋以查詢相關評論。

image

什麼是 "向量搜尋”

語義文字搜尋
影像搜尋
音樂搜尋
生成式人工智慧--RAG,檢索增強生成

image

環境設定

Python 3.10 或更高版本
Docker


實驗從使用 MariaDB 的最新版本(11.6)(包含向量功能)設定 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

現在,建立一個表格並載入客戶評論樣本,其中包括每條評論的情感評分和嵌入。為了生成文字嵌入,使用了 SentenceTransformer,它可以讓你使用預先訓練好的模型。具體來說,決定使用一個名為 paraphrase-MiniLM-L6-v2 的模型,它能將我們的客戶評論對映到 384 維空間中。SentenceTransformer是一個強大的Python庫,由UKP實驗室開發並維護,旨在簡化多語言文字和影像嵌入的建立過程。SentenceTransformer能夠將句子或文字轉換成固定長度的向量,這些向量可以在高維空間中進行比較,從而判斷文字之間的語義相似性。例如,透過計算兩個句子嵌入向量之間的餘弦相似度,可以量化它們之間的語義接近程度。這一功能在文字匹配、資訊檢索等領域具有廣泛應用。語義搜尋透過理解搜尋查詢的內容來提高搜尋的準確性,而不是僅僅依賴於詞彙匹配。SentenceTransformer將語料庫中的所有條目嵌入到向量空間中,在搜尋時,查詢也會被嵌入到相同的向量空間中,並從語料庫中找到最接近的嵌入。這種基於嵌入的相似性搜尋方法能夠顯著提高搜尋結果的準確性和相關性。

import mysql.connector
import numpy as np
from sentence_transformers import SentenceTransformer

model = SentenceTransformer('paraphrase-MiniLM-L6-v2')

# 我已經建立了一個名為 vectordb 的資料庫
connection = mysql.connector.connect(
host="localhost",
user="root",
password="<password>", # Replace me
database="vectordb"
)
cursor = connection.cursor()

# 建立一個表來儲存帶有情感評分和嵌入的客戶評論。

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;
""")

# 評論樣本

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)
]

# 將樣本評論載入向量資料庫
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 的向量功能來查詢類似的評論。這更像是在問 "What other customers said similar to this review?與此評論類似的其他客戶評論有哪些?在下面的示例中,要找出與客戶評論 “I am super satisfied我超級滿意!”相似的前 2 條評論。為此,將使用最新版本中的一個向量函式(VEC_Distance_Euclidean)

# 將目標客戶的評論轉化為向量
target_review_embedding = model.encode("I am super satisfied!")

# 使用 MariaDB 的 VEC_Distance_Euclidean 函式查詢前 2 條類似評論

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 語法的功能,這讓已經熟悉關聯式資料庫的團隊更容易上手。以下是該版本支援的向量函式的完整列表。HNSW 索引提高了目前嘗試的較大資料集的相似性搜尋查詢效能。


效能對比

  • MariaDB 向量版 提交 23ecb6ec89a:MariaDB 伺服器的本地向量搜尋功能
  • pgvector commit bb424e96e7: PostgreSQL 的向量相似性搜尋擴充套件
  • Qdrant 1.5.1, client version 1.5.4: 向量資料庫(不包括二進位制量化,因為二進位制量化對所用資料集的召回率很低)
  • RediSearch 2.6.13 commit f966d37: Redis 的查詢和索引引擎
  • Weaviate 3.16.0: 向量資料庫

MariaDB 向量預覽版實現了分層導航小詞語(HNSW)演算法的改進版本。其搜尋效能可與其他向量搜尋實現相媲美,在使用多個連線時,其可擴充套件性更勝一籌。
image
單執行緒查詢效能(向上和向右更好)


image

多執行緒查詢效能(向上和向右更好)


MariaDB Vector的效能極具競爭力。在較小的資料集上,在給定的召回率下,MariaDB Vector的qps最高,RediSearch次之;在大型資料集上,MariaDB Vector緊隨RediSearch之後。另一方面,MariaDB Vector建立索引的速度比RediSearch快。有趣的是,專門的單用途向量資料庫並沒有快多少。它們的搜尋速度比 MariaDB Vector 和 RediSearch 都要差。除了在 GIST 資料集上的 Qdrant,其他資料庫的索引建立時間也沒有提高。

結論


總的來說,印象深刻!MariaDB 向量版將簡化某些人工智慧驅動的架構。它在傳統資料庫世界和不斷髮展的人工智慧工具需求之間架起了一座橋樑。在接下來的幾個月裡,期待著看到這項技術如何成熟,以及社群如何在實際應用中採用它。



今天先到這兒,希望對雲原生,技術領導力, 企業管理,系統架構設計與評估,團隊管理, 專案管理, 產品管理,資訊保安,團隊建設 有參考作用 , 您可能感興趣的文章:
構建創業公司突擊小團隊
國際化環境下系統架構演化
微服務架構設計
影片直播平臺的系統架構演化
微服務與Docker介紹
Docker與CI持續整合/CD
網際網路電商購物車架構演變案例
網際網路業務場景下訊息佇列架構
網際網路高效研發團隊管理演進之一
訊息系統架構設計演進
網際網路電商搜尋架構演化之一
企業資訊化與軟體工程的迷思
企業專案化管理介紹
軟體專案成功之要素
人際溝通風格介紹一
精益IT組織與分享式領導
學習型組織與企業
企業創新文化與等級觀念
組織目標與個人目標
初創公司人才招聘與管理
人才公司環境與企業文化
企業文化、團隊文化與知識共享
高效能的團隊建設
專案管理溝通計劃
構建高效的研發與自動化運維
某大型電商雲平臺實踐
網際網路資料庫架構設計思路
IT基礎架構規劃方案一(網路系統規劃)
餐飲行業解決方案之客戶分析流程
餐飲行業解決方案之採購戰略制定與實施流程
餐飲行業解決方案之業務設計流程
供應鏈需求調研CheckList
企業應用之效能實時度量系統演變

如有想了解更多軟體設計與架構, 系統IT,企業資訊化, 團隊管理 資訊,請關注我的微信訂閱號:

image_thumb2_thumb_thumb_thumb_thumb[1]

作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。 該文章也同時釋出在我的獨立部落格中-Petter Liu Blog。

相關文章