什么是向量搜索Vector Search?

🧠 向所有學習者致敬!

“學習不是裝滿一桶水,而是點燃一把火。” —— 葉芝


我的博客主頁: https://lizheng.blog.csdn.net

🌐 歡迎點擊加入AI人工智能社區!

🚀 讓我們一起努力,共創AI未來! 🚀


現在大家都在采用向量搜索來適應用戶需求。顧名思義,向量搜索是通過一種稱為向量的概念來查找和比較對象的技術。簡單來說,它幫你發現對象之間的相似性,讓你能在數據中找到復雜且符合上下文的關聯。這項技術是AI搜索類應用的幕后功臣。

向量搜索是現代數據平臺(如向量數據庫)中的一項AI驅動的搜索功能,幫助用戶構建更靈活的應用。你不再局限于基礎的關鍵詞搜索,而是能跨越任何數字媒體類型,找到語義相似的信息。

它的核心是眾多機器學習系統之一,由各種規模和復雜度的大語言模型LLM驅動。這些模型可以通過數據庫和傳統平臺獲取,甚至被推送到邊緣設備,在移動端運行。

本文將介紹向量搜索、相關術語、功能及其在現代數據庫技術和人工智能AI創新中的應用。

什么是向量?

向量是一種數據結構,存儲了一組數字。在這里,它指的是保存了數據集數字摘要的向量,可以看作是數據的指紋或摘要,正式名稱叫嵌入。以下是一個簡單的例子:

"紅蘋果": [-0.02511234? 0.05473123 -0.01234567 ...? 0.00456789? 0.03345678 -0.00789012]

向量搜索的好處

向量搜索為數據庫及其應用帶來了一系列新能力。簡而言之,它幫助用戶在海量信息(即語料庫)中找到更符合上下文的匹配結果。接近度的概念很重要——向量搜索通過統計方法將項目分組,展示它們的相似性或相關性。這不僅適用于文本,還適用于更多類型的數據,盡管我們的例子多為文本,以便與傳統搜索系統對比。

向量搜索使用接近度或相似性搜索

這張圖展示了向量搜索如何在3D空間中映射、查找和分組“相似”對象的可視化示例。

獲取海量通用知識

向量搜索也是將AI工具引入應用的好方法,提供了傳統搜索工具無法實現的靈活適應性。由于有許多公開的大語言模型(LLM),任何公司都可以采用它們作為應用搜索的基礎。LLM存儲了大量信息,搜索它們的結果能為你的應用帶來指數級價值,而無需編寫復雜代碼。這是許多應用通過新功能升級的方式之一。

超級搜索 vs. 傳統搜索

幸運的是,在更復雜的場景中,向量搜索也是一種更快的搜索方法。傳統的關鍵詞搜索系統可以優化以在文檔中查找匹配文本,但一旦需要應用復雜的模糊匹配算法或極端的布爾謂詞變通方案(比如多個WHERE子句),搜索就會變慢且更復雜。

在復雜環境中成功搜索所需的各種權衡,可以通過向量搜索避免。不過,這需要一個服務級API(如OpenAI)和足夠的資源來連接應用和LLM。根據你選擇的LLM,你會有不同的選擇和限制。

傳統搜索與向量搜索的區別

上述好處與兩種搜索方法的技術差異有所重疊。本節我們將深入探討這些差異的核心。

上下文與語義搜索

許多搜索系統使用關鍵詞或短語搜索,優化為查找精確的文本匹配或使用關鍵詞頻率最高的文檔。但問題是,這些方法可能缺乏上下文和靈活性。例如,搜索“樹”可能永遠無法匹配實際樹種名稱的數據,盡管這些數據非常相關。這種上下文匹配是語義搜索的一種形式——單詞之間的上下文和關系很重要。

相似性

向量搜索不僅關乎語義關系。例如,在文本應用中,它超越了使用單詞和短語,還能通過輸入單詞、句子、段落等,在更深層次上匹配語義和上下文,找到相似的文檔。

相似性搜索也適用于圖像。如果你要寫一個比較兩張圖像的應用,你會怎么做?如果只是逐個像素比較,你只能找到顏色、分辨率、編碼等完全相同的圖像。但如果你能分析圖像并生成內容向量嵌入,就可以比較它們并找到匹配項。在圖像例子中,向量嵌入描述了每張圖像的內容,然后讓你比較它們——這是一種更強大的比較和發現“接近度”的方法。

