【啟動AI Maker世代 】2024 MAI 開發者社群大會(5/16-17)
|

用OpenVINO和LangChain打造你專屬的RAG問答系統

   
作者:楊亦誠

隨著生成式AI的興起,和大語言模型對話聊天的應用變得非常熱門,但這類應用往往只能簡單地和你「聊聊家常」,並不能針對某些特定產業提供非常專業和精準的答案,這是大語言模型(以下簡稱LLM)在時效性和專業性上的侷限所導致:現在市面上大部分開源的LLM幾乎都只是使用某一個時間點前的公開資料進行訓練,因此無法學習到這個時間點之後的知識,並且也無法保證在專業領域上知識的準確性。

那有沒有辦法讓你的模型學習到新的知識呢?當然有,這裡一般有2種方案:

  1. 微調(Fine-tuning):微調是透過對特定領域資料庫進行廣泛的訓練來調整模型,這樣可以內化專業技能和知識。然後,微調也需要大量的資料、大量的運算資源和定期的重新訓練以保持時效性。
  2. 檢索增強生成(RAG):RAG的全稱是Retrieval-Augmented Generation,它的原理是透過檢索外部知識提供上下文回應,在無需對模型進行重新訓練的情況,保持模型對於特定領域的專業性,同時透過更新資料查詢庫,可以實現快速地知識更新。但RAG在構建以及檢索知識庫時,會佔用更多額外的記憶體資源,其回應延遲也取決於知識庫的大小。

從以上比較可以看出,在沒有足夠GPU運算資源對模型進行重新訓練的情況下,RAG方式對普通使用者來說更為友好。本文就要來探討如何利用OpenVINO以及LangChain工具構建屬於你的RAG問答系統。

RAG流程

RAG可以幫助LLM「學習」到新的知識並提供更可靠的答案,它的實現流程其實並不複雜,主要可以分為以下兩個部分:

  1. 構建知識庫檢索

構建知識庫流程 構建知識庫流程

  • 載入(Load):讀取並解析使用者提供的非結構化資訊,這裡的非結構化資訊可以是例如PDF或者Markdown這樣的檔案形式。
  • 分割(Split):將檔案中段落按標點符號或是特殊格式進行拆分,輸出若干片語或句子,如果拆分後的單句太長,會不便於後期LLM理解以及抽取答案;如果太短又無法保證語義的連貫性。因此我們需要限制拆分長度(chunk size);此外為了保證chunk之間文字語義的連貫性,相鄰chunk會有一定的重疊,在LangChain中我可以透過定義Chunk overlap來控制這個重疊區域的大小。

本文為會員限定文章

立即加入會員! 全站文章無限看~

                               

已經是會員? 按此登入

只需不到短短一分鐘...

輸入您的信箱與ID註冊即可享有一切福利!

會員福利
1

免費電子報

2

會員搶先看

3

主題訂閱

4

好文收藏

楊亦誠

Author: 楊亦誠

現任英特爾 AI 軟體工程師

Share This Post On
468 ad

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *