【向量模型 + HNSW 參數如何選擇】

目錄

一、embedding_function(向量模型)

可選方式

選型建議

二、HNSW 參數選擇(核心影響搜索速度與準確率)

2.1 參數解釋和推薦值

2.2? 配置模板參考

1、推薦默認配置(適合大多數項目):

?2、如果你數據量不大,追求速度:

3、如果你是海量數據 + 精確語義搜索(例如 10w+ 向量):

三、?如何驗證設置是否合理?


一、embedding_function(向量模型)

可選方式

模型來源優點適用場景
DefaultEmbeddingFunction本地免費、快速、不聯網本地原型、快速測試
OpenAIEmbeddingFunction云端(OpenAI)高質量語義表達、支持多語言生產環境、中文或多語言場景
自定義 HuggingFace 模型本地/云端靈活,適配行業語料醫療、法律、金融定制需求

選型建議

  • 原型階段 / 離線工具 → 用 DefaultEmbeddingFunction()(MiniLM)

  • 中小型項目上線 → 用 OpenAI text-embedding-3-small(速度快,質量高)

  • 大模型私有部署 / 內網不聯網 → 自建向量模型


二、HNSW 參數選擇(核心影響搜索速度與準確率)

2.1 參數解釋和推薦值

參數名含義推薦值(中小數據量)推薦值(大數據量)建議說明
space向量相似度度量方式"cosine""cosine"一般都選余弦相似度,除非特殊場景
ef_construction構建索引時的探索范圍(越大索引越準)100200~300構建階段,時間換準確
ef_search查詢時探索節點數(越大越準)50~100100~300越大查得越準但越慢
max_neighbors每個節點連接的鄰居數量(影響索引質量)1632一般設為 16 或 32
num_threads構建索引使用的線程數根據 CPU 核心數根據 CPU 核心數多線程加速構建

?2.1.1 關鍵參數:ef_construction

1、概述

構建索引時的“探索范圍”指的是參數 ef_construction,這是構建 HNSW 索引時的核心參數之一,它決定了每個新節點在添加到圖中時,會“看”多少個已有節點來尋找最相似的鄰居。

一句話解釋:

ef_construction 控制新節點在加入圖時會探索多少個已有節點。值越大,索引越準確,但構建時間和內存開銷也越高。

?

2、原理簡述

  • 構建 HNSW 索引時,每插入一個向量,就要為它選擇一批“鄰居”。

  • 選擇鄰居的方法是:從已有的圖中搜索 ef_construction 個候選節點,然后從中選出最相似的 max_neighbors 個建立連接。

3、參數選擇建議(常用范圍:64 ~ 512)

數據規模推薦 ef_construction
< 1 萬條64 ~ 100
1 萬 ~ 10 萬條100 ~ 200
10 萬 ~ 100 萬條200 ~ 300
> 100 萬條300 ~ 512(視內存而定)

4、?設置越大/越小的影響

ef_construction優點缺點
小(如 64)構建快、內存省索引質量差、影響查準率
中(如 100~200)平衡推薦值
大(如 300~512)檢索更準構建慢、內存占用高

?

5、舉個例子

假設你用 10 萬條文本向量構建搜索系統:

"hnsw": {"ef_construction": 200,"max_neighbors": 32,"num_threads": 4
}

?含義是:每個新向量會先從已有圖中探索 200 個節點,然后從中選出 32 個相似度高的作為鄰居。

6、小結

參數說明推薦值范圍
ef_construction構建索引時,每個新向量探索的候選節點數100 ~ 300(中大型項目)


2.1.2?關鍵參數:ef_search

1、概述

  • f_search 就是你設置的 搜索過程中最多會探索的節點數

  • 默認值可能是 10100,你可以設更高以提升查準率。

ef_search探索節點數檢索速度檢索精度
10非常快精度可能不高
100較慢精度更高
300非常多更慢幾乎等于精確搜索

可以理解為搜索時你愿意“走幾步路”去找最近的東西,走得越多,找到的可能越準。

?

?2、怎么選 ef_search

應用場景推薦值
實時性要求高、數據不多ef_search = 20~50
通用語義檢索、常規精度ef_search = 100
準確率優先、如推薦系統ef_search = 200~300

想象你在地圖上找“最近的加油站”:

  • ef_search = 10 → 你只看周圍 10 個路口(很快,但可能錯過)

  • ef_search = 300 → 你查看方圓 5 公里所有站點(更準,但耗時)

