改個名字,數倍提升Function Calling準確率!
你好啊,我是小智,今天我將詳細解析Hammer模型如何通過函數名和參數名的修改,數倍提升模型在Function Calling任務中的準確性。
改名提升模型性能,看似玄學也有依據
簡潔命名的模糊性
在大多數編程語言中,函數名和參數名都是對功能的抽象表達。通常情況下,簡潔的命名規則便于代碼閱讀與理解,但當這些簡潔的命名被直接作為模型輸入時,可能會導致一定程度的模糊性。例如,假設我們有一個名為get_data的函數,該函數可能用于從數據庫、文件或網絡獲取數據,但不同的上下文可能會讓模型難以判斷其真正用途。
特別是在存在復雜功能的情況下,簡潔的命名約定可能導致誤導。例如,save可能表示保存文件、保存數據,甚至是提交數據庫事務。此時,模型僅依賴函數名推斷函數目的時,簡潔命名反而可能降低準確性。
同名參數的誤導性
同樣,函數參數名的命名慣例也可能影響模型的判斷。在數據集中,不同的函數可能使用相同或類似的參數名,導致模型在推斷過程中受到歷史數據的干擾。比如,data或input等參數名可能在不同的函數中具有完全不同的含義,但如果模型只依據參數名來推斷其用途,可能會引發錯誤推斷。
命名約定的不一致性
在實際開發中,命名約定常常因團隊、項目或語言的不同而存在差異。例如,駝峰式命名(CamelCase)和下劃線式命名(snake_case)在同一數據集中可能并存。如果訓練數據集中的命名方式與測試環境中的不一致,模型的表現可能會受到負面影響。在這種情況下,模型可能無法準確理解不同命名方式的函數或參數,影響其調用的準確性。
Schema描述更加準確有力
Schema描述提供了更靈活的自然語言解釋,往往更準確和詳細,并通常包含函數和參數名稱旨在傳達的信息"。
函數和參數名稱的簡潔和簡潔格式可能會導致歧義,并誤導模型的理解,特別是在存在復雜功能的情況下。相比之下,描述提供了對函數作用和預期行為的更全面的視角,超越了函數和參數名稱所能傳達的內容。通過關注描述而不是名稱,模型可以更準確地把握函數的意圖,并避免訓練數據中特定命名模式引入的陷阱。
如何實現改名后的模型訓練
增強數據集:微調與多樣性提升
為了提升函數調用準確率,Hammer模型采用了增強數據集的策略。在此方法中,模型通過對數據集進行擴展,尤其是在xLAM-function-calling-60k數據集上增加了7,500個實例,這些實例專注于檢測無關性,從而使得模型能夠更好地區分相關和無關的函數調用。
通過這種增強方式,模型能夠更好地處理在訓練集和測試集之間存在的命名不一致性。對數據集的微調不僅提高了模型對函數名的敏感度,也讓模型學會了如何忽略無關的參數和函數。
函數屏蔽:減少對名稱的依賴
Hammer模型采用了函數屏蔽技術,在訓練過程中隨機將候選函數名稱替換為隨機字符串。這一策略的核心思想是使得模型更關注函數的功能描述,而非函數名稱。這種方式迫使模型理解函數的功能,而不僅僅是通過名稱來推測其目的。
具體來說,模型通過僅僅理解函數的輸入輸出及其描述來進行函數調用,而非依賴可能模糊或誤導的名稱信息。例如,在訓練過程中,模型可能會遇到如下兩種情況:
- 原始命名:get_user_data(user_id)
- 屏蔽后的命名:function_1234(arg1)
在屏蔽后的訓練過程中,模型不會通過get_user_data來猜測其功能,而是通過函數描述或參數來推斷其功能。
函數描述的優化
除去函數名本身,函數描述也是模型理解函數目的的重要線索。通過增強訓練集中的函數描述,并將這些描述與輸入輸出匹配,模型能夠更好地學習到函數的實際功能。這一過程涉及到對數據集的精細化處理,使得每個函數都附帶一個盡可能詳細的描述。
這種優化策略,結合函數屏蔽和增強數據集的手段,能有效提升模型對函數調用的準確性和魯棒性。
啟發
高質量數據是金礦
在任何機器學習任務中,高質量數據都至關重要。而數據的質量不僅僅體現在標注的準確性,還包括數據的多樣性和豐富性。Hammer模型的成功不僅僅在于使用了大規模的數據集,更在于對已有數據進行了精細化的改造和優化。作為AI工程師,我們應該從數據源的多樣性和質量上投入更多精力,而不僅僅關注模型的復雜度。
從人的角度出發
大多數工程師在設計函數時,往往是從功能描述出發,而非僅依賴函數名稱。這一思維模式實際上與模型的思維方式存在類似性。通過從人的角度理解模型如何處理函數調用,我們可以發現許多潛在的優化空間。例如,考慮到工程師在編寫函數時會根據其功能來定義參數,而不僅僅依賴參數名本身,模型也應該更多地關注函數的功能描述。
本文轉載自 ??AI小智??,作者: AI小智
