向量相似度搜尋 (VSS) 已成為 AI 支援的智慧型應用程式的熱門技術。 當 Azure Cache for Redis 與 Azure OpenAI 等模型結合使用時,可以作為向量資料庫,應用於擷取擴增生成式 AI 以及其他分析案例。 本文從高層角度介紹了向量嵌入、向量相似度搜尋的概念,以及如何將 Redis 用作支援智慧型應用程式的向量資料庫。
如需如何使用企業層或 Azure Managed Redis 搭配 Azure OpenAI 的教學課程和範例應用程式,請參閱下列各項:
- 教學課程:使用 Azure 受控 Redis 和 LangChain,利用 OpenAI 嵌入進行向量相似度計算
- 範例:使用 Redis OM for .NET 在由 Dall-E 支援的圖像庫中使用 Redis 作為語意快取
可用性範圍
Redis 的向量搜尋功能需要 Redis Stack,特別是 RediSearch 模組。 這項功能僅適用於 Azure Cache for Redis 和 Azure 受控 Redis 的企業層 。
下表包含不同層級中向量搜尋可用性的資訊。
| 層 | 基本和標準 | 進階 | Enterprise | Enterprise Flash | Azure Managed Redis |
|---|---|---|---|---|---|
| 有現貨 | 否 | 否 | 是的 | 是 (預覽) | 是的 |
什麼是向量內嵌?
向量內嵌是機器學習和自然語言處理中的基本概念,可讓您在高維度向量空間中以數位向量表示數據,例如文字、檔或影像。 向量內嵌主要概念是透過將資料的基礎關聯性和語意對應至此向量空間的點,藉此擷取該資料的基礎關聯性和語意。 這表示將文字或影像轉換成代表資料的數字序列,然後比較不同的數字序列。 這允許使用數學方法操作和分析複雜的資料,以便更輕鬆執行相似度比較、建議和分類等工作。
每個機器學習模型都會將資料分類,並以不同方式產生向量。 此外,通常無法判斷每個向量維度所代表的語意意義。 但由於模型在輸入資料的每個區塊之間保持一致,因此相似字詞、文件或影像的向量也會相似。 例如,相較於字詞 basketball,字詞 baseball 和 rainforest 的內嵌向量彼此更接近。
向量比較
您可使用各種計量以比較向量。 比較向量的最熱門方式是使用餘弦相似度,以測量多維度空間中兩個向量之間的角度餘弦。 向量越接近,角度越小。 其他常見的距離計量包含歐幾里得距離和內積空間。
產生內嵌
多個機器學習模型都支援內嵌 API。 如需使用 Azure OpenAI 服務建立向量內嵌的範例,請參閱了解如何使用 Azure OpenAI 產生內嵌。
什麼是向量資料庫?
向量資料庫是一種可儲存、管理、擷取和比較向量的資料庫。 向量資料庫必須能夠有效率儲存高維度向量,並以最低延遲和高輸送量進行擷取。 非關聯式資料庫最常作為向量資料庫,但也可使用關聯式資料庫,例如透過 pgvector 延伸模組使用 PostgreSQL。
索引和搜尋方法
向量資料庫需要編制資料索引,才能快速搜尋和擷取。 此外,向量資料庫應該支援內建的搜尋查詢,以簡化程式設計體驗。
有數個索引方法,例如:
- FLAT - 暴力密碼破解索引
- HNSW - 使用階層式導覽小型世界圖表,進行高效且可靠的最接近像素搜尋
有數個常見的搜尋方法,包括:
- K-近鄰演算法 (KNN) - 這是一個提供最精確但計算成本較高的詳盡方法。
- 近似最鄰近搜索 (ANN) - 這是一個更有效率的方法,取捨精確度以實現更快速度和較低處理費用。
搜尋功能
最後,向量資料庫會使用所選向量比較方法執行向量搜尋,以傳回最相似的向量。 某些向量資料庫也可執行混合式搜尋,方法是先根據特性或中繼資料 (也儲存在資料庫) 縮小結果,然後再執行向量搜尋。 如此可提高向量搜尋的效率並可高度自訂。 例如,向量搜尋可限制為資料庫中有特定標籤的向量或特定區域中有地理位置資料的向量。
向量搜尋索引鍵案例
向量相似度搜尋可用於多個應用程式。 某些常用案例包含:
- 語意問與答。 建立聊天機器人,以便可回應有關自己資料的問題。 例如,聊天機器人可回應員工有關醫療保健承保範圍的問題。 數百頁密集的醫療保險承保範圍文件可分割成多個區塊,轉換成內嵌向量,並根據向量相似度進行搜尋。 接著,可使用其他大型語言模型 (LLM) 為員工摘要產生的文件。 語意問與答範例
- 文件擷取。 使用 LLM 所提供文字的深層語意理解,提供更豐富文件搜尋體驗,而傳統關鍵字搜尋沒有此功能。 文件擷取範例
- 產品建議。 根據過去使用者活動 (例如搜尋歷程記錄或先前購買),尋找可建議的相似產品或服務。 產品建議範例
- 圖像式搜尋。 搜尋與使用者所擷取圖像或其他產品圖象相似的產品。 圖像式搜尋範圍
- 語意快取。 快取 LLM 完成以降低 LLM 的成本和延遲。 LLM 查詢是使用向量相似度所完成。 若新查詢與先前快取查詢相似程度高,則會傳回快取查詢。 使用 LangChain 的語意快取範例
- LLM 對話記憶體。 在向量記憶體中,將 LMM 對話記憶體保留為內嵌。 您的應用程式可使用向量搜尋以將相關歷程記錄或「記憶體」提取至 LLM 的回應中。 LLM 對話記憶體範例
為什麼選擇 Azure Cache for Redis 儲存和搜尋向量?
Azure Cache for Redis 可有效作為向量資料庫,以儲存內嵌向量和執行向量相似度搜尋。 許多重要的機器學習架構都提供向量儲存體和搜尋的支援,例如:
這些架構具有與 Redis 的豐富整合功能。 例如,Redis LangChain 整合會針對使用 Redis 作為向量存放區時傳遞的中繼資料自動產生索引結構描述。 如此可更輕鬆根據中繼資料篩選結果。
Redis 透過 RediSearch 模組提供廣泛的搜尋功能,可在 Azure Cache for Redis 企業層中取得。 這些包括:
- 包含
Euclidean、Cosine和Internal Product的多個距離計量。 - 支援 KNN (使用
FLAT) 和 ANN (使用HNSW) 編制索引方法。 - 雜湊或 JSON 資料結構的向量儲存
- Top K 查詢
- 向量範圍查詢 (也就是尋找特定向量距離內的所有項目)
- 具有強大查詢功能的混合式搜尋,例如:
- 地理空間篩選
- 數值和字詞篩選
- 前置詞和模糊比對
- 發音比對
- 布林值查詢
此外,Redis 通常是實惠選擇,因為已常用於快取或工作階段存放區應用程式。 在這些案例中,Redis 具有雙重作用,可提供一般快取角色,同時處理向量搜尋應用程式。
儲存和搜尋向量的其他選項為何?
Azure 上有多個其他解決方案,可供向量儲存和搜尋。 其他解決方案包括:
- Azure AI 搜尋服務
- 使用 MongoDB 虛擬核心 API 的 Azure Cosmos DB
-
使用 的
pgvector
相關內容
開始使用內嵌和向量搜尋的最佳方式是自行試試看!