RAG 面向 LLM: 基于檢索增強的大語言模型調研

摘要

作為 AI 領域最先進的技術之一,檢索增強生成(RAG)技術可以提供可靠和最新的外部知識,為眾多任務提供巨大的便利。特別是在 AI 生成內容(AIGC)時代,RAG 中檢索強大的提供額外知識的能力使得檢索增強生成能夠輔助現有生成式 AI 生產高質量輸出。最近,大語言模型(LLM)在語言理解和生成方面表現出革命性的能力,但仍面臨固有的局限性,如幻覺和過時的內部知識。鑒于 RAG 在提供最新和有用的輔助信息方面的強大能力,檢索增強的大語言模型應運而生,利用外部和權威的知識庫,而不是僅僅依賴模型的內部知識,以增強 LLM 的生成質量。新加坡國立大學在這篇綜述中,全面回顧了檢索增強大語言模型(RA-LLM)現有的研究,涵蓋了三個主要技術視角:架構、訓練策略和應用。作為基礎知識,該研究簡要介紹了 LLM 的基礎和最新進展。然后,為了說明 RAG 對 LLM 的實際意義,該研究按應用領域對主流相關工作進行分類,詳細說明了每個領域的具體挑戰以及 RA-LLM 的相應能力。最后,為了提供更深入的見解,該研究討論了當前的局限性和未來研究的幾個有前景的方向。

論文出處: https://arxiv.org/pdf/2405.06211

1 簡介

作為最基礎的數據挖掘技術之一,檢索旨在理解輸入查詢并從外部數據源中提取相關信息。它在各個領域都有廣泛的應用,如搜索、問答和推薦系統。例如,搜索引擎(如谷歌、必應和百度)是檢索在行業中最成功的應用;它們可以過濾和檢索與用戶查詢最相關的網頁或文檔,使用戶能夠有效地找到所需信息。同時,通過在外部數據庫中有效地維護數據,檢索模型可以提供可靠和及時的外部知識,從而在各種知識密集型任務中發揮重要作用。由于其強大的能力,檢索技術已成功地集成到人工智能生成內容(AIGC)時代的先進生成模型中。值得注意的是,檢索模型與語言模型的結合產生了檢索增強生成(RAG),它已經成為生成式 AI 領域最具代表性的技術之一,旨在提高文本內容的生成質量。在這里插入圖片描述

為了提高生成模型的效果,RAG 從外部數據源引入信息或知識,作為輸入查詢或生成輸出的補充。具體而言,RAG 首先調用檢索器來搜索和提取外部數據庫中的相關文檔,然后將其作為上下文來增強生成過程。在實踐中,RAG 技術通過簡單地調整檢索組件,在各種生成任務中都很容易且有效地應用,幾乎不需要額外的訓練。最近的研究表明,RAG 不僅對知識密集型任務如開放域問答(OpenQA)有很大的潛力,而且對一般語言任務和各種下游應用也有很大的潛力。

近年來,預訓練基礎模型,特別是大語言模型(LLM)的快速發展,在各種任務上都表現出驚人的性能,包括推薦系統、分子發現[72]和報告生成。LLM 的巨大成功從技術上可以歸因于具有數十億參數的先進架構,在來自各種來源的海量訓練語料上進行預訓練。這些技術改進帶來了 LLM 的顯著涌現能力,特別是在語言理解和生成、上下文學習等方面。例如,GPT-FAR 引入詳細的提示來教導 GPT-4 進行圖像標注、統計分析和文本分析,以生成多模態時尚報告。LLM 還通過理解用戶對物品的偏好,在推薦系統中取得了良好的性能。盡管取得了成功,但 LLM 仍然存在內在的局限性,例如缺乏特定領域的知識、"幻覺"問題以及更新模型所需的大量計算資源。這些問題在醫療和法律等特定領域尤其明顯。

例如,最近的一項研究表明,法律幻覺普遍存在且令人不安,對特定法律查詢的幻覺率從 69%到 88%不等,適用于最先進的 LLM[21]。此外,由于需要大量計算資源來用特定領域或最新數據對 LLM 進行微調,解決幻覺問題的挑戰變得更加困難。這反過來又嚴重阻礙了 LLM 在各種實際應用中的廣泛采用。

為了解決這些局限性,最近有人努力利用 RAG 來增強 LLM 在各種任務中的能力,特別是那些對最新和可靠知識要求很高的任務,如問答(QA)、AI4Science 和軟件工程。例如,Lozano et al.介紹了一個科學特定的 QA 系統,該系統基于動態檢索科學文獻。MolReGPT 利用 RAG 來增強 ChatGPT 在分子發現中的上下文學習能力。如圖1所示,基于 LLM 的對話系統將無法很好地回答超出范圍的查詢。相比之下,在 RAG 的幫助下,從外部數據源檢索相關知識并將其集成到生成過程中,對話系統成功地給出了用戶正確的答案。鑒于利用 RAG 推進 LLM 方面取得的顯著進展,迫切需要對檢索增強大語言模型(RA-LLM)的最新進展進行系統的回顧。

本綜述旨在通過從 RA-LLM 的架構、訓練和應用等幾個主要方面總結代表性方法,對檢索增強大語言模型(即 RA-LLM)進行全面概述。更具體地說,在第2節簡要介紹 LLM 的背景知識之后,該研究從 RA-LLM 在檢索、生成和增強方面的幾個主要視角回顧了現有研究,以及 RAG 中檢索的必要性和應用頻率。然后,該研究在第4節總結了 RA-LLM 的主要訓練技術,在第5節總結了各種 RA-LLM 應用。最后,在第6節中,該研究討論了關鍵挑戰和未來探索的潛在方向。

與本綜述同時,其他幾篇相關綜述對 RAG 和 LLM 有不同的側重點。例如,Zhao et al.專門回顧了基于多模態信息的 RAG 技術,Zhao et al.討論了用于 AIGC 的 RAG。Gao et al.對 LLM 的 RAG 進行了相對全面的概述。本綜述不同于這些綜述,集中于技術視角,并根據 RA-LLM 中的架構和訓練范式以及應用任務系統地回顧模型。

2 背景

在本節中,該研究簡要介紹大語言模型和提示學習的背景知識。

2.1 大語言模型(LLM)

最近,LLM 的重大突破徹底改變了人工智能領域。先進的 LLM 通常在大量數據上進行預訓練,具有數十億參數,表現出理解和生成類人文本的能力,推動了各種自然語言處理任務的進步,如文本生成和信息檢索。LLM 可以通過在特定數據集上微調來適應各種下游任務,使它們能夠專注于特定領域或應用。總的來說,大多數現有的 LLM 可以大致分為三類:僅編碼器模型、僅解碼器模型和編碼器-解碼器模型。

