自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

圖像搜索的新紀(jì)元:Milvus與CLIP模型相伴的搜圖引擎

開發(fā) 開發(fā)工具
索引的選擇對(duì)于向量召回的性能至關(guān)重要,Milvus支持了Annoy,F(xiàn)AISS,HNSW,DiskANN等多種不同的索引,用戶可以根據(jù)對(duì)延遲,內(nèi)存使用和召回率的需求進(jìn)行選擇。

1 背景介紹

??作為電商公司的風(fēng)控部門,承擔(dān)著維護(hù)平臺(tái)內(nèi)容安全的職責(zé)。因?yàn)檎叩恼{(diào)整,或者一些突發(fā)情況,我們需要回溯線上歷史的商品圖片、用戶頭像信息等,確保平臺(tái)的圖片內(nèi)容的合規(guī)性。??在以前我們會(huì)讓算法同學(xué)離線將平臺(tái)數(shù)據(jù)用相關(guān)的模型跑一遍,但是這會(huì)用到大量的計(jì)算資源,并且會(huì)花費(fèi)幾天甚至更長(zhǎng)的時(shí)間。??我們是否有更便捷的辦法對(duì)圖片做搜索,比如像普通的數(shù)據(jù)庫那樣,通過內(nèi)容甚至另一張圖去搜索圖片呢?可否將文本、圖片等信息轉(zhuǎn)換成另一種可以對(duì)比,可以計(jì)算的形式呢???解決方案:可以通過深度模型提取出圖像的特征向量,建立向量庫,然后用目標(biāo)文本或圖片的特征向量進(jìn)行搜索匹配,得出最接近的結(jié)果。CLIP模型提供了生成文本和圖片特征向量的能力,Milvus向量數(shù)據(jù)庫提供了對(duì)海量向量的存儲(chǔ)、管理和檢索能力。

圖片圖片

2 CLIP模型

2.1 關(guān)于CLIP模型

??CLIP(Contrastive Language-Image Pretraining)模型是一種由OpenAI開發(fā)的多模態(tài)預(yù)訓(xùn)練模型,結(jié)合了圖像和文本的理解能力。CLIP的目標(biāo)是讓模型能夠理解圖片和文本之間的關(guān)聯(lián)關(guān)系,從而能夠在語言和視覺任務(wù)上表現(xiàn)出色。CLIP模型的主要作用是在圖像和文本領(lǐng)域?qū)崿F(xiàn)多模態(tài)的交叉理解能力,拓展了計(jì)算機(jī)視覺和自然語言處理的邊界,為各種任務(wù)提供了更全面和準(zhǔn)確的解決方案。

2.2 CLIP模型的應(yīng)用

??轉(zhuǎn)轉(zhuǎn)風(fēng)控主要使用CLIP對(duì)圖像根據(jù)文本提示詞進(jìn)行分類風(fēng)險(xiǎn)識(shí)別,同時(shí)因?yàn)镃LIP模型輸出為特征向量,所以同時(shí)使用Milvus向量數(shù)據(jù)庫保存這些圖片的特征向量。

圖片圖片

3 Milvus

3.1 什么是Milvus

??Milvus是一款云原生向量數(shù)據(jù)庫,它具備高可用、高性能、易拓展的特點(diǎn),用于海量向量數(shù)據(jù)的實(shí)時(shí)召回。Milvus 基于 FAISS、Annoy、HNSW 等向量搜索庫構(gòu)建,核心是解決稠密向量相似度檢索的問題。

3.2 Milvus核心概念

