RAG 修煉手冊|一文講透 RAG 背後的技術

在之前的文章中《RAG 修煉手冊|RAG敲響喪鐘?大模型長上下文是否意味着向量檢索不再重要》,我們已經介紹過 RAG 對於解決大模型幻覺問題的不可或缺性,也回顧瞭如何藉助向量數據庫提升 RAG 實戰效果。

今天我們繼續剖析 RAG,將爲大家大家詳細介紹 RAG 背後的例如 Embedding、Transformer、BERT、LLM 等技術的發展歷程和基本原理,以及它們是如何應用的。

01.什麼是 Embedding?

Embedding 是將離散的非結構化數據轉換爲連續的向量表示的技術。

在自然語言處理中,Embedding 常常用於將文本數據中的單詞、句子或文檔映射爲固定長度的實數向量,使得文本數據能夠在計算機中被更好地處理和理解。通過 Embedding,每個單詞或句子都可以用一個實數向量來表示,這個向量中包含了該單詞或句子的語義信息。這樣,相似的單詞或句子就會在嵌入空間中被映射爲相近的向量,具有相似語義的詞語或句子在向量空間上的距離也會較近。這使得在進行自然語言處理任務時,可以通過計算向量之間的距離或相似度來進行詞語或句子的匹配、分類、聚類等操作。

Word2Vec

Word2Vec 是 2013 年由谷歌提出了一套詞嵌入方法。Word2vec 是 Word Embedding 方式之一,這種方式在 2018 年之前比較主流。Word2Vec 作爲詞向量的經典算法之一,被廣泛應用於各種自然語言處理任務。它通過訓練語料庫來學習單詞之間的語義和語法關係,將單詞映射到高維空間中的稠密向量。Word2Vec 的問世開創了將單詞轉化爲向量表示的先河,極大地促進了自然語言處理領域的發展。

Word2vec 模型可用來映射每個詞到一個向量,可用來表示詞對詞之間的關係。下圖是展示一個 2 維的向量空間的例子(實際可能是比較高的維度)。

從圖中可以看到,在這個 2 維空間內,每個 word 的分佈有明顯的特徵。比如從 man到 woman,要加上一個向右上方向的向量,可以認爲這個向量是一種“把男性轉換到女性的向量”。如果把 king 也加上這個向量,可以得到 queen 的位置。在圖中可以看到從 Paris 到 France 也有一種像是“從國家變爲首都”的結構向量。

這一神奇的現象表明了向量在 embedding 內空間並不一是個雜亂無章隨意的分佈。在哪個區域表示哪些類別,區域和區域之間的差異,這些都有明顯的特徵。這樣可以推出一個結論:向量的相似度代表的就是原始數據的相似度。所以向量的搜索實際上代表的就是原始數據的語義搜索。這樣,我們就可以用向量搜索來實現很多語義相似搜索的業務。

然而,作爲一種早期的技術,Word2Vec 也存在一定的侷限性:

由於詞和向量是一對一的關係,所以多義詞的問題無法解決。比如下面這幾個例子的 bank 就不全是同樣一個意思。

...very useful to protect banks or slopes from being washed away by river or rain...
...the location because it was high, about 100 feet above the bank of the river...
...The bank has plans to branch throughout the country...
...They throttled the watchman and robbed the bank...

Word2vec 是一種靜態的方式,雖然通用性強,但是無法針對特定任務做動態優化。

Transformer 的變革

雖然 Word2Vec 在詞向量的表示上有不錯效果,但它並沒有捕捉到上下文之間的複雜關係。爲了更好地處理上下文依賴和語義理解,Transformer 模型應運而生。

Transformer 是一種基於自注意力機制(self-attention)的神經網絡模型,最早在 2017 年由 Google 的研究員提出並應用於自然語言處理任務。它能夠對輸入句子中不同位置的單詞關係進行建模,從而更好地捕捉上下文信息。Transformer 的提出標誌着神經網絡模型在自然語言處理領域的一次重大革新,使得文本生成、機器翻譯等任務取得了顯著的性能提升。

最初,Transformer 被提出來用於機器翻譯任務,並取得了顯著的性能提升。這個模型由“編碼器(Encoder)”和“解碼器(Decoder)”組成,其中編碼器將輸入語言序列編碼爲一系列隱藏表示,解碼器則將這些隱藏表示解碼爲目標語言序列。每個編碼器和解碼器由多層自注意力機制和前饋神經網絡組成。

Transformer 與傳統的 CNN(卷積神經網絡)和 RNN(循環神經網絡)相比,Transformer 可以實現更高效的並行計算,因爲自注意力機制使得所有位置的輸入都可以同時計算,而 CNN 和 RNN 需要按順序進行計算。傳統的 CNN 和 RNN 在處理長距離依賴關係時會遇到困難,而 Transformer 通過使用自注意力機制可以學習長距離的依賴關係。

由於原始 Transformer 模型在大規模任務上表現出色,研究人員開始嘗試調整模型的大小以提高性能。他們發現,在增加模型的深度、寬度和參數數量的同時,Transformer 可以更好地捕捉輸入序列之間的關係和規律。

