一篇 RAG 全棧技術最新綜述

檢索增強生成(RAG)的出現,利用外部知識數據庫來增強 LLMs,彌補了 LLMs 的幻覺問題、知識更新等問題:

自然語言處理 NLP 中檢索增強生成的概述:檢索器(Retriever)、檢索融合(Retrieval Fusions)、生成器(Generator)

1. 檢索器(Retriever)

檢索器(Retriever) 是檢索增強生成(RAG)中的一個關鍵組件,其主要作用是從一個外部知識庫中檢索與輸入相關的信息。

使用檢索器的兩個階段 two-stages

構建階段:將文檔分割成小塊,對這些塊進行編碼,並建立索引以支持高效的檢索。

  1. 分塊語料庫(Chunking Corpus):

    • 固定長度分塊:通過設定長度參數順序地分割文檔。

    • 基於語義的分塊:根據語義標誌(如句號或新行字符)切割文檔。

    • 基於內容的分塊:根據文檔的結構特徵(如電子病歷的章節或編程代碼的功能塊)進行分割。

  2. 編碼塊(Encoding Chunks):

    • BERT 及其變體:如 RoBERTa、DistilBERT、ELECTRA,生成密集的語義嵌入。

    • Siamese Encoders:設計用於學習輸入之間相似性的神經網絡,如 DPR、SimCSE。

    • LLM-based Encoders:利用大型語言模型的表示能力,如 text-embedding-ada-002、bge-embedding。

    • 稀疏編碼:如詞袋模型(BoW)、TF-IDF,通過高維向量表示文本,其中大部分元素爲零。

    • 密集編碼:使用深度神經網絡模型生成向量,每個維度都可以捕捉語義特徵。包括:

  3. 索引構建(Building the Index):

    索引的目的是加速多維查詢嵌入的搜索過程,主要關注支持高效的近似最近鄰搜索。

    1. 選擇相似性度量(Choice of Similarity Metrics):

      • 餘弦相似度、歐幾里得相似度、曼哈頓距離、雅卡爾相似度等,用於衡量查詢嵌入和塊嵌入之間的相關性。
    2. 降維(Dimension Reduction on Embeddings):

      • 主成分分析(PCA):一種統計技術,用於將原始數據轉換爲新座標系,同時保留最重要的特徵。

      • 局部敏感哈希(LSH):通過將數據映射到桶中來顯著降低維度,同時保留原始輸入數據的相似性。

      • 乘積量化(PQ):將高維空間劃分爲更小的、獨立量化的子空間。

    3. 高級 ANN 索引(Advanced ANN Indexing):

      • IVFPQ:結合倒排文件系統和乘積量化,用於高效和可擴展的 ANN 搜索。

      • HNSW:使用分層圖結構在高維空間中高效執行 ANN 搜索。

      • 基於樹的索引:如 KD-Trees、Ball Trees 和 VP-Trees,用於組織高維向量。

    4. 構建數據存儲(Building the Datastore with Key-Value Pairs):

      • 使用專門的數據庫(如 LMDB 或 RocksDB)存儲和管理數據,以支持高效的檢索和數據持久性。

      • 最近的一些工作提出了各種最先進的向量數據庫,包括索引和數據存儲,例如 Milvus 、FAISS]、LlamaIndex 等。

查詢階段:使用相同的編碼器對查詢進行編碼,然後利用預建索引和數據存儲進行近似最近鄰搜索,以檢索相關值。

  1. 編碼查詢(Encoding Queries):

    • 使用與構建檢索器時相同的編碼器對查詢進行編碼,確保查詢嵌入與檢索器的嵌入空間一致。
  2. 近似最近鄰搜索(ANN Search):

    • 利用預構建的索引和數據存儲執行近似最近鄰搜索,找到與查詢最相似的數據。

    • 搜索過程涉及比較查詢嵌入與聚類嵌入,選擇候選聚類,然後在每個聚類內執行產品量化,找到最近鄰。

  3. 索引搜索(Indexing Search):

    • 搜索預構建的索引,找到 k 個最近鄰,並返回這些最近鄰的唯一標識符。
  4. 數據存儲檢索(Datastore Retrieval):

    • 根據最近鄰的唯一標識符從數據存儲中獲取相應的值。
  5. 後處理(Post-Processing):

    • 重排序(Reranking):根據任務特定的目標重新排序檢索到的知識,以提高相關性。

    • 重要性加權(Importance Weighting):爲檢索到的知識分配重要性權重,過濾掉不太相關的上下文。

2. 檢索融合(Retrieval Fusions)

深入探討了如何將檢索到的知識整合到生成模型中,以提高性能:

RAG 中融合方法的類別

  1. 檢索融合類型:

    • 基於查詢的融合(Query-based Fusion):將檢索到的信息與輸入查詢直接連接或合併。

    • 潛在融合(Latent Fusion):在生成模型的隱藏層中整合檢索到的信息。

    • 基於對數的融合(Logits-based Fusion):在生成模型的輸出層整合檢索到的信息。

  2. 基於查詢的融合技術:

    • 文本連接(Text Concatenation):將檢索到的文本與查詢文本直接連接。

    • 特徵連接(Feature Concatenation):將檢索到的文本編碼成特徵向量後與查詢特徵向量合併。

    • FID:一種特徵融合方法,將檢索到的文本編碼爲稀疏或密集表示,並將連接的特徵作爲輸入。

  3. 潛在融合技術:

    • 基於注意力的融合(Attention-based Fusion):使用交叉注意力機制將檢索到的知識嵌入到模型的隱藏狀態中。

    • RETRO:一種使用檢索增強的預訓練語言模型,引入了一個新的交叉注意力模塊。

    • 加權添加(Weighted Addition):通過學習權重將檢索到的知識嵌入以加權的方式添加到模型的隱藏狀態中。

  4. 基於對數的融合技術:

    • 集成融合(Ensemble-based Fusion):將檢索到的知識的對數與模型輸出的對數結合起來,作爲集成預測的一部分。

    • kNN-LM 和 kNN-MT:利用最近鄰模型的對數進行語言模型和機器翻譯的增強。

    • 校準融合(Calibration-based Fusion):使用檢索到的知識的對數對模型的預測進行校準或調整。

