国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

大規模相似性搜索:原理、技術與 Faiss 實踐

發布于 2025-1-10 12:36
瀏覽
0收藏

相似性搜索為何重要?

人工智能和機器學習的興起,催生了大量高維數據表示形式,即嵌入(embeddings),它們捕捉數據點之間的復雜關系,助力強大的分析與理解。然而,在大型數據集中查找相似嵌入是一項計算密集型任務。相似性搜索在檢索增強生成(Retrieval-Augmented Generation,RAG)領域引發了變革。RAG 將傳統信息檢索與語言模型相結合,通過利用相似性搜索查找相關文檔,使模型能訪問更廣泛的知識庫,生成更具信息量和上下文豐富的輸出,從而提高生成文本的準確性和相關性。

大規模相似性搜索的挑戰

傳統數據庫和搜索引擎難以滿足大規模相似性搜索的需求。它們依賴結構化查詢和索引方法,無法應對高維數據的動態特性。因此,需要專門的技術來解決這一問題。

大規模相似性搜索:原理、技術與 Faiss 實踐-AI.x社區

Faiss 框架

Faiss 由 Facebook AI Research 開發,是一個專為高效相似性搜索設計的強大庫。它提供多種索引方法,在性能、準確性和內存使用之間進行了不同的權衡優化。Faiss 還支持 GPU 加速,非常適合處理大規模數據集。

大規模相似性搜索:原理、技術與 Faiss 實踐-AI.x社區

基礎準備

首先安裝和導入必要的依賴項:

pip install faiss-cpu
import time
import faiss
import numpy as np

接著定義一些常量:d? 表示向量維度(128),nb? 表示基礎向量數量(10000),nq 表示查詢向量數量(100)。

d = 128
nb = 10000
nq = 100

為保證結果可復現,初始化隨機種子:

np.random.seed(1234)

生成兩組隨機向量,xb? 代表基礎向量(10000 x 128),xq 代表查詢向量(100 x 128):

xb = np.random.random((nb, d)).astype('float32')
xq = np.random.random((nq, d)).astype('float32')

這些向量本質上就是我們的數據點。

分層可導航小世界(Hierarchical Navigable Small World,HNSW)

大規模相似性搜索:原理、技術與 Faiss 實踐-AI.x社區

  • 工作原理:HNSW 是一種基于圖的索引方法,向量被組織在小世界圖的層次結構中。圖中的每個節點(向量)都與其最近鄰節點相連。搜索時,算法在圖中導航,快速收斂到最近的向量。
  • 優勢:HNSW 準確性高且搜索速度快,尤其適用于高維數據集。
  • 關鍵參數:

M(每個節點的連接數):控制圖中每個節點連接的鄰居數量。數值越高,準確性越高,但內存消耗也越大。

efConstruction? 和efSearch:分別控制索引構建和搜索過程中的探索深度。數值越高,搜索準確性越好,但計算量也更大。

創建兩個 HNSW 索引 —— HNSWFlat? 和 HNSWSQ(標量量化)來對比性能:

# HNSWFlat 是基本的 HNSW 實現
index_hnswflat = faiss.IndexHNSWFlat(d, 32)
start = time.time()
index_hnswflat.add(xb)
indexing_time_hnswflat = time.time() - start
start = time.time()
D, I = index_hnswflat.search(xq, 5)
search_time_hnswflat = time.time() - start

# HNSWSQ 結合了標量量化(SQ)以加快索引速度
quantizer_sq = faiss.IndexScalarQuantizer(d, faiss.ScalarQuantizer.QT_8bit)
index_hnswsq = faiss.IndexHNSWFlat(d, 32)
start = time.time()
index_hnswsq.add(xb)
indexing_time_hnswsq = time.time() - start
start = time.time()
D, I = index_hnswsq.search(xq, 5)
search_time_hnswsq = time.time() - start

兩個索引都使用“扁平”存儲方法,即不壓縮原始向量。

輸出結果:

print(f"HNSWFlat Indexing Time: {indexing_time_hnswflat:.4f} seconds")
print(f"HNSWFlat Search Time: {search_time_hnswflat:.4f} seconds")
print(f"HNSWSQ Indexing Time: {indexing_time_hnswsq:.4f} seconds")
print(f"HNSWSQ Search Time: {search_time_hnswsq:.4f} seconds")

與基于 IVF 的方法相比,HNSW 方法的索引速度明顯較慢,因為 HNSW 需要構建鄰居圖,計算成本較高。由于標量量化(SQ)在索引過程中更緊湊地表示向量,降低了向量維度,所以 HNSWSQ? 比 HNSWFlat? 稍快。HNSWFlat? 和 HNSWSQ 的搜索時間比基于 IVF 的方法略長,這是因為需要遍歷圖來找到最近鄰居。HNSW 以高精度著稱,尤其在高維空間中,但代價是索引和搜索時間較長。

倒排文件索引(Inverted File Index,IVF)

大規模相似性搜索:原理、技術與 Faiss 實踐-AI.x社區

  • 工作原理:IVF 是大規模數據集相似性搜索中另一種常用方法。它將數據集劃分為多個桶(buckets)或“列表”,每次查詢僅搜索其中一部分桶。
  • 優勢:與 HNSW 相比,IVF 的主要優勢是內存需求較低。
  • 關鍵參數:

nlist:聚類(或桶)的數量。數值越高,精度越高,但索引時間也會增加。

nprobe:查詢時搜索的聚類數量。增加此參數可提高召回率,但會降低搜索速度。

對比 IndexIVFFlat?(無乘積量化)和 IndexIVFPQ(有乘積量化):

# IVFFlat 使用無量化的扁平索引
nlist = 100
quantizer = faiss.IndexFlatL2(d)
index_ivfflat = faiss.IndexIVFFlat(quantizer, d, nlist, faiss.METRIC_L2)
start = time.time()
index_ivfflat.train(xb)
index_ivfflat.add(xb)
indexing_time_ivfflat = time.time() - start
index_ivfflat.nprobe = 10
start = time.time()
D, I = index_ivfflat.search(xq, 5)
search_time_ivfflat = time.time() - start

# IVFPQ 結合乘積量化(PQ)以提高內存效率
m = 8
nbits = 8
index_ivfpq = faiss.IndexIVFPQ(quantizer, d, nlist, m, nbits)
start = time.time()
index_ivfpq.train(xb)
index_ivfpq.add(xb)
indexing_time_ivfpq = time.time() - start
index_ivfpq.nprobe = 10
start = time.time()
D, I = index_ivfpq.search(xq, 5)
search_time_ivfpq = time.time() - start

IVF 的關鍵思想是將數據集劃分為聚類(桶),每次查詢僅搜索其中一部分桶。這里設置 nlist 為 100,即有 100 個聚類。

輸出結果:

print(f"IVFFlat Indexing Time: {indexing_time_ivfflat:.4f} seconds")
print(f"IVFFlat Search Time: {search_time_ivfflat:.4f} seconds")
print(f"IVFPQ Indexing Time: {indexing_time_ivfpq:.4f} seconds")
print(f"IVFPQ Search Time: {search_time_ivfpq:.4f} seconds")

IVFPQ? 的索引時間比 IVFFlat? 長得多,因為 IVFPQ? 在初始聚類后還涉及額外的量化步驟。它應用乘積量化(PQ),需要學習一個碼本,將每個向量壓縮為多個量化子向量。IVFPQ 的搜索時間略長,這是由于在搜索過程中需要從量化表示中解壓縮和重構向量,但差異很小,其內存效率的提升通常值得這額外的搜索時間。

局部敏感哈希(Locality Sensitive Hashing,LSH)

大規模相似性搜索:原理、技術與 Faiss 實踐-AI.x社區

  • 工作原理:LSH 將高維向量轉換為低維“哈希”值。相似向量更有可能具有相同的哈希值,通過關注包含相關哈希的桶來實現高效搜索。
  • 優勢:LSH 為相似性搜索提供了一種快速且可擴展的方法,尤其適用于大型數據集和高維空間。
  • 關鍵參數:

哈希表數量:控制準確性和速度之間的權衡。哈希表越多,準確性越高,但搜索時間也會增加。

每個表的哈希函數數量:用于生成每個哈希值的哈希函數數量。

使用 IndexLSH(基于哈希的方法,利用隨機投影為每個向量創建哈希值):

nbits = 16
index_lsh = faiss.IndexLSH(d, nbits)
start = time.time()
index_lsh.add(xb)
indexing_time_lsh = time.time() - start
start = time.time()
D, I = index_lsh.search(xq, 5)
search_time_lsh = time.time() - start

相似向量更有可能具有相同的哈希值,我們使用 16 位哈希。

輸出結果:

print(f"LSH Indexing Time: {indexing_time_lsh:.4f} seconds")
print(f"LSH Search Time: {search_time_lsh:.4f} seconds")

LSH 的索引速度極快,因為它只是基于隨機投影將數據點哈希到哈希桶中,無需像 IVF 或 HNSW 那樣的訓練過程,所以索引幾乎是即時的。與 IVFFlat? 和 HNSW? 相比,LSH 的搜索相對較慢,這是因為 LSH 的隨機性,可能需要搜索多個哈希桶才能找到最近鄰居。LSH 通常索引速度快,但與 HNSW 或 IVFPQ 等更復雜的方法相比,可能會犧牲準確性和搜索速度。

本文只是對大規模相似性搜索領域的簡要介紹,僅觸及了基礎知識,還有更多內容有待探索。未來我們將深入研究實際應用,探索更高級的索引方法,甚至使用 Faiss 構建一些有趣的項目。

本文轉載自 ??柏企閱文??,作者: 柏企

