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