Transformer 的另一個重要發展是大規模預訓練模型的出現。通過在大量的無監督數據上訓練,預訓練模型可以學習到更豐富的語義和語法特徵,並在下游任務上進行微調。這些預訓練模型包括 BERT(Bidirectional Encoder Representations from Transformers)、GPT(Generative Pre-trained Transformer)等,它們在自然語言處理的各個任務上都取得了巨大的成功。

Transformer 的發展給人工智能帶來了巨大的變革,比如 encoder 部分發展爲 BERT 系列,隨後發展成各類 Embedding 模型。而 decoder 部分發展爲 GPT 系列,從而引發了後面 LLM 的革命,包括現在 ChatGPT。

BERT 和 sentence embedding

Transformer 的 Encoder 部分發展爲 BERT。

BERT 使用了兩個階段的預訓練方法,即 MLM(Masked Language Model) 完型填空和 NSP(Next Sentence Prediction)。MLM 階段讓 BERT 預測被遮擋詞彙,以幫助它理解整個序列的上下文;NSP 階段讓 BERT 判斷兩個句子是否是連續的,以幫助它理解句子之間的關係。這兩個階段的預訓練使得 BERT 具備了強大的語義信息學習能力,並能夠在各種自然語言處理任務中取得優秀性能。

BERT 的一個非常重要的應用就是句子嵌入,即通過一句話生成 embedding 向量。這個向量可以用於多種下游自然語言處理任務,如句子相似度計算、文本分類、情感分析等。通過使用句子嵌入,可以將句子轉換爲高維空間中的向量表示,從而實現了計算機對句子的理解和語義表達。

相比傳統的基於詞嵌入的方法,BERT 的句子嵌入能夠捕捉到更多的語義信息和句子級別的關係。通過將整個句子作爲輸入,模型能夠綜合考慮句子內部詞彙的上下文關係,以及句子之間的語義相關性。這爲解決一系列自然語言處理任務提供了更爲強大和靈活的工具。

爲什麼 Embedding 搜索比基於詞頻搜索效果好?

基於詞頻搜索的傳統算法包括如 TF-IDF、BM25。詞頻搜索只考慮了詞語在文本中的頻率,而忽略了詞語之間的語義關係。而 Embedding 搜索通過將每個詞語映射到一個向量空間中的向量表示,可以捕捉到詞語之間的語義關係。因此,當搜索時,可以通過計算詞語之間的相似度來更準確地匹配相關的文本。

詞頻搜索只能進行精確匹配,對於近義詞或者語義關聯詞的搜索效果較差。而 Embedding 搜索可以通過計算詞語之間的相似度,實現對近義詞和語義關聯詞的模糊匹配,從而提高了搜索的覆蓋範圍和準確性。Embedding 搜索能夠更好地利用詞語之間的語義關係,提高搜索結果的準確性和覆蓋範圍,相對於基於詞頻搜索,具有更好的效果。

使用基於詞頻的搜索方法,如果我們查詢"cat",那麼結果中可能會將包含"cat"詞頻較高的文章排在前面。但是這種方法無法考慮到"cat"與其他動物的語義關係,比如與"British Shorthair(英國短毛貓)"、"Ragdoll(布偶貓)"等相似的動物。而使用 Embedding 搜索方法,可以將單詞映射到高維空間中的向量,使得語義相似的單詞在空間中距離較近。當我們查詢"cat"時,Embedding 搜索可以找到與"cat"語義相似的單詞,如"British Shorthair"、"Ragdoll"等,並將這些相關文章排在結果的前面。這樣就能提供更準確、相關性更高的搜索結果。

02.LLM 的發展

目前,大多數大型語言模型(LLMs)都是基於 “僅解碼器”(decoder-only)的 Transformer 架構的衍生版本,比如GPT。相比於 BERT 這種只用 Transformer 的 encoder 的結構,LLM 這種只用 decoder 的結構可以用於生成具有一定上下文語義的文本。

Language Model 的訓練任務是基於歷史上下文來預測下一個詞的出現概率。通過不斷循環預測和添加下一個詞,模型可以獲得更準確、流暢的預測結果。這樣的訓練過程可以幫助語言模型更好地理解語言規律和上下文信息,從而提高其自然語言處理的能力。

從 GPT-1 到 GPT-3

GPT 系列是由 OpenAI 從 2018 年以來,持續迭代和改進的 LLM 模型。

最早的 GPT-1 在生成長文本時容易出現語義上的不連貫或重複的問題。GPT-2 是於 2019 年發佈的改進版本,在GPT-1 的基礎上進行了多項改進,包括使用更大規模的訓練數據、更深層的模型結構,以及更多的訓練迭代次數。GPT-2 在生成文本的質量和連貫性方面有了顯著提升,並且引入了零樣本學習(zero-shot learning)的能力,可以對未曾見過的任務進行推理和生成文本。GPT-3 則是在GPT-2 的基礎上進一步增強並擴展了模型規模和能力。GPT-3 模型擁有1750億個參數,它具備了強大的生成能力,可以生成更長、更具邏輯性和一致性的文本。GPT-3 還引入了更多的語境理解和推理能力,可以對問題進行更加深入的分析,並能夠提供更準確的答案。

