隨著生成式AI的興起,和大語言模型對話聊天的應用變得非常熱門,但這類應用往往只能簡單地和你「聊聊家常」,並不能針對某些特定產業提供非常專業和精準的答案,這是大語言模型(以下簡稱LLM)在時效性和專業性上的侷限所導致:現在市面上大部分開源的LLM幾乎都只是使用某一個時間點前的公開資料進行訓練,因此無法學習到這個時間點之後的知識,並且也無法保證在專業領域上知識的準確性。
那有沒有辦法讓你的模型學習到新的知識呢?當然有,這裡一般有2種方案:
- 微調(Fine-tuning):微調是透過對特定領域資料庫進行廣泛的訓練來調整模型,這樣可以內化專業技能和知識。然後,微調也需要大量的資料、大量的運算資源和定期的重新訓練以保持時效性。
- 檢索增強生成(RAG):RAG的全稱是Retrieval-Augmented Generation,它的原理是透過檢索外部知識提供上下文回應,在無需對模型進行重新訓練的情況,保持模型對於特定領域的專業性,同時透過更新資料查詢庫,可以實現快速地知識更新。但RAG在構建以及檢索知識庫時,會佔用更多額外的記憶體資源,其回應延遲也取決於知識庫的大小。
從以上比較可以看出,在沒有足夠GPU運算資源對模型進行重新訓練的情況下,RAG方式對普通使用者來說更為友好。本文就要來探討如何利用OpenVINO以及LangChain工具構建屬於你的RAG問答系統。
RAG流程
RAG可以幫助LLM「學習」到新的知識並提供更可靠的答案,它的實現流程其實並不複雜,主要可以分為以下兩個部分:
- 構建知識庫檢索
構建知識庫流程
- 載入(Load):讀取並解析使用者提供的非結構化資訊,這裡的非結構化資訊可以是例如PDF或者Markdown這樣的檔案形式。
- 分割(Split):將檔案中段落按標點符號或是特殊格式進行拆分,輸出若干片語或句子,如果拆分後的單句太長,會不便於後期LLM理解以及抽取答案;如果太短又無法保證語義的連貫性。因此我們需要限制拆分長度(chunk size);此外為了保證chunk之間文字語義的連貫性,相鄰chunk會有一定的重疊,在LangChain中我可以透過定義Chunk overlap來控制這個重疊區域的大小。
只需不到短短一分鐘...
輸入您的信箱與ID註冊即可享有一切福利!
會員福利
1
免費電子報
2
會員搶先看
3
主題訂閱
4
好文收藏