[筆記] RAG 檢索增強生成的技術概念

Q :為何需要 RAG 資料檢索? A :光靠 LLM 大語言模型無法準確回答問題,反而出現一本正經地胡說八道,專業術語稱為 LLM 的幻覺 (Hallucination) 。為了解決這問題,有兩種方法:第一種是對 LLM 的預訓練模型進行微調訓練,第二種是加入 RAG 做資料檢索和 LLM 的語句生成。前者需要花費硬體設備進行訓練,後者採用 LLM+RAG 架構可大幅節省成本,市面上比較接受後者方案。其系統架構如下: Q : RAG 的開發與架構? A :初期 RAG 開發階段,需要對資料進行多模態的處理,比如對 PDF 檔案擷取文字、表格、圖片 … 等多種模態,過程包含資料清洗,剔除一些符號、重複語句、無意義文字 … 等。然後,對清洗後的資料進行分塊和向量化,最後寫入向量資料庫。這裡的分塊和向量化會使用到現有的演算法來實現,向量資料庫也有現有的架構可使用。 前面是前期 RAG 的資料處理階段,後期是指 RAG 運行階段,需要對接到 LLM 模型,如下圖。 Q :如何資料擷取與清洗? A :客戶提供技術文件,可能是 TXT 或 PDF 檔案。首先,將檔案的文字擷取下來存放成自訂格式 (JSON) ,對於 PDF 檔案而言,內容包含文字、表格、圖片都必須分別寫 python 程式處理。即使把文字從檔案取出,在這一大堆文字裡面包含換行符號,語句切割不連續,無意義的詞或標題數字 … 等問題,這些問題需要靠程式來做清洗後才能進到下階段。 Q :如何向量化? A :資料清洗後,資料要進行切塊 (chunk) ,再將其向量化,這過程稱為 embedding 。有人研究中文 embedding 的檢索能力,參考 https://ihower.tw/blog/archives/12167 ,需要導入有支援多語言的 embedding model 效果最好。 切塊採用 Jieba 分詞的算法,文本會切成小的詞彙,以便之後檢索。這些詞彙換算成向量,而典型檢索的演算法為 BM25 ,優點為方法簡單效果不錯,因此使用廣泛,缺點是單純根據詞頻等統計和關鍵字檢索做判斷,無法理解語意。而 Word2Vec 使用高維向量來表示單詞,能分辨細微語意之差別。 向量化的數據要存放在向量資料庫,基礎型的有 ChromaDB 、 MilvusDB… 等可本地部署。