收藏
回復
舉報
回復
相關推薦
自拍偷拍欧美专区| 国产一区二区三区四区老人| 一区二区三区四区不卡在线| 欧美日韩精品免费看| 国产精品久久久久久av公交车| 欧美性jizz18性欧美| 久久久999视频| 日韩在线一区二区三区| 国产成人精品免费视频| 国产三级一区| 日韩视频在线观看一区二区| 石原莉奈一区二区三区高清在线| 国产·精品毛片| 国产精品99久久久久久久| 97久久综合区小说区图片区 | 最新超碰在线| 一区二区三区精品| 亚洲精品少妇一区二区| 欧美福利在线| 国产精品少妇自拍| 久久精品视频亚洲| 国产精品老牛影院在线观看| 男人的天堂视频在线| av在线资源| 国产日韩欧美一区二区三区乱码 | 欧美男男gaytwinkfreevideos| 日产福利视频在线观看| 黄色免费网站在线| 久久深夜福利| 亚洲人123区| 国内精品久久久久久| 免费a级人成a大片在线观看| 亚洲成人av一区二区| 综合色就爱涩涩涩综合婷婷| 日韩hd视频在线观看| av网址在线| 国产日产亚洲精品系列| 中文字幕在线看视频国产欧美在线看完整| 久久久久久久久一区二区| eeuss影院在线观看| 秋霞成人午夜伦在线观看| 日韩一区和二区| 亚洲mv在线看| 免费av网站在线观看| 欧美综合视频| 亚洲一区二区国产| 青青草综合在线| 久久国产免费看| 欧美日韩中文国产一区发布| 伊人激情综合| 欧美亚洲免费在线| 麻豆国产一区二区| 亚洲欧洲精品在线观看| 首页综合国产亚洲丝袜| 日韩最新中文字幕| 久久91精品国产| 五月天色综合| 久久久人成影片一区二区三区观看| 日本在线成人| 国产999精品久久久影片官网| 午夜先锋成人动漫在线| 国产精品视频白浆免费视频| 一区二区中文| 日本在线播放一区| 成人av午夜电影| 99.玖玖.com| 精品久久中文字幕| 久cao在线| 亚洲美女在线看| 久久精品一级| 91亚洲精品一区| 日韩中文字幕一区二区三区| 国产在线精品91| 一级特黄大欧美久久久| 69av在线| 色偷偷噜噜噜亚洲男人的天堂| 精品三级av| 国产精品污www一区二区三区| 久久永久免费| 爱福利视频一区二区| 亚洲午夜激情网页| av网站大全在线| www.精品av.com| 成人av动漫在线观看| 精品一区二区国产| gogo大胆日本视频一区| 最新av在线| 亚洲精品国精品久久99热一| 欧美高清视频看片在线观看| 国产精品一区二区免费| 国产精品中文欧美| a视频在线看| 日韩av一区在线| 亚洲制服一区| 亚洲 日韩 国产第一区| 国产精品免费视频观看| aaa在线免费观看| 精品国产一区二区精华| 欧美wwwww| 久久久久久免费看| 国产精品久久国产精品| 欧美激情视频在线播放| 久久偷看各类女兵18女厕嘘嘘 | 污污的网站在线看| 欧美日韩免费高清一区色橹橹| 亚洲一区在线直播| 国产一区二区中文字幕| 肥熟一91porny丨九色丨| 久久综合久久综合亚洲| 黄色在线观看视频网站| 精品呦交小u女在线| 日韩视频一二区| 日韩视频永久免费观看| 美女精品视频| 日本一区二区三区四区视频| 奇米精品一区二区三区在线观看一| 色婷婷狠狠18| 欧美电视剧在线看免费| 噜噜噜狠狠夜夜躁精品仙踪林| 欧美日韩另类丝袜其他| 亚洲码国产岛国毛片在线| 欧美日韩精品免费观看视完整| 91精品黄色片免费大全| 97久久久精品综合88久久| 在线免费看黄| 欧美黄色片视频| 欧美日韩色一区| 美女视频免费一区| 久久精品视频一区二区| 欧洲美女少妇精品| 日本精品免费一区二区三区| 国产馆精品极品| 在线观看男女av免费网址| 91欧美精品成人综合在线观看| 国产日韩欧美激情| 成人精品国产| 国产精品久久成人免费观看| 亚洲久草在线| 欧美电影在线观看网站| 在线观看免费av网| 欧美日本一区二区三区| 亚洲成a人片77777在线播放| 久久久久久久久爱| 国产精品久久久久久久久久久久午夜片 | 一区二区三区偷拍| 亚洲成人高清在线| 欧美性生活一级片| 无码人妻精品一区二区三区在线| 亚洲第一区在线观看| 久久在线精品| 2024最新电影在线免费观看| 国产精品免费一区二区三区四区| 毛片在线播放a| 精品国产91久久久久久老师| 久久99久久人婷婷精品综合 | wwwww亚洲| 久久伊人资源站| 在线国产亚洲欧美| 综合激情一区| 国产精品免费观看| 国产91亚洲精品一区二区三区| 精品日韩中文字幕| 欧美日韩国产欧| av在线天堂播放| 欧美日韩免费精品| 日韩欧美三级在线| 久久www免费人成看片高清| 美女高潮在线观看| 成年人看的毛片| 欧美大片在线免费观看| 亚洲啪啪综合av一区二区三区| 精品中文一区| 青青久草在线| 久久精品99久久| 亚洲国内高清视频| 国产精品123区| 国产精品一区免费在线| 性直播在线观看| 91日本在线观看| 51精品国自产在线| 狠狠色综合色综合网络| 曰本一区二区| 麻豆av在线| 精品一区二区日本| 亚洲欧美另类国产| 国产视频不卡一区| 日本久久一二三四| 日韩少妇视频| 青青草原av在线播放| 热久久99这里有精品| 欧美丝袜丝交足nylons图片| 麻豆精品新av中文字幕| 亚洲欧美日本国产| 国产资源在线播放| 成人黄色片免费| 国产精品视频一| 亚洲精品在线免费播放| 国产日韩欧美高清| 激情综合网址| 久久伊人影院|