重點摘要
- LLM 中的長上下文處理:探討管理超過傳統上下文長度序列的挑戰與技術,這對於多文件摘要與複雜問答等任務至關重要。
- 檢索增強的優勢:強調檢索增強能讓 LLM 有效率地處理任意長度的上下文,僅專注於從外部來源檢索到的相關資訊。
- 實際應用案例:檢視檢索增強提升 LLM 效能的實際使用案例,例如開放式問答、多文件摘要與對話系統。
- LLM API 整合指南:提供將檢索增強與 LLM API 整合的實務步驟與指引。
引言
你是否曾好奇語言模型如何處理像總結長篇文件這類任務中的大量資訊?當檢索遇上長上下文大型語言模型時,會發生什麼事?
在這篇部落格中,我們參考論文 “Retrieval Meets Long Context Large Language Models”,深入探討 LLM 處理長上下文的挑戰,探索像檢索增強這樣的創新解決方案,討論其應用,並為你提供將增強檢索與 LLM API 整合的指南。
理解 LLM 中的長上下文
定義
語言模型中的長上下文,指的是處理比預訓練時使用的典型上下文長度顯著更長的輸入序列的能力。許多廣泛使用的語言模型,如 GPT-2 和 GPT-3,是在長達 1024 或 2048 個 token 的序列上進行預訓練。然而,許多實際任務,例如長文件問答或多文件摘要,需要理解並推理數千到數萬個 token 的長上下文。
挑戰
在語言模型中高效處理長上下文面臨重大挑戰,原因在於 Transformer 模型所使用的自注意力機制具有二次方的時間與記憶體複雜度。隨著輸入序列長度增加,自注意力的計算與記憶體需求呈二次方成長,使得使用精確注意力處理極長序列變得不可行。

重要性
許多實際應用,例如文件摘要、對大型知識庫的問答,以及多輪對話系統,都需要推理跨越多個文件或對話回合的長上下文。增強長上下文能力可以開啟新的可能性,並改善語言模型在這些領域的表現,從而實現更有效且更像人類的語言理解與生成。
處理長上下文的兩種方式
在論文 “Retrieval Meets Long Context Large Language Models” 中,作者介紹了 LLM 處理長上下文的兩種方式。
擴大上下文視窗
處理長上下文的一種方法是直接擴展語言模型本身的上下文視窗大小,讓它能透過自注意力機制直接處理更長的輸入序列。
這可以透過多種技術實現:
- 高效注意力實作:
像 FlashAttention(Dao 等人,2022)這類方法,透過更佳地利用 GPU 記憶體階層,最佳化精確自注意力的計算。這使得無需近似就能處理更長的序列。 - 位置插值:
許多語言模型使用相對位置嵌入,例如旋轉位置嵌入(RoPE)。位置插值技術(Chen 等人,2023;Kaiokendev,2023)可以將這些嵌入外推到預訓練時原始上下文長度之外。這使得無需完整重新訓練就能擴展上下文視窗。 - 繼續預訓練/微調:
模型可以在更長的序列上進行進一步的預訓練或微調,以擴展其上下文能力。例如,LongLLaMA(Tworkowski 等人,2023)使用對比訓練在 8K 上下文上微調 OpenLLaMA 檢查點。 - 稀疏/地標注意力:
與完整的自注意力不同,稀疏注意力(Child 等人,2019)或地標注意力(Mohtashami & Jaggi,2023)僅根據預定義的模式或學習到的「地標」表示,關注上下文的一個稀疏子集。這減少了計算量,從而允許更長的上下文。 - 視窗化/分塊:
可以將長上下文分割成多個重疊的視窗/區塊,並跨視窗重複使用位置嵌入(Ratner 等人,2023)。模型在組合輸出之前,會獨立處理每個區塊。
透過擴大上下文視窗,語言模型可以直接關注並推理更長的上下文,而無需依賴獨立的檢索系統。
檢索增強說明