非結(jié)構(gòu)化數(shù)據(jù):非結(jié)構(gòu)化數(shù)據(jù)指的是數(shù)據(jù)結(jié)構(gòu)不規(guī)則,沒有統(tǒng)一的預(yù)定義數(shù)據(jù)模型,不方便用數(shù)據(jù)庫二維邏輯表來表現(xiàn)的數(shù)據(jù),包括文本、音頻、視頻等。非結(jié)構(gòu)化數(shù)據(jù)可以使用深度學(xué)習(xí)模型或者機(jī)器學(xué)習(xí)模型轉(zhuǎn)化為向量后進(jìn)行處理。特征向量:向量又稱為embedding vector,是指由embedding技術(shù)從離散變量轉(zhuǎn)變而來的連續(xù)向量。在數(shù)學(xué)表示上,向量是一個(gè)由浮點(diǎn)數(shù)或者二值型數(shù)據(jù)組成的n維數(shù)組。向量相似度檢索:相似度檢索是指將目標(biāo)對(duì)象與數(shù)據(jù)庫中數(shù)據(jù)進(jìn)行比對(duì),并召回最相似的結(jié)果。同理,向量相似度檢索返回的是最相似的向量數(shù)據(jù)。近似最近鄰搜索(ANN)算法能夠計(jì)算向量之間的距離,從而提升向量相似度檢索的速度。如果兩條向量十分相似,這就意味著他們所代表的源數(shù)據(jù)也十分相似。Collection-集合:包含一組Entity,可以等價(jià)于關(guān)系型數(shù)據(jù)庫系統(tǒng)中的表。Entity-實(shí)體:包含一組Field。Field與實(shí)際對(duì)象相對(duì)應(yīng)。對(duì)應(yīng)關(guān)系型數(shù)據(jù)庫中的行。Field-字段:Entity的組成部分。Field可以是結(jié)構(gòu)化數(shù)據(jù),例如數(shù)字和字符串,也可以是向量。對(duì)應(yīng)關(guān)系型數(shù)據(jù)庫中的表字段。Partition-分區(qū):分區(qū)是集合(Collection)的一個(gè)分區(qū)。Milvus 支持將收集數(shù)據(jù)劃分為物理存儲(chǔ)上的多個(gè)部分。索引:索引基于原始向量數(shù)據(jù)構(gòu)建,可以提高對(duì)Collection數(shù)據(jù)搜索的速度。支持倒排列表、k-d樹以及高維哈希等。這種索引結(jié)構(gòu)可以在大規(guī)模向量數(shù)據(jù)集中高效地定位相似向量。

3.3 相似性計(jì)算原理

??常用的向量相似度度量方法包括余弦相似度、歐氏距離、漢明距離等。此處以歐氏距離為例:中學(xué)學(xué)過的二維空間的歐氏距離:

圖片圖片

三維空間的歐式距離:

圖片圖片

以此類推,多維空間的歐式距離:

圖片圖片

3.4 Milvus系統(tǒng)架構(gòu)

Milvus 2.0 是一款云原生向量數(shù)據(jù)庫,采用存儲(chǔ)與計(jì)算分離的架構(gòu)設(shè)計(jì),所有組件均為無狀態(tài)組件,極大地增強(qiáng)了系統(tǒng)彈性和靈活性。

圖片圖片

整個(gè)系統(tǒng)分為四個(gè)層次:接入層(Access Layer):系統(tǒng)的門面,由一組無狀態(tài) proxy 組成。對(duì)外提供用戶連接的 endpoint,負(fù)責(zé)驗(yàn)證客戶端請(qǐng)求并合并返回結(jié)果。協(xié)調(diào)服務(wù)(Coordinator Service):系統(tǒng)的大腦,負(fù)責(zé)分配任務(wù)給執(zhí)行節(jié)點(diǎn)。協(xié)調(diào)服務(wù)共有四種角色,分別為 root coord、data coord、query coord 和 index coord。執(zhí)行節(jié)點(diǎn)(Worker Node):系統(tǒng)的四肢,負(fù)責(zé)完成協(xié)調(diào)服務(wù)下發(fā)的指令和 proxy 發(fā)起的數(shù)據(jù)操作語言(DML)命令。執(zhí)行節(jié)點(diǎn)分為三種角色,分別為 data node、query node 和 index node。存儲(chǔ)服務(wù) (Storage):系統(tǒng)的骨骼,負(fù)責(zé) Milvus 數(shù)據(jù)的持久化,分為元數(shù)據(jù)存儲(chǔ)(meta store)、消息存儲(chǔ)(log broker)和對(duì)象存儲(chǔ)(object storage)三個(gè)部分。各個(gè)層次相互獨(dú)立,獨(dú)立擴(kuò)展和容災(zāi)。

3.5 選擇Milvus的理由

高性能:性能高超,可對(duì)海量數(shù)據(jù)集進(jìn)行向量相似度檢索。Milvus不但集成了業(yè)界成熟的向量搜索技術(shù)如Faiss和SPTAG,Milvus也實(shí)現(xiàn)了高效的NSG圖索引。同時(shí),Milvus團(tuán)隊(duì)針對(duì)Faiss IVF索引進(jìn)行了深度優(yōu)化,實(shí)現(xiàn)了CPU與多GPU的融合計(jì)算,大幅提高了向量搜索性能。Milvus可以在單機(jī)環(huán)境下完成SIFT1b十億級(jí)向量搜索任務(wù)。高可用、高可靠:Milvus支持在云上擴(kuò)展,其容災(zāi)能力能夠保證服務(wù)高可用。混合查詢:Milvus支持在向量相似度檢索過程中進(jìn)行標(biāo)量字段過濾,實(shí)現(xiàn)混合查詢。開發(fā)者友好:支持多語言、多工具的Milvus生態(tài)系統(tǒng)。Milvus提供了向量數(shù)據(jù)管理服務(wù),以及集成的應(yīng)用開發(fā)SDK(Java/Python/C++/RESTful API)。相比直接調(diào)用Faiss和SPTAG那樣的程序庫,Milvus開發(fā)使用更便捷,數(shù)據(jù)管理更簡(jiǎn)單。