3. 生成器(Generator)

討論了在檢索增強生成(RAG)中使用的生成器類型及其特點:

  1. 生成器類型:

    • 默認生成器(Default Generators):包括大多數預訓練 / 微調的大型語言模型,如 GPT 系列、Mistral 模型和 Gemini 系列模型。

    • 檢索增強生成器(Retrieval-Augmented (RA) Generators):這些是包含融合檢索信息模塊的預訓練 / 微調生成器,例如 RETRO 和 EncDec。

  2. 生成器的功能:

    • 生成器負責生成響應或進行預測,它們通常基於輸入和相應的檢索結果來生成文本。
  3. 生成器的架構:

    • 生成器通常採用或修改基於 Transformer 的架構,專注於解碼器模塊,包括注意力模塊和前饋網絡模塊。

4. RAG 訓練策略

深入討論了檢索增強生成(RAG)模型的訓練方法和策略:

RAG 的不同訓練策略,包括 / 不包括數據存儲更新

  1. RAG 訓練分類:

    • 不更新數據存儲的 RAG 訓練:只更新 RAG 中每個模塊的可訓練參數,數據存儲中的知識保持不變。

    • 更新數據存儲的 RAG 訓練:先更新數據存儲中的知識,然後更新 RAG 中每個模塊的參數。

  2. 數據存儲更新(RAG without Datastore Update):

    1. 檢索器訓練(Training Retriever):

      • 訓練檢索器編碼器並重建索引,通常涉及密集編碼方法。

      • 根據訓練目標,可能需要更換編碼器或使用對比學習訓練現有編碼器。

    2. 生成器訓練(Training Generator):

      • 更新生成器的參數或檢索融合模塊中的參數。

      • 採用參數高效的微調技術,如 LoRA,以解決大型語言模型(LLMs)的微調問題。

    3. 聯合訓練檢索器和生成器(Jointly Training Retriever and Generator):

      • 同時訓練檢索器和生成器以提高下游任務的性能。

      • 確保從輸入到輸出的正向過程中的可微性,以實現端到端優化。

  3. 數據存儲更新(Datastore Update):

    • 種場景涉及兩個階段:更新知識庫,然後訓練檢索器和生成器。更新知識庫有三種情況,即用可訓練的嵌入更新、用新值更新和用新語料庫更新。

    • 在第一種情況下,值通常是可訓練的嵌入,並且與 RAG 中的參數同時 / 異步更新。最後兩種情況通常指的是用最新信息更新知識庫。

    • 以問答語料庫爲例,用新值更新指的是更新現有問題的答案,而用新語料庫更新指的是添加新的問答對。要更新現有鍵的值,首先需要查詢現有的鍵值對,然後執行就地更新。對於新的語料庫,數據存儲首先需要執行插入操作,然後重建或更新新鍵的索引。更新數據存儲後,訓練檢索器和生成器類似於沒有數據存儲更新的 RAG。

5. RAG 的應用場景

RAG 技術在各種自然語言處理(NLP)任務中的應用:

  1. 語言模型(Language Modeling):

    • 使用 RAG 提高預訓練階段的語言模型能力,通過修改生成器架構或在輸入和輸出中加入檢索信息。
  2. 機器翻譯(Machine Translation):

    • 利用 RAG 技術通過將外部知識融入翻譯過程來提升翻譯質量,可以是文本拼接或對數融合。
  3. 文本摘要(Text Summarization):

    • 應用 RAG 技術通過檢索外部知識和相似文檔來增強文本摘要任務,包括提取式和抽象式摘要。
  4. 問答系統(Question Answering):

    • RAG 技術結合信息檢索和模型生成,適用於開放域和封閉域的問答系統,提高問題理解和信息檢索的準確性。
  5. 信息提取(Information Extraction):

    • 使用 RAG 技術提高信息提取任務的性能,包括命名實體識別(NER)、關係提取(RE)等子任務。
  6. 文本分類(Text Classification):

    • 利用 RAG 技術增強文本分類任務,如情感分析,通過不同的外部知識融合策略來提升模型性能。
  7. 對話系統(Dialogue Systems):

    • 應用 RAG 技術改進對話系統,通過檢索歷史對話或相關信息來生成更連貫、相關的響應。

RAG 技術在實際應用場景中的具體實現和作用:

  1. LLM-based Autonomous Agents:

    • 利用 RAG 爲基於大型語言模型的自主智能體提供更廣泛的信息訪問能力,增強決策和問題解決能力。

    • 利用 RAG 從外部記憶檢索信息:

      • 智能體可以使用 RAG 從自己的外部記憶中檢索相關信息,以增強其理解和決策能力。
    • 利用 RAG 使用工具搜索網絡:

      • 智能體可以利用工具搜索網絡,獲取最新信息,這對於需要最新知識的情境非常有用。
  2. 框架(Frameworks):

    • 介紹瞭如 Langchain 和 LLaMAindex 等框架,它們通過集成複雜的檢索機制與生成模型,促進了外部數據在語言生成過程中的整合。
https://arxiv.org/pdf/2407.13193
Retrieval-Augmented Generation for Natural Language Processing: A Survey
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/gaEGL2N3JH26QCB6q84N1Q