RAG系統設計:揭秘語義搜尋被低估的核心價值與KG驅動的架構選型策略

分享嘉賓 | 尹一峰
審校 | 李忠良
策劃 | AICon 全球人工智慧與開發大會
RAG 要不要做語義檢索,有很多討論,還沒有定論。在 InfoQ 舉辦的 AICon 全球人工智慧與開發大會上 Hugging FaceMachine Learning Engineer 尹一峰為我們帶來了精彩專題演講“RAG 基本正規化的選擇與系統設計”,深入探討基於語義搜尋(Semantic Search)的 RAG 系統的重要性,揭示它為何在當前技術背景下被嚴重低估,分析語義搜尋的本質及其在 RAG 系統中的關鍵作用,並分享如何基於這一本質設計出高效的系統架構。
此外,演講還將討論 KG 驅動的 RAG 系統,並指出它並非適用於所有資料型別,幫助聽眾理解如何根據不同的資料特性選擇最合適的 RAG 正規化。
內容亮點:
  • 如何設計出更有效的 RAG 系統
  • 根據自己的資料和系統,該如何選擇 RAG 正規化
以下是演講實錄(經 InfoQ 進行不改變原意的編輯整理)。
RAG 簡介
我們需要了解為什麼需要 RAG(Retrieval-Augmented Generation,檢索增強生成)。原因很簡單,因為 LLM 本身存在一些問題。RAG 作為一種輔助工具,其存在是因為 LLM 本身有不足之處。
LLM 的第一個問題是訓練成本很高。這個世界在快速變化,而 LLM 的訓練成本每次都很高。對於通用模型而言,一旦訓練完成,它就會立刻過時,因為它無法知曉訓練完成後下一秒發生的事情。
目前大模型的訓練主要依賴反向傳播。反向傳播本質上是在求導,而大模型是一個黑箱,它學習時只對其上一個 step 負責。換句話說,大模型無法做到“牽一髮而不動全身”,即無法在某個領域取得進步時,僅透過改變其分佈而不影響其他部分。
第二個問題是幻覺(Hallucination)。由於 LLM 是一個自迴歸的機率模型,只要涉及機率模型,就不可避免地會產生幻覺,這是無法徹底根除的。不過,可以透過一些方法來緩解這種症狀。
目前,主流的模型主要是以 Transformer 架構為驅動的自迴歸模型。雖然情況正在發生變化,現在 Transformer 架構的主導地位已經面臨挑戰,咱們後面會提到。
自迴歸模型本質上仍然是一個數學模型。它根據 prompt 和之前的 token 來預測下一個 token,即條件機率模型。
從理論上講,可以透過調整 prompt,讓大語言模型輸出任何 token 組合,只要這些 token 在 tokenizer 之內且不太長。我們可以透過提示的形式,以條件的形式來控制輸出。
因此,RAG 的兩個主要問題——幻覺問題和分佈偏移問題,都可以透過調整 prompt 來解決。RAG 的本質就是提示工程(prompt engineering),透過調整條件,使其條件不同,從而調整其機率分佈 ,在不改變 θ 的情況下。