名詞含義建議
搜索節點檢索時要比較距離的向量節點數ef_search 控制,越多越準但慢
構建節點建索引時訪問過的節點數ef_construction 控制

??2.1.3?關鍵參數:max_neighbors

1、概述

“每個節點連接的鄰居數量”是指在 HNSW(Hierarchical Navigable Small World)索引構建階段,每個向量節點最多會連接多少個“相似的節點”作為它的鄰居。這由參數 max_neighbors(有時叫 M)控制。

一句話解釋:
每個向量點會主動維護 max_neighbors 個最相似的其他向量,作為圖結構中的“朋友節點”,用來輔助導航搜索。

2、舉個例子(假設 max_neighbors = 4):

假設你有一個向量 A,它與周圍其他向量計算了相似度,系統會選擇其中最相似的 4 個節點作為 A 的“鄰居”。

在圖中,A 將連向這 4 個節點,形成雙向或單向的邊。這些邊形成了一個小世界圖(Small World Graph),為后續搜索提供跳躍路徑。

?

3、這些鄰居有什么用?

  • 它們就是**“搜索路線圖”**的一部分。

  • 查詢時從某個節點開始,沿著它的鄰居跳轉(而不是全量比較),從而快速接近最相似的向量。

4、參數建議

數據規模推薦 max_neighbors(M)
< 10 萬條8 ~ 16
10 萬 ~ 100 萬16 ~ 32
> 100 萬條32 ~ 64(根據內存可調高)

?

5、數量設置影響

數量優點缺點
少(如 8)節省空間,速度快精度差、圖稀疏
多(如 32)更高檢索精度占內存,構建慢
極多(如 64+)接近精確搜索效果內存大增,不適合輕量部署

?

6、類別理解

把節點想成一個人,鄰居就是他最熟的朋友。一個人朋友越多,消息傳播(搜索)效率越高,但也更復雜、更占資源。

7、總結

概念含義
max_neighbors構建索引時,每個節點最多連接多少“相似節點”
更大值圖更密集,搜索路徑更多,準確率提高但資源開銷增大
通常值16 或 32 足夠大多數任務

??2.1.4?關鍵參數:num_threads

1、 選擇依據

你應該根據 本機的 CPU 核心數 來合理設置 num_threads