檢索增強是一個兩步驟流程:
1 檢索步驟
在此步驟中,使用獨立的檢索系統,根據輸入查詢或提示,從大型語料庫中識別並檢索相關上下文。這個檢索系統可以是密集段落檢索器、稀疏基於詞項的檢索器,或兩者的組合。
檢索系統將語料庫中的所有文件/段落編碼成密集向量表示。給定輸入查詢後,它會透過計算查詢表示與語料庫中所有文件表示之間的相似度,檢索出最相關的前 k 個文件/段落。
一些常用的檢索模型有 DPR(Karpukhin 等人,2020)、REALM(Guu 等人,2020)和 ColBERT(Khattab & Zaharia,2020)。最近的研究也探索了學習型密集檢索器(Xiong 等人,2021)以及對參數記憶儲存的檢索(Borgeaud 等人,2022)。
2 語言模型步驟
檢索到的最相關前 k 個文件/段落會被串接起來,並與原始查詢/提示一起作為輸入上下文傳遞給語言模型。語言模型隨後使用其自注意力機制處理這個串接起來的長上下文,以生成輸出。
檢索增強的一些主要優勢包括:
- 透過僅檢索相關部分,可以處理任意長度的上下文。
- 檢索系統可以針對大型語料庫上的高效最大內積搜尋進行高度最佳化。
- 語言模型可以專注於理解並為給定的上下文生成連貫的輸出。
效能比較:檢索增強 vs. 擴大上下文視窗
在論文 “Retrieval Meets Long Context Large Language Models” 中,作者進行了一項全面的研究,比較檢索增強與擴大上下文視窗方法在處理語言模型長上下文時的效能。
實驗設計
他們使用了兩個最先進的大型語言模型:專有的 43B GPT 模型和公開可用的 Llama2–70B 模型。
對於擴大上下文視窗的方法,他們使用位置插值技術,將這些模型的原始 4K 上下文視窗擴展到 16K 和 32K。
對於檢索增強,他們使用獨立的檢索系統,根據輸入查詢從語料庫中識別並檢索最相關的上下文。
這些方法的效能透過 9 項長上下文任務進行評估,包括單一和多文件問答、基於查詢的摘要,以及上下文內少樣本學習任務。
結果
實驗的主要發現如下:
- 檢索增強顯著提升了 4K 上下文視窗 LLM 的效能。令人驚訝的是,檢索增強的 4K 模型在長上下文任務上達到了與 16K 上下文視窗模型相當的效能(GPT-43B 平均分數 29.32 vs. 29.45,Llama2–70B 平均分數 36.02 vs. 36.78),同時使用的計算量少得多。

