所有關於次模性的實作都可以在這個 Github 儲存庫中找到。
在我之前關於DeepResearch 中用於扇出查詢的次模優化的文章之後,我收到了很好的回饋,希望更深入地探討次模性及其在資訊檢索和代理搜尋中的應用。今天,我將介紹次模優化的另外兩個應用:文本選擇和段落重排。兩者都解決了相同的核心挑戰——最佳子集選擇——每個類似 DeepResearch 的系統都必須解決。
真實世界的文檔包含語義冗餘——並非每個句子對於 LLM 的推理都具有同等的重要性。想像一下,您有一個冗長的文檔,需要提取最具代表性的資訊,同時保持在詞元限制內。這就是文本選擇:選擇在基數約束下捕捉文檔本質的內容。我們希望選擇的內容彼此正交——在最大化總覆蓋率的同時,最小化共享資訊。這適用於多個層級:從文檔中選擇句子,或從句子中選擇詞元。人們也可以將文本選擇視為上下文優化或壓縮。我們減少了 LLM 詞元的消耗,同時保留了推理所需的語義豐富性。

段落重排根據候選段落與使用者查詢的語義相關性對其進行排序。在 Jina AI,我們為此構建了專用的重排器 (jina-reranker-m0、jina-reranker-v2-multilingual-base),儘管我們的 向量模型 也可以解決這個問題。但這裡有一個限制:大多數重排器(包括我們的)都以逐點方式工作。它們獨立地為單個 (query, document) 對評分。它們不考慮段落之間的共享資訊:如果段落 1 和段落 7 的分數都很高,但包含幾乎相同的資訊,那麼僅選擇其中一個是否就足夠了?

在 DeepResearch 中,這變得至關重要。當代理呼叫搜尋工具並收集網頁片段時,我們必須確定哪些片段值得在下一個推理步驟中佔用寶貴的上下文視窗空間。該選擇遵循與文本選擇相同的「最小化重疊,最大化覆蓋率」原則,但增加了一個目標——與原始查詢的相關性必須優先考慮。
許多研究人員認識到上下文工程的重要性日益增加,我們需要構建、優化和「恰到好處地打包上下文視窗」(來自 Andrej Karpathy),以構建更有效的代理工作流程。然而,許多人只是使用 LLM 提示詞 來「軟性地」解決這些問題——沒有保證、沒有理論基礎、效果令人懷疑。我們可以做得更好。
在本文中,我將展示文本選擇和段落重排都可以透過次模優化來解決,從而提供嚴謹的解決方案。如果您不熟悉次模函數,請考慮「收益遞減」。我們從一個空集合開始,並逐步添加選定的文本或段落。每次添加都提供價值,但邊際效益會降低——捕捉到多樣化、非冗餘的選擇最有價值的直覺。形式上,如果對於任何集合 和元素 ,函數 是次模的:
這個公式完美地捕捉了我們的直覺:我們希望選擇的元素共同覆蓋整個文檔的語義空間,隨著我們選擇更多單元,每個新單元覆蓋先前未覆蓋的語義空間的可能性較小。
tag透過次模優化進行文本選擇
首先使用 jina-embeddings-v4 的多向量特徵從段落中提取詞元層級的 向量模型,然後應用次模優化來精心挑選提供最佳覆蓋率的詞元,最後呼叫 tokenizer 並將選擇轉換回其原始位置的字串。將其視為一種「壓縮」形式——您可以調整 top-k 滑塊來撥入不同的「壓縮率」。您仍然可以理解壓縮後的文字嗎?

使用次模優化實現文本選擇。
讓我們先從解決文本選擇問題開始,因為它對於理解次模性至關重要,並且是段落重排的初步步驟。問題如下:
給定一個具有 個元素(詞元或句子)的文件 ,我們想要選擇一個子集 ,其中 ,以最大化覆蓋函數:
其中 表示元素 和 的向量模型之間的餘弦相似度。請注意,覆蓋函數 是次模的,因為它滿足邊際效益遞減的性質。max 運算確保我們測量每個元素被最接近的選定單元代表的程度,避免重複計算冗餘資訊。
tag取得詞元/段落層級的向量模型
對於詞元層級的選擇,我們利用 jina-embeddings-v4 新的多向量模型能力。設定 return_multivector=True 會返回每個詞元一個向量模型,從而能夠在子詞層級進行選擇。
對於段落層級的選擇,我們只需按標點符號或換行符號分割文檔,並獨立嵌入每個段落。或者,也可以調用我們的 API 並延遲分塊,以獲得上下文段落向量模型,這通常會在下游任務中帶來更好的效能。

