亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于Milvus實現向量與結構化數據混合查詢的示例分析

發布時間:2021-11-15 14:29:29 來源:億速云 閱讀:220 作者:柒染 欄目:大數據

這篇文章將為大家詳細講解有關基于Milvus實現向量與結構化數據混合查詢的示例分析,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

 

基于Milvus實現向量與結構化數據混合查詢

 

一、概述

通過深度學習的神經網絡模型,可以將圖片、視頻、語音、還有文本等非結構化數據轉換為特征向量。除了結構化的向量,這些數據往往也需添加其他屬性。如人臉圖片,可以添加性別、是否戴眼鏡、圖片抓取時間等標簽;文本可以添加語言類型、語料分類、文本創建時間等標簽。

以往,人們通常將特征向量存入結構化的標簽屬性表。但傳統數據庫無法針對海量、高維特征向量進行有效的搜索。這時就需要一個特征向量數據庫,用來高效存儲、檢索特征向量。

 

二、解決方案

Milvus 是一款向量搜索引擎,可以輕松實現針對海量向量的高性能檢索。結合傳統關系型數據庫如 Postgres ,用其存儲 Milvus 對向量的唯一標識 ID 和向量的對應屬性。將 Milvus 向量檢索結果,在 Postgres 中進一步查詢,就能快速得出混合查詢結果,具體解決方案如下:

基于Milvus實現向量與結構化數據混合查詢的示例分析  

 

1、特征向量存儲

如上圖藍色實線,其表示 Milvus 混合查詢的特征向量存儲過程。首先,將源特征向量數據存入 Milvus 特征向量數據庫, Milvus 會給返回每個源向量數據對應的 ID 。然后將每個特征向量的唯一標識 ID 與其標簽屬性存儲至關系型數據庫,如 Postgres ,至此完成特征向量與標簽屬性的存儲。

2、特征向量檢索

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

 

三、Milvus混合查詢

至此,你可能會有疑問,為什么不直接將特征向量和對應屬性存儲在關系型數據庫中呢?接下來將用 Milvus 對 ANN_SIFT1B 中的一億數據進行測試,為你解答,參考鏈接[1]

1、特征向量數據集

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

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

2、特征向量存儲

將一億數據導入 Milvus ,其返回的 ids 是向量對應的唯一表示 ID ,將 ids 與向量的標簽存入 Postgres ,當然,原始特征向量也可以存入 Postgres (可選):

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

3、特征向量檢索

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

ANN_SIFT1B 中采用歐氏距離計算,參數設定后 Milvus 將返回查詢結果的 ids ,利用該 ids 到 Postgres 中進行查詢,最終混合查詢結果。

# 根據 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 中進行查詢sql = "select * from PG_TABLE_NAME where ids = results.ids ;"cur.execute(sql)
 

在對一億數據進行混合查詢時, Milvus 特征向量搜索僅需 70ms ,在 Postgres 中對 Milvus 搜索結果的 ids 進行查詢不超過 7ms 。

總的來說,利用 Milvus 特征向量數據庫,可以快速實現向量與結構化數據的混合查詢。若僅使用傳統的關系型數據庫進行向量查詢,不僅大規模向量數據存儲難,而且無法高性能完成特征向量檢索。

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

這里實現了基于 Milvus 的混合查詢。在一億特征向量數據集的情況下,混合查詢時間不超過 77 ms 。

并且基于 Milvus 易管易用的特性,通過參考  Milvus 混合查詢方案[2] 所提供的工具,能輕松實現向量和結構化數據的混合查詢,更好的支持業務需求。

關于基于Milvus實現向量與結構化數據混合查詢的示例分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

扶沟县| 安福县| 烟台市| 汉寿县| 尼勒克县| 任丘市| 阿合奇县| 尉犁县| 雷波县| 青神县| 信阳市| 法库县| 蓝田县| 句容市| 甘孜县| 柳河县| 日照市| 绥江县| 灵丘县| 闵行区| 开封县| 炉霍县| 长顺县| 达孜县| 琼海市| 中山市| 会理县| 巴中市| 白朗县| 长沙市| 荣成市| 沁水县| 台北县| 日土县| 平顶山市| 赣州市| 扬州市| 佛坪县| 临颍县| 博湖县| 灵璧县|