數(shù)據(jù)科學家、AI 工程師、MLOps 工程師和 IT 基礎設施專業(yè)人員在設計和部署檢索增強生成(RAG)工作流時,必須考慮各項因素,比如大語言模型(LLM) 核心組件以及評估方法等等。
這是由于 RAG 是一個系統(tǒng),而不僅僅是一個或一組模型。該系統(tǒng)由若干階段組成,RAG 101:揭秘檢索增強生成工作流一文對這些階段進行了深入討論。在這些階段中,您都可以根據(jù)需求做出設計決策。
以下是一些常見問題與回答:
何時應微調(diào) LLM?何時又該使用 RAG?
在 LLM 的世界里,您可以根據(jù)應用的具體需求和限制,為 LLM 選擇微調(diào)、參數(shù)有效微調(diào)(PEFT)、提示工程或 RAG。
微調(diào)通過使用特定領域的數(shù)據(jù)集,更新模型大部分或全部參數(shù),從而定制一個專門用于特定領域的預訓練 LLM。這種方法需要耗費大量資源,但能為專門的用例提供很高的準確性。
PEFT 側(cè)重于模型的一個子集,因此只需更新較少的參數(shù)就能修改預訓練 LLM。該方法平衡了準確性與資源使用,在數(shù)據(jù)和計算需求可控的情況下,為提示工程提供改進。
提示工程在不改變模型參數(shù)的情況下,通過操縱 LLM 的輸入來引導模型輸出。這是一種最節(jié)省資源的方法,適用于數(shù)據(jù)和計算資源有限的應用。
RAG 利用外部數(shù)據(jù)庫中的信息增強了 LLM 提示功能,它本質(zhì)上是一種復雜的提示工程。
使用哪種技術并不是關鍵,實際上,這些技術可以串聯(lián)使用。例如,可以將 PEFT 集成到 RAG 系統(tǒng)中,以進一步完善 LLM 或嵌入模型。使用哪種方法最好取決于應用的具體要求,同時還要兼顧準確性、資源可用性和計算限制。
如要進一步了解用于提高特定領域準確性的自定義技術,請參閱選擇大語言模型自定義技術:https://developer.nvidia.com/blog/selecting-large-language-model-customization-techniques/
使用 LLM 構(gòu)建應用程序時,首先要使用 RAG,借助外部信息提升模型的響應性。這種方法可以快速提高相關性和深度。
之后,如果您需要提高特定領域的準確性,可以采用前面所述的模型自定義技術。該流程分為兩步,既能夠借助 RAG 進行快速部署和通過模型定制實現(xiàn)有針對性的改進,又兼顧了高效開發(fā)和持續(xù)改進策略。
如何在不微調(diào)的情況下提高 RAG 的準確性?
簡而言之,在利用 RAG 的企業(yè)解決方案中,獲得準確性是至關重要的,而微調(diào)只是一種可能提高 RAG 系統(tǒng)準確性的技術,反之亦然。
首先,也是最重要的一點,是找到一種衡量 RAG 準確性的方法。在起點都不清楚的情況下,改進又從何談起?目前有幾個評估 RAG 系統(tǒng)的框架,如 Ragas、ARES 和 Bench 等。
在對準確性進行評估后,就可以在無需進行微調(diào)的情況下,通過多種途徑來提高準確性。
雖然這聽起來很麻煩,但首先要檢查并確保您的數(shù)據(jù)被正確解析和加載。例如,當文檔包含表格甚至圖像時,某些數(shù)據(jù)加載器可能會遺漏文檔中的信息。
在攝取數(shù)據(jù)后,要對其進行分塊,也就是將文本分割成片段的過程。分塊可以是固定長度的字符,但也有許多種其他的分塊方法,如句子分割和遞歸分塊等。文本的分塊方式?jīng)Q定了如何將其存儲在嵌入向量中以便檢索。
除此之外,還有許多索引和相關檢索模式。例如,可以為不同類型的用戶問題構(gòu)建多個索引、可以根據(jù) LLM 將用戶查詢引導至相應的索引等。
檢索策略也是多種多樣的。最基本的策略是利用索引的余弦相似性,BM25、自定義檢索器或知識圖也可以用來提高檢索效率。
根據(jù)特殊要求,對檢索結(jié)果進行重新排序也可以提高靈活性和準確性。查詢轉(zhuǎn)換可以很好地分解更加復雜的問題。即使只是改變 LLM 的系統(tǒng)提示,也能極大地提高準確性。
歸根結(jié)底,重要的是要花時間進行試驗,并衡量各種方法所產(chǎn)生的準確性變化。
像 LLM 或嵌入模型這樣的模型只是 RAG 系統(tǒng)的一部分。有很多方法可以在不需要進行任何微調(diào)的情況下改進 RAG 系統(tǒng),使其達到更高的準確性。
如何將 LLM 連接到數(shù)據(jù)源?
有多種框架可以將 LLM 連接到數(shù)據(jù)源,如 LangChain 和 LlamaIndex 等。這些框架提供評估程序庫、文檔加載器、查詢方法等各種功能,新的解決方案也層出不窮。建議您先了解各種框架,然后選擇最適合您應用的軟件和軟件組件。
RAG 能否列出檢索數(shù)據(jù)的來源?
可以。列出檢索數(shù)據(jù)的來源能夠改善用戶體驗。在 GitHub 資源庫中的 /NVIDIA/GenerativeAIExamples 的 AI 聊天機器人 RAG 工作流示例中
RAG 需要哪類數(shù)據(jù)?如何確保數(shù)據(jù)安全?
目前,RAG 支持文本數(shù)據(jù)。隨著多模態(tài)用例研究的深入,RAG 系統(tǒng)對圖像和表格等其他形式數(shù)據(jù)的支持也在不斷改進。您可能需要根據(jù)數(shù)據(jù)及其位置編寫額外的數(shù)據(jù)預處理工具。LlamaHub 和 LangChain 提供了多種數(shù)據(jù)加載器。如要進一步了解如何使用鏈構(gòu)建強化管線,請參閱保護 LLM 系統(tǒng)不受提示注入的影響:https://developer.nvidia.com/zh-cn/blog/securing-llm-systems-against-prompt-injection/
確保數(shù)據(jù)安全對企業(yè)來說是至關重要的。例如,某些索引數(shù)據(jù)可能只針對特定用戶?;诮巧脑L問控制(Role-based access control, RBAC)可以根據(jù)角色來限制對系統(tǒng)的訪問,從而實現(xiàn)數(shù)據(jù)訪問控制。比如,在向矢量數(shù)據(jù)庫發(fā)出請求時,可以使用用戶會話 token,這樣就不會返回超出該用戶權限范圍的信息。
許多用于保護環(huán)境中模型的術語,與用于保護數(shù)據(jù)庫或其他關鍵資產(chǎn)的術語相同。您需要考慮您的系統(tǒng)將如何記錄生產(chǎn)管線產(chǎn)生的活動(提示輸入、輸出和錯誤結(jié)果)。雖然這些活動可以為產(chǎn)品的訓練和改進提供豐富的數(shù)據(jù)集,但它們同時也是 PII 等數(shù)據(jù)泄漏的來源,因此必須像管理模型管線本身一樣謹慎管理。
人工智能模型有許多常見的云部署模式。您應該充分利用 RBAC、速率限制等工具以及此類環(huán)境中常見的其他控制措施,來提高 AI 部署的穩(wěn)健性。模型只是這些強大管線中的一個元素。
與終端用戶的交互性質(zhì)是所有 LLM 部署的工作重點之一。RAG 管線大部分都圍繞自然語言輸入和輸出。您應該考慮如何通過輸入/輸出調(diào)節(jié)來確保體驗符合一致的期望。
人們可能會用多種不同方式提問。您可以通過 NeMo Guardrails 等工具助 LLM “一臂之力”,這些工具可以對輸入和輸出進行二次檢查,以確保系統(tǒng)處于最佳運行狀態(tài)、解決系統(tǒng)所要解決的問題,并引導用戶到其他地方解決 LLM 應用無法處理的問題。
如何加速 RAG 管線?
數(shù)據(jù)預處理
數(shù)據(jù)去重是識別并刪除重復數(shù)據(jù)的過程。在對 RAG 數(shù)據(jù)進行預處理時,可以使用數(shù)據(jù)去重,減少為檢索而必須建立索引的相同文檔數(shù)量。
NVIDIA NeMo Data Curator 使用 NVIDIA GPU,通過并行執(zhí)行最小哈希算法、Jaccard 相似性計算和連接組件分析來加速數(shù)據(jù)去重,可以大大減少數(shù)據(jù)去重所需的時間。
另一個方法是分塊。由于下游嵌入模型只能對低于最大長度的句子進行編碼,因此必須將大型文本語料庫分成更小、更易于管理的語塊。流行的嵌入模型(如 OpenAI)最多可以編碼 1,536 個詞元。如果文本的詞元超過這個數(shù)量,就會被截斷。
NVIDIA cuDF 可通過在 GPU 上執(zhí)行并行數(shù)據(jù)幀操作來加速分塊處理,可以大大減少對大型語料庫進行分塊處理所需的時間。
最后,您可以在 GPU 上加速分詞器,分詞器負責將文本轉(zhuǎn)換成整數(shù)詞元供嵌入模型使用。文本分詞過程的計算成本很高,對于大型數(shù)據(jù)集來說尤其如此。
索引和檢索
RAG 非常適合經(jīng)常更新的知識庫,經(jīng)常需要重復生成嵌入。檢索是在推理時進行,因此要求實現(xiàn)低延遲。NVIDIA NeMo Retriever 可以加速這些流程。NeMo Retriever 用于提供最先進的商用模型和微服務,這些模型和微服務專為實現(xiàn)最低延遲和最高吞吐量而優(yōu)化。
LLM 推理
LLM 至少可用于生成完全成型的回答,還可用于查詢分解和路由選擇等任務。
由于需要多次調(diào)用 LLM,低延遲對于 LLM 至關重要。NVIDIA NeMo 包含用于模型部署的 TensorRT-LLM,可優(yōu)化 LLM 以實現(xiàn)突破性的推理加速和 GPU 效率。
NVIDIA Triton 推理服務器也可以部署經(jīng)過優(yōu)化的 LLM,以實現(xiàn)高性能、高成本效益和低延遲的推理。
有哪些辦法可以改善聊天機器人的延遲?
除了建議使用 Triton 推理服務器和 TensorRT-LLM 來加速 RAG 管線(如 NeMo 檢索器和 NeMo 推理容器等)外,您還可以考慮使用流式傳輸來改善聊天機器人的感知延遲。響應可能用時很久,流式傳輸用戶界面可先顯示部分已準備好的內(nèi)容,減少可感知的延遲。
也可以考慮針對您的用例使用經(jīng)過微調(diào)的較小 LLM。通常情況下,較小的 LLM 的延遲遠低于較大的 LLM。
一些經(jīng)過微調(diào)的 7B 模型在特定任務(如 SQL 生成)上的準確性已經(jīng)超過了 GPT-4。例如,ChipNeMo 是 NVIDIA 為幫助公司內(nèi)部工程師生成和優(yōu)化芯片設計軟件而定制的 LLM,該模型使用的就是 13B 微調(diào)模型,而不是 70B 參數(shù)模型。TensorRT-LLM 提供的閃存、FlashAttention、PagedAttention、蒸餾和量化等模型優(yōu)化功能適合在本地運行規(guī)模較小的微調(diào)模型,這些模型可減少 LLM 所使用的內(nèi)存。
LLM 的響應延遲取決于首個詞元的生成時間(TTFT)和單個輸出詞元的生成時間(TPOT)。
對于較小的 LLM 來說,TTFT 和 TPOT 都會比較低。
開始在您的企業(yè)中構(gòu)建 RAG
通過使用 RAG,您可以輕松地為 LLM 提供最新的專有信息,并構(gòu)建一個能夠提高用戶信任度、改善用戶體驗和減少幻覺問題的系統(tǒng)。
審核編輯:劉清
-
機器人
+關注
關注
211文章
28566瀏覽量
207716 -
SQL
+關注
關注
1文章
771瀏覽量
44192 -
LLM
+關注
關注
0文章
297瀏覽量
357
原文標題:RAG 101:檢索增強生成相關問題解答
文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業(yè)解決方案】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論