值得注意的是,由於我們是在同質元素集合中測量語義相似性——所有元素都扮演相同的功能角色,而不是像在段落重排中那樣,比較異質元素(例如查詢與文檔)——我們使用啟用了 text-matching LoRA 適配器的 jina-embeddings-v4。

自 jina-embeddings-v3 以來,我們的向量模型已配備了任務優化的 LoRA。在我們的 v4 向量模型中閱讀更多關於可用 LoRA 的資訊。
tagLazy Greedy 演算法
如同之前的文章,我們使用 lazy greedy 演算法來解決最佳化問題。對於單調次模函數,此演算法可實現 的近似保證——一個可證明是嚴格的界限。lazy greedy 最佳化利用了次模函數的兩個基本性質:邊際效益遞減和迭代之間邊際收益相對排序的保留。該演算法的工作方式如下:
- 初始化:計算所有元素的初始邊際收益,並將其儲存在優先佇列中。
- 延遲評估:在每次迭代中,提取具有最高快取收益的元素。
- 驗證:如果此元素的收益是在目前迭代中計算的,則立即選擇它。
- 重新計算:否則,重新計算其目前的邊際收益,然後重新插入佇列。
這種 lazy greedy 演算法可顯著減少計算開銷,尤其是在邊際收益在元素之間表現出顯著差異時。
tag透過次模最佳化進行段落重排

段落重排任務透過新增一個新的目標來擴展文本選擇:所選子集必須與給定的查詢相關。雖然文本選擇優化了文檔中的純粹多樣性,但段落重排必須在多樣性和查詢相關性之間取得平衡。以下是關鍵符號:
- 是從 個段落的候選集中選定的段落索引子集——在給定步驟中 DeepResearch 系統中的所有內容或記憶。 表示我們想要推進到下一個推理步驟的精選子集。我們有 個查詢和 個候選段落。在傳統搜尋中,,但在 DeepResearch 中,查詢會頻繁地被重新措辭和產生,我們可能手頭有多個查詢。
- 是段落 和 之間的相似度。如同在文本選擇任務中所做的那樣,這使用啟用了 task="text-matching" LoRA 的 jina-embeddings-v4 的餘弦相似度,用於所有段落。
- 是查詢 和段落 之間的相關性分數。這是使用 jina-embeddings-v4 計算的餘弦相似度,其中查詢的
task="retrieval", prompt_name="query",段落的task="retrieval", prompt_name="passage",從而啟用非對稱檢索 LoRA 並產生異質向量模型。
現在,我們可以使用兩個不同的次模函數來公式化它,每個函數都捕捉相關性和多樣性之間的不同權衡。
tag設施選址公式
每個段落都被其最相似的選定段落「覆蓋」,並根據該選定段落與每個查詢的相關性進行加權。此公式選擇既與查詢相關,又代表許多其他段落的段落。
查詢相關性 () 和段落相似度 () 之間的乘法互動會產生「樞紐」——同時充當相關答案和多樣化代表的段落。高度相關的段落可以覆蓋許多相似的段落,而相關性較低的段落只有在沒有更好的代表存在時才提供覆蓋。
tag飽和覆蓋公式
對於每個段落,您獲得的分數等於其查詢相關性或其最佳選定代表覆蓋程度的最小值。這鼓勵選擇可以「飽和」許多其他段落相關性的段落。
min 運算會建立相關性上限——您無法獲得超過段落固有查詢相關性的覆蓋分數。此公式更為保守,可防止過度選擇多樣但無關的段落。
這兩個函數都是單調且次模的,可以使用相同的 lazy greedy 演算法,並具有 近似保證。
tag實驗結果
在我們的實作中,我們使用 Jina Reader 從我們之前的部落格文章中獲取純文字,並使用段落重排評估不同的查詢。我強烈建議讀者使用他們自己的文章來實驗我們的 Google Colab 筆記本——他們最熟悉的內容將提供最有意義的見解。
在我們的實驗中,我們從每個文檔中選擇前 10 個段落。請注意,所有三種演算法——僅查詢相關性、設施選址和飽和覆蓋——都表現出單調性:選擇較大的 不會改變前 個元素的排名。例如,在比較 、 或 時,前 9 個段落在所有值中都保持相同。結果如下所示。




