DiVeRSe ("Diverse Verifier on Reasoning Steps") 是一張透過三重方式提高答案可靠性的方法。它透過使用多個提示生成多樣化的補全結果(completions),使用驗證器區分好的答案和壞的答案,並使用驗證器檢查推理步驟的正確性。
DiVeRSe 使用五個不同的提示來對給定的輸入進行編碼。為了構造每個提示,他們隨機從訓練集中抽取幾個樣例。以下是一個樣本(k = 2)的少量資料提示,其中樣例取自GSM8K 基準測試。在此基準測試中,DiVeRSe 使用 5 個樣例來構建提示。
Q:Natalia在4月份向她的48個朋友出售了夾子,然後在5月份賣出了一半。 Natalia在四月和五月共賣了多少個夾子?
A:Natalia在五月份賣出了48/2 = 24個夾子。
Natalia在四月和五月共賣出了48 + 24 = 72個夾子。
#### 72
Q:Weng為照看孩子每小時賺取12美元。昨天,她只照看了50分鐘。她賺了多少錢?
A:翁每分鐘賺12/60 = 0.2美元。
工作50分鐘,她賺了0.2 x 50 = 10美元。
#### 10
Q:貝蒂正在為一隻價值100美元的新錢包存錢。貝蒂只有一半的錢。她的父母決定給她15美元,並且她的祖父母比她的父母多兩倍。貝蒂還需要多少錢才能買錢包?
A:
在生成類似上面的 5 個不同提示之後,DiVeRSe 為每個提示(temperature = 0.5)取樣 20 條推理路徑。以下是上述提示的幾個樣本的補全結果。請注意,答案並不總是正確的。
Betty有0.5*100 = 65。然後她又得到了2*15美元 = 10。10
A: Betty有0.5*100 = 650。然後她又得到了2*15美元 = 1000。1000
此時,DiVeRSe 已經生成了 100 個不同的完成。
現在,我們可以像自洽性一樣,直接採用多數答案。
但是,DiVeRSe 提出了一種更復雜的方法,稱為投票驗證器。
在測試時,使用投票驗證器是一個兩步過程。首先,驗證器(一個神經網路)根據其可能正確的機率為每個補全結果分配 0-1 分數。然後,“投票”元件對不同答案的所有分數進行求和,併產生最終答案。
這裡是一個小例子。假設對於二加二等於幾?
這個提示的補全結果是這樣的:
4
二 + 2 = 5
我想 2+2 = 6
二加二 = 4
答案是5
驗證器將讀取每個補全結果併為其分配分數。例如,它可能分配以下分數:0.9,0.1,0.2,0.8,0.3。然後,“投票”元件將對每個答案的分數進行求和。
score(4) = 0.9 + 0.8 = 1.7
score(5) = 0.1 + 0.3 = 0.4
score(6) = 0.2
最終答案是 4,因為它具有最高的分數。
但驗證器是如何訓練的?
驗證器使用稍微複雜的損失函式進行訓練,在這裡不進行詳細介紹。請閱讀論文 3.3 節以獲取更多細節。
這裡主要是使用多個提示來生成多樣化的補全結果。在實踐中,與投票驗證相比,多數投票可能效果更好。
Li, Y., Lin, Z., Zhang, S., Fu, Q., Chen, B., Lou, J.-G., & Chen, W. (2022). On the Advance of Making Language Models Better Reasoners. ↩ ↩2
Cobbe, K., Kosaraju, V., Bavarian, M., Chen, M., Jun, H., Kaiser, L., Plappert, M., Tworek, J., Hilton, J., Nakano, R., Hesse, C., & Schulman, J. (2021). Training Verifiers to Solve Math Word Problems. ↩
Mitchell, E., Noh, J. J., Li, S., Armstrong, W. S., Agarwal, A., Liu, P., Finn, C., & Manning, C. D. (2022). Enhancing Self-Consistency and Performance of Pre-Trained Language Models through Natural Language Inference. ↩