Last updated on August 7, 2024
在整個課程中,我們看到了許多不同的提示方法,可以用來提高 LLM 數學能力。最近的一種方法 MathPrompter 將其中一些方法(CoT, PAL, etc.) 統一為一項技術。總體思想是將數學問題分解為代數術語,然後使用 Python 程式碼以不同的方式解決它。
MathPrompter 有 4 步驟。我們將使用以下範例問題來解釋它們。此範例直接取自論文。
Q: At a restaurant, each adult meal costs $5 and kids eat free. If a group of 15
people came in and 8 were kids, how much would it cost for the group to eat?
第一步是為問題中的每個數字分配一個變數。這很有幫助,因為它可以更輕鬆地將問題轉換為抽象數學問題以及程式碼。
這可以透過一些 few shot 提示來完成:
此步驟的重點是將問題表述為代數語句和 Python 程式碼。此步驟有兩個同時提示,有助於給出問題的不同表示。
We can few-shot prompt the LLM to represent the math problem as an algebraic statement. This is done by asking the LLM to generate the answer format, starting with "Answer =".
我們可以使用 few-shot提示讓 LLM 將數學問題表示為代數陳述。這是透過要求 LLM 產生以 "Answer =" 開頭的答案格式來完成的。
我們也可以要求 LLM 產生解決問題的 Python 程式碼。這是透過要求 LLM 產生一個 Python 函數來完成的。
現在,我們可以使用先前產生的映射來自動填入變數。
Mapping: {A: 5, B: 15, C: 8}
代數:
Answer = 5 * 15 - 5 * 8
Python 函數:
def restaurant_cost(A=5, B=15, C=8):
return A * (B - C)
我們可以使用 Python 來評估兩者。
代數:
>
> eval("5 * 15 - 5 * 8")
35
Python 函數:
>
> restaurant_cost()
35
最後,我們將利用 Self-Consistency 多次重新執行上述過程 (~5),然後採用多數答案。
MathPrompter 驗證 MultiArith 資料集的準確度為 92.5%。這項技術的成功是一個很好的例子,說明您作為提示工程師如何能夠採用您在本課程中學到的方法並將它們結合起來處理更大更複雜的問題。
Imani, S., Du, L., & Shrivastava, H. (2023). MathPrompter: Mathematical Reasoning using Large Language Models. ↩
Roy, S., & Roth, D. (2015). Solving General Arithmetic Word Problems. Proceedings of the 2015 Conference on Empirical Methods in Natural Language Processing, 1743–1752. https://doi.org/10.18653/v1/D15-1202 ↩