如何分析和修復LLM應用程式中的錯誤

2024-10-16     51CTO

本文通過四個階段過程來系統地理解和修復LLM應用程式中的錯誤。

大型語言模型(LLM)為機器學習的應用創造了一個新的範式。一方面,用戶有一個機器學習模型,可以根據自己的需求和任務進行定製。另一方面,可能無法訪問模型的權重和超參數。用戶可以通過調整提示和提供給模型的信息來控制模型的行為。

這對於那些習慣於開發傳統機器學習應用程式的人來說帶來了難題。如果沒有一種系統的方法來分析錯誤並進行更正,那麼可能會陷入混亂的境地——隨機更改提示,但又無法衡量每次修改的影響。

本文通過以下四個階段過程來系統地理解和修復LLM應用程式中的錯誤。

第一階段:準備

在修正錯誤之前,應該能夠衡量它們。在這個階段,將以允許用戶跟蹤模型性能的方式制定目標任務。

(1)創建數據集:創建50~100個示例,這些示例代表目標任務以及應用程式用戶將發送的請求類型和預期響應。每個示例都應該包括請求和響應。如果希望響應包含推理鏈等其他信息,需要確保將其包含在示例中。如果響應必須以特定格式(例如JSON或鍵值對)返回,需要確保所有示例的格式都正確無誤。

(2)開發評估方法:需要找出一種方法來比較模型的響應與數據集中的實際情況。對於數字任務和問答,評估就像創建一個比較回答的函數一樣簡單。

對於生成性任務(例如生成摘要)需要採用更複雜的方法,如單獨的LLM提示。例如,首先人工審查和糾正一些模型響應,並開發一小部分寫入和錯誤的答案。然後,創建了單獨的LLM-as-a-Jjudge提示,其中包含對新模型答案進行評分的示例。

(3)指定目標接受標準:並非所有任務都需要完美的輸出。例如,在許多應用中,總是會採用人工參與的循環方式,並且僅將LLM作為執行部分基礎工作的輔助工具。在這種情況下,可以指定一個準確度級別,以使LLM應用達到可發布的標準。然後,可以收集更多數據來優化提示,並逐漸提高其準確度。例如,曾經幫助一個團隊翻譯需要精心設計提示的特殊文本。首先從簡單的提示開始,該提示將他們的翻譯速度提高了25%。雖然不完美,但這個應用卻非常有價值,節省了大量時間。隨後,根據反饋和示例逐步完善提示,使其能夠完成他們80%的工作。

第二階段:評估

這個階段的目標是以一種可以系統地處理的方式來識別和分類模型所產生的錯誤。

(1)跟蹤數據集上的錯誤:在數據集上運行提示,將模型的響應與實際情況進行比較,並將模型產生錯誤的示例分開。對於這一步,將需要使用在上一階段開發的評估函數。

(2)對錯誤進行分類:創建一個電子表格,其中包含模型犯錯誤的示例、模型的響應以及正確的響應。將錯誤分為幾個常見的原因和類別。一些原因示例可以是「缺乏知識」、 「推理不正確」、「計算錯誤」和「輸出格式不正確」。(提示:可以使用前沿模型來幫助發現錯誤中的模式。為模型提供正確和錯誤的答案,並指導它將它們分為幾個類別。雖然它可能不會提供完美的結果,但將會提供一個很好的起點。)

第三階段:糾正

這一階段的目標是修改提示,以糾正在前一階段中發現的常見錯誤。在這一階段的每個步驟中,對提示符進行一次修改,並重新運行模型出錯的示例。如果錯誤沒有解決,可以進入下一階段,嘗試採用更複雜的解決方案。

(1)修正提示:根據在前一階段發現的錯誤類別,對提示進行修正。從非常簡單的修改開始,例如添加或更改說明(例如,「只輸出答案,不輸出額外的細節」,「只輸出JSON」,「在回答問題之前,逐步思考並寫下推理」)。

(2)在提示中添加知識:有時,問題是模型沒有關於任務的基本知識。在提示中創建一個「知識」部分,可以在其中包含任何有助於模型的事實或額外信息。

這一部分可以包括任何與任務相關的內容,包括文檔、代碼和文章。 (在這個階段不要擔心提示的長度,只關注錯誤分析。以後可以考慮優化提示的成本和規模。)

(3)使用小樣本示例:如果簡單的說明和額外的知識不能解決問題,嘗試在提示中添加少量示例。在提示中添加一個「示例」部分,其中包括問答對,並演示模型應該如何解決問題。從兩到三個例子開始,使提示保持簡短。如果錯誤仍未解決,則逐漸添加更多示例。由於當今的前沿模型支持很長的提示,因此可以添加數百個示例。而嘗試使用Claude、Gemini和ChatGPT,使用正確的場景示例格式,可以獲得令人印象深刻的結果。

(4)將提示分解成幾個步驟:有時候,在一個提示中要求太多了。如果任務可以分解成單獨的步驟,嘗試為每個步驟創建一個單獨的提示。當被要求完成一項任務時,模型更有可能很好地執行。然後,可以創建一個提示管道,將每個步驟的輸出作為下一個提示的輸入文本。更高級的管道可能包括使用不同提示序列的額外邏輯。例如,第一步可能是確定請求是否需要外部信息的提示。如果需要,請求將被傳送到一個RAG提示符。否則,它將被傳遞給使用模型的內存知識的另一個提示符。

第四階段:最終確定

這一階段的目標是確保修正不會導致其他問題,也不會破壞模型在目標任務上的一般能力。

(1)重新評估整個數據集:一旦將模型的錯誤糾正到可接受的水平,通過糾正提示重新運行所有示例,以確保一切正常工作。如果遇到新的錯誤,重複評估和糾正階段。

(2)保留一個單獨的驗證數據集:為了確保提示不會過擬合到數據集,為最終評估保留一個保留集。這將確保提示超越訓練示例。這類似於經典的機器學習,有單獨的測試和驗證集。如果模型在驗證集上表現不佳,則必須重複評估和糾正錯誤的階段。之後,需要創建新的驗證示例。(提示:可以使用前沿模型生成新的示例,其方法是為它提供一些以前的示例,並要求它生成不同但相似的示例。)

如上所示,機器學習錯誤分析的基本原則也適用於LLM應用程式。只需要從正確的角度思考問題及其解決方案。

文章來源: https://twgreatdaily.com/zh/907e8feabb7e3e98fd81784abcd8648b.html