機器配置建議設置(num_threads
單核 CPU / 低性能機器1
4 核 CPU2~4
8 核 CPU4~6
16 核服務器8~12(最多不超過 75% 使用率)

?

2、查看你機器的 CPU 核心數(命令行)

Linux/macOS

lscpu | grep "^CPU(s):"
# 或者
nproc

?▲Windows(PowerShell)

Get-WmiObject -Class Win32_ComputerSystem | Select-Object NumberOfLogicalProcessors

3、設置建議

設置優點缺點
線程數小(如 1)占用低構建時間長
線程數中等(如 2~4)平衡適合開發測試環境
線程數多(如 8+)構建快占 CPU 多,其他進程變慢

4、?示例設置(實際代碼)

"hnsw": {"ef_construction": 200,"max_neighbors": 16,"num_threads": 4  # 如果你的機器是 8 核,可以設為 4~6
}

5、小結

參數名含義如何選擇
num_threads構建 HNSW 索引時的線程數設為不超過 CPU 核心數的 70% 較穩妥
構建快慢取決于線程數;查詢階段不影響

2.2? 配置模板參考

1、推薦默認配置(適合大多數項目):
"hnsw": { "space": "cosine","ef_search": 100, "ef_construction": 200,"max_neighbors": 16, "num_threads": 4 # 或根據你機器核心數 
}
?2、如果你數據量不大,追求速度:
"hnsw": { "space": "cosine", "ef_search": 50, "ef_construction": 100, "max_neighbors": 8, "num_threads": 2 
}
3、如果你是海量數據 + 精確語義搜索(例如 10w+ 向量):
"hnsw": { "space": "cosine", "ef_search": 300, "ef_construction": 300, "max_neighbors": 32, "num_threads": 8 
}

▲"space": "cosine":向量之間使用余弦相似度來衡量相似度。
▲ef_search: 搜索時的探索范圍,越大越準,越小越快。
▲ef_construction: 構建索引時的精度控制參數,越大越好。
▲max_neighbors: 每個節點最多連接的鄰居數量。
▲num_threads: 使用線程數(用于并發構建索引)。


三、?如何驗證設置是否合理?

你可以從以下角度做 A/B 測試:

指標評估方式
檢索精度查詢后返回的 top-3 是否與你預期語義相關
響應速度time 或日志記錄搜索耗時
資源占用構建和搜索時 CPU 占用是否合理
內存開銷是否容易 OOM(內存溢出)

總之需要根據數據量級(比如有多少條文本、是不是中文內容)、部署環境(是否聯網)以及用途(問答、推薦、對話等),構建定制化的參數

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80016.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80016.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80016.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

fpga系列 HDL : Microchip FPGA開發軟件 Libero Soc 安裝 license申請

啟動 注冊賬號&#xff1a;https://login.microchip.com/申請免費許可&#xff1a;https://www.microchipdirect.com/fpga-software-products C:\Windows\System32>vol驅動器 C 中的卷是 Windows卷的序列號是 ****-****為“D:\Microsemi\License.dat”創建環境變量“LM_LICE…

【C++】解析C++面向對象三要素:封裝、繼承與多態實現機制

解析C面向對象三要素&#xff1a;封裝、繼承與多態實現機制 1. 面向對象設計基石2. 封裝&#xff1a;數據守衛者2.1 訪問控制實現2.2 封裝優勢 3. 繼承&#xff1a;代碼復用藝術3.1 繼承的核心作用3.2 繼承類型對比3.3 典型應用場景3.4 構造函數與析構函數處理3.4.1 構造順序控…

Python并發編程:開啟性能優化的大門(7/10)

1.引言 在當今數字化時代&#xff0c;Python 已成為編程領域中一顆璀璨的明星&#xff0c;占據著編程語言排行榜的榜首。無論是數據科學、人工智能&#xff0c;還是 Web 開發、自動化腳本編寫&#xff0c;Python 都以其簡潔的語法、豐富的庫和強大的功能&#xff0c;贏得了廣大…

數學復習筆記 10

前言 我覺得數學的高分乃至滿分屬于那些&#xff0c;聰明&#xff0c;堅韌&#xff0c;勇敢&#xff0c;細致的人。我非常慚愧自己不是這樣的人&#xff0c;我在生活中發現了這樣的同學&#xff0c;和他們交流的時候我常常感到汗流浹背&#xff0c;因為他們非常扎實的基礎知識…

深入理解 Webpack 核心機制與編譯流程

&#x1f916; 作者簡介&#xff1a;水煮白菜王&#xff0c;一位前端勸退師 &#x1f47b; &#x1f440; 文章專欄&#xff1a; 前端專欄 &#xff0c;記錄一下平時在博客寫作中&#xff0c;總結出的一些開發技巧和知識歸納總結?。 感謝支持&#x1f495;&#x1f495;&#…

概率相關問題

問題匯總 1. 貝葉斯定理&#xff08;貝葉斯公式和全概率公式&#xff09;2. 概率題2.1 隨機發生器的概率為1/2 1. 貝葉斯定理&#xff08;貝葉斯公式和全概率公式&#xff09; 定義&#xff1a;在信息和條件有限的情況下&#xff0c;基于過去的數據&#xff0c;通過動態調整的…

【系統架構師】2025論文《WEB系統性能優化技術》

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一個正在變禿、變強的文藝傾年。 &#x1f514;本文分享【系統架構師】2025論文《系統可靠性設計》&#xff0c;期待與你一同探索、學習、進步&#xff0c;一起卷起來叭&#xff01; 目錄 項目介紹背景介紹系統模塊技術棧性能…

ADS1220高精度ADC(TI)——應用 源碼

文章目錄 德州儀器ADS1220概述資料引腳&封裝布線寄存器配置寄存器0&#xff08;00h&#xff09;配置寄存器1&#xff08;01h&#xff09;配置寄存器2&#xff08;02h&#xff09;配置寄存器3&#xff08;03h&#xff09; 連續轉換流程驅動源碼ads1220.cads1220.h 德州儀器A…

Uniapp 安卓實現訊飛語音聽寫(復制即用)

在移動應用開發中&#xff0c;語音交互功能能夠極大提升用戶體驗&#xff0c;讓操作更加便捷自然。訊飛語音聽寫技術憑借其高準確率和穩定性&#xff0c;成為眾多開發者的選擇。本文將詳細介紹如何在 Uniapp 項目中&#xff0c;實現安卓端的訊飛語音聽寫功能&#xff0c;幫助你…

【golang】DNS 資源記錄(RR)接口

Go 中 miekg/dns 包對 DNS 資源記錄&#xff08;RR&#xff09;接口 的定義&#xff1a; type RR interface {Header() *RR_HeaderString() stringcopy() RRlen(off int, compression map[string]struct{}) intpack(...)unpack(...)parse(...)isDuplicate(r2 RR) bool }這個接…

16.2 VDMA視頻轉發實驗之模擬源

文章目錄 1 實驗任務2 系統框圖3 硬件設計3.1 IP核配置3.2 注意事項3.3 自定義IP核源碼 4 軟件設計4.1 注意事項4.2 工程源碼4.2.1 main.c文件 1 實驗任務 基于14.1&#xff0c;相較于16.1&#xff0c;使用自定義IP核vid_gen_motion替換Xilinx TPG IP核。 2 系統框圖 基于14…

深度學習之用CelebA_Spoof數據集搭建一個活體檢測-訓練好的模型用MNN來推理

一、模型轉換準備 首先確保已完成PyTorch到ONNX的轉換&#xff1a;深度學習之用CelebA_Spoof數據集搭建活體檢測系統&#xff1a;模型驗證與測試。這里有將PyTorch到ONNX格式的模型轉換。 二、ONNX轉MNN 使用MNN轉換工具進行格式轉換&#xff1a;具體的編譯過程可以參考MNN的…

JVM學習專題(一)類加載器與雙親委派

目錄 1、JVM加載運行全過程梳理 2、JVM Hotspot底層 3、war包、jar包如何加載 4、類加載器 我們來查看一下getLauncher&#xff1a; 1.我們先查看getExtClassLoader() 2、再來看看getAppClassLoader(extcl) 5、雙親委派機制 1.職責明確&#xff0c;路徑隔離?&#xff…

部署安裝gitlab-ce-17.9.7-ce.0.el8.x86_64.rpm

目錄 ?編輯 實驗環境 所需軟件 實驗開始 安裝部署gitlab171.配置清華源倉庫&#xff08;版本高的系統無需做&#xff09;vim /etc/yum.repos.d/gitlab-ce.repo 2.提前下載包dnf localinstall gitlab-ce-17.9.7-ce.0.el8.x86_64.rpm --rocklinux 3.修改配…

使用LoRA微調Qwen2.5-VL-7B-Instruct完成電氣主接線圖識別

使用LoRA微調Qwen2.5-VL-7B-Instruct完成電氣主接線圖識別 動機 任務適配需求 Qwen2.5-VL在視覺理解方面表現優異&#xff0c;但電氣主接線圖識別需要特定領域的結構化輸出能力&#xff08;如設備參數提取、拓撲關系解析&#xff09;。微調可增強模型對專業符號&#xff08;如…

系統集成項目管理工程師學習筆記

第九章 項目管理概論 1、項目基本要素 項目基礎 項目是為創造獨特的產品、服務或成果而進行的臨時性工作。 項目具有臨時性、獨特性、漸進明細的特點。項目的“臨時性”是指項目只有明確的起點和終點。“臨時性”并一定意味著項目的持續時間短。 項目可宣告結束的情況&…

Secs/Gem第七講(基于secs4net項目的ChatGpt介紹)

好的&#xff0c;那我們現在進入&#xff1a; 第七講&#xff1a;掉電重連后&#xff0c;為什么設備不再上報事件&#xff1f;——持久化與自動恢復的系統設計 關鍵詞&#xff1a;掉電恢復、狀態重建、初始化流程、SecsMessage 緩存機制、自動重連、事件再注冊 本講目標 你將理…

室內定位:熱門研究方向與未解難題深度解析

I. 引言:對普適性室內定位的持續探索 A. 室內定位在現代應用中的重要性 室內定位系統(IPS)正迅速成為眾多應用領域的基石技術,其重要性源于現代社會人們約70%至90%的時間在室內度過的事實 1。這些應用橫跨多個行業,包括應急響應 1、智能建筑與智慧城市 6、醫療健康(如病…

Android學習總結之Glide自定義三級緩存(實戰篇)

一、為什么需要三級緩存 內存緩存&#xff08;Memory Cache&#xff09; 內存緩存旨在快速顯示剛瀏覽過的圖片&#xff0c;例如在滑動列表時來回切換的圖片。在 Glide 中&#xff0c;內存緩存使用 LruCache 算法&#xff08;最近最少使用&#xff09;&#xff0c;能自動清理長…

Linux的文件查找與壓縮

查找文件 find命令 # 命令&#xff1a;find 路徑范圍 選項1 選項1的值 \[選項2 選項2 的值…]# 作用&#xff1a;用于查找文檔&#xff08;其選項有55 個之多&#xff09;# 選項&#xff1a;# -name&#xff1a;按照文檔名稱進行搜索&#xff08;支持模糊搜索&#xff0c;\* &…