【向量數據庫】用披薩點餐解釋向量數據庫:一個美味的技術類比

文章目錄

  • 前言
  • 場景設定:披薩特征向量化
  • 顧客到來:生成查詢向量
  • 相似度計算實戰
    • 1. 歐氏距離計算(值越小越相似)
    • 2. 余弦相似度計算(值越大越相似)
  • 關鍵發現:度量選擇影響結果
  • 現實啟示
  • 結語


前言

想象你走進一家數字化的披薩餐廳,這里用AI技術優化了點餐流程。讓我們通過這個生動場景來解釋向量數據庫的核心概念。

場景設定:披薩特征向量化

這家餐廳把每種披薩用3個特征表示(實際應用中可能有幾百維):

  • 咸度(0-10)
  • 芝士量(0-10)
  • 辣度(0-10)

現有3種披薩在"向量菜單"中:

披薩類型向量表示
瑪格麗特[3, 8, 1]
辣香腸[7, 6, 5]
四季披薩[5, 5, 2]

顧客到來:生成查詢向量

你說:“我想要一份比較咸、芝士多但不太辣的披薩”,AI將其轉換為查詢向量:
[7, 9, 2]

相似度計算實戰

1. 歐氏距離計算(值越小越相似)

數學定義

L2(x,y) = √Σ(x_i - y_i)2

計算與瑪格麗特披薩的距離:

√[(7-3)2 + (9-8)2 + (2-1)2] 
= √(16 + 1 + 1) 
= √18 ≈ 4.24

與辣香腸的距離:

√[(7-7)2 + (9-6)2 + (2-5)2]
= √(0 + 9 + 9)
= √18 ≈ 4.24

與四季披薩的距離:

√[(7-5)2 + (9-5)2 + (2-2)2]
= √(4 + 16 + 0)
= √20 ≈ 4.47

結果:瑪格麗特和辣香腸并列最近(4.24)

2. 余弦相似度計算(值越大越相似)

數學定義:

cos(x,y) = (x·y)/(||x||*||y||)

計算與瑪格麗特披薩的相似度:

分子:7*3 + 9*8 + 2*1 = 21 + 72 + 2 = 95
分母:√(72+92+22) * √(32+82+12) 
= √(49+81+4) * √(9+64+1)
= √134 * √74 ≈ 11.58 * 8.60 ≈ 99.6

相似度:95/99.6 ≈ 0.954
與辣香腸的相似度:

7*7 + 9*6 + 2*5 = 49 + 54 + 10 = 113
√134 * √(72+62+52) = 11.58 * √110 ≈ 11.58*10.49≈121.5
相似度:113/121.5 ≈ 0.930

與四季披薩的相似度:

7*5 + 9*5 + 2*2 = 35 + 45 + 4 = 84
√134 * √(52+52+22) = 11.58 * √54 ≈ 11.58*7.35≈85.1
相似度:84/85.1 ≈ 0.987

結果:四季披薩最相似(0.987)!

關鍵發現:度量選擇影響結果

  1. 歐氏距離推薦:
    • 瑪格麗特(咸度3)和辣香腸(咸度7)
    • 雖然瑪格麗特咸度不符合要求,但芝士量接近
  2. 余弦相似度推薦:
    • 四季披薩(咸度5)
    • 因為它的特征比例最接近查詢(咸:芝士:辣 ≈ 7:9:2 vs 5:5:2)

現實啟示

  • 歐氏距離像"絕對匹配":適合找特征值接近的產品
  • 余弦相似度像"比例匹配":適合找風味組合相似的菜品
  • 向量數據庫就是這位聰明的服務員,能快速比較數百種披薩的特征