向量搜索的工作原理

向量搜索通過創建和比較向量嵌入來工作。其原理是數據可以轉換為數字向量表示(嵌入),并與其他以類似數字表示(使用LLM)編目的數據進行比較。

它將不同類型的數字內容(文本、音頻、視頻等)索引為神經網絡能理解的通用語言。

LLM創建的模型保存了代表訓練數據的向量。例如,維基百科的每個段落都可以被摘要并索引為向量。然后,用戶可以提交自己的數據向量(通常通過嵌入過程生成)到向量搜索系統,以找到相似的段落。

雖然背后有很多復雜的工作,但這就是其核心。

構建向量搜索應用的三個步驟

構建或使用向量搜索應用包括三個階段:

  1. 為自定義數據或查詢創建嵌入
  2. 使用基于大語言模型(LLM)訓練的向量引擎比較結果,找到與模型中數據語料庫最匹配的語義數據
  3. 將LLM結果與自定義應用數據或數據庫進行比較,找到更相關的匹配

第一步——為請求創建嵌入

嵌入在向量應用中就像數據的指紋,類似于稍后可以在索引中使用的鍵。一段數據(文本、圖像、視頻等)被發送到向量嵌入應用,轉換為數字表示(向量)。這個向量嵌入代表了輸入到嵌入應用的對象。幕后,一個大語言模型(LLM)引擎被用來創建嵌入,以便在下一步中從同一LLM中檢索匹配項。

在數據庫領域,表列中的文本可以通過嵌入引擎處理,向量對象可以保存在該行或JSON對象的屬性中。每個文檔或記錄的嵌入被索引,以便在搜索請求期間進行內部比較。

假設有一個零售目錄的網頁應用,用戶可以輸入描述服裝類型和顏色的文本來搜索庫存。應用將用戶請求發送到LLM進行向量嵌入處理。LLM用于計算向量表示以供下一步使用。“紅蘋果”可能變成如下所示的高維數組向量,以JSON存儲:

{

"word": "紅蘋果",

"embedding": [0.72, -0.45, 0.88, 0.12, -0.65, 0.31, 0.55, 0.76]

}

這是一個過度簡化的例子,但本質上,向量嵌入只是通過特定機器學習過程分析數據后生成的多維數組。嵌入有不同的類型和大小,基于各種LLM,但這超出了本文的范圍。

第二步——從LLM中查找匹配項

假設LLM已經為其構建數據的所有部分創建了嵌入。如果LLM是用維基百科訓練的,那么每個段落可能都有自己的嵌入。大量的嵌入!

搜索階段是找到最接近匹配的嵌入的過程。向量搜索引擎可以接受現有嵌入,或從搜索查詢動態創建一個。例如,它可以接受應用中的用戶文本輸入或數據庫查詢,并使用LLM查找模型中的相關內容。然后,它將最相關的匹配返回給應用。

繼續零售例子,“藍色T恤”的向量嵌入可以作為查找相似數據的鍵。應用將該向量發送到中央LLM,根據構建LLM時分析的文本描述或圖像,找到最相似和語義相關的內容。

例如,你可能會得到一個包含五個文檔的列表,它們的向量嵌入在相似性上匹配。如下所示,每個文檔都有自己的向量表示。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

{

"embeddings": [

{

"word": "紅蘋果",

"embedding": [0.72, -0.45, 0.88, 0.12, -0.65, 0.31, 0.55, 0.76]

},

{

"word": "爛蘋果",

"embedding": [0.71, -0.42, 0.85, 0.15, -0.68, 0.29, 0.53, 0.78]

},

{

"word": "小柯基",

"embedding": [0.73, -0.46, 0.87, 0.11, -0.64, 0.33, 0.56, 0.74]

},

{

"word": "大別野",

"embedding": [0.75, -0.41, 0.89, 0.14, -0.67, 0.28, 0.54, 0.77]

},

{

"word": "云南滇紅",

"embedding": [0.72, -0.44, 0.86, 0.13, -0.66, 0.30, 0.55, 0.76]

},

{

"word": "牛仔褲",

"embedding": [0.70, -0.43, 0.84, 0.16, -0.69, 0.27, 0.52, 0.79]

}

]

}

