克服 AI 數字比較錯誤:提升大型語言模型準確性的有效方法

T客邦的新聞 「9.11與9.9哪一個數字比較大,為什麼這麼簡單的問題連ChatGPT、Claude都答錯?」引起不少討論。除了「連比數字這麼簡單的問題都會答錯」的看熱鬧心態之餘,實務上如何修正這個問題?本文探討了三種解決方法:(1) 使用 Python 計算結果、(2) 引導模型思考 (思路鍊策略) 、(3) 提供明確的解題策略。

這是一幅極簡主義的超現實畫作,靈感來自薩爾瓦多·達利的《記憶的永恆》。背景是平靜的海面和遠處的懸崖,日落時分的柔光。前景中的數字以極簡風格呈現,有些懸掛在抽象的枯樹枝上,有些散落在地面和四周。中央的神秘抽象物體上覆蓋著數字。
極簡主義的超現實畫作,靈感來自薩爾瓦多·達利的《記憶的永恆》

問題描述

原本題目「9.11 與 9.9 哪一個數字比較大?」改成「7.11 與 7.9 哪一個數字比較大?」

試驗結果:

T客邦的新聞中提到「9.11 與 9.9 哪一個數字比較大」 ChatGPT 3.5 與 Google Gemini 是成功的。但是稍微換下題目,就會犯錯。這其實非常危險,原本以為是可以信任、幫忙算數的模型,但其實可能只是瞎掰的。


ChatGPT 3.5 比較 7.11 與 7.9 得到錯誤結果


Claude 3.5 Sonnet 比較 7.11 與 7.9 得到錯誤結果


解決方式

解法1:要求使用 Python 計算結果

原本的提示文字

7.11與7.9哪一個數字比較大

修改後的提示

7.11與7.9哪一個數字比較大

使用 Python 計算結果

試驗結果:

  • ChatGPT 3.5、ChatGPT 4o、Claude 3.5 Sonnet、MS Copilot、Google Gemini 都答對。

ChatGPT 3.5 使用 Python 比較 7.11 與 7.9 得到正確結果

Claude 3.5 Sonnet 使用 Python 比較 7.11 與 7.9 得到正確結果

輸出結果都有提供 Python 程式碼,事後真人要手動驗證結果也比較容易。

解法2:要求模型「花時間」思考

有網友留言提到把題目改成「7.11 與 7.90 哪一個數字比較大?」9 改成 90 幫助 AI 解題。但是這樣有作弊嫌疑。OpenAI 提示工程 (Prompt engineering) 說明中提到的一項 「思路鏈」(Chain of Thought,以下簡稱 CoT) 策略
策略:在匆忙得出結論之前,指導模型制定自己的解決方案。

有時,當我們明確要求模型在得出結論之前從基本原理進行推理時,我們會得到更好的結果。例如,假設我們希望模型評估學生對數學問題的解決方案。最直接的方法是簡單地詢問模型學生的解決方案是否正確。

原本的提示文字

7.11與7.9哪一個數字比較大

修改後的提示

7.11與7.9哪一個數字比較大

請不要直接給我結果,先思考包含小數點的兩個數字要如何比大小的原則後,再比較

試驗結果:
ChatGPT 3.5 使用 CoT 比較 7.11 與 7.9 ,但還是得到錯誤結果


Claude 3.5 Sonnet 使用 CoT 比較 7.11 與 7.9 得到正確結果



解法3:直接提供模型解題策略

直接將數字比大小的原則列出來,要求機器人直接依照這個原則

原本的提示文字

7.11與7.9哪一個數字比較大

修改後的提示

7.11與7.9哪一個數字比較大

根據以下規則,比較兩個數字大小


```

變量 n 和 m 數字比大小的規則:


1. 整數部分比較:

   - 首先比較整數部分 n 和 m。如果 n ≠ m,較大的整數部分代表較大的數。

   - 如果 n = m,則需要進一步比較小數部分。


2. 小數部分比較:

   - 從左到右逐位比較小數部分的數字。

   - 在第一個不同的位置,數字較大的就是較大的數。


3. 對齊小數點:

   - 如果小數位數不同,可以在較短的數字後面添加0,使兩個數的小數位數相同。

   - 例如: n.a 可以寫成 n.a0 (其中 a 代表任意數字)


4. 特殊情況:

   - 如果整數部分和所有小數位數都相同,則這兩個數相等。


5. 實際應用:

   - 例如,比較 n.11 和 n.9:

     n.11 = n.11 (不需要改變)

     n.9 = n.90 (添加0使小數位數相同)

   - 比較 11 和 90,90更大,所以 n.90 > n.11


6. 記住:

   - 在小數中,n.1 比 n.09 大,因為在小數中,越靠左的位置權重越大。


7. 補充說明:

   - 如果數字包含負號 (-),則先比較數字的正負。負數總是比正數小。如果兩個數都是負數,則按照上述規則比較其絕對值,結果取反。

   - 例如,-1.1 和 -1.09,先比較 1.1 和 1.09,1.1 > 1.09,所以 -1.1 < -1.09。

```

試驗結果:

ChatGPT 3.5 直接給解題策略,比較 7.11 與 7.9 得到正確結果

Claude 3.5 Sonnet 直接給解題策略,比較 7.11 與 7.9 得到正確結果

小結


本文探討了三種解決方法:
  1. 使用 Python 計算結果:使用 Python 可以精確地處理數字比較。但是不確定模型是單純提供 Python 程式碼,還是在背景有執行過程式碼。但是因為有提供程式碼,也比較方便驗證。
  2. 引導模型思考 (思路鍊策略):要求模型在得出結論前先思考比較數字的原則,雖然有一定效果,但有些模型並不完全可靠。但是列出不同思考階段得到的答案,也比較容易挑出錯誤。
  3. 提供明確的解題策略:直接列出數字比較的規則,這樣模型能夠根據規則正確比較數字大小。但是對於需要提供解題策略的一方的負擔就比較大。

參考資料

  1. 大型語言模型(LLM)是什麼?為什麼運作更像文字接龍、而非聽懂你的話?|經理人 
  2. Prompt engineering - OpenAI API

留言