僅編碼器模型,如 BERT(來自 Transformers 的雙向編碼器表示)系列模型,通過將輸入文本編碼到高維空間來處理輸入文本。僅編碼器模型的關鍵特點是它們的雙向性,這意味著它們在編碼每個 token 時可以同時考慮左右上下文。這種雙向性使得僅編碼器模型能夠更好地理解上下文中單詞的含義,這對于情感分析、評論閱讀和文本分類等任務至關重要。與這些模型相比,僅解碼器模型以從左到右的方式生成文本。作為僅解碼器模型的代表,GPT(生成式預訓練 Transformer)根據先前 token 提供的上下文預測序列中的下一個 token。它們的架構使它們特別適用于語言生成、代碼生成和創意寫作等任務。編碼器-解碼器模型,如 T5(文本到文本轉換 Transformer),獨特地將各種 NLP 任務轉化為文本生成問題。更具體地說,T5 中的編碼器處理輸入序列以捕獲其含義,而解碼器根據編碼信息生成輸出序列。這種 T5 架構非常適合涉及將一個序列轉換為另一個序列的任務,如機器翻譯、摘要和對話回復生成。

2.2 提示學習

2.2.1 提示工程

。由于 LLM 的大量參數,提示學習成為一種利用 LLM 的能力來實現各種任務的范式,而不是對 LLM 進行大量微調。提示學習精心設計指導模型執行下游任務的輸入。例如,早期方法提供手工制作的模板來處理 NLP 中的各種任務。具體來說,像 BERT 這樣的僅編碼器模型通常采用完形填空提示,因為它們與其預訓練任務的形式非常接近。對于其他模型,如 GPT,前綴提示往往更合適,因為它們很好地融合了生成任務。然而,手動設計的提示依賴于人類經驗,沒有有效性保證。為了解決這一局限性,研究人員開發了軟提示調整,以學習可訓練的連續提示嵌入。例如,前綴調整在輸入中預先添加一系列前綴嵌入,可以進行訓練和更新。這種分配允許提示不是真實文本,為生成提示提供了更多靈活性。然而,由于缺乏特定領域的知識,在面對新任務時,模型可能仍然無法生成準確的響應。

2.2.2 上下文學習(ICL)

。為了克服普通提示學習的局限性,最近的研究開發了上下文學習(ICL)。ICL 是提示學習的一種特定方法,它在提示中給出幾個任務示范。這種范式允許預訓練的 LLM 理解示范提供的模式來解決新任務,而無需微調。例如,通過精心選擇幾個示范,GPT-3展示了執行小樣本任務的能力。這一成功表明,LLM 具有根據任務特定知識快速適應新任務的顯著能力。

盡管 ICL 有效,但它通常嚴重依賴所提供示范的質量,這可能導致生成次優輸出。更糟糕的是,ICL 可能沒有足夠的必要信息或先驗知識來指導 LLM 生成準確的響應。為了解決 ICL 上述局限性,最近的研究引入了檢索增強生成(RAG)技術。通過集成檢索和生成,RAG 模型為提高 LLM 在各種任務中的性能和適應性提供了一個有前景的方向。

3 檢索增強大語言模型(RA-LLM)

LLM 時代的 RAG 框架通常由檢索、生成和增強三個主要過程組成,以及確定是否需要檢索的機制。在本節中,該研究將介紹每個組件中涉及的重要技術。

3.1 檢索

給定來自 LLM 輸入的查詢,RAG 中的檢索過程旨在從外部知識源提供相關信息,這些知識源可以是開源的或封閉的,如圖2所示。關鍵組件檢索器,如圖3所示,由幾個過程組成,作為一個整體來衡量查詢和數據庫中文檔之間的相關性,以有效地檢索信息。檢索的具體流程進一步取決于是否包括檢索前和檢索后的處理。在本小節中,該研究將介紹傳統 RAG 和基于 LLM 的 RAG 中檢索所涉及的主要技術,包括檢索器類型、檢索粒度、檢索前和檢索后增強以及數據庫構建。

3.1.1 檢索器類型

。根據信息編碼方法,檢索方法通常可以分為兩類:稀疏檢索和密集檢索。稀疏檢索是基于詞的,主要應用于文本檢索,而密集檢索將查詢和外部知識嵌入到向量空間中,容易應用于各種數據格式。

作為一種直接的方法,稀疏檢索,例如 TF-IDF 和 BM25,通常依賴于倒排索引匹配以及原始數據輸入。例如,許多研究直接應用 BM25 進行段落級檢索,以促進其 RAG,其中段落被特別表示為一袋詞,并根據詞項和逆文檔頻率進行排序。除了作為生成器輸入的補充外,稀疏檢索還被用于尋找示例作為 ICL 的演示,用于 RA-LLM。應用稀疏檢索到 RAG 中的主要局限性在于它的非訓練性質,這使得檢索性能嚴重依賴于數據庫構建和查詢生成的質量。此外,這種固定的基于詞項的方法只支持相似性檢索,而不能適應 LLM 應用中需要的其他檢索考慮,如多樣性。

在這里插入圖片描述
在這里插入圖片描述

相比之下,密集檢索將查詢和文檔嵌入到連續向量空間中,并滿足某些標準,例如語義相似性。密集檢索方法通常可以訓練,因此在適應性方面具有更大的靈活性和潛力。作為密集檢索器的關鍵組件,現有 RAG 模型中的嵌入模型在設計上略有不同。一個簡單的設計是直接使用生成模型的一部分作為檢索器的嵌入層,這可能能夠增強檢索和生成過程之間的一致性。基于 BERT 的主干被廣泛應用于檢索模型中。一種常見的檢索器設計是用 BERT 結構構建雙流編碼器(一個編碼器用于查詢,另一個用于文檔),這也稱為雙編碼器。早期階段的 RAG 方法傾向于凍結或部分凍結檢索器的參數,以執行一般級別的相關知識提取,并更多地關注知識利用和生成器微調。大規模專門的預訓練進一步增強了 RAG 模型在更多知識密集型任務中的表現。一個典型的成功案例是密集段落檢索器(DPR),它使用基于 BERT 的主干,并使用問答對數據專門針對 OpenQA 任務進行預訓練。DPR 作為預訓練的檢索器表現出強大的能力,促進許多 RAG 模型在各種下游任務中取得成功。它還被認為是改進 LLM 性能的 RAG 范式中的第一步,通過微調可以進一步增強查詢和相關文本數據之間的嵌入一致性。最近的一項研究還發現,DPR 訓練分散了知識在網絡中的存儲方式,為同一信息創建了多個訪問路徑。通過有效的微調,雙編碼器檢索器也被廣泛應用于基于 ICL 的 RAG。具體來說,它們更多地用于基于句子嵌入相似性的檢索,以及 ICL 中的一些特殊要求,如多樣化示例檢索。

在 RA-LLM 中廣泛應用的另一類密集檢索器具有單編碼器結構,可能基于 Transformer、BERT 或其他現成的序列建模主干。這些單編碼器檢索器通常在大規模未對齊文檔上通過對比學習進行預訓練,因此可能因其通用性而脫穎而出,這意味著它們可以更好地遷移和泛化到新的領域或任務。這種通用預訓練的檢索器,例如 Contriever和 Spider,在針對各種任務的 LLM 中會更靈活地使用,并在許多 RA-LLM 方法中證明了它們的有效性,例如 In-Context RALM、Atlas、Self-RAG和其他。根據現有研究的實驗結果,對于開放域 QA 任務,在與 InstructGPT合作時,應用通用預訓練檢索器(Contriever)而不進行微調可以達到與稀疏檢索器(BM25)相當的性能。然而,它們都比在目標數據集上微調的 DPR 模型差,顯示了在目標任務和數據上微調的有效性。