第三步——查找與自定義數據的匹配項

如果你只需要查找LLM中存儲的信息匹配項,那么工作就完成了。但真正自適應的應用會希望從內部數據源(如企業數據庫)中提取匹配和信息。

假設數據庫中的文檔或記錄已經保存了向量嵌入,并且你從LLM中獲得了匹配項。現在,你可以將這些匹配項發送到數據庫的向量搜索功能中,找到相關的數據庫文檔。操作上,它就像另一個索引字段,但會給搜索結果帶來更定性的感覺。

向量搜索如何找到匹配項?

向量搜索結合了三個概念:用戶生成的數據(請求)、包含代表數據源模型的LLM語料庫(模型),以及數據庫中的自定義數據(自定義匹配)。向量搜索讓這三個因素協同工作。

向量搜索支持什么?

只要能為任何類型的數據創建嵌入,并以相同方式(來自同一LLM)與其他嵌入進行比較,向量搜索就能找到相似性。

根據使用的LLM,結果可能會有很大差異,因為LLM的訓練數據來源不同。例如,如果你想搜索相似的圖像,但使用的LLM只包含古典文學,那么你會得到無法使用的結果(盡管如果是古典作家的圖片,可能還有點希望)。

同樣,如果你正在構建一個法律案例,而你的LLM只在Reddit數據上訓練,那么你可能會陷入一個獨特的場景,或許有一天能拍成一部好電影(當然,是在你被取消律師資格之后)。

這就是為什么確保支持你體驗的LLM針對正確的向量搜索用例和你所需的信息非常重要。非常通用的LLM會有更多上下文,但針對你行業的專業LLM會為你的業務提供更準確和細致的信息。

大規模進行向量搜索

任何執行向量搜索的企業系統在生產環境中都必須能夠擴展(參見我們的云數據復制指南)。這使得能夠復制和分片索引的向量搜索系統尤為關鍵。

當系統需要搜索索引以查找匹配項時,工作負載可以分布在多個節點上。

同樣,創建新嵌入并為其建立索引也將受益于資源隔離,這樣其他應用功能不會受到影響。資源隔離意味著向量搜索相關功能擁有自己的內存、CPU和存儲資源。

在數據庫環境中,確保所有服務都正確分配資源非常重要,這樣服務之間不會競爭。例如,表查詢、實時分析、日志記錄和數據存儲服務都需要自己的空間,向量搜索服務也是如此。

分布式LLM訪問API也很重要。由于許多其他服務可能調用嵌入,生成嵌入的API和系統也必須能夠隨著流量增長而擴展。對于基于云的LLM服務,確保在開始原型設計之前,它們的服務級別協議能夠滿足你的生產需求。

外部服務通常可以快速高效地擴展,但隨著規模擴大,需要額外資金。在評估選項時,確保清楚了解價格滑動比例。

向量搜索的未來

大多數應用開發將由混合搜索場景驅動。單一的搜索或查詢方法將無法滿足未來的靈活性需求。混合搜索能力意味著你可以使用向量搜索獲取語義匹配,同時使用基礎SQL謂詞甚至地理空間索引縮小結果范圍。

將這些功能結合到單一的混合搜索體驗中,將使開發者更容易從應用中提取最大靈活性。這包括將所有向量搜索功能擴展到邊緣移動設備以及在云端和本地。

檢索增強生成(RAG)將允許開發者在LLM之上添加更多自定義上下文感知。這將減少重新訓練LLM的需求,同時為開發者提供保持嵌入和匹配最新的靈活性。

向量搜索還將通過一種可插拔知識模塊定義,允許企業基于來自不同來源的LLM引入廣泛的信息。想象一個維護電線桿的移動現場應用。語義圖像搜索可能幫助識別電線桿物理結構的等等問題。

向量搜索常見問題

為什么向量搜索很重要?

向量搜索很重要,因為它提供了一種新穎的方法,利用最新的機器學習和AI技術,在數字數據之間找到相似性和上下文。

什么是向量搜索嵌入?

向量嵌入是保存了分析數據獨特數字表示的向量。機器學習(ML)工具使用大語言模型(LLM)分析輸入數據并生成描述數據的向量嵌入。然后,向量嵌入被保存在數據庫或文件中供后續使用。

