iT邦幫忙

2024 iThome 鐵人賽

DAY 8
0

大語言模型是由大量的資料訓練而成,但並非所有事情語言模型都能夠精確回答,當語言模型遇到不理解或不清楚的問題時,模型沒有資料可以進行回覆便有可能會「一本正經胡說八道」,這個狀況在學術上稱為「幻覺(Hallucinations)」,為了解決這樣的狀況,現在已經發展出很多因應幻覺的技術,雖然還在發展階段,但是已經可以大幅降低模型幻覺的情形,這些技術包含RAG、CoT、ToT、React 等技術。

CoT & ToT

除了透過上一章提到prompt的基本結構,在prompt engineering中我們也可以透過讓模型思考來達到更精確的答案。

CoT(Chain-of-Thought) 是十分常見讓模型去思考的方式,如果問題比較複雜或比較繁瑣,可以將大任務拆解成小任務,讓模型「一步一步(step by step)」去思考或執行https://ithelp.ithome.com.tw/upload/images/20240922/20151952CuTiqpQ90a.png

舉例來說:

  • 沒有CoT

    9.9和9.11哪一個比較大?
    

    模型不理解小數點的判讀方式,所以回答錯誤:

    9.11比9.9大。
    在十進制數字系統中,9.11表示9加上11/100(或0.11),而9.9表示9加上9/10(或0.9)。
    計算如下:
    9.11 = 9 + 0.11 = 9.11
    9.9 = 9 + 0.9 = 9.90
    因此,9.11大於9.9,差值為0.21。
    需要我進一步解釋嗎?
    
  • 使用CoT

    小數點左邊的數字表示整數部分,例如:3.1416 中的 3 是整數部分。小數點右邊的數字表示小數部分,例如:3.1416 中的 1416 是小數部分,表示分數的形式。小數點後的第一位是十分位(1/10),第二位是百分位(1/100),第三位是千分位(1/1000),以此類推。
    請一步一步思考9.9和9.11哪一個比較大?
    

    模型了解小數點的判讀方式,回答正確:

    讓我們來一步一步思考9.9和9.11哪一個比較大:
    
    1. 首先,我們看整數部分:
       兩個數字的整數部分都是9,所以我們需要比較小數部分。
    
    2. 比較小數部分:
       - 9.9的小數部分是9
       - 9.11的小數部分是11
    
    3. 分析小數部分:
       - 9.9 = 9 + 9/10 = 9 + 0.9
       - 9.11 = 9 + 1/10 + 1/100 = 9 + 0.10 + 0.01 = 9 + 0.11
    
    4. 比較0.9和0.11:
       0.11 比 0.9 小,因為0.11只有11個百分之一,而0.9有90個百分之一。
    
    5. 結論:
       因為9.9的小數部分大於9.11的小數部分,所以9.9比9.11大。
    
    因此,9.9比9.11大。
    

基於CoT的架構,也有衍伸出Tree of Thoughts(ToT)的架構,解決了CoT只有單一思路可能會因為一個想法錯誤而導致全部推理錯誤的狀況。

