甚麼是RAG?
RAG有什麼用途?
簡單來說 RAG 是種校正方法,能降低大型語言模型憑空杜撰答案、產生幻覺(Hallucination)的機率。
以下是簡單的範例:
發現其中有些答案是錯的,例如下面的國立台灣美術館是在中和.
Step3:準備外部知識庫
收集一些資料,放在pdf裡面,當作給RAG使用的外部知識庫.
pdf放在這邊: 連結
這邊使用pdf當作範例,實際上還有很多檔案格式也支援,例如txt,excel,html等等
Step4: 將pdf上傳到Colab的資料夾
Step5: 使用PyPDFLoader載入PDF檔案
Step6:為了讓LLM了解PDF的內容,需要做Embedding的處理:
Step7:PromptTemplate
提示詞模板可以限制LLM只能根據外部資料庫的內容回答問題.
Step8:接下來可以進行提問:
關於embedding 的補充資料,請參考這邊的連結
後記:為什麼只有 embedding 是不夠的?
Embedding 最大的限制就是找的僅僅是相似度,是向量空間中問題和文本的相似度。
只找相似度,會有什麼問題呢?像我們這幾天的案例,問題是「工程師寫城市」,而搜索到最相似的答案是「而我,在這座城市遺失了你,順便遺失了自己,以為荒唐到底會有捷徑。而我,在這座城市失去了你,輸給慾望高漲的自己,不是你,過分的感情」。然而,這個問題和搜索到的答案,只是因為含有「城市」這個詞造成的。實際上,這個問題和答案根本是不相關的。
基於這個原因,僅依賴 embeddings 進行資訊檢索或問答等任務可能不是最佳的選擇。於是Retrieval-Augmented Generation (RAG) 被發明出來了。
RAG 的方法是首先使用 embeddings 這類的資訊檢索技術找出最相似的文本。然後,它將查詢與從向量資料庫中檢索到的文檔或句子一起作為上下文提供給生成模型。接著,它依賴先進的語言模型(例如 ChatGPT)來生成答案。現代的生成模型,如 GPT 或 BERT,可以理解複雜的語境。因此即使某些高相似度但與問題不相關的文本被檢索出來,現代的語言模型也能有機會辨識並忽略它,只從真正相關的部分生成答案。
沒有留言:
發佈留言