Vector Search
What?
向量搜尋(Vector Search)是什麼?
向量搜尋是一種基於數學向量空間的資料檢索方法,用來找到與查詢最相關的資料項目。它通常應用在需要處理非結構化資料的情境,例如圖像、文本或音頻。其核心概念是將這些非結構化資料轉換成高維度的數學向量,並透過計算向量之間的相似度來完成搜尋。
假設你有一個大量的產品圖片庫,使用者上傳一張鞋子的照片想找類似款式,你可以透過向量搜尋直接比對該圖片與庫中所有圖片的特徵,找到最接近的一些選項,而不需要逐一人工標記。
Who?
誰會使用或受影響?
- 開發者:建立 AI 搜尋系統或推薦系統時,開發者需要掌握向量搜尋。
- 數據科學家:分析非結構化資料(如文本或影像)時,這是非常重要的工具。
- 企業用戶:如電商平台、影音串流服務等,需要快速匹配內容以提升使用者體驗。
例如,如果你是一位電商技術人員,可能需要在商品推薦系統中使用此技術,以便根據使用者行為和偏好找到合適產品。
When?
什麼時間點會用到?
- 當你需要處理大量非結構化資料(例如文字、影像或音頻)且希望進行快速檢索時。
- 在建構搜索引擎、推薦系統或內容匹配工具時。
- 當傳統關鍵字檢索不再有效,例如語意模糊或資料太多而難以精確匹配。
舉例來說,在社交媒體平台上,如果希望使用者能夠透過簡單描述(例如「夏日海灘照片」)找到相關貼文,就可以運用向量搜尋技術實現語意層面的匹配。
Where?
出現在架構哪個部分?
- 模型輸出後處理階段:通常在 AI 模型生成特徵嵌入(Feature Embedding)後進行。
- 資料庫層級:專門存儲高維度特徵向量並支持快速相似度比較,如 FAISS 或 Milvus。
- 查詢階段前端與後端交互部分:提供 API 或接口讓使用者進行查詢。
例如,一個完整的架構可能包含:
- 使用 NLP 模型生成文本嵌入
- 存儲嵌入至專門設計的向量資料庫
- 前端依照查詢結果返回相關內容
Why?
解決什麼問題?
- 解決非結構化資料檢索困難:傳統的方法依賴明確標籤,但很多情況下無法提供足夠精確的結果。
- 提升語意理解能力:能基於上下文及語意進行匹配,而不僅僅是表面字詞。
- 提供更高效、更快速的大規模檢索能力:尤其是在百萬甚至億級別以上的大型資料集上工作時。
比如,在影音串流平台中,你希望根據某部影片找到風格相似但不同主題的新片推薦,就可以利用影片特徵所生成的向量進行搜索,而不是僅靠分類標籤。
How?
🛠️ 建立階段
建立一個基本的向量搜尋流程:
-
資料準備:
- 收集要處理的原始資料,例如圖像、文本或音頻。
- 清理並標準化原始資料以便後續處理。
-
特徵提取(Feature Extraction):
- 使用深度學習模型(如 BERT、ResNet 等),將原始資料轉換為嵌入表示(Embedding)。
- 嵌入表示通常是一個高維度數值陣列,用於捕捉該項目的重要特性。
$$ \text{Embedding} = \text{Model}(Input) $$
-
存儲到 Vector DB:
- 將生成好的 Embedding 存到專門設計好的 Vector Database 中,如 FAISS、Milvus 或 LanceDB 等工具,以支持快速相似度比對。
🔍 查詢階段
執行一個查詢流程:
-
輸入查詢內容
- 使用者提交要檢索的信息,例如文字描述或圖像文件。
-
生成 Query 向量
- 利用同樣的方法將查詢輸入轉換為嵌入表示。
-
相似度計算
- 比較 Query 向量與 Vector Database 中所有 Embedding 的距離。常見方法包括歐幾里得距離(Euclidean Distance)、餘弦相似度(Cosine Similarity)。
-
返回結果
- 根據距離排序,返回最相關的一些項目給使用者。
補充說明
📌 範例比較
以下為不同方法對同一組圖像嵌入執行搜索所耗費時間:
| 方法 | 資料集大小 (100萬) | 搜索時間 (秒) |
|---|---|---|
| 傳統 SQL | 無法完成 | 超過 600 |
| FAISS | 0.5 秒 | 0.5 |
| Annoy | 0.7 秒 | 0.7 |
🧠 延伸/常見誤解
-
誤解:「只有大企業才會用得到」
- 實際上,中小型企業也可以利用開源工具實現類似功能。例如小型電商網站就能透過免費資源打造圖片搜索功能。
-
誤解:「越高維越好」
- 高維可能導致「維度詛咒」,使得相似性變得不清楚。因此選擇合理維度才是真正有效的方法。