使用檢索增強的生成或微調來增強大型語言模型
在一系列文章中,我們會討論大型語言模型 (LLM) 用來產生響應的知識擷取機制。 預設情況下,LLM 只能存取其訓練數據。 但是您可以增強模型,以包含實時數據或私人數據。
第一個機制是 檢索增強生成(RAG)。 RAG 是一種前置處理形式,結合了語意搜尋與內容相關準備。 情境啟動 有詳細討論 建置產生式 AI 解決方案的重要概念和考慮。
第二個機制是 微調。 在微調中,LLM 會在初始廣泛訓練之後,針對特定數據集進行進一步訓練。 目標是調整 LLM,以在工作上執行得更好,或瞭解與數據集相關的概念。 此程式可協助模型特製化或改善其處理特定類型輸入或定義域的正確性和效率。
下列各節將更詳細地說明這兩種機制。
了解 RAG
RAG 通常用來啟用「透過我的數據進行聊天」情境。 在此案例中,組織可能有大量的文本文檔,例如文件、文件資料和其他專有資料。 它會使用此語料庫作為回應使用者提示的基礎。
概括而言,您會為每個文件建立資料庫條目,或針對稱為 區塊的文件部分建立資料庫條目。 區塊的索引是根據它在 內嵌的,也就是一組數位向量(陣列),用來表示文檔的各個面向。 當使用者提交查詢時,您可以搜尋資料庫以尋找類似的檔,然後將查詢和檔提交至 LLM 以撰寫答案。
注意
我們靈活地使用擷取增強生成(RAG)這個術語。 本文所述的RAG為基礎的聊天系統實作過程,可以應用於當您希望將外部數據用作輔助角色(RAG)或作為回應的核心部分(RCG)時。 在與RAG相關的大部分閱讀材料中,這種細微差別未被提及。
建立向量化文件的索引
建立以RAG為基礎的聊天系統的第一個步驟是建立包含檔或區塊內嵌之向量數據的向量數據存放區。 請考慮下圖,概述建立檔向量化索引的基本步驟。
此圖表代表 資料管線。 管線負責擷取、處理和管理系統使用的數據。 流程包括將數據進行前處理以儲存在向量資料庫中,並確保輸入到大型語言模型(LLM)的數據格式正確。
整個程式是由內嵌的概念所驅動,這是數據的數值表示法(通常是單字、片語、句子,甚至整個檔),以機器學習模型可以處理的方式擷取輸入的語意屬性。
若要建立內嵌,您可以將內容區塊(句子、段落或整個文件)傳送至 Azure OpenAI 內嵌 API。 API 會傳回向量。 向量中的每個值都代表內容的特性(維度)。 維度可能包含主題、語意意義、語法和文法、單字和片語使用方式、關係關聯性、樣式或語氣。 一起,向量的所有值都代表內容 維度空間。 如果您想到具有三個值的向量 3D 表示法,特定向量會位於 XYZ 平面的特定區域中。 如果您有 1,000 個值或更多值,該怎麼辦? 雖然人類不可能在紙上繪製一個 1,000 維度的圖形以使其更容易理解,但電腦在理解這樣的維度空間上毫無問題。
接下來的步驟是在向量資料庫中儲存向量、內容(或內容的位置指標),以及其他相關的元數據。 向量資料庫就像任何類型的資料庫,但有兩個差異:
- 向量資料庫會使用向量做為索引來搜尋數據。
- 向量資料庫會實作稱為「餘弦類似搜尋」的演算法,也稱為 近鄰。 演算法會使用最符合搜尋準則的向量。
透過儲存在向量資料庫中的文件主體,開發人員可以建置 擷取器元件 擷取符合使用者查詢的檔。 數據可用來提供 LLM 以回應使用者的查詢所需的內容。
使用您的文件來回答問題
RAG 系統首先使用語意搜尋來尋找有助於 LLM 撰寫答案的文章。 下一個步驟是將相符的文章與使用者的原始提示傳送給 LLM,以撰寫答案。
請將下圖視為簡單的 RAG 實作(有時稱為 天真 RAG):
在圖表中,使用者提交查詢。 第一步是為使用者提示建立一個嵌入,以生成一個向量。 下一個步驟是搜尋向量資料庫,以尋找最接近鄰近比對的檔(或檔部分)。
餘弦相似性 是一個量值,有助於判斷兩個向量的相似度。 基本上,計量會評估兩者之間角度的餘弦值。 接近 1 的餘弦相似度表示高度相似度(小角度)。 接近 -1 的相似度表示不同(角度近 180 度)。 此計量對於檔相似度等工作至關重要,其中目標是尋找具有類似內容或意義的檔。
最接近的芳鄰演算法 尋找向量空間中點最接近的向量(芳鄰)。 在 k-近鄰演算法(KNN)中,k 是指要考慮的最近鄰數目。 此方法廣泛使用於分類和回歸中,其中演算法會根據定型集中最接近鄰鄰 k 的多數標籤來預測新數據點的標籤。 KNN 和餘弦相似度通常會一起使用在建議引擎等系統中,其中目標是尋找最類似於使用者喜好設定的專案,以內嵌空間中的向量表示。
您會從該搜尋中選擇最佳結果,並透過使用者的提示來傳送比對過的內容,以生成一個(希望)受這些內容影響的回應。
挑戰和考慮
RAG 系統有一組實作挑戰。 數據隱私權是最重要的。 系統必須負責處理用戶數據,特別是從外部來源擷取和處理資訊時。 計算需求也可能相當重要。 擷取程式與產生進程都是資源密集型。 確保響應的正確性和相關性,同時管理數據或模型中的偏差是另一個重要考慮。 開發人員必須仔細流覽這些挑戰,以建立有效率、道德且有價值的RAG系統。
建立進階檢索增強生成系統的能力 提供有關構建數據和推論工作流程的詳盡資訊,以便啟用可投入生產的RAG系統。
如果您想要立即開始實驗建置產生式 AI 解決方案,建議您先 看看使用您自己的 Python 數據範例開始使用聊天。 本教學課程也適用於 .NET、Java和 JavaScript。
微調模型
在大規模語言模型的背景下,微調是指在 LLM 最初使用大型、多樣化的數據集進行訓練後,再利用特定領域的數據集來調整模型參數的過程。
LLM 會在廣泛的數據集上定型(預先定型),並掌握語言結構、內容和廣泛的知識。 這個階段涉及學習一般語言模式。 微調會根據較小的特定數據集,將更多定型新增至預先定型的模型。 這個次要定型階段旨在調整模型,以更妥善地處理特定工作或瞭解特定領域,提高其精確度和這些特殊應用程式的相關性。 微調期間,會調整模型的權數,以進一步預測或了解這個較小數據集的細微差別。
一些考慮:
- 特製化:微調會針對特定工作量身打造模型,例如法律檔分析、醫學文字解譯或客戶服務互動。 這種特製化可讓模型在這些領域更有效率。
- 效率:微調特定工作的預先定型模型比從頭開始定型模型更有效率。 微調需要較少的數據和較少的計算資源。
- 適應性:微調可讓您適應不屬於原始訓練數據的新任務或領域。 LLM 的適應性可讓它們成為各種應用程式的多功能工具。
- 改善效能:對於那些與模型原始訓練數據不同的任務,透過微調可以達到更好的效能。 微調會調整模型,以瞭解新定義域中所使用的特定語言、樣式或術語。
- 個人化:在某些應用程式中,微調有助於個人化模型的回應或預測,以符合使用者或組織的特定需求或喜好設定。 不過,微調有特定的缺點和限制。 了解這些因素可協助您決定何時選擇微調或其他選項,例如RAG。
- 數據需求:微調需要足夠大且高質量的數據集,而數據集是目標工作或網域特有的。 收集和策劃此數據集可能會很困難,而且需要大量資源。
- 過擬合風險:過擬合是一種風險,尤其是在使用小型數據集時。 過擬合使模型在訓練資料上表現良好,但在新的、未觀察過的資料上表現不佳。 當發生過度擬合時,泛化能力會降低。
- 成本和資源:雖然微調所需的資源比從頭開始訓練的少,但仍需要計算資源,尤其是對於大型模型和資料集。 對某些使用者或專案來說,成本可能過高。
- 維護和更新:已微調的模型可能需要定期更新,才能隨著領域特定資訊的變更而保持有效。 這項持續維護需要額外的資源和數據。
- 模型偏移:因為模型針對特定任務進行微調,因此可能會失去一些對一般語言的理解能力和多樣性。 這種現象被稱為 模型漂移。
透過微調自定義模型 說明如何微調模型。 概括而言,您會提供潛在問題和慣用答案的 JSON 數據集。 文件建議,透過提供 50 到 100 對問答組來達到顯著的改進,但正確的數目會因使用案例而有很大的差異。
微調與RAG
表面上,微調與RAG之間似乎有相當多的重疊。 在微調和擷取增強世代之間選擇取決於工作的特定需求,包括效能預期、資源可用性,以及網域特定度與一般性的需求。
何時使用微調,而不是 RAG:
- 工作特定的效能:當特定工作的高效能至關重要時,最好進行微調,並且擁有足夠的領域特定數據來有效地訓練模型,而不會有顯著的過度擬合風險。
- 控制數據:如果您有與基底模型定型的數據有顯著差異的專屬或高度特製化數據,微調可讓您將此獨特的知識併入模型。
- 有限的即時更新需求:如果工作不需要以最新信息持續更新模型,微調可能會更有效率,因為RAG模型通常需要存取 up-to日期外部資料庫或因特網來提取最近的數據。
何時偏好使用RAG而不是微調:
- 動態內容或不斷演進的內容:RAG 更適合於對最新資訊至關重要的任務。 由於RAG模型可以即時從外部來源提取數據,因此更適合新聞產生或回答最近事件的問題等應用程式。
- 特製化的一般化:如果目標是在廣泛的主題中保持強大的效能,而不是在窄領域表現,則RAG可能比較好。 它會使用外部 知識庫,允許它跨不同網域產生回應,而不需要過度學習特定數據集的風險。
- 資源限制:對於具有數據收集和模型定型有限資源的組織,使用RAG方法可能會提供符合成本效益的微調替代方案,特別是基底模型已對所需工作執行得相當良好時。
應用程式設計的最終考慮
以下是本文要考慮的簡短事項清單,以及其他可能會影響應用程式設計決策的內容:
- 根據應用程式的特定需求,選擇微調或使用檢索強化生成(RAG)。 微調可能會為特製化工作提供更好的效能,而RAG可能會為動態應用程式提供彈性和 up-to-date 的內容。