3.1.2 檢索粒度

。檢索粒度表示語料庫被索引的檢索單元,例如文檔、段落、token 或其他級別,如實體。對于 RAG 而言,檢索粒度的選擇在有效性和效率方面可能會對模型的整體性能產生重大影響,因為它們決定了數據庫的存儲空間以及搜索的計算成本。早期的檢索增強語言模型提出檢索整個文檔,然后應用訓練用于檢測返回文檔中答案范圍的機器理解模型,這更側重于語言閱讀和文檔中關鍵信息定位。在生成式語言模型中,Chunk 檢索(在某些參考文獻中也稱為段落)很常見,已經用于傳統和基于 LLM 的 RAG 模型,如 REALM、RAG和 Atlas。更細粒度的檢索,即 token 檢索,可以進行更快的搜索,但會給數據庫存儲帶來更多負擔。token 檢索更適用于需要稀有模式或域外數據的情況,同時與每 token 檢索策略配合良好,如 kNN-LM 和其他類似工作中應用的。相比之下,文本塊可能包含緊湊和完整的信息,冗余和不相關性較少,因此成為 RAG 中主流的檢索文本粒度。

RAG 中提出的另一個主要檢索粒度是實體檢索。與上述粒度類型不同,實體檢索從知識而非語言的角度設計。Févry et al. 引入了 Entities as Experts(EAE)模型,它根據實體身份劃分語言模型的參數空間。提出的 EAE 模型旨在利用 Wikipedia 數據庫從文本中學習實體表示以及其他模型參數,并用實體記憶表示知識。在更細粒度的層面上,de Jong et al. 提出通過學習和檢索提及而不是實體來構建知識庫。總的來說,在 RAG 中應用實體或提及級檢索對以實體為中心的任務會更有效,與 token 檢索相比,在空間上也更有效。

3.1.3 檢索前和檢索后增強

。為了確保檢索質量,即提高檢索結果的準確性和相關性,各種檢索前和檢索后策略已被提出來進一步增強檢索器的輸入和輸出。

Wang et al.提出了一種查詢擴展方法 Query2doc,它通過少樣本提示 LLM 生成偽文檔,并用偽文檔中的相關信息擴展查詢,這可以幫助消除查詢歧義并指導檢索器。他們通過實證證明,這種方法可以提高稀疏和密集檢索器[56]在特定信息檢索數據集上的性能。類似地,Gao et al.提出了假設文檔嵌入(HyDE)方法,該方法指示 LLM 為給定查詢生成假設文檔。然后將假設文檔用作新查詢進行嵌入并使用密集檢索器搜索鄰居。

另一種檢索前策略,查詢重寫,旨在縮小輸入文本與檢索所需知識之間的差距,將原始問題重新表述為更有利于檢索的版本。具體來說,Ma et al.提出了 Rewrite-Retrieve-Read 框架,它提示 LLM 生成檢索功能的查詢。重寫步驟的動機是在新查詢中澄清檢索需求,以減輕檢索功能理解輸入和增強輸出(即檢索相關信息)的負擔。他們測試了使用凍結 LLM 和可訓練模型作為重寫器的設置,兩者都優于樸素 RAG 或生成模型,盡管在不同測試的 QA 數據集上表現各異。

Yu et al. 提出查詢增強,將原始查詢和初步生成的輸出組合成新查詢,然后用于從外部數據庫中檢索相關信息。檢索到的結果可以啟發語言模型重新思考生成的結果并對其進行增強。與僅應用原始查詢相比,這種增強可能為語料庫中檢索到的信息貢獻更多相關性,以直接澄清查詢-輸出關系。在新查詢中包含初始輸出進一步增強了要檢索的支持文檔與給定問題之間的詞匯和語義重疊。查詢增強在這些查詢增強策略中取得了總體更好的性能,因為它可能在生成答案時集體處理所有檢索到的知識。

后檢索增強表示在將檢索器提取的 top-k 文檔饋送到生成器之前對其進行處理的過程,目的是更好地協調檢索和生成階段,特別是對于封閉源生成器(如 LLM)。例如,Yang et al. 提出了可插入獎勵驅動上下文適配器(PRCA),它能夠在特定數據集上微調輕量級適配器而不是生成器。它還通過生成器產生的獎勵利用強化學習提煉檢索到的文檔。Glass et al.提出了 Retrieve-Rerank-Generate(R2G)方法,該方法通過重排操作組合不同檢索方法檢索到的文檔,以提高檢索結果的穩健性。應用后檢索增強的另一個考慮因素是,檢索到的信息有時可能不相關或包含噪聲,這可能無助于任務的生成模型,甚至可能損害生成過程。Wang et al.、Asai et al.、Yu et al.提出了不同的策略來減輕檢索到的知識文檔中的噪聲。然而,Xiong et al.通過實證研究發現,這些方法取決于 LLM 的置信度,這可能不如預期的那樣精確。為了解決這個問題,Wang et al.提出了 BlendFilter,它同時考慮了檢索前查詢生成混合和檢索后知識過濾。該方法可以解決復雜問題以及噪聲檢索知識問題,從而全面增強 RA-LLM 性能。

最近,先進的 RAG 流程已經被提出,使用 LLM 生成推理路徑和計劃,并通過信息檢索(IR)模塊迭代檢索知識,以增強基于 LLM 的生成。然而,Zhu et al. 指出,如果 IR 和 LLM 的輸出質量較低,檢索和生成過程將通過這種迭代引導管道相互阻礙。為了克服這一障礙,他們提出了一種新的推理方法來增強查詢和檢索知識。后檢索策略也可能用于增強檢索結果與生成模型之間的兼容性。例如,現有 LLM 的主要局限性之一是輸入 token 的長度,這阻止了將長檢索文檔直接納入現有 RA-LLM。對于這個限制,Xu et al.提出了 Retrieve, Compress, Prepend(RECOMP),它在上下文增強生成過程之前添加了一個中間步驟,將檢索到的文檔處理成文本摘要。

3.1.4 數據庫

。RAG 中的檢索是基于外部知識源進行的,可以是封閉源的或開源的,如圖2所示。封閉源數據庫通常存儲知識的鍵值對,可以通過各種方式構建。鍵主要用于相似性匹配,作為 BM25 中的稀疏向量或來自檢索編碼的密集嵌入。值取決于具體的檢索目標,在大多數情況下是原始文本。例如,在早期的 RAG 中,每篇 Wikipedia 文章被分割成不相交的 100 個詞的塊,總共制作了 2100 萬個文檔。每個文檔分別由密集嵌入和存儲在數據庫中的值和鍵編碼。值也可以存儲 token,每個 token 一個,如 kNN-LM 和 Spalm 中應用的那樣。數據庫的來源取決于特定的應用領域和任務。