傳統搜索和向量搜索有什么區別?

主要區別在于傳統搜索優化為查找精確的關鍵詞或短語匹配,而向量搜索旨在在更明確的語義上下文中找到相似概念。

向量搜索面臨哪些挑戰?

主要挑戰是應用必須依賴大語言模型(LLM)來幫助創建嵌入和查找上下文匹配。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76400.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76400.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76400.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

搜索工具Everything下載安裝使用教程(附安裝包)

文章目錄 前言一、搜索工具Everything介紹二、搜索工具Everything使用步驟1.軟件下載2.版本選取3.啟動軟件4.文件搜索 前言 本教程將詳細為您介紹 Everything 的下載、安裝與使用方法,助您快速上手,充分利用這款工具的強大功能,告別文件查找…

element-plus中,Upload上傳組件的使用 + 后端處理

目錄 一. 案例一&#xff1a;用戶更換個人頭像 1.前端實現 2.后端實現 ①引入阿里云oss的依賴 ②編寫AliOSSUtils工具類 ③編寫controller層 ④編寫service層 ⑤編寫mapper層 3.效果展示 4.重點理解 結語 一. 案例一&#xff1a;用戶更換個人頭像 1.前端實現 <…

HarmonyOS-ArkUI Rcp模塊類關系梳理

前言 本文重點解決的是&#xff0c;按照官網學習路徑學習Tcp模塊內容時&#xff0c;越看越混亂的問題。仿照官網案例&#xff0c;書寫代碼時&#xff0c;產生的各種疑惑。比如&#xff0c;類與類之間的關系&#xff0c;各種配置信息究竟有多少&#xff0c;為什么越寫越混亂。那…

【云計算物理網絡】數據中心網絡架構設計

云計算的物理基礎&#xff1a;數據中心網絡架構設計 一、技術背景&#xff1a;從“三層架構”到“云原生網絡”二、技術特點&#xff1a;云數據中心網絡的四大支柱三、技術細節&#xff1a;CLOS架構的實現挑戰四、未來方向&#xff1a;從“連接設備”到“感知服務”結語&#x…

window11 通過cmd命令行安裝 oh my zsh 的教程

步驟 1&#xff1a;安裝 WSL 2 和 Ubuntu 1. 以管理員身份打開 CMD wsl --install -d Ubuntu此命令會自動安裝 WSL 2 和 Ubuntu 發行版。 安裝完成后重啟系統。 初始化 Ubuntu 在開始菜單中打開 Ubuntu&#xff0c;設置用戶名和密碼。 步驟 2&#xff1a;在 WSL 的 Ubunt…

gdb 調試命令記錄

啟動調試 gdb ./待調試的程序 #不帶參數 (gdb) run #帶參數 gdb --args ./your_program arg1 arg2 arg3 (gdb) run arg1 arg2 arg3 #圖形化代碼界面 (gdb) layout src基礎調試命令 命令縮寫作用run [args]r運行程序&#xff08;可帶命令行參數&#xff09;break <locatio…

STM32F103低功耗模式深度解析:從理論到應用實踐(上) | 零基礎入門STM32第九十二步

主題內容教學目的/擴展視頻低功耗模式什么是低功耗&#xff0c;模式介紹&#xff0c;切換方法。為電池設備開發做準備。 師從洋桃電子&#xff0c;杜洋老師 &#x1f4d1;文章目錄 一、低功耗模式概述1.1 為什么需要低功耗模式&#xff1f;1.2 基本實現原理 二、低功耗模式的本…

JavaScript instanceof 運算符全解析