# 用代碼驗證我們的計算
import numpy as npmenu = {"Margherita": np.array([3, 8, 1]),"Pepperoni": np.array([7, 6, 5]),"Quattro": np.array([5, 5, 2])
}query = np.array([7, 9, 2])# 歐氏距離計算
print("歐氏距離:")
for name, vec in menu.items():dist = np.linalg.norm(query - vec)print(f"{name}: {dist:.2f}")# 余弦相似度計算
print("\n余弦相似度:")
for name, vec in menu.items():cosine = np.dot(query, vec) / (np.linalg.norm(query)*np.linalg.norm(vec))print(f"{name}: {cosine:.3f}")

輸出結果:

歐氏距離:
Margherita: 4.24
Pepperoni: 4.24
Quattro: 4.47余弦相似度:
Margherita: 0.954
Pepperoni: 0.930
Quattro: 0.987

結語

這個美味的例子展示了:不同的相似度度量會導致不同的推薦結果,實際應用中需要根據業務需求選擇合適的度量方式。向量數據庫的價值就在于它能高效處理這類比較操作,即使面對百萬級"菜單"也能快速響應。

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

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

相關文章

人工智能和機器學習在包裝仿真中的應用與價值

引言 隨著包裝成為消費品關鍵的差異化因素,對智能設計、可持續性和高性能的要求比以往任何時候都更高 。為了滿足這些復雜的期望,公司越來越多地采用先進的仿真方法,而現在人工智能 (AI) 和機器學習 (ML) 又極大地增強了這些方法 。本文探討…

