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

Q:為何需要RAG資料檢索?

A:光靠LLM大語言模型無法準確回答問題,反而出現一本正經地胡說八道,專業術語稱為LLM的幻覺(Hallucination)。為了解決這問題,有兩種方法:第一種是對LLM的預訓練模型進行微調訓練,第二種是加入RAG做資料檢索和LLM的語句生成。前者需要花費硬體設備進行訓練,後者採用LLM+RAG架構可大幅節省成本,市面上比較接受後者方案。其系統架構如下:

QRAG的開發與架構?

A:初期RAG開發階段,需要對資料進行多模態的處理,比如對PDF檔案擷取文字、表格、圖片等多種模態,過程包含資料清洗,剔除一些符號、重複語句、無意義文字等。然後,對清洗後的資料進行分塊和向量化,最後寫入向量資料庫。這裡的分塊和向量化會使用到現有的演算法來實現,向量資料庫也有現有的架構可使用。


前面是前期RAG的資料處理階段,後期是指RAG運行階段,需要對接到LLM模型,如下圖。


Q:如何資料擷取與清洗?

A:客戶提供技術文件,可能是TXTPDF檔案。首先,將檔案的文字擷取下來存放成自訂格式(JSON),對於PDF檔案而言,內容包含文字、表格、圖片都必須分別寫python程式處理。即使把文字從檔案取出,在這一大堆文字裡面包含換行符號,語句切割不連續,無意義的詞或標題數字等問題,這些問題需要靠程式來做清洗後才能進到下階段。

Q:如何向量化?

A:資料清洗後,資料要進行切塊(chunk),再將其向量化,這過程稱為embedding。有人研究中文embedding的檢索能力,參考https://ihower.tw/blog/archives/12167,需要導入有支援多語言的embedding model效果最好。

切塊採用Jieba分詞的算法,文本會切成小的詞彙,以便之後檢索。這些詞彙換算成向量,而典型檢索的演算法為BM25,優點為方法簡單效果不錯,因此使用廣泛,缺點是單純根據詞頻等統計和關鍵字檢索做判斷,無法理解語意。而Word2Vec使用高維向量來表示單詞,能分辨細微語意之差別。

向量化的數據要存放在向量資料庫,基礎型的有ChromaDBMilvusDB…等可本地部署。

留言

此網誌的熱門文章

[筆記] ESP32 在 VS Code 開發環境的編譯與除錯

[筆記] Raspberry Pi 樹莓派的軟體開發

[筆記] Visual Studio 遠端偵錯的設定步驟

[應用] 在 ESP32 Audio 開發板的 VoIP 範例

ESP-IDF 在 Visual Studio Code 教學 (不同於 ESP32 Arduino IDE)

初學 ESP32-S3 攝像模組的開發

[應用] 藍芽 BLE client/server 架構:BLE remote controller