從 GPT-1 到 GPT-3,OpenAI 的語言生成模型在數據規模、模型結構和訓練技術上都有了重大的改進和提升,從而實現了更高質量、更具邏輯性和一致性的文本生成能力。發展到 GPT-3 時,已經顯現出了一些和以往 LLMs 不同的效果,GPT-3 主要有下面這些能力:

  • 語言續寫:給定一個提示詞(prompt),GPT-3 可以生成補全提示詞的句子。

  • 上下文學習 (in-context learning): 遵循給定任務的幾個示例,GPT-3 可以參考它們,併爲新的用例生成類似的解答。一般也可以稱作 few-shot learning。

  • 世界知識:包括事實性知識 (factual knowledge) 和常識 (commonsense)。

ChatGPT

2022年11月,OpenAI 發佈 ChatGPT,這是一個可以爲你回答幾乎任何問題的你聊天機器人。它的效果出奇的好,你可以讓他幫你總結文檔,翻譯,寫代碼,寫任何文案。搭配上一些 Tools,你甚至可以讓它幫你點外賣,訂機票,幫助接管你的電腦,完成各種你之前無法想象的事情。

這強大的功能背後,是從人類反饋中強化學習(Reinforcement Learning from Human Feedback,RLHF)等技術的支持,通過這些技術使得它和人類的對話更讓人滿意。RLHF是一種通過人類反饋來強化學習的方法,旨在使模型的輸出與人類的偏好相一致。具體操作流程包括:模型根據給定的提示生成多個潛在答案,人類評估者對這些答案進行排序,然後使用這些排序結果來訓練一個偏好模型,該模型學習如何給出反映人類對答案偏好程度的評分,最後,利用偏好模型對語言模型進行進一步微調。所以這也是爲什麼你覺得 ChatGPT 這麼好用的原因。相比於 GPT-3,ChatGPT 更進一步,解鎖了強大的能力:

  • 響應人類指令:GPT-3 的輸出一般是接着提示詞往下說,如果提示詞是一個指令,GPT-3可能會續寫更多的指令,而ChatGPT則能夠很好地回答這些指令。

  • 代碼生成和代碼理解:模型使用大量的代碼訓練過,因此可以使用ChatGPT來生成高質量,可運行的代碼。

  • 利用思維鏈 (chain-of-thought) 進行復雜推理:初代 GPT-3 的模型思維鏈推理的能力很弱甚至沒有。這一能力,使得上層應用可以通過提示詞工程使ChatGPT更加強大和準確。

  • 詳盡的回答:ChatGPT 的迴應一般都很詳細,以至於用戶必須明確要求“用一句話回答我”,才能得到更加簡潔的回答。

  • 公正的回答:ChatGPT 通常對涉及多方利益給出非常平衡的回答,儘可能讓所有人滿意。同時也會拒絕回答不當問題。

  • 拒絕其知識範圍之外的問題:例如,拒絕在 2021 年 6 月之後發生的新事件,因爲它沒在這之後的數據上訓練過。或者是拒絕回答一些它訓練數據從沒見過的數據。

然而,ChatGPT 目前也存在一些不足:

  • 數學能力相對較差:ChatGPT 的數學能力相對較差。它在解決複雜的數學問題或者涉及高級數學概念的情況下,可能會表現出困惑或者給出不準確的答案。

  • 有時會產生幻覺:有時 ChatGPT 會產生幻覺。它在回答與現實世界相關的問題時,有時會提供虛假或不準確的信息。這可能是因爲模型在訓練數據中遇到了不準確或誤導性的例子,從而導致它對某些問題的回答產生偏差。

  • 無法實時更新知識:ChatGPT 無法實時更新知識。它無法像人類一樣通過持續學習來更新和獲得最新的知識。這限制了其應用於那些需要及時更新信息的領域,例如新聞報道或金融市場分析。

好在,我們可以使用 Retrieval Augmented Generation (RAG) 技術解決產生幻覺,和無法實時更新知識這兩點不足。RAG 是結合向量數據庫和 LLM 的一項技術應用,關於 RAG 的介紹以及優化技巧,可以參考其它的文章。

03.總結

在這篇文章中,我們從 Embedding 出發,介紹了 Deep Learning 尤其是 NLP 領域目前主流的模型和應用。從早期的 Word Embedding,到現在 ChatGPT 的火熱,AI 的發展正在越來越快。隨着技術的不斷進步和數據的豐富,我們可以期待更加強大的模型的出現。深度學習的應用將更加廣泛,不僅僅侷限於自然語言處理領域,而是覆蓋到更多的領域,如視覺、語音等。相信隨着技術的不斷突破和社會的發展,會看到未來更多令人振奮的進展和創新。

閱讀原文


  • 好消息,Milvus 社區正全網尋找「北辰使者」!!! ​
  • 如果在使用 Milvus 或 Zilliz 產品有任何問題,可添加小助手微信 “zilliz-tech” 加入交流羣。 ​
  • 歡迎關注微信公衆號“Zilliz”,瞭解最新資訊。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章