Wikipedia 是以前 RAG 工作中最常用的通用檢索集之一,它存儲事實結構化信息,并有幾個不同規模的版本,從十億 token 級別到萬億 token 級別。特定領域的數據庫也用于下游任務。例如,對于代碼生成任務,Zan et al.收集公共庫的 API 信息和代碼文件來構建他們的 APIretriever 數據庫。此外,Zhou et al提出使用經常用新內容(新發布的庫)更新的文檔池。

應用互聯網搜索引擎,如 Bing 和 Google,可以避免維護搜索索引,并可以訪問最新知識。同時,它提供了比封閉源數據庫更廣泛的知識庫。互聯網搜索已廣泛與黑盒 LLM 結合,并顯示出不同功能的有效性,如知識增強、事實檢查]和 LLM 代理增強。與傳統 RAG 相比,由于 LLM 作為讀者理解搜索結果(即檢索到的文檔)以及 LLM 使用工具處理和分析它們的非凡能力,互聯網搜索更多地被用作 RA-LLM 中的檢索器。現有研究[173]表明,利用搜索引擎(如 InstrucGPT)對 LLM 在 OpenQA 和事實檢查等零樣本知識密集型任務上特別有效。

3.2 生成

生成器的設計在很大程度上取決于下游任務。對于大多數文本生成任務,僅解碼器和編碼器-解碼器是兩種主要結構。最近商業封閉源大基礎模型的發展使得黑盒生成模型成為 RA-LLM 的主流。在這一部分,該研究將簡要回顧使用這兩種類型生成器的研究:參數可訪問(白盒)和參數不可訪問(黑盒)。

3.2.1參數可訪問生成器(白盒)

編碼器-解碼器結構使用不同的參數集獨立處理輸入和目標,其中開發了交叉注意力組件將輸入 token 連接到目標 token。典型的編碼器-解碼器模型包括 T5和 BART。相比之下,僅解碼器模型在級聯后處理輸入和目標,這使得兩部分的表示隨著它們在網絡中向上傳播而同時構建。這兩種類型的生成器在現有 RAG 工作中被廣泛應用。例如,RAG 和 Re2G采用 BART;FID 和 EMDR2 利用 T5。還有其他模型利用基于 Transformer 的編碼器-解碼器架構,但有一些定制設計。RAG 中的生成器通過結合檢索到的數據來增強生成準確性和相關性,從而區別于一般生成器。此外,白盒生成器允許參數優化,可以訓練以適應不同的檢索和增強方法,以獲得更好的生成性能。

3.2.2 參數不可訪問生成器(黑盒)

一定比例的 LLM 在發布時沒有披露內部結構或參數的可訪問性,尤其是那些特別大規模的,如 GPT 系列、Codex和 Claude,它們被稱為黑盒生成模型。這些生成器只允許饋送查詢(輸入)和接收響應(輸出)的操作,而不允許改變內部結構或更新參數。從另一個角度來看,即使是開放微調的 LLM,其規模也很大,很難用有限數量的數據對下游特定領域的任務進行調整。因此,黑盒 RA-LLM 更關注檢索和增強過程,試圖通過用更好的知識、指導或示例增強輸入(在 LLM 的上下文中也稱為提示)來增強生成器,用于生成。例如,Rubin et al.提出訓練一個由語言模型自己標記數據的提示檢索器,可用于為上下文學習提供更好的示例,從而提高最終生成性能。Xu et al.提出在上下文集成之前壓縮檢索到的文檔,這可以減少計算成本,也可以減輕 LM 在長檢索文檔中識別相關信息的負擔。

3.3 生成增強的檢索集成

增強描述了集成檢索和生成部分的技術過程,這是 RA-LLM 的關鍵部分。在本小節中,該研究介紹了增強的三個主要設計,分別在生成器的輸入、輸出和中間層進行,如圖2所示。

3.3.1 輸入層集成

集成檢索信息/文檔的一種常見方式是將它們與原始輸入/查詢組合,并共同傳遞給生成器,這稱為輸入層集成。例如,In-Context RALM通過特別地將原始輸入和所有檢索到的文檔級聯成單個序列作為生成模型的新輸入來應用輸入層集成。盡管有效,但這種集成受到檢索文檔數量的限制,因為級聯的新輸入可能太長而無法由生成模型處理。In-context RALM 通過從新輸入的開頭刪除 token 來特別緩解這一限制。為了避免這種 token 刪除策略帶來的信息丟失,FID 采用了一種不同的集成方法,即在編碼器中獨立處理每個檢索到的文檔。這種策略可擴展到大量上下文,因為它在后續處理中每次只對一個上下文執行自注意力。Atlas和 REPLUG應用類似的并行集成,每次將查詢和一個檢索到的文檔級聯。一般來說,大多數基于黑盒生成的 RAG 方法應用輸入層集成,因為生成模型的中間層或輸出分布都無法訪問。

更特別地針對 LLM,輸入層集成可能會使用檢索到的內容作為(附加的)提示或示范,而不是像傳統 RAG 那樣將其用作原始輸入的補充。提示檢索旨在自動通過檢索找到合適的自然語言提示,以教導 LLM 在上下文中學習或誘導 LLM 推理。它可能在不需要精細提示工程的情況下提高 LLM 的零樣本能力。例如,Cheng et al.提出學習一個基于由凍結 LLM 產生的分數標簽的輸入-提示對數據的提示檢索器。

3.3.2 輸出層集成

另一種增強是事后的,即輸出層集成,它聯合檢索和生成結果。例如,kNN-LM 在預測中插值兩個下一個 token 分布:一個由 LM 誘導,另一個由檢索語料庫中的最近鄰誘導。輸出層線性集成很靈活,可以應用,因為它可以插入到大多數生成模型中,無需額外訓練。然而,輸出層集成的簡單性也限制了模型對檢索文本進行推理的能力。為了解決這一局限性,Yogatama et al.提出添加一個額外的門控網絡來后處理檢索到的數據,并獲得相對更好的性能。對于 LLM,輸出層集成與輸入層集成一樣合理和適應性強。REFEED 提出了一種答案細化機制,應用 LLM 評估檢索到的信息并相應調整初始答案,以提高響應的準確性。類似地,Zhang et al. 提出了 COMBO 框架,該框架基于預訓練的鑒別器將 LLM 生成的段落與檢索到的對應段落匹配成兼容對。然后由基于 Fusion-in-Decoder 的模型處理段落對,得出最終答案。

3.3.3 中間層集成

與上述兩種非參數方法相比,更有吸引力的增強是設計一個半參數模塊,通過生成模型的內部層集成檢索結果,這稱為中間層集成。這種集成可能增加額外的復雜性,并有望通過有效的訓練來增強生成模型的能力。通常,引入 Transformer 模塊來利用檢索到的信息(主要編碼成密集表示)到生成模型中,與生成中間階段的表示進行交互。例如,RETRO引入了一個分塊交叉注意力(CCA)層來處理生成器塊中檢索到的塊,Wu et al.引入了 kNN 增強注意力層。類似地,EAE和 TOME 分別使用實體記憶和記憶注意力層來集成檢索到的實體和實體提及。這種中間層集成可以頻繁有效地使用許多塊來增強整個 RAG 模型的能力。它為頻繁檢索到的大量文本塊提供了一種有效的替代方案,這些文本塊由于 LM 的輸入長度限制而難以通過輸入層集成進行處理[6]。然而,還需要注意的是,中間層集成需要高度訪問生成模型,這對于大多數通過推理 API 訪問的 LLM 來說是不可行的。

