什麼是檢索增強生成(RAG)?
Retrieval-Augmented Generation(RAG)與其說是一項技術,我認為稱它是某種一系列方法論的集合名詞或許更為適切,他的核心精神是通過從外部來源獲取事實與即時資訊來提高生成式 AI 模型在進行推論時的準確性和可靠性。
想像一下圖書館的情境。
圖書館員在廣闊的書海中引導讀者找到他們所需的知識。有時,讀者可能只是需要一本推薦的小說來消磨時間,圖書館員可以依據讀者的偏好提供幾個選項。但當讀者尋求特定主題的深入研究,比如歷史事件的詳細資料或某科學原理的解釋時,圖書館員需要深入藏書區,尋找確切的資料來滿足讀者的需求。
就像一位熟練的圖書館員,大型語言模型(LLM)能夠回答各式各樣的查詢。但要提供引用精確資源的深入答案,LLM 就像需要一位圖書館助手來幫忙搜尋相關資料。這位圖書館助手,就是 #檢索增強生成,或簡稱RAG。通過 RAG,我們賦予了 LLM 一個虛擬的「圖書館卡」,讓它能夠從外部資料源中檢索資訊,就像圖書館員從書架上取下書本一樣,以此來提升對特定查詢的回答質量和準確性。這不僅擴展了 LLM 的知識範圍,也讓它能夠提供更加豐富和精確的回應。
RAG 這個命名的來源
這一個詞最早可溯源由 Patrick Lewis 於 2020 年在 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 這篇論文中所提出,有趣的事情是作者在新加坡的某一場開發者年會上曾經說過『如果我們知道我們當時的研究結果會變得如此的重要,我們肯定會對命名這件事投入更多的思考』
Lewis:『我們總是計畫要為它有一個聽起來更好聽的名字,但你知道的,當論文 dead-line 的時刻到來時,沒有人有更好的想法』
註:目前 Lweis 在 #Cohere 領導一個 RAG 團隊。
RAG 的定義
檢索增強生成(RAG)是一系列方法論的集合,用於通過從外部來源獲取事實來提高 Generative AI model 推論結果的準確性和可靠性。
在 LLM 架構的底層是一種神經網絡,通常通過它們包含的參數數量來衡量其強弱,LLM 的參數本質上代表了人類使用單詞形成句子的一般化模式,這種深度理解,有時被稱為 #參數化知識,使 LLM 在快速回應使用者一般的 prompt text 時很有用。然而,當使用者輸入的 prompt text 需要私有的數據、隱匿在 Paywall 之後的數據或模型在預訓練完成之後才產生的新世界知識作為推論的依據時,沒有經過 RAG 的 LLM 是無法產生出高效精確的推論結果的。
為了填補 LLM 對模型外部世界知識理解上的缺口,透過 RAG 將 LLM 那數以億計的參數量與外部資源相結合,不僅可以提高 LLM 推論結果的準確性和可靠性,也為 LLM 提供了一個動態學習的機會,使其能夠接觸到最新的資訊和數據。
從建立用戶信任的角度來看,RAG 提供的引用資源功能,類似於學術研究中的註腳,是非常有價值的。這不僅讓用戶能夠驗證 AI 提供的資訊,也增加了 AI 回答的透明度,進一步加強了用戶對 AI 系統的信任。在當今這個資訊充斥的時代,能夠提供可靠和可驗證的資訊是非常重要的。
此外,透過減少 LLM 產生錯誤猜測的可能性,RAG 技術也在提高 AI 的準確性和用戶體驗上扮演了關鍵角色。減少所謂的『幻覺』現象,可以讓 LLM 提供的回答更加貼近實際需要,從而提升用戶滿意度。
再來,相對於其他優化 LLM 推論品質的技術如 pre-training 與 fine-tuning,實作 RAG 所需要付出的工程代價與時間成本要遠低得多,意味著開發者可以輕鬆地將這項技術整合到現有的系統中,這是一大優勢。簡化的實施過程,不僅降低了成本和時間投入,也使得技術更加易於普及和應用。能夠即時『熱插拔』資源的能力,更為系統帶來了極大的靈活性和適應性,使 AI 系統能夠迅速響應最新的資訊和變化。
RAG 簡史
資訊檢索這件事的根源至少可以追溯到 1970 年代初。那時,資訊檢索的研究人員建立了問答系統的 prototype,這些應用程式使用自然語言處理(NLP)來訪問大量的文本資料,最初應用於如『棒球』等非常特定的主題上。這種文本挖掘背後的概念多年來一直相對沒有什麼變革性的發展,但是推動它們的機器學習引擎已經顯著強化了不知道多少的量級,增加了它們的實用性和受歡迎程度。
這停滯狀態一直持續到 Lewis 那篇開創性論文於 2020 年發表之時有了巨大的改變,當時 Lewis 正在倫敦大學學院追求自然語言處理的博士學位,並在 Meta 的一個位於倫敦的 AI 實驗室工作。當時該團隊正在尋找方法嘗試將更多即時知識封裝進 LLM 的參數中,並使用它們開發的 Benchmark 來衡量進展。在早期方法的基礎上,他們受到 Google 研究人員一篇名為『REALM: Retrieval-Augmented Language Model Pre-Training』論文的啟發,該團隊當時的願景是:
訓練出一個系統,在其中間有一個搜尋索引,因此它能學習並生成你想要的任何文本輸出。
來自 Lewis 的回憶
自此之後 Lewis 與其團隊這項研究成果被後續數百篇論文所引用,進一步放大和擴展了 RAG 對生成式人工智慧領域的影嚮力,更不用說過去一年由 LangChain 與 Llamaindex 帶起許多新興的 RAG 方法論與策略,更是把這一領域推到一個超高速的發展階段。
RAG 的運作方式
從最概觀來看,RAG 的運作大致分成以下幾個階段:
- 當用戶向 LLM 送出 prompt text 後,RAG 系統會先將用戶的原始 prompt text 發送到一種名為 #嵌入模型(Embedding model)的模型中去進行轉換,該模型會將原始 prompt text 轉換成一種 #高維度向量 的數字格式,以便機器可以讀取。
- 以 OpenAI 當前最強名為 text-embedding-3-large 的 Embedding model 為例,當原始 prompt text 透過他最高可以將 prompt text 轉換成一組具有 3,072 維度的向量表現形式。
- 這些被轉換後原始 prompt text 的數字版本被稱為 #文字嵌入向量(embedding),接著 RAG 系統會將這些轉換後的高維度向量與向量資料庫(ex. Pinecone)中大量在 Indexing 階段就已經處理好的原始文字區塊與區塊向量的配對資料集中進行相似度搜尋。
- 相似度搜尋目前最常使用的是名為 #餘弦相似度(Cosine similarity) 的相鄰搜尋演算法,相鄰演算法顧名思義就是使用轉換後的 prompt text 的查詢向量在向量資料庫去找尋一個或多個在語意上非常鄰近的向量索引值,我們術語上稱為 Top-K 相鄰,RAG 會從資料庫中檢索出與這些 Top-K 相鄰向量配對的原始語料區塊。
- 實務上,Embedding models 的主要任務接收自然語言文本作為輸入,例如一個問題或一段描述,然後將其轉換成一個固定長度的高維度向量,每個詞或語句都會被映射到高維空間中的一點,這個點由數字組成的向量來表示。
- 這些向量在高維度空間中的距離和方向能夠捕捉詞彙之間的語義關係,同義詞會被映射到彼此接近的點。
- Embedding model 還有一項重要的任務是去進行維度的壓縮, 這通常涉及將輸入的文字數據從超高維(可能是數萬維)壓縮到一個相對低的維度(ex. OpenAI text-embedding-3-large 的 1,536 或 3,072 維度)的表示,這有助於減少計算複雜度,同時保留詞彙的關鍵語義信息。
- 最後 RAG 系統會將檢索出的數據集轉換為人類可讀的文字並將檢索到的語料區塊當作是協助 LLM 進行 Few-shot learning 的 context,並將這些 context 與原始 prompt text 結合最終透過 LLM 進行推論進而得到最終答案並呈現給用戶。
在自然語言處理(NLP)領域,高維向量被用來捕捉大量文本數據中的意義,原因在於它們能夠表達豐富的語義信息和詞彙之間的細微差異,這種方法的效力源於以下數個關鍵概念:
高維空間的表達能力
詞彙的分布式表示
在高維空間中,每個詞或短語都由一個向量表示,這個向量在數百或數千個維度上有不同的值。這種分布式表示能夠捕捉到詞彙的多種語義屬性和用法,因為每一維都可以代表一種語義特徵或上下文關係。
維度的豐富性
高維向量通過其多個維度提供了一種方式來編碼詞彙間複雜的相關性,這種豐富的維度使得模型能夠將語義相似的詞彙映射到向量空間中彼此接近的點,而將語義差異大的詞彙分開放置。
高維向量與語義捕捉
捕捉上下文相似性
高維度向量能夠根據詞彙在不同文本中的使用情況來捕捉其語義。例如,通過分析大量文本數據,模型可以學習到「Bank」一詞在「River bank」和「Financial Institutions」兩種不同上下文中的使用,並相應地調整詞向量,以反映這兩種不同的意義。
細微差異的識別
在高維空間中,即使是非常相似的詞彙也可以被賦予略微不同的向量表示,這使得模型能夠識別和處理語義上的細微差異,這對於理解同義詞、反義詞以及具有多重意義的詞彙尤為重要。
為什麼高維向量有效
維度的詛咒和祝福
雖然高維空間帶來了「維度的詛咒」,即數據稀疏和計算復雜度增加的問題,但在 NLP 中,這些高維向量反而成為「維度的祝福」,它們通過提供足夠的維度來細緻地劃分語義空間,使模型能夠捕捉到豐富的語義和語法信息。
模型的一般化能力
高維向量還幫助模型在面對未見過的詞彙或短語時進行通用化,模型可以通過學習詞向量之間的關係來推測未知詞彙的大概意義,從而提升對新文本的理解能力。
總之,高維度向量之所以能在處理大量文本數據中捕捉到字裡行間的意義與相關性,是因為它們提供了一種能夠細緻地編碼詞彙語義和上下文信息的方式,使得機器學習模型能夠更準確地理解和處理自然語言,以至於它在今時今日成為 RAG 系統與優化 LLM 推論精確度的基石。
RAG 的技術細節
TBD