【人工智能】深入探索Python中的自然語言理解:實現實體識別系統

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 自然語言理解(NLU)是人工智能(AI)領域中的重要研究方向之一,其目標是讓計算機理解和處理人類語言。在NLU的眾多應用中,實體識別(Nam…

個人健康中樞的多元化AI硬件革新與精準健康路徑探析

在醫療信息化領域,個人健康中樞正經歷著一場由硬件技術革新驅動的深刻變革。隨著可穿戴設備、傳感器技術和人工智能算法的快速發展,新一代健康監測硬件能夠采集前所未有的多維度生物數據,并通過智能分析提供精準的健康建議。本文將深入探討構成個人健康中樞的最新硬件技術,…

深入了解Linux系統—— 進程切換和調度

前言: 了解了進程的狀態和進程的優先級,我們現在來看進程是如何被CPU調度執行的。 在單CPU的系統在,程序是并發執行的;也就是說在一段時間呢,進程是輪番執行的; 這也是說一個進程在運行時不會一直占用CPU直…

阿里云服務遷移實戰: 06-切換DNS

概述 按前面的步驟,所有服務遷移完畢之后,最后就剩下 DNS 解析修改了。 修改解析 在域名解析處,修改域名的解析地址即可。 如果 IP 已經過戶到了新賬號,則不需要修改解析。 何確保業務穩定 域名解析更換時,由于 D…

uni-app 中封裝全局音頻播放器

在開發移動應用時,音頻播放功能是一個常見的需求。無論是背景音樂、音效還是語音消息,音頻播放都需要一個穩定且易于管理的解決方案。在 uni-app 中,雖然原生提供了 uni.createInnerAudioContext 方法用于音頻播放,但直接使用它可…

golang常用庫之-標準庫text/template

文章目錄 golang常用庫之-標準庫text/template背景什么是text/templatetext/template庫的使用 golang常用庫之-標準庫text/template 背景 在許多編程場景中,我們經常需要把數據按照某種格式進行輸出,比如生成HTML頁面,或者生成配置文件。這…

Linux btop 使用教程

簡介 btop 是一個基于終端的現代系統資源監控器,具有美觀的圖形界面、響應快、功能豐富等特點。它支持查看 CPU、內存、磁盤、網絡、進程,并可以方便地篩選和管理進程。 功能總覽 啟動命令: btop界面分為以下幾部分: CPU 區域…

Vue3調度器錯誤解析,完美解決Unhandled error during execution of scheduler flush.

目錄 Vue3調度器錯誤解析,完美解決Unhandled error during execution of scheduler flush. 一、問題現象與本質 二、七大高頻錯誤場景與解決方案 1、Setup初始化陷阱 2、模板中的"幽靈屬性" 3、異步操作的"定時炸彈" 4、組件嵌套黑洞 5…

使用DeepSeek定制Python小游戲——以“俄羅斯方塊”為例

前言 本來想再發幾個小游戲后在整理一下流程的,但是今天試了一下這個俄羅斯方塊的游戲結果發現本來修改的好好的的,結果后面越改越亂,前面的版本也沒保存,根據AI修改他是在幾個版本改來改去,想著要求還是不能這么高。…

Kotlin帶接收者的Lambda介紹和應用(封裝DialogFragment)

先來看一個具體應用:假設我們有一個App,App中有一個退出應用的按鈕,點擊該按鈕后并不是立即退出,而是先彈出一個對話框,詢問用戶是否確定要退出,用戶點了確定再退出,點取消則不退出,…

ES6/ES11知識點 續一

模板字符串 在 ECMAScript(ES)中,模板字符串(Template Literals)是一種非常強大的字符串表示方式,它為我們提供了比傳統字符串更靈活的功能,尤其是在處理動態內容時。模板字符串通過反引號&…

【C++】智能指針RALL實現shared_ptr

個人主頁 : zxctscl 專欄 【C】、 【C語言】、 【Linux】、 【數據結構】、 【算法】 如有轉載請先通知 文章目錄 1. 為什么需要智能指針?2. 內存泄漏2.1 什么是內存泄漏,內存泄漏的危害2.2 內存泄漏分類(了解)2.3 如何…

ROS2 開發踩坑記錄(持續更新...)

1. 從find_package(xxx REQUIRED)說起,如何引用其他package(包) 查看包的安裝位置和include路徑詳細文件列表 例如,xxx包名為pluginlib # 查看 pluginlib 的安裝位置 dpkg -L ros-${ROS_DISTRO}-pluginlib | grep include 這條指令的目的是…

系統思考:困惑源于內心假設

不要懷疑,你的困惑來自你的假設。 你是否曾經陷入過無解的困境,覺得外部環境太復雜,自己的處境無法突破?很多時候,答案并不在于外部的局勢,而是來自我們內心深處的假設——那些我們理所當然、從未質疑過的…

GitHub修煉法則:第一次提交代碼教學(Liunx系統)

前言 github是廣大程序員們必須要掌握的一個技能,萬事開頭難,如果成功提交了第一次代碼,那么后來就會簡單很多。網上的相關資料往往都不是從第一次開始,導致很多新手們會在過程中遇到很多權限認證相關的問題,進而被卡…

瀝青路面裂縫的目標檢測與圖像分類任務

文章題目是《A grid‐based classification and box‐based detection fusion model for asphalt pavement crack》 于2023年發表在《Computer‐Aided Civil and Infrastructure Engineering》 論文采用了一種基于網格分類和基于框的檢測(GCBD)&#xff…

【Flask】ORM模型以及數據庫遷移的兩種方法(flask-migrate、Alembic)

ORM模型 在Flask中,ORM(Object-Relational Mapping,對象關系映射)模型是指使用面向對象的方式來操作數據庫的編程技術。它允許開發者使用Python類和對象來操作數據庫,而不需要直接編寫SQL語句。 核心概念 1. ORM模型…

C/C++滑動窗口算法深度解析與實戰指南

C/C滑動窗口算法深度解析與實戰指南 引言 滑動窗口算法是解決數組/字符串連續子序列問題的利器,通過動態調整窗口邊界,將暴力解法的O(n)時間復雜度優化至O(n)。本文將系統講解滑動窗口的核心原理、C/C實現技巧及經典應用場景,助您掌握這一高…

Vuex使用指南:狀態管理

一、什么是狀態管理?為什么需要 Vuex? 1. 狀態管理的基本概念 在 Vue 應用中,狀態指的是應用中的數據。例如: 用戶登錄狀態購物車中的商品文章列表的分頁信息 狀態管理就是對這些數據的創建、讀取、更新和刪除進行有效管理。 …