Toolformer揭秘:大語言模型如何自學成才,掌握工具使用!
大語言模型(LLMs)在處理自然語言處理任務時展現出了令人印象深刻的零樣本和少樣本學習能力,但它們在一些基礎功能上表現不佳,例如算術運算或事實查找。這些局限性包括無法訪問最新事件的信息、傾向于虛構事實、難以理解低資源語言、缺乏進行精確計算的數學技能,以及對時間進展的不敏感。
為了克服這些限制,一個簡單的方法是讓語言模型能夠使用外部工具,如搜索引擎、計算器或日歷。然而,現有的方法要么依賴大量人工注釋,要么將工具使用限制在特定任務的設置中,這限制了工具在語言模型中的廣泛應用。
于是Meta AI提出Toolformer,通過簡單的API調用來教會自己使用外部工具。
項目地址:https://github.com/xrsrke/toolformer
1、方法介紹
Toolformer模型的核心方法論在于通過自監督學習教會語言模型(LMs)使用外部工具,主要通過以下步驟實現:
API調用的表示
首先是API調用表示的定義:將每個API調用表示為一個元組,其中
是API的名稱,
是對應的輸入。給定一個API調用c及其對應的結果r,分別表示不包括和包括其結果的API調用的線性化序列為:
其中,“ <API> ”、“ </API> ”和“→”是特殊標記。圖1展示了一些插入到文本序列中的線性化API調用的示例。
訓練數據集
給定一個純文本數據集,將其轉換為一個帶有API調用的增強數據集
,具體步驟如下:
模型微調
- API調用采樣:
對于每個API,設計一個提示(prompt)P(x),鼓勵語言模型(LM)在給定的文本例子上注釋API調用。例如,對于問答工具,提示會展示如何將問題插入到文本中,并用特定的格式(如"[QA(question)]")來表示API調用。
對于文本序列中的每個位置,計算模型在該位置開始API調用的概率
。然后給定一個采樣閾值
,保留所有概率
的位置,并從中選取最多k個候選位置。
對于每個選定的位置 i,基于前綴和后綴</API>,從模型M最多獲得m 個API調用
。
- API調用執行:
對所有由M生成的API調用進行實際執行,以獲得相應的結果rir_iri。不同的API有不同的執行方式,例如調用另一個神經網絡、運行Python腳本或使用檢索系統搜索大型語料庫。 - API調用過濾:
為了確定哪些API調用是有益的,Toolformer引入了一種自監督損失函數L來評估API調用的效果。
對于序列中的位置i上的API調用及其結果
,使用加權交叉熵損失函數
來衡量模型在給定前綴z時對后續Token的預測能力。具體來說,
表示在提供API調用及其結果的情況下的損失,
表示不提供任何API調用結果時的損失。通過比較提供API調用結果與否的損失差異來決定是否保留該API調用。
如果提供API調用結果能夠顯著降低模型的預測損失,即,那么這個API調用就被認為是有用的,并被保留下來。
- 最后,Toolformer利用經過上述步驟處理后的數據集
來微調原始的語言模型M。這里的數據集
包含了原始文本以及有用的API調用信息。這種方法確保了模型不會失去其通用性和語言建模能力的同時,還獲得了使用外部工具的能力。
- 在微調后生成文本時,進行常規解碼,直到模型生成“→”標記,表示它接下來期望獲得API調用的結果。此時,中斷解碼過程,調用適當的API以獲取響應,并在插入響應和 </API>標記后繼續解碼過程。
下面是所有的工具及使用示例:
2、實驗
實驗設置
- 數據集生成:使用CCNet的一個子集作為語言建模數據集C,并選擇GPT-J作為語言模型M。另外,為了降低標注C時API調用的計算成本,為一些API定義了啟發式規則,以便篩選出那些更可能從API調用中受益的文本子集。例如,對于計算器工具,只考慮包含至少三個數字的文本。
- 基線模型:實驗比較了以下幾種模型:
GPT-J:未經微調的標準GPT-J模型。
GPT-J+ CC:在CCNet子集上微調但不涉及任何API調用的GPT-J模型。
Toolformer:在帶有API調用注釋的CCNet子集C?上微調的GPT-J模型。
Toolformer(disabled):與Toolformer相同,但在解碼時禁用了API調用。
此外,還對比了兩個更大規模的模型OPT (66B) 和 GPT-3 (175B),它們分別比其他基準模型大10倍和25倍左右。
LAMA
LAMA任務涉及完成一個缺少事實信息的簡短陳述(例如,日期或地點)。這個任務包括SQuAD、GoogleRE和T-REx子集。Toolformer在這些子集上的性能優于基線模型,即使與更大的模型如GPT-3相比也具有競爭力。
Math Datasets
這個任務測試了模型的數學推理能力,包括ASDiv、SVAMP和MAWPS等數學基準測試。Toolformer在這些任務上的性能超過了基線模型,并且在允許API調用時性能得到進一步提升。這表明模型學會了在需要時調用計算器工具來輔助計算。
Question Answering
在問答任務中,Toolformer在Web Questions、Natural Questions和TriviaQA數據集上的表現超過了同樣大小的基線模型。Toolformer主要依靠Wikipedia搜索API來找到相關信息,這表明它學會了如何利用搜索工具來增強其問答能力。
Toolformer仍然落后于更大的GPT-3(175B)模型,這可能是由于搜索引擎的簡單性(在許多情況下,它返回的結果顯然與給定查詢不匹配)以及Toolformer無法交互使用,例如,如果結果沒有幫助,重新制定其查詢或瀏覽多個頂部結果。
Multilingual Question Answering
多語言問答任務(MLQA)評估了模型在處理多種語言輸入時的能力。Toolformer在所有語言上使用API調用一致性地提高了性能,表明它學會了如何使用機器翻譯工具來處理非英語問題。
Temporal Datasets
時間數據集任務評估了模型處理與時間相關的查詢的能力。Toolformer在TEMPLAMA和DATESET數據集上超越了基線模型。盡管Toolformer并沒有100%地利用日歷工具,但它更多地使用了Wikipedia搜索來提高性能。
語言建模能力
Toolformer模型在經過API調用微調后,其語言建模性能幾乎沒有受到影響
規模法則
下面展示了模型規模如何影響模型的能力,從結果可以看到,只有當模型參數量達到大約775M時,模型利用提供的工具的能力才顯現出來。一個例外是主要用于QA基準測試的Wikipedia搜索引擎;作者們推測這是因為該API相對容易使用。盡管隨著模型規模的增長,模型在不使用API調用的情況下解決任務的能力增強,但它們利用提供的API的能力也同時提高。因此,即使對于最大的模型,使用和不使用API調用的預測之間仍然存在很大的差距。
3、總結
這篇文章構建了一個工具數據集,并用該數據集微調大模型得到Toolformer,增強了大模型調用工具的能力,但是沒有加入與LLM的交互,如果能夠獲得LLM的思考與反思,通過與環境的交互可能會有更好的效果。也是比較早的一篇工作了,后來隨著langchain和agent的出現,能夠更容易地實現工具調用。