RAG 實際上是一種透過檢索方式來選擇用於提示工程的材料的方法。具體來說,就是需要向 Prompt 中新增內容。
實際上,任何形式的搜尋都可以實現這一目的,比如使用 SQL 搜尋引擎,或者像谷歌這樣的通用搜索引擎,甚至直接從資料庫中檢索等。只要能夠找到合適的檔案,都可以作為 RAG 的輸入材料。
在這一過程中,不一定需要使用 ML。如果使用 ML,成本可能會更高。RAG 的核心在於透過改變條件來影響輸出分佈。具體而言,輸入的新知識可以對抗分佈偏移(Distribution Shift),而提供的相關檔案則用於減少幻覺。
Semantic Search 到底是在做什麼?
Semantic search(語義搜尋)的核心在於透過特定的技術手段,實現對檔案和 query 之間的語義匹配。它的起源可以追溯到理論計算機科學中的一個重要工具——metric embedding。在數學上,metric embedding 是將檔案對映到一個高維的測度空間(metric space)中。
這個測度空間需要滿足泛函分析中的 Metric Distance Function(度量距離函式)的四個條件:自身距離為 0、兩個不同點的距離大於 0、距離對稱性以及三角不等式。
現代 Semantic search 並不一定侷限於測度空間。在實際應用中,它可能會使用一些非測度距離,例如非常常用且出名的 Cosine Distance(餘弦距離)。這是因為 Cosine Distance 雖然不符合測度空間的嚴格定義,但在語義搜尋中仍然能夠有效地衡量向量之間的相似性。
在 Semantic search 中,檔案被嵌入到一個高維空間中,這個嵌入過程是透過一個 embedding model 完成的。這個模型的作用是將檔案對映為向量,並使得這些向量之間的距離能夠有意義地反映檔案之間的語義關係,例如親密度或相似度等。
Semantic search 的本質是將檔案本身作為索引(document as index)。傳統資料檢索依賴於預設的索引,但這種方法的前提是使用者必須明確知道自己需要什麼。然而,在許多情況下,使用者可能並不清楚具體需要什麼檔案。
Semantic search 解決了這一問題,它允許直接將檔案作為索引,並透過 embedding 的形式與查詢進行對比,從而最大限度地保證與查詢的適配性。
這種方式在不知道具體需要哪個檔案的情況下,依然能夠找到最相關的檔案,具有很大的靈活性。這種靈活性在處理低資原始檔和長檔案時尤為突出,採用的模式稱為 Multi-Vector Retrieval(多向量檢索)。
例如,在構建關於 Rust 程式碼的向量資料庫時,會面臨一個典型問題:在 embedding 模型的訓練過程中,模型接觸到的自然語言資料量遠遠超過 Rust 程式碼。
因此,embedding 模型更適合處理自然語言,而不是 Rust 程式碼。然而,query 多數情況下是用自然語言提出的。這就需要一種方法,將 Rust 程式碼相關的問題轉化為自然語言問題,以便模型能夠更好地適應。
具體做法是利用自然語言,例如程式碼註釋、README 文件等來對 Rust 程式碼進行索引。透過這種方式,向量化的檔案索引也是基於自然語言的,查詢時對比的也是這種自然語言索引。這樣一來,檢索效率和準確率都會顯著提高,當然前提是自然語言索引本身是可靠的,否則將無法達到預期效果。
對於超長檔案的情況,如果需要完整檢索而不能將其分割成小塊(chunk),解決方案也很簡單。可以使用文字的總結來對長文字進行索引,然後對文字總結進行向量化索引。
正如計算機科學的偉大先驅 David Wheeler 所說,“在計算機科學中,幾乎所有的複雜問題都可以透過增加一層迂迴(indirection)來解決”,這實際上就是增加了一層迂迴。這種方法的普適性非常高。
同樣的方法也可以應用於多模態檢索。例如,當一個包含影像、表格和文字的文件進入系統時,可以將它們分開,併為每個部分生成一個標籤。然後可以透過自然語言進行檢索。
甚至可以將這種方法與多 Multi-Vector Retrieval 結合起來,使用 Multi-embedding 方式。例如,對於影像,如果需要原始影像,可以直接對其進行嵌入;如果需要總結,則使用其總結進行嵌入。方法多種多樣,能夠靈活應對不同型別的檢索需求。

