溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

基于Milvus實(shí)現(xiàn)向量與結(jié)構(gòu)化數(shù)據(jù)混合查詢的示例分析

發(fā)布時(shí)間:2021-11-15 14:29:29 來(lái)源:億速云 閱讀:205 作者:柒染 欄目:大數(shù)據(jù)

這篇文章將為大家詳細(xì)講解有關(guān)基于Milvus實(shí)現(xiàn)向量與結(jié)構(gòu)化數(shù)據(jù)混合查詢的示例分析,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

 

基于Milvus實(shí)現(xiàn)向量與結(jié)構(gòu)化數(shù)據(jù)混合查詢

 

一、概述

通過(guò)深度學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)模型,可以將圖片、視頻、語(yǔ)音、還有文本等非結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換為特征向量。除了結(jié)構(gòu)化的向量,這些數(shù)據(jù)往往也需添加其他屬性。如人臉圖片,可以添加性別、是否戴眼鏡、圖片抓取時(shí)間等標(biāo)簽;文本可以添加語(yǔ)言類型、語(yǔ)料分類、文本創(chuàng)建時(shí)間等標(biāo)簽。

以往,人們通常將特征向量存入結(jié)構(gòu)化的標(biāo)簽屬性表。但傳統(tǒng)數(shù)據(jù)庫(kù)無(wú)法針對(duì)海量、高維特征向量進(jìn)行有效的搜索。這時(shí)就需要一個(gè)特征向量數(shù)據(jù)庫(kù),用來(lái)高效存儲(chǔ)、檢索特征向量。

 

二、解決方案

Milvus 是一款向量搜索引擎,可以輕松實(shí)現(xiàn)針對(duì)海量向量的高性能檢索。結(jié)合傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)如 Postgres ,用其存儲(chǔ) Milvus 對(duì)向量的唯一標(biāo)識(shí) ID 和向量的對(duì)應(yīng)屬性。將 Milvus 向量檢索結(jié)果,在 Postgres 中進(jìn)一步查詢,就能快速得出混合查詢結(jié)果,具體解決方案如下:

基于Milvus實(shí)現(xiàn)向量與結(jié)構(gòu)化數(shù)據(jù)混合查詢的示例分析  

 

1、特征向量存儲(chǔ)

如上圖藍(lán)色實(shí)線,其表示 Milvus 混合查詢的特征向量存儲(chǔ)過(guò)程。首先,將源特征向量數(shù)據(jù)存入 Milvus 特征向量數(shù)據(jù)庫(kù), Milvus 會(huì)給返回每個(gè)源向量數(shù)據(jù)對(duì)應(yīng)的 ID 。然后將每個(gè)特征向量的唯一標(biāo)識(shí) ID 與其標(biāo)簽屬性存儲(chǔ)至關(guān)系型數(shù)據(jù)庫(kù),如 Postgres ,至此完成特征向量與標(biāo)簽屬性的存儲(chǔ)。

2、特征向量檢索

如上圖橙色實(shí)線,其表示 Milvus 混合查詢的特征向量檢索過(guò)程。向 Milvus 中傳入需要查詢的特征向量數(shù)據(jù), Milvus 會(huì)得出與搜索向量相似度最高的查詢結(jié)果 ID ,利用該結(jié)果 ID 到 Postgres 中進(jìn)行查詢,最終得出檢索向量的混合查詢結(jié)果。

 

三、Milvus混合查詢

至此,你可能會(huì)有疑問(wèn),為什么不直接將特征向量和對(duì)應(yīng)屬性存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)中呢?接下來(lái)將用 Milvus 對(duì) ANN_SIFT1B 中的一億數(shù)據(jù)進(jìn)行測(cè)試,為你解答,參考鏈接[1]

1、特征向量數(shù)據(jù)集

本次實(shí)現(xiàn)的 Mivus 混合查詢,其特征向量提取自 ANN_SIFT1B 中 Base Set 文件中的一億數(shù)據(jù)( 128 維)。特征向量檢索時(shí)從 Query set 中提取,假定 ANN_SIFT1B 數(shù)據(jù)集為人臉特征向量,并為每個(gè)向量添加性別、是否戴眼鏡、圖片抓取時(shí)間的標(biāo)簽:

# 提取 Base Set 文件中的一億數(shù)據(jù),以用于導(dǎo)入 Milvusvectors = load_bvecs_data(FILE_PATH,10000000)
# 為向量隨機(jī)生成性別、是否戴眼鏡、圖片抓取時(shí)間標(biāo)簽sex = random.choice(['female','male'])get_time = fake.past_datetime(start_date="-120d", tzinfo=None)is_glasses = random.choice(['True','False'])
 

2、特征向量存儲(chǔ)

將一億數(shù)據(jù)導(dǎo)入 Milvus ,其返回的 ids 是向量對(duì)應(yīng)的唯一表示 ID ,將 ids 與向量的標(biāo)簽存入 Postgres ,當(dāng)然,原始特征向量也可以存入 Postgres (可選):

# 將一億原始數(shù)據(jù)導(dǎo)入 Milvusstatus, ids = milvus.add_vectors(table_name=MILVUS_TABLE, records=vectors)
# 將 ids 與向量的標(biāo)簽存入 Postgressql = "INSERT INTO PG_TABLE_NAME VALUES(ids, sex, get_time, is_glasses);"cur.execute(sql)
 

3、特征向量檢索

向 Milvus 中傳入需要搜索的向量。設(shè)定 TOP_K=10 以及 DISTANCE_THRESHOLD=1 (可根據(jù)需求修改), TOP_K 表示搜索與查詢向量相似度最高的前 10 個(gè)結(jié)果,DISTANCE_THRESHOLD表示查詢向量與搜索結(jié)果向量的距離閾值。

ANN_SIFT1B 中采用歐氏距離計(jì)算,參數(shù)設(shè)定后 Milvus 將返回查詢結(jié)果的 ids ,利用該 ids 到 Postgres 中進(jìn)行查詢,最終混合查詢結(jié)果。

# 根據(jù) query_location 從 Query set 中提取需要搜索的向量vector = load_query_list(QUERY_PATH,query_location)# 向 Milvus 中傳入需要搜索的向量 vectorsstatus, results = milvus.search_vectors(table_name = MILVUS_TABLE,query_records=vector, top_k=top_k)
# 利用 Milvus 返回的 results.ids 到 Postgres 中進(jìn)行查詢sql = "select * from PG_TABLE_NAME where ids = results.ids ;"cur.execute(sql)
 

在對(duì)一億數(shù)據(jù)進(jìn)行混合查詢時(shí), Milvus 特征向量搜索僅需 70ms ,在 Postgres 中對(duì) Milvus 搜索結(jié)果的 ids 進(jìn)行查詢不超過(guò) 7ms 。

總的來(lái)說(shuō),利用 Milvus 特征向量數(shù)據(jù)庫(kù),可以快速實(shí)現(xiàn)向量與結(jié)構(gòu)化數(shù)據(jù)的混合查詢。若僅使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行向量查詢,不僅大規(guī)模向量數(shù)據(jù)存儲(chǔ)難,而且無(wú)法高性能完成特征向量檢索。

Milvus 特征向量搜索時(shí)間Postgres 搜索ids時(shí)間
70 ms1 ms ~ 7 ms

這里實(shí)現(xiàn)了基于 Milvus 的混合查詢。在一億特征向量數(shù)據(jù)集的情況下,混合查詢時(shí)間不超過(guò) 77 ms 。

并且基于 Milvus 易管易用的特性,通過(guò)參考  Milvus 混合查詢方案[2] 所提供的工具,能輕松實(shí)現(xiàn)向量和結(jié)構(gòu)化數(shù)據(jù)的混合查詢,更好的支持業(yè)務(wù)需求。

關(guān)于基于Milvus實(shí)現(xiàn)向量與結(jié)構(gòu)化數(shù)據(jù)混合查詢的示例分析就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI