?? 作者:韓信子@ShowMeAI
?? 機器學習實戰系列:https://www.showmeai.tech/tutorials/41
?? 深度學習實戰系列:https://www.showmeai.tech/tutorials/42
?? 本文地址:https://www.showmeai.tech/article-detail/299
?? 宣告:著作權所有,轉載請聯系平臺與作者并注明出處
?? 收藏ShowMeAI查看更多精彩內容
?? 前言
?? 結構化資料 V.S. 非結構化資料
互聯網發展的數十年來,技術在飛速前進,伴隨著海量結構化表格資料的存盤,結構化資料上的商業智能分析挖掘發展,也有海量的非結構化資料散布于各個互聯網平臺:
超過 80-90% 的資料是非結構化資訊,例如文本、視頻、音頻、Web 服務器日志、社交媒體等
??非結構化資料的挑戰
因為非結構化資料沒有標準的行列結構,因此與結構化資料的存盤和分析挖掘及查詢都是截然不同的,我們沒辦法將非結構化資料的內容存盤在關系資料庫中,針對它們的應用有以下挑戰:
- 存盤: 常規關系資料庫非常適合保存結構化資料,但不適合非結構化資料,
- 表示: 我們需要將非結構化資料轉換為一些有效的向量或嵌入表征,才能完成后續任務,
- 查詢: 結構化資料的檢索與查詢,無法像結構化資料一樣通過 SQL 匹配查詢,我們通常要進行向量級別的比對與排序等,
??非結構化資料的表征
為了讓計算機理解、處理和表征非結構化資料,我們通常將它們轉換為密集向量,通常稱為嵌入,如上圖所示,
近代的演算法技術有很多神經網路的方法可以把非結構化資料表征為嵌入向量,例如卷積神經網路(CNN)可以對影像進行特征抽取與向量表示,而 LSTM 和 Transformer 等模型可以很方便地對文本資料進行向量化表征,
??非結構化資料的挑戰
完成非結構化資料的表征僅僅是第1步,我們僅僅有這些嵌入向量是不夠的,還需要能夠查詢和找出相似的向量,
大家在日常使用到的 APP 中,看到的很多多媒體智能應用都依賴于海量矢量資料中的相似性檢索 AI 技術,包括百度和淘寶的視覺(影像)搜索/以圖搜圖、抖音視頻的推薦系統、QQ音樂的聽曲識歌等,也包括安防系統天眼等的人臉比對識別等,
?? 向量檢索工具
海量向量資料的存盤、管理和查詢并不是一項簡單的任務,我們會依賴專門的工具來完成這項作業,現代 AI 領域有非常好用的向量資料庫,在本文中 ShowMeAI 將給大家詳細介紹,主要覆寫以下幾個方面:
- 向量和向量相似性搜索
- 向量資料庫
- 頂級向量資料庫 Milvus
- Milvus 視覺影像搜索案例
?? 向量和向量相似性搜索
?? 向量
剛才我們說到了,因為計算機只能理解和計算數值,我們要將影像和文本等非結構化資料表示為浮點數向量,它們表示相應的資料(影像、文本等),
下列涉及到的 NLP 和 CV 模型技術,可以通過ShowMeAI的下述圖解教程做更全面的學習:
- 深度學習教程:吳恩達專項課程 · 全套筆記解讀
- 自然語言處理教程:斯坦福CS224n課程 · 課程帶學與全套筆記解讀
- 深度學習與計算機視覺教程:斯坦福CS231n · 全套筆記解讀
在自然語言處理(NLP)領域,我們有許多詞嵌入模型,例如 Word2Vec、GloVe 和 FastText ,它們可以幫助將詞表示為數值向量,后來新技術的推進,我們有了強大的 ?? Transformer 模型 ?? BERT,它可以用來學習背景關系嵌入向量以及對整個句子和段落的向量化表示,
在計算機視覺(CV)領域,我們有像 ?? 卷積神經網路(CNN)的模型,它可以幫助從影像和視頻中學習向量化表示,隨著 Transformer 的興起,我們也有了 ?? Vision Transformers,有更好的視覺表征能力,
有了這些強大的向量表征方法,我們就可以利用它們來解決現實世界的問題,例如以圖搜圖,我們上傳圖片就可以檢索回傳視覺上相似影像檢索結果,Google 的『以圖搜圖』是非常流行的應用,如下圖所示,
你可以把每張圖片想象成一個具有 D 維數的向量,我們可以使用『歐氏距離』或者其他距離度量(如『漢明距離』或『余弦距離』)來找出兩個資料點(圖片)之間的遠近距離,可以量化地衡量2個樣本的接近程度,例如,二維平面中兩點之間的『歐氏距離』如下圖所示,
?? 向量相似性搜索
矢量相似度搜索,也稱為最近鄰(NN)搜索,基本上是計算檢索樣本和現有(資料庫中)樣本集合中的樣本距離,并回傳前『k』個最近鄰,也即前『k』個最相似的樣本,計算這種相似度的關鍵部分是相似度度量,有不同的形式,包括歐氏距離、內積、余弦距離、漢明距離等,距離越小,我們認為2個向量越相似,
精確最近鄰(NN)搜索是非常耗時的,每次都需要計算 N 個距離(假設有 N 個需要比對的資料庫樣本)才可以排序得到結果,
為了加快計算速度,我們通常利用近似最近鄰搜索(ANN 搜索),它會以近似的方式來匹配和完成檢索任務,典型的 ANN 索引方法包括:
- 向量變換: 使用如降維(例如 PCA \ t-SNE)、旋轉等方法把向量降維以加速計算
- 矢量編碼: 使用如區域敏感散列(LSH)、量化、樹等方式,對資料重新映射或組織,從而更快地檢索相似樣本
- 非窮舉搜索方法: 使用如鄰域圖、倒排索引等方法,非窮舉的方式完成搜索
所有這些提到的方法,都指向我們即將介紹的向量資料庫,它是具備以上 ANN 的資料庫實作,功能強大!
?? 向量資料庫
向量資料庫是可擴展的資料平臺,用于存盤、索引和查詢使用深度學習模型從非結構化資料(影像、文本等)生成的嵌入向量,最好和最先進的向量資料庫,可以做到在數百萬或數十億個目標向量中插入、索引和搜索,并且可以選擇和靈活配置索引演算法和相似性度量方式,
如果是面向企業的健壯高效資料庫系統,要同時具備以下關鍵要求:
- 可擴展性:向量資料庫應該能支撐數十億個嵌入向量的索引建立并運行近似最近鄰搜索
- 穩定度:向量資料庫應該能夠處理內部故障而不會丟失資料,有好的容錯性
- 高效率:查詢和寫入速度對于矢量資料庫很重要,對于像 小紅書 和 微博 這樣每秒可以上傳成百上千張新圖片的平臺來說,速度成為一個非常重要的因素,
向量資料庫除了存盤向量資料,還需要完成高效的資料索引構建,以便快速檢索,還需要支持 CRUD(創建、讀取、更新和洗掉)操作,以及支持屬性過濾(即基于元資料欄位/標量欄位進行過濾),
一個簡單的例子是淘寶場景下,根據指定品牌的影像向量檢索相似的鞋子,這里的品牌就是過濾的屬性,
我們即將給大家介紹到 Milvus 向量資料庫,上圖展示了 Milvus 屬性過濾的程序,Milvus 在過濾機制中引入了位掩碼的概念,在滿足特定屬性過濾器的基礎上,保留位掩碼為 1 的相似向量,
?? 頂級向量資料庫 Milvus
?? Milvus 是一個開源的向量資料庫管理平臺,專為海量向量資料和簡化機器學習操作(MLOps)而構建,
Milvus 具有廣泛的應用,包括藥物發現、計算機視覺、推薦系統、聊天機器人等等,Milvus 包含以下特性和功能:
- 萬億向量資料集上的超快搜索速度: 萬億向量資料集上向量搜索和檢索的平均延遲已達毫秒級別,
- 簡化的非結構化資料管理:Milvus 擁有豐富的 API,專為資料科學作業流程而設計,
- 可靠穩定: Milvus 內置的備份和故障轉移/故障恢復功能確保資料和應用程式可以始終保持業務連續性,
- 高度可擴展性: 組件級可擴展性可以很好地支撐按需擴展和縮減,
- 混合搜索: 除了向量之外,Milvus 還支持布爾、字串、整數、浮點數等資料型別,Milvus 將標量過濾與強大的向量相似性搜索結合起來(如前面提到的屬性過濾),
- 統一的 Lambda 結構: Milvus 結合流和批處理進行資料存盤,平衡時效性和效率,
- 社區支持和行業認可: 1000+名企的選擇,?? GitHub 開源并有活躍的開源社區,
? 其他工具庫及局限
構建基于向量相似性搜索的 AI 系統,常見的工具庫實作也都是基于近似最近鄰搜索(ANNS)的,例如:
- Facebook AI 相似度搜索(FAISS):FAISS框架支持高效的相似度搜索和密集向量的聚類,包含在任意大小的向量搜索的演算法,它支持索引功能,如倒排多索引和量化,
- Spotify's Annoy(Approximate Nearest Neighbors Oh Yeah):Annoy 框架使用隨機投影并構建樹結構以在大規模密集向量上實作ANNS,
- Google 的 ScaNN(Scalable Nearest Neighbors): ScaNN 框架支持在大規模資料上高效執行向量相似性搜索,核心技術包括最大內積搜索(MIPS)的搜索空間修剪和量化,
這些也都是一些可選用的向量資料檢索庫,但這些工具庫相比于 Milvus 這樣成熟的向量資料管理系統,有一些弱點和局限性,
- 靈活性: 上述工具通常將所有資料存盤在主記憶體中,無法支撐多臺機器上的分布式模式,不適合處理海量資料集
- 動態資料處理: 一旦輸入工具庫,資料通常被視作靜態的,對動態資料處理沒有很好的支持
- 高級查詢處理: 大多數工具庫不支持高級查詢處理(例如,屬性過濾、混合搜索和多向量查詢)
- 異構計算優化: 除了FAISS,很少有工具在 CPU 和 GPU 上為異構系統架構提供優化,會有明顯的效率損失,
?? Milvus 的優勢
?? Milvus 針對上述問題優化,具備以下優勢:
- 它通過提供對各種應用程式介面(包括 Python、Java、Go、C++ 和 RESTful API 中的 SDK)的支持來增強靈活性
- 它支持多種向量索引型別(例如,基于量化的索引和基于圖的索引),以及高級查詢處理
- Milvus 使用日志結構的合并樹(LSM 樹)處理動態向量資料,保持資料插入和洗掉的效率,對實時搜索支持也很好
- Milvus 針對現代 CPU 和 GPU 上的異構計算架構提供優化,我們可以靈活針對特定場景、資料集和應用環境調整系統
Milvus 的向量執行引擎 Knowhere 是一個操作介面,用于訪問系統上層的服務和系統下層的Faiss、Hnswlib、Annoy 等向量相似度搜索庫,此外,Knowhere 還負責異構計算,Knowhere 控制在哪些硬體(例如 CPU 或 GPU)上執行索引構建和搜索請求,這就是 Knowhere 得名的原因——知道在哪里執行操作,未來版本將支持更多型別的硬體,包括 DPU 和 TPU,
Milvus 中的計算主要涉及向量和標量運算,上圖展示了 Milvus 中的 Knowhere 架構:
- 最底層是系統硬體
- 第三方索引庫位于硬體之上
- 上方Knowhere 通過 CGO 與頂部的索引節點和查詢節點進行互動
Knowhere 不僅進一步擴展了 Faiss 的功能,還優化了性能,支持 BitsetView、支持更多相似指標、支持 AVX512 指令集、自動 SIMD 指令選擇,
??Milvus整體架構
上圖展示了 ?? Milvus平臺的整體架構,Milvus 將資料流與控制流分離,分為四層,在可擴展性和容災方面是獨立的,
- 接入層: 接入層由一組無狀態代理組成,作為系統的前端和用戶的端點,
- 協調器服務: 協調器服務負責集群拓撲節點管理、負載均衡、時間戳生成、資料宣告、資料管理,
- 作業節點: 作業節點(執行節點)執行協調器服務發出的指令和代理發起的資料操作語言(DML)命令,Milvus 中的作業節點類似于 ?? Hadoop 和 HBase 中的區域服務器,
- 存盤: 這是 Milvus 的基石,負責資料的持久化,存盤層由元存盤、日志代理和物件存盤構成,
?? Milvus 視覺影像搜索案例
一個典型的應用是基于 Milvus 構建影像檢索系統,開發者可以使用預訓練的 AI 模型將自有影像資料集轉換為向量,然后利用 Milvus 實作以圖搜圖功能,匹配和回傳相似圖片結果,如下為基于 Milvus 的『以圖搜圖』架構圖,
資料處理流程部分可以結合開源框架 ?? towhee,它利用像 ResNet-50 這樣的預訓練 CNN 模型,從影像中提取表征向量,再基于 Milvus 存盤和索引這些向量,并將影像 ID 映射到 MySQL 資料庫中的實際圖片,Milvus 構建完索引后,可以輕松根據上傳的新影像,進行大規模影像搜索,
下圖為視覺影像搜索的示例圖:
參考鏈接
- ?? 深度學習教程:吳恩達專項課程 · 全套筆記解讀:https://www.showmeai.tech/tutorials/35
- ?? 自然語言處理教程:斯坦福CS224n課程 · 課程帶學與全套筆記解讀:https://www.showmeai.tech/tutorials/36
- ?? 深度學習與計算機視覺教程:斯坦福CS231n · 全套筆記解讀:https://www.showmeai.tech/tutorials/37
- ?? Transformer:https://arxiv.org/abs/1706.03762
- ?? BERT:https://jalammar.github.io/illustrated-bert/
- ?? 卷積神經網路 CNN:https://proceedings.neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf
- ?? Vision Transformers:https://arxiv.org/abs/2010.11929
- ?? Milvus 官網:https://milvus.io/
- ?? Milvus GitHub:https://github.com/milvus-io/milvus
- ?? Facebook AI 相似度搜索(FAISS):https://ai.facebook.com/tools/faiss/
- ?? Spotify's Annoy (Approximate Nearest Neighbors Oh Yeah):https://github.com/spotify/annoy
- ?? Google 的 ScaNN (Scalable Nearest Neighbors):https://github.com/google-research/google-research/tree/master/scann
- ?? Hadoop:https://hadoop.apache.org/
- ?? towhee:https://github.com/towhee-io/towhee
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/502106.html
標籤:其他
上一篇:如何系結 Webhook 推送