- 長上下文 LLM(16K 或 32K)的效能仍可透過檢索增強進一步提升,尤其是對於較大的 Llama2–70B 模型。效能最佳的模型——檢索增強的 Llama2–70B(32K 上下文視窗)——在 9 項長上下文任務的平均分數上超越了 GPT-3.5-turbo-16k 和 Davinci003。
- 檢索增強的 Llama2–70B-32k 模型不僅超越其無檢索的基準(平均分數 43.6 vs. 40.9),在生成時也明顯更快(例如,在 NarrativeQA 任務上快 4 倍)。
討論
檢索增強可以是一種有效且高效的語言模型長上下文處理方法,尤其是對於較小的上下文視窗大小。它可以達到與擴大上下文視窗模型相當的效能,同時所需的計算量顯著減少。
然而,對於像 Llama2–70B 這樣的大型語言模型,將檢索增強與擴大上下文視窗結合使用,可以進一步提升長上下文任務的效能。這表明這兩種方法是相輔相成的,可以結合起來發揮各自的優勢。
檢索增強的應用與使用案例
開放式問答
在開放式問答中,系統需要從大型語料庫(例如維基百科)中檢索相關資訊,以準確回答廣泛主題的問題。檢索增強讓語言模型能專注於最相關的上下文,從而提升提供全面且有根據答案的能力。
多文件摘要
從多篇長篇文章生成摘要是一項具有挑戰性的任務,需要理解並濃縮來自各種來源的資訊。透過檢索跨文件最相關的段落,檢索增強可以為語言模型提供必要的上下文,以產生連貫且資訊豐富的摘要。
對話系統
在多輪對話場景中,例如任務導向對話或開放領域對話,上下文可能橫跨多個對話回合和外部知識來源。檢索增強可以幫助從先前回合和外部知識庫中檢索相關上下文,使語言模型能夠生成更連貫、更有根據的回應。
知識密集型應用
在金融、醫療和法律等領域的許多應用中,都需要對大型知識庫或文件儲存庫進行推理。檢索增強可以幫助語言模型識別並利用來自這些來源的最相關資訊,從而產生更準確、更充分的輸出。
將檢索增強與 Llama 3 整合的逐步指南
鑑於 Llama 模型在整合檢索增強後展現出驚人的效能,以下是將檢索增強與 Novita AI 提供的 Llama 3 API 整合的逐步指南:
步驟 1:設定檢索系統
- 選擇論文 “Retrieval Meets Long Context Large Language Models” 中提到的檢索系統,例如 DPR(密集段落檢索器)、REALM 或 ColBERT。你可以在 Huggingface 或 Github 上找到更多相關系統。
- 將你的語料庫(文件、知識庫等)索引到所選的檢索系統中。
- 針對你的領域和任務最佳化並微調檢索系統。
步驟 2:進行初始 API 呼叫
- 匯入 OpenAI 函式庫,並使用你的 Novita AI API 金鑰和基礎 URL 建立客戶端。
from openai import OpenAI
client = OpenAI(
base_url="https://api.novita.ai/v3/openai",
api_key="<YOUR Novita AI API Key>",
)
步驟 3:檢索相關上下文
- 使用你的輸入提示或查詢,透過檢索系統從語料庫中檢索最相關的前 k 個段落或文件。
- 將檢索到的段落串接成一個字串,形成上下文。
步驟 4:使用檢索到的上下文進行 LLM API 呼叫
- 將
model參數設定為所需的 LLM,例如meta-llama/llama-3–70b-instruct。 - 透過串接輸入查詢和檢索到的上下文來建構
prompt。 - 根據你的需求設定其他參數,例如
max_tokens、stream等。 - 使用建構好的提示和參數呼叫
client.completions.create方法。
model = "meta-llama/llama-3-70b-instruct"
prompt = "Input query: " + input_query + "\
Retrieved Context: " + retrieved_context
completion_res = client.completions.create(
model=model,
prompt=prompt,
stream=True,
max_tokens=512,
)
步驟 5:處理 LLM 回應
completion_res物件包含 LLM 生成的回應。- 你可以根據需求處理回應,例如列印、儲存或進一步處理。
for chunk in completion_res:
output = chunk["choices"][0]["text"]
print(output, end="", flush=True)
遵循這些步驟,你就可以將檢索增強與 Novita AI LLM API 整合。關鍵點如下:
- 設定獨立的檢索系統並索引你的語料庫。
- 使用輸入查詢檢索相關上下文。
- 將輸入查詢與檢索到的上下文串接起來形成提示。
- 使用建構好的提示進行 LLM API 呼叫。
- 處理 LLM 生成的回應。
這種方法讓你能夠同時利用檢索系統和大型語言模型的優勢,有效處理長上下文,並提升自然語言理解與生成任務的表現。
檢索增強的挑戰與考量
倫理影響
檢索增強的模型引發了關於偏見放大和隱私風險的倫理問題,因為它們依賴於大量資料集。這些資料集中固有的偏見可能會被延續,而使用大規模用戶資料則帶來了隱私挑戰,需要強而有力的防護措施。
技術挑戰
在技術上,擴展這些模型面臨著最佳化效率和回應時間的挑戰,這對於即時應用至關重要。整合檢索機制為模型流程增加了複雜性,需要先進的基礎設施和高效的資料管理策略。
未來方向
未來的方向包括改善模型的可解釋性以提升透明度,以及精煉效能指標以準確評估不同模型。融入回饋機制和自適應學習方法,將進一步最佳化這些模型,以應用於自然語言處理中的多樣化場景。
隨著這些技術持續演進,融入回饋機制和自適應學習方法將進一步最佳化檢索增強的 LLM,使其適用於自然語言處理中的多樣化應用。
結論
在這篇部落格文章中,我們探討了語言模型中長上下文的概念、其挑戰以及在各類應用中的重要性。我們看到了當 LLM 處理長上下文任務時,檢索增強如何成為一種有效且高效的方法。
此外,我們也提供了將檢索增強與 Llama 3 API 整合的逐步指南,並討論了檢索增強的挑戰與考量。透過理解這些方法及其取捨,我們可以為語言模型開啟處理長上下文的新可能性,並實現更有效、更像人類的語言理解與生成。
參考文獻
Amirkeivan Mohtashami and Martin Jaggi. Landmark attention: Random-access infinite context length for transformers. arXiv preprint arXiv:2305.16300, 2023.
Kaiokendev. Things I’m learning while training SuperHOT. https://kaiokendev.github. io/til#extending-context-to-8k, 2023.
Karpukhin, V., & Bajaj, S. (2023). Retrieval meets long context large language models. Journal of Artificial Intelligence Research, 57(1), 123–145.
Nir Ratner, Yoav Levine, Yonatan Belinkov, Ori Ram, Inbal Magar, Omri Abend, Ehud Karpas, Amnon Shashua, Kevin Leyton-Brown, and Yoav Shoham. Parallel context windows for large language models. In ACL, 2023.
Rewon Child, Scott Gray, Alec Radford, and Ilya Sutskever. Generating long sequences with sparsetransformers. arXiv preprint arXiv:1904.10509, 2019.
Shouyuan Chen, Sherman Wong, Liangjian Chen, and Yuandong Tian. Extending context window of large language models via positional interpolation. arXiv preprint arXiv:2306.15595, 2023.
Szymon Tworkowski, Konrad Staniszewski, Mikołaj Pacek, Yuhuai Wu, Henryk Michalewski, and Piotr Miłos ́. Focused transformer: Contrastive training for context scaling. arXiv preprint arXiv:2307.03170, 2023.
Tri Dao, Dan Fu, Stefano Ermon, Atri Rudra, and Christopher Ré. Flashattention: Fast and memory- efficient exact attention with io-awareness. NeurIPS, 2022.
Novita AI 是一個一站式雲端平台,助力你的 AI 雄心壯志。透過無縫整合的 API、無伺服器運算和 GPU 加速,我們提供經濟高效的工具,讓你快速建置並擴展 AI 驅動的業務。消除基礎設施的煩惱,免費開始使用——Novita AI 讓你的 AI 夢想成真。
推薦閱讀
