本文介紹如何設置向量檢索高級參數。
使用數據類型定義可以設置檢索時的高級參數。
設置多向量檢索時每個向量的候選個數
title_vector = [0.1, 0.2, 0.3, 0.4]
content_vector = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
vectors = {
"title": VectorQuery(vector=title_vector, num_candidates=10),
"content": VectorQuery(vector=content_vector),
}
ret = collection.query(
vector=vectors,
topk=20,
)
上面的代碼中,設置title向量召回10條結果,content向量沒有設置num_candidates,召回topk=20條結果。
開啟線性(暴力)檢索
print(collection.query(vector=VectorQuery(np.random.rand(768), is_linear=True)))
重要
生產環境不建議開啟線性檢索,檢索性能會顯著下降。
開啟線性檢索后,不一定保證召回達到100%.
對于開啟量化的集合,會使用量化后的數據做計算,召回可能小于100%.
對于未開啟量化的集合,召回為100%.
調整HNSW檢索的ef參數
print(collection.query(vector=VectorQuery(np.random.rand(768), ef=100)))
HNSW索引中,ef表示檢索過程中的候選集個數,具體可參考這里。通過調整ef值,可以在檢索性能和召回之間獲得一定的權衡:增大ef值,會提升召回但可能降低檢索性能;減小ef值,會提高檢索性能但可能降低召回。
ef 的取值范圍為[0, 4294967295],其中0表示使用默認ef值。
說明
ef 取值超過一定值之后可能性能/召回結果達到穩定,取更大的值也不再變化。
建議生產環境不要使用過大的ef,以免影響檢索效率。
RNN 檢索
RNN(Radius nearest neighbour)在一般的向量檢索基礎上增加了限制條件,只返回距離query向量的距離不超過閾值radius的文檔。
print(collection.query(vector=VectorQuery(np.random.rand(768), radius=1.0)))
對于不同的距離類型,radius含義不同
對于歐式距離和余弦距離,返回 score <= radius 的doc。
對于內積距離,返回 score >= radius 的doc。
說明
RNN 檢索返回的結果條數仍然受topk限制。
文檔內容是否對您有幫助?