Semantic Search 看似行將就木,原因在於其本身缺乏明確的資料結構。它本質上是一堆向量的集合,這些向量簡單地堆在一起,而沒有更深層次的組織形式。
在傳統的搜尋方法中,通常會藉助樹狀結構或其他形式的索引關係來最佳化搜尋效率,但 Semantic Search 中並不存在這樣的結構。原生的 RAG 系統本身也沒有任何系統化的結構。
在 ANN(Approximate Nearest Neighbors,近似最近鄰)中所使用的結構,雖然在某種程度上可以用於檢索小型資料庫,但它並不是為了構建系統結構而設計的。
然而,正如老子所說“無為而無不為”,他什麼都不是,那就什麼都可以是。正是因為 Semantic Search 沒有內在的資料結構,反而為其提供了極大的靈活性。這種靈活性使得我們可以為其賦予任何合適的資料結構。
RAG 系統設計的關鍵之一,就是為 Semantic Search 提供一個數據結構,使其更貼近資料的天然結構。例如,如果資料的天然結構是一棵樹,那麼就可以將系統設計成樹狀結構;如果資料的天然結構是一根草,那麼就可以設計成相應的草狀結構。
系統設計
系統設計是整個工作的重中之重。在深入探討之前,需要先強調一個重要的觀點:工程是取捨的藝術(Engineering is the Art of Trade-off)。這是我僅有的 3 年工程師生涯中領悟的最重要的道理,我覺得,這也是每一位工程師都必須深刻理解的核心理念。
工程師需要明確自己能夠做出什麼樣的取捨權衡(trade-off),能夠接受什麼,不能接受什麼,以及可以在哪些方面做出犧牲,以換取其他方面的利益。這些是必須仔細考慮的問題。接下來所有的內容都會是這個原則的拓展延伸
如何選擇 Loss Function?
在整個系統設計環節中,權衡是核心原則。以 Contrastive Loss(對比損失函式)為例。對比損失函式的公式,我們很明顯看得出他是一個 switch loss. 什麼意思呢?當標籤 y=0 時,1−y=1,因此公式中的一項被觸發,而另一項則不被觸發(switch)。
此時,損失值為 ,即距離的平方。當 y=1 時,1−y=0,只有另一項被觸發。公式中的 是一個縮放因子(scaling factor),通常不會對結果產生顯著影響。
因此,損失值為 。如果 大於 m,即距離大於閾值 m,那麼 是一個負數,小於 0,因此損失值為 0。相反,如果 DW 小於 m,則損失值為正。
換句話說,對比損失函式的關鍵在於距離 。只要有距離存在,就會產生損失。這種損失會將相似的點(儘可能地拉到同一個點上,即把相似的樣本緊密地聚集在一起。
然而,往外推的機制僅在距離小於閾值 m 時起作用。如果距離超過了閾值 m,則對比損失函式不再對其產生影響。所以,一個 batch 的 loss 是 0 的時候,可能你不需要太慌張。由此可知,Contrastive loss 形成的是多個相距 m 距離的緊密聚類,適用於結構緊密,方差較小的資料。

接下來的例子是 Triplet Loss(三元組損失)。其中,d 表示距離,a 表示 anchor(錨點),p 表示 positive(正樣本), n 表示 negative。Triplet Loss 的計算方式是:Anchor 到 Positive 的距離減去 Anchor 到 Negative 的距離,再加上一個閾值 m。
如果 Anchor 到 Positive 的距離減去 Anchor 到 Negative 的距離的絕對值小於閾值 m,那麼損失值就不是 0;反之,如果這個絕對值大於或等於 m,那麼損失值就是 0。
也就是說,Triplet Loss 並不關心 Negative 和 Positive 之間的距離有多遠,它只關注這兩個點與 Anchor 之間距離的差值是否小於閾值 m。如果差值小於 m,它會將樣本向外推,使其滿足條件;如果差值已經大於或等於 m,那麼它就不再進行最佳化,損失值為 0。

在訓練使用 Triplet Loss 和 contrastive loss 的模型時,都可能會出現整個批次的損失值為 0 的情況。這時不要急於下結論,這並不一定意味著模型過擬合。可能只是巧合,該批次的資料恰好滿足了損失函式的條件。因為 Triplet Loss 只關注 positive 和 negative 與 anchor 之間的相對距離,所以它很容易滿足條件,導致模型更新較少,收斂速度相對較慢。
此外,只有當相對距離小於閾值 m 時,才會產生損失值。與對比 Contrastive Loss 不同,Triplet Loss 不會將所有相似的樣本強行聚到一個點上,因此同類內方差(Intra-Clas Variance)較大。
它形成的聚類通常是距離大致等於 m 的較大範圍的集合,而不是緊密聚集在一起。這意味著一個類別中可以包含更多元的樣本。
Triplet Loss 特別適用於類內方差較大的資料。例如,人臉資料就是一個很好的例子。很多人對人臉資料存在誤解,認為同一個人的不同人臉影像之間的差異很小,但實際上,同一個人在不同光照、角度、表情等條件下的臉可能有非常大的差距。
這就是為什麼 triplet loss 是人臉識別的預設 loss。而那些沒有看過資料整天想當然的工程師可能就會選用應對小方差的 Contrastive loss。選擇損失函式的前提是必須充分了解資料,只有真正理解資料的特性,才能明確應該採用什麼樣的損失函式來指導模型訓練。 對於其他各種損失函式,也可以用類似的方法進行分析。
如何選擇 Distant Function?
在選擇 Distant Function 時,需要考慮其本質是度量嵌入。從這個角度出發,幾乎所有的距離函式可以分為兩類:一是滿足度量空間(Metric Space)定義的距離函式,例如歐幾里得距離(Euclidean distance),也叫 L2 距離;二是不滿足度量空間定義的餘弦距離(cosine distance)。
餘弦距離不是度量距離的原因在於它不滿足度量空間的兩個基本條件:非負性(positivity)和三角不等式(triangle inequality)。大致證明如下:假設從原點出發有兩個不同的點,它們在同一條直線上,但方向相反。
這兩個點的餘弦相似度是相同的,這意味著它們的“距離”為 0,這顯然不符合非負性。此外,考慮三個點 x = [1, 0]; y = [0, 1]; z = [1, 1],,餘弦距離不滿足三角不等式,即兩邊之和小於第三邊。
儘管餘弦距離不符合度量空間的定義,但它具有計算簡單的優勢,因為它只考慮方向,而與 Magnitude 無關。這使得餘弦距離特別適合那些只關注方向的場景,例如在推薦系統中,如 Netflix 和 Spotify。
如果使用者喜歡搖滾音樂,那麼所有與搖滾相關的方向都是相關的;如果使用者喜歡恐怖電影,那麼所有與恐怖電影相關的方向也是相關的。在這種場景中,不需要考慮具體的數值,只需要確定方向即可。餘弦距離的值域在 0 到 1 之間,也不會出現數值溢位的情況。

歐幾里得距離(Euclidean distance)與餘弦距離不同,其計算相對複雜,需要考慮兩個點在空間中的實際距離。這有點類似於 Word2Vec 模型中透過訓練得到的向量空間關係,例如“king – man = queen – woman”這種語義關係。
歐幾里得距離非常適合複雜場景,比如電商推薦。在這種場景中,方向只是考慮的一個方面,還需要關注細節。
然而,歐幾里得距離可能會出現數值溢位,因為它是一個無界的距離,其值可以非常大或非常小。此外,在高維空間中,歐幾里得距離可能會導致資料稀疏。
儘管歐幾里得距離存在這些缺點,但仍然需要討論它,因為它是一個 metric distance。這意味著可以透過深度學習來模仿一個 metric space。例如,假設使用對比損失函式,並且有越南語到中文的資料,但沒有越南語到圖片的資料。
在這種情況下,如果模型訓練得當,越南語到中文之間的距離最大為 m,中文到圖片的距離也最大為 m。根據三角不等式,越南語到圖片的距離最多為 2m。因此,透過將搜尋範圍擴大到 m,就可以找到想要的結果。
這是度量距離的一個非常強大的用途,即三角不等式的應用。將模型訓練到這種程度是具有極大難度的,雖然可以實現,但需要付出巨大的代價。這取決於是否願意做出這種權衡。

如何選擇 Embedding 模型?
在選擇 Embedding 模型時,主要需要考慮的是 LLM 與 Encoder 之間的權衡。LLM 的歸納偏差(Inductive Bias)並不特別適合用於嵌入任務,但可以透過一些手段,如重複(repetition)來解決。
例如,將相同的內容輸入兩次,最後一個輸出肯定包含了之前所有上下文的資訊。然而,使用 LLM 進行推理和訓練的成本更高,需要更多的訓練資料。正如 ViT 文章中提到的一句經典觀點:“大規模訓練勝過歸納偏差(Large scale training trumps inductive bias)”。
即使歸納偏差可能是錯誤的,只要訓練規模足夠大,模型仍然可以解決問題。相比之下,編碼器的歸納偏差更適合嵌入任務,因此可以用更小的模型達到相同的效果。
如下圖所示,NV embed-2 是一個擁有 70 多億引數的模型,其評分是 72.31。排名第 1。而 Stella 是一個只有 4.35 億引數的模型,其平均評分是 70.11。儘管兩者評分相差不大,但引數數量卻相差數倍。
這說明,如果真的需要那額外 2 分的效能,可以使用大模型,否則,一個小模型完全可以勝任嵌入任務。

一般來說,對於訓練良好的模型,其優先順序順序為:效能 / 成本權衡(Performance/Cost trade-off)> 資料領域(Data domain)> 損失函式(Loss function)> 距離度量(Distance Metric)。
為什麼呢?因為在有足夠的資料進行訓練的情況下,損失函式和距離度量是可以靈活調整的。
例如,Contrastive Loss 訓練的模型可以相對容易地改為 Triplet Loss,使用 Euclidean Distance 訓練的模型也可以相對容易地改為 Cosine Distance。但是,效能與成本之間的權衡是難以改變的,除非進行極端的最佳化。因此,效能 / 成本權衡是更為重要的考慮因素。
如何選擇 Vector Database?
在選擇向量資料庫(Vector Database)時,首先需要考慮的是選擇開源還是閉源的解決方案。開源的向量資料庫通常具有靈活性,因為可以直接訪問原始碼並根據需求進行修改。閉源的向量資料庫則可能在安全性方面更具優勢。此外,還需要考慮資料庫的實現語言,例如 Go、Rust、Java 或 C 等。

如果對隱私要求極高,無法使用雲端服務,那麼只能選擇本地部署 On-premise 的解決方案。如果可以使用雲端服務,那麼選擇的範圍會更廣。嵌入式模型(embedded model)是 LensDB 等系統採用的一種模式,這種模式在資源利用方面相對高效。

在索引(indexing)方面,目前主要考慮以下四種方式:雜湊(hash)、樹(tree)、圖(graph)和倒排索引(inverted file index)。雜湊索引的優點是檢索速度快,能夠處理大規模資料,但其準確度一般。
樹索引是 Spotify 等公司一直在使用的方案,它在低維資料上效果很好,但在高維資料上表現欠佳。圖索引(如 Hierarchical Navigable Small World,HNSW)對高維資料非常友好,且相對省記憶體。在不確定使用哪種索引時,圖索引是一個不錯的選擇,因為它適用於大多數場景
倒排索引(IVF)可以透過網格狀資料結構迅速縮小搜尋範圍,但其構建過程可能較長,可能需要使用乘積量化(product quantization)等手段來加速。

給 Semantic Search 一個結構
系統設計的重點之一是為 Semantic Search 提供一個結構。例如,對於類似教科書的資料,其天然結構是分層的。以微積分教科書為例,可以將其分為導數章節、鏈式法則小節等。對於程式碼庫,可以將程式碼檔案和程式碼片段進行分層。
此外,還可以進行 Context Enrichment,例如將文字分割成句子級別的塊,在精準定位到某一句後,為其新增上下文資訊。這種方法適用於新聞等場景,例如在抓取關鍵事件後補充前因後果。
對於案情報告,可以抓取關鍵犯罪資訊,然後向上追溯審理過程,向下查詢判決結果。還有一種方法是 Parent-child chunk retrieve,即當需要檢索整個檔案而非幾個片段時,可以將所有片段關聯到其所屬的檔案。例如,在案情報告中抓取到犯罪資訊後,可以直接檢索到完整的報告。

語義搜尋可以與其他任何檢索方法結合使用。例如,可以同時使用向量索引(Vector index)和 BM25 等傳統檢索方法,將兩種方法的 Top-K 結果合併。向量索引可以是分層的,也可以是 Context Enrichment,具體取決於資料的結構和需求。

Query Transformation
人類提出的 query 往往可能存在“文不達意”的情況,為了解決這一問題,可以利用 LLM 來生成一個更適合嵌入的新查詢。此外,LLM 甚至可以被專門訓練以適應特定的任務。
例如,可以採用“step back prompting”(後退提示)的方法。假設有人提出了一個關於物理的問題:已知壓力為 p,理想氣體的溫度增加了一倍(溫度乘以 2),體積增加了 8 倍(體積乘以 8),那麼壓力 p 會如何變化?在這種情況下,可以透過“step back”來思考:這個問題背後涉及哪些物理原理?需要使用哪個公式?明確了公式之後,再進一步分析問題。

如果原始查詢過於寬泛,可以將其拆分成多個更具體的子查詢,分別處理後再將結果融合在一起,從而減少混淆,最終得出更準確的結果。這種方法特別適合處理複雜的系統問題。
還有一種方法是在模型給出回答後,給予一個反饋(reward)。模型會根據這個反饋進行調整和重寫,這有點類似於“reflection”(反思)的過程,透過這種方式逐步最佳化回答的質量。
系統設計
系統設計可以採用 Multi-agent 架構,這種方式特別適用於複雜的系統。因為沒有任何一種資料結構能夠完美適用於所有型別的資料,這與當年提出的“沒有免費午餐定理”(No Free Lunch Theorem)依然相符,在所有可能的問題上,沒有任何一種演算法能夠普遍優於其他演算法。
在 Multi-agent 系統中,每個智慧體都可以是一個完整的檢索系統。例如,一個智慧體可能是基於 SQL 的檢索系統,另一個可能是基於最近搜尋的系統,還有的可能是基於分層結構的檢索系統。
當然,這種架構還需要實現查詢路由,即需要明確將查詢傳送到哪個 Agent 系統中進行處理。
KG RAG
我們之前討論了多種資料結構和系統設計方法,但似乎遺漏了一個非常重要的資料結構——實體及其關係(Entities and their relationships)。這種資料結構在自然界中非常常見,例如透過關係型資料庫來組織資料。
雖然我們確實可以用 Semantic Search 和向量資料庫來模擬這種資料結構,但實際上沒有必要這麼做。因為我們已經有了更專業的工具,那就是 KG(知識圖,Knowledge Graph)。
KG 是語義搜尋中一個非常重要但又容易被忽視的部分。它雖然可以透過語義搜尋來實現,但這並不是語義搜尋的必要功能。知識圖譜的核心價值在於它能夠清晰地描述實體之間的關係,並將整個資料庫的內容串聯起來。
例如,它可以回答“這個資料庫到底是什麼主題的”這類全域性性問題。知識圖譜的這種能力是其真正的閃光點。
KG 的構建過程可以分為幾個步驟。首先,從一個 Ontology 開始,然後透過充實細節將其擴充套件為一個完整的知識圖譜。
在構建知識圖譜時,思維方式應該是面向物件的。例如,作者(Author)和出版商(Publisher)之間的關係可以被清晰地定義。作者可以有多個子實體,例如海明威,莫言等。
KG-RAG(Knowledge Graph Retrieval-Augmented Generation,知識圖譜 RAG )是為全域性查詢和聚焦總結而設計的,而不是用於處理單個的點對點問題。這是知識圖譜的強項,因為它能夠清晰地描述實體之間的關係,並將整個資料庫的內容串聯起來。
在 KG 的構建過程中,從源文件中提取片段後,會進行領域定製的總結,然後將片段轉化為元素,再從元素進行進一步總結,最終將元素提升為組。除了第一步之外,後續步驟都需要大量使用 LLM,因此成本非常高。KG-RAG 的成本大約是簡單向量 RAG 的 1000 倍左右。
因此,儘管 KG-RAG 在理論上非常強大,但在實際應用中,由於成本過高,導致其“叫好不叫座”,很多人覺得它很有潛力,但實際使用時卻因為成本問題而難以推廣。
為了解決這個問題,微軟的研究人員開始思考如何降低 KG-RAG 的成本。他們意識到,知識圖譜和語義搜尋並不是互斥的,而是可以共存的。於是,他們提出了“Lazy Graph RAG”這種新的方法。
語義搜尋可以被看作是一把“狙擊槍”,能夠直接找到最相關的幾個結果;而知識圖譜則更像是一個“breath-first search”,從一個切入點開始,能夠找到與之相關的所有資訊。Lazy Graph RAG 的核心思想是利用語義搜尋來彌補知識圖譜的不足。
透過這種設計,Lazy Graph RAG 能夠顯著降低索引構建的成本,將其降低到與簡單向量 RAG 相當的水平,大約是上一代產品的 0.1%。由於成本的大幅降低,Lazy Graph RAG 可以更容易地擴充套件到大規模應用中。低成本使得系統可以更靈活地擴充套件,從而更好地滿足實際需求。

KG-RAG 和 Semantic Search 在系統設計和資源利用的區別。
  • KG-RAG:當資料可以透過實體和關係模型清晰地表示時,KG-RAG 是最優選擇。它能夠充分利用知識圖譜的結構化優勢,處理複雜的全域性查詢和總結任務。
  • Semantic Search:如果資料沒有現成的結構化模型,或者需要快速搭建適合特定資料的檢索系統,Semantic Search 是一個靈活且高效的選擇。透過語義搜尋,可以快速定位相關內容,而無需依賴複雜的圖結構。
Lazy Graph RAG 結合了兩者的優點,透過語義搜尋精準定位,再利用知識圖譜的結構化優勢進行擴充套件,既降低了成本,又保持了高效能。
未來的趨勢與挑戰
大模型正在快速向端裝置(如手機)遷移,這一趨勢將很快實現。但無論模型如何最佳化,RAG 仍然是必要的。因此,需要更好的方法在手機等裝置上儲存資訊,並且需要更快的 RAG 實現,因為手機的 GPU 資源有限。
目前的大語言模型主要基於 Transformer 架構的自迴歸(auto-regression)模型。然而,這一領域正在發生變化,出現了許多新的模型架構,如 RWKV、Mamba、TTT、Hyena 等。
這些模型正在爭奪 Transformer 的主導地位。這些新模型的一個重要特點是,它們的嵌入和生成可以由同一個模型完成。例如,RWKV 類似於經過最佳化的 RNN,它將之前的所有資訊儲存在一個隱藏狀態(hidden state)中,而不是以 token 的形式表示。
從某種意義上說,Transformer 本質上也是一種 RNN,其隱藏狀態是之前的所有 token,並且它透過機制解決了大規模並行化的問題。將檔案輸入 RWKV 模型後,可以得到一個文字生成結果,包含了之前所有資訊的精華。
這意味著幾乎不需要原文,因為嵌入不僅包含了語義搜尋的意義,還包含了文字本身在模型中的意義。然而,這種模型的缺點是,如果更換生成模型,需要連同嵌入模型一起更換,因為它們是一個整體。這仍然是一個權衡,取決於你能接受什麼。
未來可能會出現非自迴歸的生成模型,例如擴散模型(Diffusion Models)或歸一化流(Normalizing Flows),但目前這些模型還在發展階段,尚未完全成熟。自迴歸模型的逐個 token 生成方式與人類生成語言的方式不同。
人類在生成語言時,通常會先確定一個主旨,然後圍繞這個主旨組織語言。而自迴歸模型是基於大量資料訓練出來的,其歸納偏差是逐個 token 生成,但是這在某些任務中可能不是最優的。
不過也是應了 ViT 作者的那句話,Large scale training trumps inductive biases。但是我依然覺得,在大資料的情況下,如果能找到更合適的歸納偏差,可以顯著提升模型的效率和效能。
目前的大模型已經達到了人力和資料的極限,未來可能會有更好的發展。記住,壓縮是關鍵,訓練模型本質上是對資訊的壓縮
在當前情況下,機器學習系統設計的最佳實踐是儘量避免使用機器學習,因為它成本高昂。如果能用 SQL 解決問題,就用 SQL;如果能用 Elasticsearch 解決問題,就用 Elasticsearch;如果能用正則表示式解決問題,就不要用 LLM。
執行巨量正則表示式的成本可能只有幾分錢,而執行一個小 LLM 的成本則要高得多。儘量使用傳統方法解決傳統方法能夠解決的問題,將機器學習用於那些傳統方法無法解決的問題。不要因為機器學習很酷就濫用它,否則最終可能會因為成本過高而後悔。
活動推薦
AICon 2025 強勢來襲,5 月上海站、6 月北京站,雙城聯動,全覽 AI 技術前沿和行業落地。大會聚焦技術與應用深度融合,匯聚 AI Agent、多模態、場景應用、大模型架構創新、智慧資料基建、AI 產品設計和出海策略等話題。即刻掃碼購票,一同探索 AI 應用邊界!

相關文章