3.4 檢索增強的必要性和頻率

LLM 基于生成的檢索操作通常旨在補充知識以增強生成。盡管檢索增強模型已經顯示出前景,但它們被批評為不是通用解決方案,因為不加區分地用不相關的段落增強LLM可能會覆蓋LLM已經擁有的潛在正確知識,導致錯誤響應。Thakur et al.貢獻了一個人工注釋的數據集,以幫助評估LLM對外部檢索知識中錯誤的穩健性,并觀察到LLM在不相關的檢索段落上的幻覺率是相關段落的兩倍。因此,對于RA-LLM來說,準確回憶先驗知識,同時有選擇地納入檢索信息,只在必要時納入,這是通向穩健RA-LLM的途徑。

大多數現有方法根據LLM的初步答案或其內部推理結果來確定檢索的必要性。例如,Self-RAG引入特殊token來評估檢索的必要性并控制檢索行為。其他方法設計迭代提示來決定生成過程中是否需要額外信息,從而需要為LLM調用檢索或其他操作。在傳統RAG中,檢索必要性判斷也有探索,并提出用直觀的方法解決,如評估生成模型產生的logits置信度。這種解決方案也適用于RA-LLM,例如,FLARE在logits低于特定閾值時動態觸發RAG。

更靈活地,Tan et al.引入SlimPLM,這是一種協作方法,用一個纖細的代理模型檢測LLM中缺失的知識,該模型的功能是生成一個"啟發式答案"。"啟發式答案"用于評估檢索的必要性,如有必要,通過應用于查詢重寫來促進檢索過程。

在很少考慮檢索必要性的傳統RAG中,檢索頻率(也稱為檢索步幅)是一個重要的設計方面,以確定檢索在生成中的使用程度,從而極大地影響RAG模型的整體性能。檢索頻率控制對檢索結果的依賴程度,從而影響模型的效率和有效性。當不考慮檢索的必要性時,檢索頻率通常是預定義和固定的,有三種常見設置:一次性、每n個token和每個token。一次性檢索僅調用一次檢索函數,并試圖在一次操作中找到所有所需信息。一次性檢索通常在生成過程開始時進行,然后將所有檢索到的文檔連同原始輸入一起提供給生成模型,如REALM中應用的那樣。一次性檢索更適用于LLM對外部數據庫中的信息需求很明顯的情況。然而,對于需要長格式輸出(如開放域摘要)的語言任務,輸出中token之間的依賴關系在生成過程中更重要。在這些情況下,預先檢索的文檔(通過一次性檢索)可能不足以支持整個輸出序列的生成,這需要在生成過程中進行檢索操作。為此,In-Context RALM和RETRO在生成過程中應用每n個token檢索,以更好地增強。相比之下,kNN-LM[57]采用了更頻繁的檢索策略,即在生成過程中為每個token的預測檢索信息。總的來說,應用不同頻率的檢索會影響整個RAG方法的有效性和效率。例如,更頻繁的檢索會帶來更好的性能,但也會增加計算成本。選擇檢索頻率幾乎是計算成本和性能之間的權衡。

4 RA-LLM訓練

根據是否需要訓練,現有的RAG方法可以分為兩大類:無訓練方法和基于訓練的方法。無訓練方法通常直接在推理時利用檢索到的知識,而無需引入額外的訓練,具有計算效率。然而,一個潛在的挑戰是,檢索器和生成器組件沒有針對下游任務進行特定優化,這可能很容易導致檢索知識的次優利用。為了充分利用外部知識,提出了大量方法來微調檢索器和生成器,從而指導大語言模型有效地適應和集成檢索信息。

根據訓練策略,該研究將這些基于訓練的方法分為三類:1)獨立訓練方法獨立訓練RAG過程中的每個組件,2)順序訓練方法首先訓練一個模塊,并凍結訓練好的組件以指導另一部分的調整過程,3)聯合訓練方法同時訓練檢索器和生成器。在下面的部分中,該研究將全面回顧無訓練、獨立訓練、順序訓練和聯合訓練方法。這些不同訓練方法的比較如圖4所示。

4.1 無訓練

憑借大量參數,LLM在各種下游任務上表現出人類水平的智能和出色的預測性能。然而,由于需要大量時間和計算資源,頻繁地執行微調和更新模型參數中存儲的知識是極具挑戰性的。最近,許多研究表明,可以通過檢索機制增強LLM,使它們能夠從外部來源動態獲取新知識,而無需額外的訓練過程(即無訓練),而不是僅僅依賴于模型參數中編碼的隱式知識。這些方法在各種知識密集型任務中顯示出顯著的性能改進,如開放域問答[69]和文檔摘要。根據LLM利用檢索信息的不同方式,該研究將這些無訓練方法分為兩類:1)基于提示工程的方法將檢索到的知識直接集成到原始提示中,2)基于檢索引導的token生成方法檢索信息以校準token生成過程。

4.1.1基于提示工程的方法。

由于LLM的生成性能高度依賴于輸入查詢,許多無訓練RAG方法通過優化原始提示來采用外部知識。具體來說,檢索到的文本通常作為上下文信息,與原始提示相結合,指導LLM的生成。例如,In-Context RALM保持LLM參數不變,并直接將檢索到的文檔合并到原始提示之前,以增強生成過程。IRCoT交織了思維鏈(CoT)生成和知識檢索步驟,使檢索更多相關信息用于后續推理步驟,與僅依賴問題作為查詢的標準檢索方法相比。GENREAD不是從大型語料庫中檢索知識,而是首先提示LLM根據查詢生成上下文文檔,然后根據給定的上下文和問題生成答案。SKR提出引導LLM確定他們是否可以基于內部知識回答給定的問題,通過有選擇地調用檢索器,實現靈活利用內部和外部知識。TOC首先為模糊問題檢索相關知識,并通過將模糊問題澄清為多個明確問題遞歸地構建一個樹結構,進一步聚合生成長格式答案。

4.1.2基于檢索引導的Token生成方法。

除了直接將外部知識集成到原始提示中,輔助信息還可用于調整token生成過程。例如,KNN-KM首先從數據存儲中檢索k個最相關的上下文,并基于距離計算鄰居分布。輸出分布通過插值鄰居分布和原始模型的輸出分布進行校準。Rest提出用非參數檢索數據存儲替換參數化草稿模型,并根據當前上下文檢索相關token用于推測性解碼。

4.2 獨立訓練

獨立訓練是指將檢索器和LLM作為兩個完全獨立的過程進行訓練,其中在訓練過程中檢索器和LLM之間沒有交互。與無訓練方法相比,通過訓練LLM利用檢索到的知識或訓練檢索器以彌合信息檢索和語言生成之間的差距,可以有效地提高RAG增強模型的性能。對于LLM的訓練,負對數似然損失是最具代表性的訓練目標,旨在引導LLM根據給定輸入生成期望輸出。關于檢索器,可以分為兩類:1)稀疏檢索器,2)密集檢索器。