JavaScript instanceof 運算符全解析 核心語義: 判斷一個對象(object)是否屬于某個構造函數(constructor)或類的實例,基于原型鏈(prototype chain)實現類型檢測。 一、JavaScript 中的基礎用法 1. 語法結構 object instanceof constructor 返回值:布爾值(true/fal…

電腦基礎之word基礎操作

word是常用的辦公軟件之一&#xff0c;用于文檔編輯&#xff0c;如合同/報告撰寫、論文等?。 一、簡介 word文檔最早由微軟推出&#xff0c;通過Microsoft Office Word軟件創建和編輯。由于涉及版權付費問題&#xff0c;大多數個人使用盜版軟件。后來金山出了WPS office免費軟…

深度解析Python代碼中的廣告信息提取與JSON處理

哈嘍,大家好,我是木頭左! 在當今數字化時代,廣告無處不在,而從廣告中提取關鍵信息并進行處理則成為了一項重要的技能。本文將深入剖析一段Python代碼,該代碼旨在從給定的JSON格式字符串中提取廣告相關信息,并對其進行解析和處理。通過這段代碼,將展示如何運用Python的j…

base64在線解碼工具

我們經常會用到base64編碼&#xff0c;相應的base64解碼成為日常必備&#xff0c;所有我們需要擁有一個base64在線解碼工具 base64在線解碼工具

Linux——進程信號(3)(信號保存與信號捕捉)

進程信號3 信號保存信號相關概念詳解信號集&#xff08;sigset_t&#xff09;及操作函數詳解 信號捕捉信號捕捉的詳細流程解析信號捕捉的核心概念信號捕捉的完整流程&#xff08;以 SIGQUIT 為例&#xff09; 信號保存 信號相關概念詳解 1.核心概念 (1) 信號遞達&#xff08…

批量在 txt 記事本文件的指定位置插入行,如在最末尾位置插入行

我們在網上下載的小說經常可以看到內容中每隔多少行都會現一些網站名稱和聯系方式等廣告信息&#xff0c;這些都是固定或者隨機插入在小說正文中的。那是怎么樣實現在文本文件中指定位置插入這些行的呢&#xff1f;今天就給大家介紹一下如何在 txt 記事本文件或者其它類型的文本…

python的內存管理機制

目錄 內存分配方式自動內存管理內存分配策略 垃圾回收機制引用計數垃圾回收對象創建和引用關系引用計數的狀態刪除變量 標記 - 清除垃圾回收 內存分配的區域劃分棧內存堆內存 內存管理的優化內存池技術對象共享 Python 的內存管理機制是其運行效率和安全性的重要保障&#xff0…

火山引擎coze用戶市場

火山引擎 **Coze**&#xff08;扣子&#xff09;的用戶市場主要集中在 **需要快速構建和部署智能對話應用的企業及開發者群體**&#xff0c;覆蓋多個行業與場景。以下是具體分析&#xff1a; --- ### **一、核心用戶群體** 1. **企業用戶** - **互聯網/科技公司**&#…

Java 責任鏈模式 詳解

責任鏈模式詳解 一、責任鏈模式概述 責任鏈模式(Chain of Responsibility Pattern)是一種行為型設計模式&#xff0c;它允許你將請求沿著處理鏈傳遞&#xff0c;直到有一個處理者能夠處理它為止。這種模式解耦了請求的發送者和接收者&#xff0c;使多個對象都有機會處理請求。…

【C++初階】--- string類

1.STL簡介 STL(standard template libaray-標準模板庫)&#xff1a;是C標準庫的重要組成部分&#xff0c;不僅是一個可復用的組件庫&#xff0c;而且是一個包羅數據結構與算法的軟件框架。 2.string類 2.1什么是string類 std::string 類是 C 標準庫中用于處理和操作字符串…

Ubuntu 20.04 中 Git 的安裝、配置和基本操作指南

本文為經驗 所談 使用版本為ubuntu20.04 1 ubuntu的git初始化 1.安裝git sudo apt-get install git 可通過git --version 命令查看&#xff0c;正常輸出git版本號即安裝成功。 2.配置用戶名和郵箱名 git config --global user.name "Your Name" git config --globa…

conda 激活環境vscode的Bash窗口

多份conda環境注意事項&#xff0c;當時安裝了兩個conda環境&#xff0c;miniconda和conda&#xff0c;導致環境總是沖突矛盾。初始化時需要更加注意。 $ C:/Users/a_hal/miniconda3/Scripts/conda.exe init bash能夠顯示用哪里的conda環境命令執行。 然后直接conda activate…

Mac下小智AI本地環境部署

可以進行聊天、編寫程序、播放歌曲等等的小智語音聊天小助手&#xff0c;在Mac環境下修改源代碼&#xff0c;值得擁有。本篇內容主要講解Mac下環境的搭建&#xff0c;WebSocket的修改。注&#xff1a;環境python3.12.0、ESP-IDF5.4.0、開發板ESP32S3。 目錄 1.Git安裝2.Python…