超越黃金段落的上下文嵌入
用於檢索答案及其支援上下文的全新訓練方法、模型與基準。
導言
上下文嵌入捕捉了整份文件上下文中每個段落或片段的含義。它們的訓練和評估通常假設每個查詢有一個相關片段,稱為「黃金段落」。然而,在實務上黃金段落通常是不夠的。它可能包含答案,但缺乏理解或驗證它所需的支援上下文,使其在孤立狀態下顯得含糊不清。
我們正在推出 pplx-embed-v2-context-9b-preview,這是我們的全新上下文嵌入模型。該模型使用新穎的方法進行訓練,該方法使用 Perplexity 的上下文壓縮模型作為教師。我們將其代幣層級預測聚合為片段層級相關性分數,教導嵌入模型檢索答案片段以及支援上下文,而不是單一黃金片段。該模型每個片段產生一個嵌入,且沒有額外的推論成本,並支援 1024 維與 int8 嵌入。
它在 context-bench(由 turbopuffer 建立並私有持有的上下文感知檢索全新基準)以及廣泛使用的公開基準 ConTEB 上實現了最先進的結果。我們的模型是在獨立於 context-bench 的情況下開發的,並作為盲測提交進行評估。
Context-bench 包含橫跨 21 個領域的 38,894 份長文件的 2,099 個查詢,並評估上下文嵌入的三種能力:近乎重複文件之間的文件消歧義、其含義取決於遠處上下文的黃金片段檢索,以及驗證答案所需的支援佐證的回收。
該模型的預覽已在 Hugging Face 上公開發布。該基準測試由 turbopuffer 私人持有,以降低訓練污染的風險,並保持其衡量進展的價值。如需要求評估,請透過 contextbench@turbopuffer.com 聯絡 turbopuffer。
為什麼上下文對檢索至關重要
檢索系統通常將長文件分割成較小的片段,以便能夠獨立建立索引與搜尋。分塊在實務上很方便,但它移除了每個片段最初出現的上下文,在資訊壓縮的粒度與編碼期間使用的上下文之間製造了取捨。片段可能會參照稍早引入的實體、從章節標題繼承其含義,或依賴位於文件中其他地方的定義。一旦被擷取,它可能不再包含足夠的資訊來可靠地與查詢進行配對。將整份文件編碼為單一向量並無法解決此問題,因為單一池化表示無法忠實捕捉長文件的每一個面向。
上下文嵌入模型透過在其周圍內容的上下文中表示每個片段來解決此限制,最常見的是透過晚期分塊 (late chunking):文件在單次傳遞中編碼,並且隨後對片段表示進行池化,以便在檢視整份文件的同時計算每個片段向量。先前的研究(例如 ConTEB 與我們自己的 pplx-embed-context-v1)已表明,上下文片段表示大幅改善了對獨立編碼片段的檢索,特別是在長文件上。
黃金片段監督的限制
訓練上下文嵌入模型需要監督來識別文件的哪些部分與給定的查詢相關。常見的方法是黃金片段標註:對於每個查詢,標註者(通常大型語言模型 (LLM))會識別回答該查詢的文件片段。
訓練通常結合兩種對比損失:將黃金片段與來自其他文件的片段進行對比的跨文件損失,以及將其與同一文件中的其他片段進行對比的文件內損失。
此方法有一些限制:
- 只有一個片段是相關的。它將文件中的所有其他片段視為負樣本,包括那些帶有有用支援資訊的片段。文件層級監督則在另一個極端運作。它將文件識別為相關,而未指定其中哪些片段重要。在實務上,相關性通常介於這些極端之間。答案承載片段可能取決於幾個引入實體、解析參照或提供互補事實的支援片段,而文件的其餘部分則是不相關的。因此,模型必須學習正確的選擇性水準:比單一黃金片段更廣泛,但比整份文件更具焦點。
- 粗糙監督。由於每個標註識別的是單一黃金片段,而不是捕捉整份文件的相關性程度,因此它為產生它所花費的運算量提供了有限的訓練訊號。
- 擴展成本高。每個訓練對都需要一個 LLM 來閱讀文件並選擇相關片段,因此標註成本隨著訓練集的大小呈線性增長,並限制了訓練資料的數量和多樣性。
- 對片段邊界敏感。標籤也與標註期間使用的片段邊界繫結。指派給固定代幣大小視窗的黃金標籤並未指定哪些較短的句子或較長的段落是相關的。因此,改變分塊策略,或跨多個分塊進行訓練以提高對文件在索引時間如何分割的強固性,可能需要重新標註語料庫。
上下文學習的新穎方法
我們透過從查詢感知上下文壓縮模型中提取相關性判定,來解決黃金片段監督的限制。此模型充當教師:它共同讀取查詢和文件,並為每個文件代幣指派相關性分數。其預測為訓練上下文嵌入提供了幾個優勢:
- 靈活的片段邊界。代幣層級相關性分數可以在任何選定的片段邊界上進行聚合,允許相同的教師預測在無需重新標註的情況下監督不同的分塊。
- 連續相關性。與二元黃金片段標籤不同,教師提供連續分數,捕捉自然區分答案承載片段、支援上下文和不相關內容的相關性程度。
- 較低的標註成本。教師精簡且專門用於相關性評分,與通用的 LLM 相比,大規模監督的成本要低得多。
我們在查詢-文件對批次上,使用文件層級對比損失與片段層級蒸餾損失的加權和來訓練我們的模型。對於每個查詢,配對的文件作為正樣本,而同一批次中的其餘文件作為負樣本。
對於每個批次,我們隨機選擇分塊策略,相應地分割文件,並在片段之間插入分隔代幣。然後我們在單次前向傳遞中處理每份文件,並對每個片段內的代幣表示進行平均池化,以獲得上下文片段embeddings。查詢被單獨編碼,對其代幣表示進行平均池化。最後,我們計算批次中每個查詢嵌入與每個片段嵌入之間的餘弦相似度。
損失函數
文件層級對比損失
雖然我們的嵌入模型只產生片段層級的相似度,但我們可以自然地從中衍生出文件層級的相似度。我們認為文件 d 對於查詢 q 的相關性等同於其最相關的片段。此評分規則受 ColBERT 的 MaxSim 操作啟發,此處應用於片段而非代幣。
具體而言,給定帶有嵌入 q 的查詢 q,以及作為帶有嵌入 c 的片段 c 的有序清單的文件 d,我們將文件層級相似度定義為:
給定這些文件層級相似度,我們可以在批次內負樣本上 формулирувати (formulate) 文件層級 InfoNCE 目標。
對於查詢 q,讓 d⁺ 表示其相關文件,𝒟 表示批次中的文件。對比損失如下所示,為了可讀性省略了溫度:
片段層級蒸餾損失
對比損失教導模型哪份文件與查詢相關。蒸餾損失教導它相關性在該文件中的位置,這對上下文模型至關重要。
在訓練期間,我們將每個正查詢-文件對傳遞給我們的上下文壓縮模型,該模型為文件中的每個代幣指派相關性分數。與文件層級評分一樣,我們從其最相關的內容中衍生每個片段的相關性。為了減少對離群代幣(包括片段邊界處的代幣)的敏感度,我們將片段層級相關性定義為片段內前 n 個代幣分數的平均值。
對於每個查詢,我們將溫度縮放的 softmax 套用到正文件中教師的片段層級相關性分數,以獲得目標分佈。批次中其他文件的片段獲得零目標機率。我們透過最小化目標與其在批次中所有片段上的預測分佈之間的正向 KL 散度,來訓練嵌入模型以匹配此目標:
在此,上標 T 和 S 表示教師和學生,rⱼ 是教師對正文件 d⁺ 中片段 cⱼ 的相關性分數。教師的目標分佈對批次中所有其他文件的片段指派零機率。
與單一黃金片段標籤不同,此目標捕捉了相關性程度。支援片段根據教師的分數獲得權重,而不是被視為負樣本,從而教導模型檢索支援上下文以及答案。
組合損失
我們的組合訓練目標是文件層級對比損失和片段層級蒸餾損失的加權和。我們在查詢-文件對的批次上對此加權損失進行平均。
圖 2 說明了我們的訓練方法。上下文壓縮器僅在訓練期間充當教師。在推論時,嵌入模型每個片段產生一個上下文嵌入,沒有額外的壓縮或重排序階段。該方法改善了上下文嵌入的學習方式,且不會增加索引儲存或在檢索時增加教師模型的延遲。
訓練資料
訓練資料由大約 430 個涵蓋 50 多種語言的公開與內部查詢-文件資料集組成。
我們透過經過 PII 過濾的正式環境資料,以及在長文件上合成相關查詢,來建構內部配對資料集。對於每次前向傳遞,我們選擇一個資料集並從中取樣整個批次,以增加批次內負樣本的難度並避免捷徑學習。我們的訓練資料集皆未帶有片段層級標註:所有文件內監督皆來自壓縮模型,且沒有任何 ConTEB 資料用於訓練。此外,在模型開發期間並未使用任何 context-bench 資料。
訓練設定
模型從內部的 9B 參數 ColBERT 檢索模型開始,並透過線性投影層產生 2048 維嵌入。我們使用學習到的 <|chunk_sep|> 代幣標記片段邊界,並透過平均其代幣嵌入來形成每個片段嵌入。查詢由相同的模型編碼,其代幣嵌入被平均為單一向量。
我們使用 Matryoshka 訓練 來支援 1024 維和 2048 維嵌入,並使用感知量化訓練來支援 原生 int8 嵌入。在訓練期間,我們會逐步提高學習率,將其維持不變,然後再降低。
發布的模型是一個模型融合 (model soup),它平均了來自同一訓練執行的多個檢查點的權重。
用於片段層級檢索的全新基準
諸如 ConTEB 等公開上下文檢索基準共用了黃金片段監督背後的假設:每個查詢都有一個單一相關片段,且模型僅因將該片段排名第一而獲得獎勵。它們也繼承了其限制。
首先,ConTEB 測試在片段脫離周圍上下文就會產生歧義的任務上的檢索。在這些任務上,上下文模型表現優於獨立編碼每個片段的模型。然而,它並未探討模型是否也浮現了文件中使該片段易於理解的其他部分。
其次,當同一語料庫中幾乎相同的文件僅在環繞原本相同的句子的上下文有所不同時,它並未系統性地測試是否能找到正確的文件。
當搜尋代理程式或使用者必須從少數檢索到的句子而非整份文件來理解與驗證答案時,這兩種能力都至關重要。因此,我們建構了 context-bench,這是一個針對長文件檢索的受控基準,旨在將文件上下文的使用與一般檢索品質區分開來。它測試上下文嵌入是否使用文件中其他地方的資訊來支援三種能力:
- 文件消歧義:在幾乎相同的替代項目中識別出正確的文件。
- 答案檢索:檢索其含義取決於文件中其他地方的詳細資訊的答案承載片段。
- 佐證檢索:檢索闡明或證實答案的支援片段。
Context-bench 包含 2,099 個查詢和 38,894 份文件。使用了句子長度的片段,總計產生 2,458,072 個片段。這些查詢涵蓋 21 個領域,包括企業申報資料、臨床研究、旅遊、娛樂、教育、政府、法律合約和軟體文件。
每個查詢都旨在測試十二種上下文能力之一。主要的目標文件刻意很長:1,197 個不同的主要目標文件中有 1,061 個至少有 200 個句子,中位數長度大約為 6,100 個代幣。每個查詢在語料庫中都有剛好一個正確答案。若相同的實事在黃金文件中被陳述了一次以上,例如在摘要句子和表格列中,這些句子中的任何一個都會被接受為答案。
答案路徑是答案片段與解譯或驗證它所需的支援佐證的有效組合。在 2,099 個查詢中,對於 964 個查詢,主要目標文件答案路徑有一個佐證群組;735 個查詢有兩個;332 個查詢有三個或更多;68 個查詢則沒有。其他有效的答案路徑可能需要不同的佐證群組。
表 1:基準統計資料。
統計資料 | 值 |
查詢 | 2,099 |
文件 | 38,894 |
句子片段 | 2,458,072 |
主要目標文件長度中位數 | 6,100 個代幣 |
領域 | 21 |
每個查詢的佐證群組(主要目標文件答案路徑) | 1:964;2:735;3+:332;無:68 |
表 2:context-bench 測試的十二種上下文能力與說明範例。
能力 | 範例查詢 | 答案片段 | 所需的文件上下文 |
1. 實體身分 | Northlake 在股票回購上花了多少錢? | 該公司回購了 128 億美元的股票。 | 導言將 Northlake 識別為「該公司」。類似的 Southlake 報告則不相關。 |
2. 期間或版本 | 哪個墨盒適用於 M40 修訂版 B? | 安裝 KC-42 墨盒。 | 適用性章節說明這些指示涵蓋修訂版 B,而非修訂版 C。 |
3. 定義與別名 | 15 毫克組的退出率是多少? | Zeta 的退出率為 12.7%。 | 報告將 Zeta 定義為 15 毫克組。若無該定義,該片段便無法識別所要求的群組。 |
4. 表格結構 | Max 型號的電池容量是多少? | 典型容量:4,250 | 4,700 | 5,150。 | 表格標頭確立了 Mini | Base | Max,以毫安培小時 (mAh) 為單位測量。因此答案為 5,150 mAh。 |
5. 條件與例外 | 商業用途的電池保固期有多長? | 電池保固期為 18 個月。 | 章節導言將此保固限制在商業安裝;家用安裝則有不同的保固。 |
6. 參照與代名詞 | Mara 是何時成為副市長的? | 她在 2021 年就職。 | 前文敘述確立了「她」指的是 Mara,而不是同樣受到討論的 Elin。 |
7. 清單順序與位置 | 哪首歌是安可曲的開場曲? | 14. 《燈籠路》。 | 其他地方的附註指出第 14 至 16 首歌曲構成了安可曲。因此第 14 首曲目為其開場曲。 |
8. 章節範圍 | 該電影的攝影使用了哪顆鏡頭? | 全程皆使用 35 毫米定焦鏡頭。 | 此段落屬於「主要攝影」,而非關於宣傳照片的獨立章節。 |
9. 發言者歸屬 | 市長承諾了哪個重新開放日期? | 我們將於 6 月 12 日重新開放。 | 逐字稿將市長識別為發言者。來自承包商的相同話語並不能確立市長的承諾。 |
10. 隨時間的變化 | 五月份修正案生效後適用什麼通知期限? | 通知期限現為 45 天。 | 修正案歷史確立了此變更於五月生效,取代了先前的 30 天規則。 |
11. 因果關係 | 西部泵浦為什麼停止運作? | 該故障導致了關閉。 | 調查將「該故障」識別為西部泵浦中卡住的軸承,並將其與不相關的進氣口阻塞區分開來。 |
12. 具象或跨語言含義 | 具象: 「冬日之房」在詩中象徵什麼? 跨語言: 法語說明指示技術人員移除哪個組件? | 具象: 它代表流亡,而非實體房間。 跨語言: Retirez le capot. (移除外蓋。) | 具象: 評論將「它」識別為詩中反覆出現的「冬日之房」意象。 跨語言: 指南的詞彙表指定「capot」意指保護性馬達罩,而非運送外蓋。 |
文件與查詢
所測試的查詢、文件和能力皆受到與 turbopuffer 客戶對話的啟發。
舉個例子,考慮物業管理公司的搜尋需求。這些公司擁有數百甚至數千份租賃協議,這些協議僅在承租人姓名、日期和一些其他關鍵細節上有所不同。該資料集的常見查詢可能是「5 號公園大道的租約何時到期且目前的租金是多少?」。租賃協議也可能很長,且能確認您已檢索到正確文件的關鍵消歧義組件(例如日期、地址、承租人姓名等)通常可能距離包含每月租賃付款金額的關鍵答案句子非常遙遠。在實務上,像「每月租金為 $X,XXX。」這樣的相同句子可能會出現在語料庫的許多文件中。
優良的上下文模型應該使用來自整份文件的上下文來識別正確的文件,並檢索答案及其支援句子。這可讓使用者或 AI 代理程式快速驗證答案,並確認它來自正確的文件。
答案與佐證標籤
對於每個查詢,我們標記目標文件中的「答案」和「佐證」句子。如果模型檢索到一個答案句子以及來自每個佐證群組的至少一個句子,則它通過了我們的「讀者充分性」測試。這些句子共同提供了足夠的上下文,供讀者透過支援佐證來驗證答案。
當上下文嵌入模型能很好地做到這一點時,它們可以大幅減少搜尋代理程式需要審查的代幣數量,同時也讓個人更容易快速確認他們已找到原始查詢的正確答案,而不必閱讀整份文件。
必須復原每個佐證群組,但群組的任何替代項目就足以復原它。在這些長篇文件中,經常會看到相同的實事在多個地方被陳述。從每個佐證群組檢索僅僅一個句子即符合讀者充分性標準,因此將被接受為完美的佐證回收率。
指標
每份文件都被分塊成句子,且所有模型都使用相同的邊界。非上下文嵌入模型測試了兩種條件:一種是每個句子被獨立嵌入,另一種是整份文件被嵌入為單一片段。
我們使用句子層級的條件來衡量答案回收率和佐證回收率。它測試非上下文模型是否能在每個句子在無法存取周圍文件的情況下進行嵌入時,識別出正確答案和支援佐證。這刻意具有挑戰性。在許多查詢中,單獨的答案句子缺乏將其與語料庫其他地方的相似句子區分開來所需的詳細資訊。
我們使用文件層級的條件作為文件回收率基準。它測試微粒度的句子嵌入是否提供了足夠的檢索效益,以證明相對於儲存每個文件一個向量而言其額外的儲存成本是合理的。句子層級的索引所產生的向量數量遠多於文件層級的索引,因此它應該表現得優於每個文件一個向量的基準,以證明該成本合理。
所有評估皆使用針對全部 2,458,072 個片段的窮舉排名。因此,模型之間的差異反映的是表示形式,而非索引組態。我們專注於三個關鍵指標:
Document@K 的定義為:
其中 是 中排名最高的文件。
Answer@K 的定義為:
其中 為整個語料庫中最高的 個區塊,而 則為已接受答案區塊的集合。
Evidence Recall@K 在 內的衡量方式如下:根據相似度對 的句子進行排名,移除排名最高的答案句子,並讓 為剩餘的前 個。對於佐證群組 ,如果某個替代項目 滿足 ,則群組 被復原,並且
Document@K 詢問上下文是否能讓正確的文件勝過共用其詞彙的同級與干擾項。
Answer@K 詢問答案句子本身是否排在前幾大片段中。
Evidence Recall@K 詢問在排除排名最高的答案片段後,在正確文件的頂部 K 個片段中復原了多少支援上下文。移除答案可防止佐證回收率重複計算 Answer@K 已經衡量的部分,並為支援上下文保留所有 個欄位。要求黃金文件必須在前 10 個檢索到的文件中,意味著沒有模型會因為其本來不會浮現的文件而獲得佐證點數。我們也回報 All-Evidence@10,即每個群組都得到復原的查詢比例。
這些指標共同分解了上下文嵌入模型所面臨的挑戰:找到正確的文件、找到正確的答案,以及復原顯示答案為何正確的最小上下文。
圖 3 用物業管理範例說明了這些指標。
評估結果
我們從四個方面評估我們的模型與上下文及非上下文嵌入模型的表現。
我們的上下文基準模型為 pplx-embed-context-v1-4B 與 voyage-context-4。我們的非上下文基準模型為 voyage-4-large 以及 NVIDIA 的 Nemotron-3-Embed-8B-BF16,它們會獨立編碼片段。基準集合會隨實驗而異,如各圖所示。
我們從 context-bench 開始,這直接測試了推動此工作的能力,然後回報標準公開上下文嵌入基準 ConTEB 的結果。為了檢查這些增益不是以犧牲一般檢索品質為代價,我們也評估了我們從公開資料集建構的領域特定文件與片段檢索基準。最後,我們檢查部署的兩個實用屬性:檢索品質對比每個向量的儲存成本,以及對索引時間所用片段大小的敏感度。所有評估皆在單次傳遞中編碼最多 32,768 個代幣的文件。
Context-bench
如導言中的圖 1 所示,我們的預覽版在所有回報的截止點上的 Answer@K 與 Evidence Recall@K 以及 All-Evidence@10 上皆領先。在 K = 10 時,它達到 45.5% 的答案回收率、40.6% 的佐證回收率,以及 31.1% 的全佐證回收率。它在 Document@1 和 Document@10 上也領先,分別達到 15.2% 與 61.6%。在 K = 10 時,我們的預覽版在答案回收率上超越 voyage-context-4 14.4 個百分點,在佐證回收率上超越 5.0 個百分點。
ConTEB
我們的預覽模型在圖 4 ConTEB 所示的模型中實現了最高的平均 nDCG@10。它並未在每個任務上都領先:pplx-context-v1-4B 在 NarrativeQA 上得分更高,而 Nemotron-3-8B 在 COVID-QA 上得分最高。正如主要作者在 ConTEB 論文中所指出的,COVID-QA 主要包含非常具萃取性的查詢-片段配對,可以透過對醫療技術術語進行簡單的表面詞彙匹配來滿足。因此,上下文理解對此任務的用處較小,非上下文模型通常表現優於上下文模型。
跨領域的一般檢索品質
除了專為上下文嵌入設計的基準外,我們還評估了我們模型的領域特定效能。
我們的查詢到片段 (Q2C) 套件使用 MTEB 任務(例如 LegalBench 和 FinanceBench),以及我們從公開資料集策展的其他檢索任務。在每個相關文件中,如果任務提供了一個確切的答案跨距,則片段被標記為相關,否則透過 LLM 判斷其與查詢的相關性來標記。查詢到文件 (Q2D) 套件使用相同的任務,並評分是否檢索到相關文件。
我們的模型在圖 5 的片段檢索中獲得最高平均分數,並在法律、技術和健康領域領先。它並未在每個領域都領先:voyage-context-4 在財務和多語言檢索中得分更高,而 Nemotron-3-8B 在對話檢索中得分最高。在圖 6 的文件檢索中,我們的模型平均得分略低於 voyage-context-4,同時在技術領域領先。pplx-context-v1-4B 基準在兩個套件中的平均得分較低,這與它僅在 ConTEB 訓練集上進行訓練一致,顯示與單一基準的黃金片段繫結的監督很難轉移到其他領域。
檢索品質與儲存成本
上下文嵌入模型每個片段產生一個向量,因此使用我們模型建構的索引包含的向量數量,與具有相同分塊策略的傳統片段層級索引完全相同。上下文會改變每個向量編碼的內容,而不是儲存多少個向量。因此,儲存佔用空間由每個向量的大小決定。該模型提供了兩種減少儲存空間的方法:將嵌入從 2048 維度截斷至 1024 維度,以及將其量化為 int8。
圖 7 顯示了檢索品質與向量儲存之間有利的取捨。在 1024 維度下,我們的 int8 嵌入每個向量使用 1 KB,同時稍微超越了 float32 中 2048 維度下的 voyage-context-4 片段檢索分數(每個向量使用 8 KB)。將我們的嵌入大小增加到 2048 維度,可以在每個向量 2 KB 的情況下進一步提高檢索品質。這些儲存數據僅指向量本身,不包含索引的其餘部分。
片段大小敏感度
圖 8 顯示隨著片段大小從 64 個代幣增加到 512 個代幣,檢索品質僅有輕微變化:平均分數從 81.0% 下降至 79.9%,降幅為 1.1 個百分點。這表明該模型在所測試的片段大小範圍內保持有效,為索引管線在文件分割方式上提供了靈活性。
發布
turbopuffer 會將 context-bench 的完整語料庫、查詢和上下文標籤保持私密,並回報提交模型的結果。這類的公開基準會引誘直接在其查詢和文件上進行訓練,這會逐漸使基準飽和,並侵蝕其用於追蹤長期進展的價值。如果您希望您的模型在基準上進行評估,請透過 contextbench@turbopuffer.com 與 turbopuffer 聯絡。
我們的模型預覽版可在 Hugging Face 上取得,這篇貼文中的所有結果都是針對此預覽版回報的。我們正致力於透過 Perplexity API 提供該模型,並與 turbopuffer 一起進一步改善長文件的檢索。
引用
@online{perplexity2026ContextualEmbeddingBeyondTheGoldPassage,
author = {{Perplexity} and Sarah Eslami and William Barber and Markus Krimmel and Antoine Chaffin and Bo Wang and Louis Milliken and Jarrod Bryan and Claire Beamer and Jeremy Yang},
title = {{Contextual embedding beyond the gold passage}},
date = {2026-09-30},
url = {https://www.perplexity.ai/hub/blog/contextual-embedding-beyond-the-gold-passage}
}