稀疏檢索器通常利用稀疏特征,如詞頻,來表示文檔,并基于任務特定的度量,如TF-IDF和BM25,計算相關性得分。對于密集檢索器,采用深度神經網絡將查詢和文檔編碼為密集表示,然后通常使用內積計算相關性得分并檢索相關的外部知識。例如,DPR采用兩個獨立的BERT網絡分別編碼查詢和段落,并利用對比學習訓練這些模型。CoG提出訓練一個前綴編碼器和一個短語編碼器用于檢索,并將文本生成重新表述為從現有源文本集合中進行多個復制粘貼操作。

4.3 順序訓練

獨立訓練是在生成過程中利用外部知識的一種有效方法,因為檢索器和生成器可以離線訓練,任何現成的模型都可以使用,避免了額外的訓練成本。為了更好地增強檢索器和生成器之間的協同作用,提出了幾種方法對檢索器和LLM進行順序訓練。在這些順序訓練方法中,該過程通常從檢索器或生成器的獨立預訓練開始,之后將預訓練模塊固定,同時對另一模塊進行訓練。請注意,可以直接采用各種現有模型(例如BERT、CLIP、T5)作為固定的檢索器和生成器,從而繞過第一個預訓練過程。與獨立訓練相比,順序訓練涉及檢索器和生成器的協調訓練,其中可訓練模塊受益于固定模塊的輔助。根據檢索器和生成器之間的訓練順序,順序訓練可以分為兩類:1)檢索器優先,2)LLM優先。
在這里插入圖片描述

4.3.1 檢索器優先

。這些方法首先訓練檢索模型,然后將其固定。然后訓練LLM利用檢索到的知識。例如,RETRO采用獨立預訓練的BERT模型作為檢索器,并訓練一個編碼器-解碼器架構將檢索塊集成到模型的預測中。RALM采用Google搜索和開源COLBERTV2作為預訓練檢索器,并微調LLM以有效利用檢索到的段落。ITER-RTGEN利用預訓練的S-BERT作為檢索器,并引入自適應混合檢索策略來檢索示范。此外,它利用T5作為生成器,根據目標標簽和結合原始提示和檢索示范的輸入進一步微調。SMALLCAP提出使用CLIP,這是一個強大的預訓練多模態網絡,對輸入圖像和外部數據存儲的文本數據進行編碼,并根據余弦相似度檢索最相關的項目。訓練一個交叉注意力層,使用GPT-2作為解碼器來生成標題。

4.3.2 LLM優先

。同樣,也可以先預訓練LLM,然后在經過良好訓練的LLM的監督下調整檢索器。例如,DKRR表明,序列到序列模型的注意力分數可以指示文檔的相關性。因此,他們提出利用讀者模型的注意力分數產生合成標簽來訓練檢索器。AAR提出使用小型語言模型生成訓練檢索器的監督信號。經過良好訓練的檢索器可以進一步用于增強黑盒LLM的性能。RA-DIT首先微調LLM以增強其利用檢索知識的能力,然后訓練檢索器以更好地將其輸出與LLM對齊。UPRISE提出一種輕量級方法,通過引入提示檢索器來增強LLM在看不見的任務上的零樣本性能。使用凍結的LLM來指導提示檢索器的微調過程,然后這個檢索器在推理期間使用不同的LLM為不同的任務檢索提示。
在這里插入圖片描述

4.4 聯合訓練

聯合訓練方法采用端到端范式同時優化檢索器和生成器。與順序訓練每個模塊的方法不同,聯合訓練方法有效地提高了檢索器定位外部知識用于生成的能力,以及生成器有效利用檢索信息的能力。例如,RAG最小化負對數似然以聯合訓練檢索器和生成器。REALM采用與RAG類似的訓練范式,并使用最大內積搜索(MIPS)技術來定位最相關的文檔。為了采用MIPS,首先嵌入所有外部文檔,并為每個嵌入生成搜索索引。提出異步索引更新策略以避免每幾百個訓練步驟重新索引所有文檔的時間消耗。

5 應用

在本節中,該研究將介紹一些檢索增強大語言模型(RA-LLM)的代表性應用。為了對RA-LLM的應用提供清晰的概述,該研究將從三個角度進行回顧:自然語言處理應用、下游任務和特定領域應用。本節提到的研究在圖5中進行了總結和分類。

5.1 自然語言處理應用

由于文本生成的內在能力,RA-LLM在自然語言處理領域有各種應用,如問答(QA)系統、聊天機器人和事實驗證。

5.1.1 QA系統

。QA系統旨在為用戶的查詢提供精確的答案。然而,即使在大量數據上訓練,這些系統也可能缺乏最新信息或特定領域知識,而這些知識并不包含在其訓練數據中。為了解決這一局限性,RA-LLM的集成在提高QA系統能力方面發揮了關鍵作用,增強了其檢索和綜合相關信息的能力。具體而言,RA-LLM可以通過利用其檢索組件訪問龐大的知識庫,提供連貫且上下文相關的答案。例如,REALM集成了一個知識檢索器,可以在預訓練、微調和推理期間從大型語料庫中檢索信息。這種方法允許REALM有效地從龐大的知識語料庫中檢索,從而提高其響應的準確性。類似地,Fusion-in-Decoder從支持文檔中檢索段落,然后將其與問題融合以生成答案,實現更高的準確性。此外,Borgeaud et al.表明,答案的質量可能更多地依賴于檢索編碼器的輸出。

5.1.2 聊天機器人

。聊天機器人旨在以自然和對話的方式與用戶互動。與QA系統不同,聊天機器人側重于與用戶保持連貫且上下文豐富的對話。為了增強這些能力,最近的方法側重于集成RA-LLM,因為它能夠用相關的外部知識增強聊天機器人,促進與用戶更具吸引力和上下文豐富的交互。例如,一些研究從靜態數據庫(如Wikipedia轉儲)中檢索相關知識以增強對話。Komeili et al.提出從互聯網搜索檢索信息,以進一步增強對話性能。考慮到世界知識的動態特性,另一個模型進一步訪問搜索引擎中大量的動態信息以生成響應。

5.1.3 事實驗證

。事實驗證是驗證信息準確性和可靠性的關鍵任務。隨著對可信證據的需求,RA-LLM正被用于增強事實驗證的能力。Lewis et al.首先提出檢索外部知識以增強一系列知識密集型任務,包括事實驗證。另一方面,Atlas在小樣本學習下檢查了RA-LLM用于事實驗證的性能。最近,Self-RAG通過結合自反機制給人留下了深刻印象。具體而言,Self-RAG反思檢索到的信息是否有幫助,并判斷檢索到的信息的可靠性,從而大大提高了驗證準確性。

5.2 下游任務

除了自然語言處理應用,RA-LLM還可以應用于各種下游任務,如推薦和軟件工程。

5.2.1 推薦

