LongRAG:利用長上下文LLMs增強檢索增強生成
前言
現有的RAG框架通常使用100詞的短段落作為檢索單元,這種設計使得檢索器需要在大量語料庫中搜索,增加了工作負擔,并且容易引入難負樣本,影響性能。LongRAG框架為了解決這一問題,該框架使用長檢索單元(最多4K詞),顯著減少了語料庫的大?。◤?2M減少到600K),從而減輕了檢索器的負擔,并提高了檢索性能。
圖片
一、方法
LongRAG框架由兩個主要組件構成:長檢索器(Long Retriever)和長閱讀器(Long Reader)。LongRAG框架的目標是通過使用長檢索單元來平衡檢索器和閱讀器之間的工作負載,并利用長上下文語言模型的能力。
圖片
- 長檢索單元:LongRAG框架通過組合整個文檔或相關文檔組來形成長檢索單元,這些單元的長度超過4K個token。如果原始文檔已經很長(例如超過4K個令牌),則將其視為一個單一的檢索單元。對于較短的文檔,則通過相關文檔分組來形成單個檢索單元。下面是一種用于將多個短文檔分組以形成長檢索單元的算法:
圖片
- 算法的核心思想是根據文檔之間的相關性將它們分組,以便在長檢索單元中保留更多的上下文信息。
- 長檢索器:長檢索器的任務是在整個語料庫中搜索相關的上下文信息,而不是尋找精確的細粒度短上下文。檢索過程分為三個步驟:形成長檢索單元、相似性搜索和聚合檢索結果。相似性搜索使用編碼器將查詢和檢索單元映射到向量空間,并通過點積計算它們之間的相似性。聚合檢索結果時,將前K個最相似的檢索單元連接起來作為長上下文。
相似性搜索:使用編碼器EQ(·)將輸入問題映射到d維向量,使用另一個編碼器EC(·)將檢索單元映射到d維向量。定義問題和檢索單元之間的相似性為向量的點積:
圖片
由于g的長度較長,采用近似方法(通過最大化檢索單元內所有片段的得分來近似):
圖片
聚合檢索結果:將前k個檢索單元連接成長上下文作為檢索結果:
圖片
- 長閱讀器:長閱讀器將檢索到的結果(約30K詞)輸入現有的長上下文LLM中進行零樣本答案生成。不需要任何訓練,流程如下:提示設計:為了有效地從長上下文中提取答案,長閱讀器采用了兩步提示法:
圖片
- 提示詞模版
第一步提示:將問題和長檢索結果拼接后輸入到長語言模型中,不使用任何上下文示例。長語言模型生成一個較長的初步答案。
第二步提示:使用8個上下文示例來引導長語言模型從長答案中提取最終的簡短答案。
輸入:將相關指令、問題和長檢索結果輸入到長語言模型中。
初始答案生成:長語言模型首先生成一個較長的答案,這個答案通常包含幾句話。
答案精煉:通過進一步的提示,長語言模型從初始的長答案中提取出最終的簡短答案。
二、實驗
在基于維基百科的數據集上,LongRAG框架在不進行任何訓練的情況下,達到了與最先進的全訓練RAG模型相當的性能。在非基于維基百科的數據集上,LongRAG框架也表現出色,顯著優于傳統的RAG框架。
圖片
圖片
消融實驗,驗證了長檢索單元和長閱讀器在提高性能方面的有效性。發現檢索單元大小和閱讀器變體對性能有顯著影響。
圖片
總結
LongRAG框架通過引入長檢索器和長閱讀器,減輕了檢索器的負擔,提高了檢索質量和全文問答性能。該框架在不進行任何訓練的情況下,達到了與最先進的全訓練RAG模型相當的性能??偟膩碚f,LongRAG是一種檢索和生成平衡的方法,供參考。