ToT和CoT一樣會先將較大的問題分解為更小的子任務,讓模型逐步處理。ToT的運作機制會使用搜尋演算法(ex. 廣度優先搜尋、深度優先搜尋等)來系統性地探索思路樹,從而找到最佳解決方案。
舉例來說:

  • 沒有CoT

    9.9和9.11哪一個比較大?
    

    模型不理解小數點的判讀方式,所以回答錯誤:

    9.11比9.9大。
    在十進制數字系統中,9.11表示9加上11/100(或0.11),而9.9表示9加上9/10(或0.9)。
    計算如下:
    9.11 = 9 + 0.11 = 9.11
    9.9 = 9 + 0.9 = 9.90
    因此,9.11大於9.9,差值為0.21。
    需要我進一步解釋嗎?
    
  • 使用CoT

    小數點左邊的數字表示整數部分,例如:3.1416 中的 3 是整數部分。小數點右邊的數字表示小數部分,例如:3.1416 中的 1416 是小數部分,表示分數的形式。小數點後的第一位是十分位(1/10),第二位是百分位(1/100),第三位是千分位(1/1000),以此類推。
    請一步一步思考9.9和9.11哪一個比較大?
    

    模型了解小數點的判讀方式,回答正確:

    讓我們來一步一步思考9.9和9.11哪一個比較大:
    
    1. 首先,我們看整數部分:
       兩個數字的整數部分都是9,所以我們需要比較小數部分。
    
    2. 比較小數部分:
       - 9.9的小數部分是9
       - 9.11的小數部分是11
    
    3. 分析小數部分:
       - 9.9 = 9 + 9/10 = 9 + 0.9
       - 9.11 = 9 + 1/10 + 1/100 = 9 + 0.10 + 0.01 = 9 + 0.11
    
    4. 比較0.9和0.11:
       0.11 比 0.9 小,因為0.11只有11個百分之一,而0.9有90個百分之一。
    
    5. 結論:
       因為9.9的小數部分大於9.11的小數部分,所以9.9比9.11大。
    
    因此,9.9比9.11大。
    

基於CoT的架構,也有衍伸出Tree of Thoughts(ToT)的架構,解決了CoT只有單一思路可能會因為一個想法錯誤而導致全部推理錯誤的狀況。

ToT和CoT一樣會先將較大的問題分解為更小的子任務,讓模型逐步處理。ToT的運作機制會使用搜尋演算法(ex. 廣度優先搜尋、深度優先搜尋等)來系統性地探索思路樹,從而找到最佳解決方案。https://ithelp.ithome.com.tw/upload/images/20240922/20151952u7rtXDUtgZ.png

RAG

RAG(Retrieval-Augmented Generation)是一種結合語言模型和資料檢索技術的方法,當我們需要有一個特定領域知識的專家時就很適合使用RAG,因為我們可以投入很多資料讓模型進行檢索,而不用再訓練模型,就能讓語言模型回答資料的內容給使用者。

Embedding技術

提到RAG就必須要提到「Embedding」,Embedding的技術是將文字具有的特徵轉換為向量的形式。

舉例來說:

花是繽紛的、有些長在草地上、季節性的、很漂亮等,這些和花相關的特性就是文字特徵,Embedding model 會將這些文字特徵轉換為數字散佈在多維空間中,也就是所謂的向量。
https://ithelp.ithome.com.tw/upload/images/20240922/20151952qiQ7HPnueq.png

RAG流程

https://ithelp.ithome.com.tw/upload/images/20240922/20151952TUeosn5Mpt.png
將RAG的流程拆分為兩階段,第一階段我們需要先建置知識庫,第二階段則是從使用者提問到檢索回應的過程:

建置知識庫

  1. 將資料進行拆分切割成Chunks,可以依照資料的特性去決定chunk的切割依據。
  2. 透過Embedding Model將每一個Chunk進行Embedding,把文字資料轉換成向量。
  3. 將向量儲存到資料庫或其他儲存空間作爲RAG的「知識庫」。

提問與回應

  1. 使用者提出問題(User Input)。
  2. 透過Embedding Model將使用者的input轉換成向量。
  3. 比對User Input的向量節點和知識庫內鄰近的向量節點,進而找到相關的知識。
  4. 把User Input和找到的相關知識重新增強(augment)成一個新的prompt.
  5. 讓大語言模型針對新的prompt進行回答。
  6. 將語言模型回答內容回應給使用者。

進階

除了上述的方法以外,也有一些最佳化prompt的框架工具和套件可以使用,這邊分享TextGrad,可以參考:

Reference


本文內容基於個人學習、交流與實踐經驗,並非專門研究生成式 AI 或領域專家。若有任何問題或內容上的錯誤或建議,誠摯歡迎友善交流與指正,讓我們共同探討與成長。感謝您的閱讀與支持!


上一篇
Day7 Prompt的魅力與基礎技巧
下一篇
Day9 LangChain介紹
系列文
生成式 AI之亂—從概念到實踐的LLM開發生態探索12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言