。推薦系統在建模用戶偏好和提供個性化推薦方面起著重要作用。最近,RA-LLM通過集成檢索和生成過程,在提供個性化和上下文相關推薦方面顯示出巨大潛力。例如,Di Palma提出了一個簡單的檢索增強推薦模型,利用電影或圖書數據集中的知識來增強推薦。此外,Lu et al.進一步從評論中檢索信息,以豐富推薦系統中的物品信息。CoRAL利用強化學習從數據集中檢索協作信息,并將其與語義信息對齊,以獲得更準確的推薦。

5.2.2 軟件工程

。RA-LLM的興起影響了軟件工程的許多方面。例如,一些研究提出了用于代碼生成和程序修復的檢索增強生成范式。類似地,Parvez et al.從代碼庫中檢索排名靠前的代碼或摘要,并將其與輸入聚合,以增強代碼生成和摘要。此外,RA-LLM在表格數據處理和文本到SQL語義解析方面顯示出潛力。

5.3 特定領域應用

RA-LLM已被廣泛應用于各種特定領域任務,如AI for Science和金融。

5.3.1 AI for Science

。RA-LLM已被證明對科學領域有益,如分子和蛋白質。分子包括識別分子的性質和預測新分子,從而有利于藥物發現。目前,一些RA-LLM已通過集成分子結構和生物醫學實體(如蛋白質、分子和疾病)的檢索應用于分子等。Li et al.、Wang et al.提出了基于從數據庫檢索指導分子生成的框架。Liu et al.通過從大規模數據集中檢索文本知識引入了一個多模態分子結構-文本模型,用于分子性質預測。此外,RA-LLM也顯著影響了蛋白質表示和生成。例如,RSA查詢與一組結構或功能相似序列相關的蛋白質序列,以增強蛋白質表示。此外,Lozano et al.提出了一個臨床QA系統,基于檢索已發表的綜述文章。

5.3.2 金融

。在高度數據驅動和信息密集型的金融領域,RA-LLM已被證明是增強決策的重要技術。例如,Zhang et al.從新聞平臺(如彭博社和路透社)和社交媒體平臺(如Twitter、Reddit)等外部來源檢索財經信息,與原始查詢結合,以提高財經情感分析的精度。此外,金融QA是金融分析的另一個主要任務,通常從金融文檔中提取相關知識。由于專業文檔通常以PDF格式存儲,Lin引入了一個與RA-LLM相結合的PDF解析器,從財務報告中檢索知識。另一方面,Yepes et al.提出了一種基于結構而不是基于段落分塊的文檔分塊方法,進一步提高了RA-LLM輸出的質量。

6 未來挑戰和機遇

由于RA-LLM的研究仍處于早期階段,該研究提出了一些未來可以在RA-LLM領域探索的潛在研究方向。

可信賴的RA-LLM。開發RAG增強LLM的根本目標是增強語言模型的能力,通過減輕冗余和無意義的勞動、增加便利性和促進社會進步,從而使用戶和社會受益。然而,最近的研究表明,RA-LLM可能被惡意和無意地操縱,做出不可靠的決策并傷害人類,這可能在安全關鍵場景中產生嚴重后果。此外,私有檢索數據庫有泄露風險,引發對RA-LLM隱私的擔憂。因此,開發值得信賴的RA-LLM至關重要,因為它可以顯著降低LLM技術的潛在負面影響,并為人們提供可以完全信任的強大AI模型。具體而言,RA-LLM系統中理想的可信賴性應具有以下特征:1)穩健性,2)公平性,3)可解釋性,以及4)隱私。例如,穩健性意味著可信賴的RA-LLM系統應該能夠抵御攻擊者引入的惡意或無意的擾動。公平性表示可信賴的RA-LLM系統在決策過程中應避免歧視。可解釋性需要完全理解RA-LLM系統的內在工作原理,即RA-LLM系統的預測是可解釋和透明的。隱私需要在建立可信賴的RA-LLM系統時保護存儲在數據存儲中的私有信息的安全。

多語言RA-LLM。利用多種語言知識的能力可以極大地提高檢索增強語言模型的能力。隨著世界變得越來越互聯,對可以跨不同語言理解和溝通的AI系統的需求日益增長。通過集成多語言知識檢索和生成,這些模型可以訪問和綜合來自不同語言來源的信息,實現更全面和細致入微的理解和生成能力。此外,多語言模型可以促進跨文化交流和知識共享,打破語言障礙,從而為不同地區的人們帶來便利,特別是那些使用少數語言的地區。例如,使用普及度較低語言的國家的用戶可以利用豐富的英文和中文語料庫進行知識檢索,提高下游任務中大語言模型的性能。

多模態RA-LLM。多模態檢索增強生成將知識來源從文本擴展到包括圖像、視頻和音頻等各種數據模態。通過集成各種模態,LLM可以利用比單模態RAG更豐富的上下文信息,并發展出對用戶需求更全面的理解,帶來精確、細粒度和高質量的生成。例如,圖像或視頻可以提供寶貴的視覺線索,補充文本信息,從而產生更精確的語言生成。通過融合多種模態,多模態RA-LLM可以發展出對世界更全面的理解,從而產生更準確和富有洞察力的輸出,使醫療保健、藥物發現、分子分析等廣泛領域受益。

外部知識的質量。作為當前RAG系統中常用的數據存儲,Wikipedia作為一個龐大的外部文本知識庫,用于增強生成過程,其中包含數百萬篇涵蓋各個學科的文章。然而,Wikipedia中各個文章的可靠性和準確性差異很大,引入一些偏離事實的文本甚至可能誤導模型的生成過程。因此,提高外部知識語料庫的質量并緩解低質量知識對LLM性能的負面影響至關重要。通過提高外部知識的質量并定制穩健機制來過濾掉低質量或不可靠的信息,RAG增強的LLM系統可能會產生更準確、更可靠的輸出,從而提高其在各種現實應用中的有效性。

7 結論

檢索增強生成(RAG)是一種先進的AI技術,由于檢索在提供補充信息以提高生成性能方面的強大能力,它在各種應用中取得了顯著成功,包括推薦、分子生成、蛋白質表示和軟件工程。最近,越來越多的努力致力于通過利用檢索提供最新的輔助信息和教導LLM利用檢索到的外部知識,來緩解大語言模型(LLM)的局限性,如幻覺和過時的內部知識。隨著檢索增強大語言模型(RA-LLM)的快速進步,迫切需要進行全面和系統的概述。為了彌合這一差距,在本文中,該研究從架構、訓練策略和應用視角全面回顧了RA-LLM,為研究人員提供深入理解。此外,由于RA-LLM的研究仍處于早期階段,該研究還討論了當前的局限性和未來研究的幾個潛在方向。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12389.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12389.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12389.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Zoho CRM企業成長的智能引擎,智能化銷售自動化

數字化時代,客戶體驗已成為企業競爭的核心要素。卓豪Zoho CRM,作為全球領先的SaaS云端客戶關系管理平臺,正引領著一場企業運營模式的變革,助力超過25萬家企業跨越180多個國家,實現客戶互動與業務增長的無縫對接。讓我們…

廣汽原車控制系統CAN協議控制汽車基本信息獲取及數據應用

在現代汽車工業的迅速發展中,車輛控制系統的智能化和網絡化已成為提升汽車性能的關鍵。廣汽作為中國汽車行業的佼佼者,其在原車通信網絡方面也取得了顯著的成就。特別是廣汽原車CAN(Controller Area Network)協議的應用&#xff0…