以下是一些重要的觀察結果。首先,次模優化演算法大致遵循查詢相關性分數,但引入了策略性重新排序——段落的排名會「上下移動」。這種行為符合我們的預期,因為這些演算法優化的是冗餘最小化,而不是純粹的相關性。最終的排名展現出強大的品質。
有些讀者可能會注意到,在第一個、第二個和第四個例子中,次模優化的結果似乎很早就「飽和」,只是輸出了排序後的段落 0、1、2 等。這不是演算法的錯誤——它揭示了次模優化最有價值的特性之一,這是現有的重排器無法保證的。
為了更好地理解這種飽和行為,我們繪製了所有可能的集合大小 (從 1 到文件中段落的最大數量)的次模函數值。這揭示了邊際效益遞減的特性。


上面的圖表顯示了當我們增加選擇大小時,設施選址(Facility Location)和飽和覆蓋(Saturated Coverage)函數的行為。兩者都表現出典型的次模模式:
- 快速的初始增長:最陡峭的增益發生在最初的幾個選擇中
- 邊際效益遞減:每個額外的段落提供的邊際效益逐漸減少
- 飽和平台:函數值趨於平緩,表明進一步添加的好處微乎其微
超過這些點後,邊際收益變得可以忽略不計。這解釋了為什麼我們早期的排名實驗顯示了順序排序(0、1、2 等)——演算法正確地識別出額外的段落貢獻的價值極小。
這種行為直接體現了次模性的數學特性。我們觀察到的邊際效益遞減不是演算法的人為產物,而是覆蓋函數的基本特徵。當函數值達到平穩時,我們就達到了以下點:
對於所有剩餘的段落 。
tag結論
上下文工程已成為人工智慧領域的熱門詞彙,它經常被譽為是構建自主系統的典範轉移,這些系統會策劃最相關的資訊來填補 大模型 的上下文窗口,而這通常從透過 RAG 檢索外部資料開始。
文本選擇和段落重排序是上下文工程不可或缺的組成部分,尤其是在知識庫選擇、檢索和上下文壓縮過程中。段落 重排器 接著會根據查詢相關性重新排序那些選定的文本,以確保 大模型 首先接收到最有用的資訊,避免過載並提高輸出品質,從而完善此過程。
對於文本選擇和段落重排序,次模優化提供了優於傳統方法的三個引人注目的優勢:
tag具有計算效率的理論嚴謹性
與啟發式方法不同,次模優化提供了可證明的保證。惰性貪婪演算法在 時間內運行——與窮舉搜索的 組合相比——同時實現了 對最佳解決方案的近似。這意味著我們的解決方案在數學上保證至少有 63% 與理論上最佳的可能選擇一樣好。沒有基於 提示詞 的啟發法可以保證這種程度的效能保證。
tag智慧停止標準
我們觀察到的飽和行為提供了一種自動停止機制:當邊際收益接近於零時,我們知道應該停止新增元素。現有的逐點或逐列表 重排器 無法實現此功能,它們獨立地對每個項目進行操作,而不了解集合層級的邊際效益遞減。函數本身告訴我們何時已獲得足夠的覆蓋率。
tag多查詢擴展
該框架自然地擴展到多查詢場景——這在 DeepResearch 中很常見,在 DeepResearch 中,查詢經常被重寫和改述。相同的理論基礎和惰性貪婪演算法可以無縫應用。基於 提示詞 的方法缺乏這種系統的可擴展性,通常需要針對每個新場景的臨時解決方案。
這些好處源於次模性的數學基礎,而不是工程技巧。當其他人依賴 提示詞 微調並希望獲得良好的結果時,您應該學習次模優化,它提供了一個具有形式保證的原則性框架——這是在構建可靠、可擴展的上下文工程時的一個關鍵優勢。