4 轉(zhuǎn)轉(zhuǎn)風(fēng)控的實(shí)踐

4.1 Milvus的部署方式

??Milvus支持基于Docker Compose的單例部署模式,以及基于k8s的集群部署模式。目前我們使用的是單例部署模式,1是對(duì)于我們的使用場(chǎng)景而言,單機(jī)性能目前沒有問題;2是單例部署模式更簡(jiǎn)單易上手。

4.2 特征向量的生成

??前文已經(jīng)說過我們使用CLIP模型來進(jìn)行特征向量的生成。原因主要有2個(gè),1是節(jié)省計(jì)算資源,CLIP模型已經(jīng)在線上應(yīng)用,再用其它模型進(jìn)行特征向量生成需要再進(jìn)行一次計(jì)算,浪費(fèi)計(jì)算資源;2是CLIP模型本身提供了非常好的文本和圖片交叉理解能力,為文搜圖提供了基礎(chǔ)。

4.3 索引結(jié)構(gòu)的選擇

??索引的選擇對(duì)于向量召回的性能至關(guān)重要,Milvus支持了Annoy,F(xiàn)AISS,HNSW,DiskANN等多種不同的索引,用戶可以根據(jù)對(duì)延遲,內(nèi)存使用和召回率的需求進(jìn)行選擇。對(duì)于我們的使用場(chǎng)景,我們對(duì)響應(yīng)時(shí)長(zhǎng)要求不高,主要為離線或后臺(tái)使用,但是要求100%召回,不能漏召回,所以使用近似查找的壓縮索引都不符合要求,只能使用FAISS的Flat索引。

4.4 數(shù)據(jù)過濾的實(shí)現(xiàn)

??基于產(chǎn)品的使用的數(shù)據(jù)過濾需求,以及需要對(duì)歷史數(shù)據(jù)進(jìn)行定期清理的目標(biāo),目前我們是根據(jù)時(shí)間以及數(shù)據(jù)源類型創(chuàng)建的分區(qū)。??為什么沒有使用Milvus的標(biāo)量過濾特性去做過濾呢???主要是基于性能考量,Milvus使用的是前過濾,即先做標(biāo)量過濾生成Bitset,在向量檢索的過程中基于Bitset去除掉不滿足條件的Entity。在一些場(chǎng)景下標(biāo)量過濾不僅不會(huì)加速查詢反而會(huì)導(dǎo)致性能變差。而且目前我們的過濾場(chǎng)景很確定,用指定分區(qū)來實(shí)現(xiàn)數(shù)據(jù)過濾的方式可以獲得更好的性能。

4.5 一次搜索結(jié)果展示

圖片圖片

??圖片為以薩摩耶為搜索詞,搜索2023-11-19至2023-11-23的商品數(shù)據(jù)得出的相似度最高的top20的結(jié)果。

關(guān)于作者

許作紅,轉(zhuǎn)轉(zhuǎn)風(fēng)控后端研發(fā)工程師,主要負(fù)責(zé)風(fēng)控模型工程的開發(fā)維護(hù)。熱愛運(yùn)動(dòng),擁抱生活。

責(zé)任編輯:武曉燕 來源: 轉(zhuǎn)轉(zhuǎn)技術(shù)
相關(guān)推薦

2024-03-22 15:08:47

CLIP機(jī)器學(xué)習(xí)人工智能

2025-01-07 09:00:00

2015-01-06 10:01:17

iPhone 6移動(dòng)支付

2023-01-03 15:42:29

機(jī)器學(xué)習(xí)視頻搜索

2025-04-03 04:21:00

SLM語言模型

2010-03-09 11:40:30

IBM智慧建筑

2023-05-11 07:45:28

谷歌人工智能

2013-01-07 14:06:07

2024-08-06 10:25:20

2025-02-04 11:11:07

2012-08-01 15:05:47

IBM

2021-01-27 13:50:17

AI 數(shù)據(jù)機(jī)器學(xué)習(xí)

2023-03-19 17:21:31

CLIP架構(gòu)人工智能

2025-02-07 12:54:57

大語言模型LLM

2016-09-28 17:45:01

IDCC

2016-10-08 13:42:05

IDCC

2013-07-22 09:47:17

大數(shù)據(jù)IBM技術(shù)大會(huì)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)