2024OD機試卷-分割均衡字符串 (java\python\c++)

題目:分割均衡字符串 題目描述 均衡串定義: 字符串 中只包含兩種字符,且這兩種字符的個數相同。 給定一個均衡字符串,請給出可分割成新的均衡子串的最大個數。 約定:字符串中只包含大寫的 X 和 Y 兩種字符。 輸入描述 字符串的長度:[2, 10000]。 給定的字符串均為均…

添磚Java之路(其六)——通過集合制作的學生信息管理系統

目錄 前言: 源碼: 前言: 我對于集合的理解,感覺就類似于順序表這樣的數據結構,然后他存儲的數據不能是基本類型,如果要用也只能用對應基本數據的包裝類。 對于集合有很多方法,我的建議就是去…

【運維】nvidia-smi錯誤信息:Failed to initialize NVML: Driver/library version mismatch

【運維】錯誤信息:Failed to initialize NVML: Driver/library version mismatch 是因為Nvidia的驅動沖突的原因 本地部署:本地Docker容器部署,本地驗證后打包鏡像 遠程部署:鏡像部署阿里云PAI EAS 因為在容器中安裝了驅動版本&a…

短視頻最后的慢動作怎么做:成都鼎茂宏升文化傳媒公司

短視頻最后的慢動作怎么做:技巧與創意實踐指南 在短視頻創作的浩瀚宇宙中,慢動作特效如同一顆璀璨的星辰,為作品增添無限魅力與情感深度。它不僅能夠放大細節之美,還能延長關鍵瞬間,引發觀眾強烈的情感共鳴。短視頻最…

SpringBoot項目的項目部署全過程

一、前端 安裝nginx 1.將提前準備好的nginx的安裝包上傳到Linux中/opt目錄下(我用的是Xftp) 2.解壓 2.1:在xshell中解壓該文件: tar -zxvf nginx-1.20.1.tar.gz 2.2:進入解壓后的目錄 cd nginx-1.20.1/ 2.3:安裝需要的依賴 yum -y install zlib zlib-devel openssl openssl-de…

html特殊字符的html,js,css寫法匯總

? 箭頭類 符號UNICODE符號UNICODEHTMLJSCSSHTMLJSCSS?&#8672\u21E0\21E0?&#8674\u21E2\21E2?&#8673\u21E1\21E1?&#8675\u21E3\21E3?&#8606\u219E\219E?&#8608\u21A0\21A0?&#8607\u219F\219F?&#8609\u21A1\21A1←&#8592\u2190\2…

FreeRTOS【4】線程掛起和恢復

1.開發背景 基于上一篇指引,成功創建并啟動線程后,線程已經開始運行了,但是有時我們需要線程暫停運行,例如某個線程是控制 LED 閃燈的,如果現在需要讓 LED 停止工作,單純的關閉 LED 是沒用的,因…

Python中json數據的常用操作函數:dump load dumps和loads

文章目錄 dump函數load函數dumps函數loads函數 dump函數 功能:將Python對象序列化為JSON格式的字符串,并寫入到文件中。這個方法用于將數據保存到文件中。語法:json.dump(需要進行json序列化的Python對象, 寫入的文件路徑) load函數 功能&…

文科生在三本院校,讀計算機專業

6歲,進入村小,一年級,老師問我的夢想是什么,我說我長大了我要成為科學家。 9歲,三年級,知道科學家不現實,開始學習英語。又因為科學家英語不好發音,于是我的夢想變了,長…

ZCC5503 18V 1A 6uA低靜態功耗 同步降壓控制器

1. 概要 ZCC5503R 是一款基準電壓源、振蕩電路、 比較器 PWM/PFM 控制器構成的 CMOS 降壓電路調整器,利用 PWM/PFM 自動切換控制電路達到可調占空比,具有全輸入電壓范圍(3~18V )內的低紋波、高效率及大電流輸出等特點. 2. 產品特性…

【智能優化算法】雁群優化算法(Wild Geese Algorithm,WGA)

雁群優化算法(Wild Geese Algorithm,WGA)是期刊“Array”的2021年智能優化算法 01.引言 雁群優化算法(Wild Geese Algorithm,WGA)用于大規模全局優化,并利用IEEE CEC 2008和CEC 2010高維D100、500、1000特別會議的大規模測試函數驗證了該算法的效率和性能。WGA的靈…

OceanBase v4.3特性解析:新功能“租戶克隆”的場景與應用指南

熟悉或曾用過OceanBase的朋友,對于“多租戶”這一理念定不陌生。OceanBase的租戶概念,與我們熟知的傳統數據庫實例頗為相似。舉例來說,OceanBase的租戶支持MySQL兼容模式,對于用戶而言,選用一個MySQL兼容模式的租戶&am…

IT行業的現狀與未來發展趨勢:探索無限可能

隨著技術的不斷進步,IT行業已成為推動全球經濟和社會發展的關鍵力量。從云計算、大數據、人工智能到物聯網、5G通信和區塊鏈,這些技術正在重塑我們的生活和工作方式。在本篇博客中,我們將探討IT行業的現狀以及未來發展趨勢,展望這…

DOM操作---刪除元素,刪除指定的元素,循環刪除元素

刪除DOM元素 remove()方法可以刪除自身節點,要注意一個元素被刪除時,它的子元素也會跟著全部刪除 let bt document.getElementById("bt"); bt.remove(); removeChild ()方法可以刪除指定的子元素 let bt document.getElementById("…

Git 倉庫的常用命令 遠程倉庫 本地倉庫

初始化倉庫&#xff1a; git init克隆&#xff08;Clone&#xff09;一個遠程倉庫到本地&#xff1a; git clone <遠程倉庫地址>添加&#xff08;Add&#xff09;文件到暫存區&#xff1a; git add <文件名>提交&#xff08;Commit&#xff09;文件到本地倉庫&a…

589.N叉樹的前序遍歷

刷算法題&#xff1a; 第一遍&#xff1a;1.看5分鐘&#xff0c;沒思路看題解 2.通過題解改進自己的解法&#xff0c;并且要寫每行的注釋以及自己的思路。 3.思考自己做到了題解的哪一步&#xff0c;下次怎么才能做對(總結方法) 4.整理到自己的自媒體平臺。 5.再刷重復的類…

【C++風云錄】提升設計效率:建筑工程與結構優化

優化你的工程設計&#xff1a;全面解析六大軟件庫 前言 本文將對六種廣泛使用于建筑工程設計的軟件工具進行深入探討&#xff0c;這些工具各自都有獨特的特性和應用場景。我們將詳細介紹并比較這些工具的設計流程&#xff0c;還將通過實例分析來進一步解釋它們在現實世界中的…

C++類與對象的兩個案例

1.立方體 #include <iostream> using namespace std;//立方體類設計 //1.創建立方體類 //2.設計屬性 //3.設計行為 獲取立方體面積和體積 //4.分別利用全局函數和成員函數 判斷兩個立方體是否相等class Cube { public:int getL(){return m_L;}void setL(int L){m_L L;}…