大語(yǔ)言模型(LLM)在利用有限的文本數(shù)據(jù)解決新任務(wù)方面表現(xiàn)出令人難以置信的優(yōu)勢(shì)。然而,盡管如此,它們?cè)谄渌矫嬉灿芯窒扌?,例如?/p>
- 無(wú)法訪問(wèn)最新信息
- 幻想事實(shí)的傾向
- 低資源語(yǔ)言的困難
- 缺乏精確計(jì)算的數(shù)學(xué)技能
- 對(duì)時(shí)間進(jìn)程的不了解
如何使用大模型解決更多的問(wèn)題呢?在《解讀TaskMatrix.AI》一文中,TaskMatrix.AI是 Toolformer 和 chatGPT 的結(jié)合,將基礎(chǔ)模型與數(shù)百萬(wàn)個(gè) API 連接起來(lái)以完成任務(wù)。那么,什么是 Toolformer 呢?
Toolformer 是 Meta 開(kāi)源的新模型,能夠解決需要利用 API 的問(wèn)題,如計(jì)算器、維基百科搜索、字典查找等。Toolformer 能夠認(rèn)識(shí)到它必須使用一個(gè)工具,能夠確定使用哪個(gè)工具,以及如何使用該工具。Toolformers 的用例可能是無(wú)窮無(wú)盡的,從提供任何問(wèn)題的即時(shí)搜索結(jié)果,到情景信息,比如城里最好的餐館。
1. 什么是Toolformer?
什么是 Toolformer 呢?簡(jiǎn)而言之,Toolformer 是一個(gè)可以自學(xué)使用工具的語(yǔ)言模型。
Toolformer 基于一個(gè)預(yù)先訓(xùn)練的 GPT-J 模型,包含 67 億個(gè)參數(shù),使用自監(jiān)督學(xué)習(xí)方法進(jìn)行訓(xùn)練。這種方法包括采樣和過(guò)濾 API 調(diào)用,以增加現(xiàn)有的文本數(shù)據(jù)集。
Toolformer 希望通過(guò)以下兩個(gè)要求來(lái)完成 LLM 自學(xué)如何使用工具的任務(wù):
- 工具的使用應(yīng)該通過(guò)自我監(jiān)督的方式來(lái)學(xué)習(xí),而不需要大量的人工注釋。
- LM 不應(yīng)喪失其一般性,應(yīng)該能夠自行決定何時(shí)以及如何使用哪種工具。
下圖顯示了 Toolformer 的預(yù)測(cè)(例如,在數(shù)據(jù)樣本中嵌入的 API 調(diào)用):
2. Toolformer 的架構(gòu)和實(shí)現(xiàn)方法
ChatGPT 中的一個(gè)核心特性是基于上下文的學(xué)習(xí)(In-Context Learning),指的是一種機(jī)器學(xué)習(xí)方法,其中模型從特定上下文或環(huán)境中呈現(xiàn)的示例中學(xué)習(xí)。上下文學(xué)習(xí)的目標(biāo)是提高模型理解和生成適合給定上下文或情況的語(yǔ)言的能力。在自然語(yǔ)言處理(NLP)任務(wù)中,可以訓(xùn)練語(yǔ)言模型來(lái)生成對(duì)特定提示或問(wèn)題的響應(yīng)。那么,Toolformer 如何利用 In-Context Learning 呢?
Toolformer 是一個(gè)大型語(yǔ)言模型,它能夠通過(guò) API 調(diào)用使用不同的工具。每個(gè) API 調(diào)用的輸入和輸出需要格式化為文本/對(duì)話序列,以便在會(huì)話中自然流動(dòng)。
從上面的圖片中可以看到的,Toolformer 首先利用模型的上下文學(xué)習(xí)能力來(lái)對(duì)大量潛在的 API 調(diào)用進(jìn)行采樣。
執(zhí)行這些 API 調(diào)用,并檢查獲得的響應(yīng)是否有助于將來(lái)預(yù)測(cè) token,并被用作篩選條件。經(jīng)過(guò)過(guò)濾之后,對(duì)不同工具的 API 調(diào)用被嵌入到原始數(shù)據(jù)樣本中,從而產(chǎn)生增強(qiáng)的數(shù)據(jù)集,而模型就是在這個(gè)數(shù)據(jù)集上進(jìn)行微調(diào)的。
具體地,上圖顯示了使用問(wèn)答工具完成此任務(wù)的模型:
- LM 數(shù)據(jù)集包含示例文本: 為“Pittsburgh is also known as”輸入提示“Pittsburgh is also known as The Steel City”。
- 為了找到正確的答案,模型需要進(jìn)行一個(gè) API 調(diào)用并正確地進(jìn)行調(diào)用。
- 對(duì)一些 API 調(diào)用進(jìn)行了抽樣,特別是“ What other name is Pittsburgh known by?”和“ Which country is Pittsburgh in?”。
- 相應(yīng)的答案是“Steel City”和“United States”。因?yàn)榈谝粋€(gè)答案更好,所以它被包含到一個(gè)新的 LM 數(shù)據(jù)集中,并帶有 API 調(diào)用: “Pittsburgh is also known as [QA(”What other name is Pittsburgh known by?”) -> Steel City] the Steel City”。
- 這包含預(yù)期的 API 調(diào)用和應(yīng)答。重復(fù)此步驟以使用各種工具(即 API 調(diào)用)生成新的 LM 數(shù)據(jù)集。
因此,LM 使用嵌入在文本中的 API 調(diào)用來(lái)注釋大量數(shù)據(jù),然后使用這些 API 調(diào)用對(duì) LM 進(jìn)行微調(diào),以進(jìn)行有用的 API 調(diào)用。這就是自監(jiān)督訓(xùn)練的方式,這種方法的好處包括:
- 更少需要人工注釋。
- 將 API 調(diào)用嵌入到文本中允許 LM 使用多個(gè)外部工具來(lái)添加更多內(nèi)容。
Toolformer 然后學(xué)會(huì)預(yù)測(cè)每個(gè)任務(wù)將使用哪個(gè)工具。
2.1 API 調(diào)用的采樣
下圖顯示了給定用戶輸入的情況下,Toolformer使用和來(lái)表示API調(diào)用的開(kāi)始和結(jié)束。為每個(gè)API編寫(xiě)一個(gè)提示符,鼓勵(lì)Toolformer使用相關(guān)的API調(diào)用對(duì)示例進(jìn)行注釋。
Toolformer為每個(gè)token分配一個(gè)概率,作為給定序列的一個(gè)可能的延續(xù)。該方法通過(guò)計(jì)算ToolFormer分配給在序列中每個(gè)位置啟動(dòng)API調(diào)用的概率,對(duì)API調(diào)用的最多k個(gè)候選位置進(jìn)行采樣。保持概率大于給定閾值的位置,對(duì)于每個(gè)位置,通過(guò)使用以API調(diào)用為前綴、以序列結(jié)束標(biāo)記為后綴的序列從Toolformer采樣,最多可獲得m個(gè)API調(diào)用。
2.2 API調(diào)用的執(zhí)行
API調(diào)用的執(zhí)行完全取決于正在執(zhí)行調(diào)用的客戶端。客戶端可以是不同類型的應(yīng)用程序,從另一個(gè)神經(jīng)網(wǎng)絡(luò)、Python腳本,到在大型語(yǔ)料庫(kù)中搜索的檢索系統(tǒng)。需要注意的是,當(dāng)客戶端發(fā)出調(diào)用時(shí),API會(huì)返回一個(gè)單一的文本序列響應(yīng)。此響應(yīng)包含有關(guān)調(diào)用的詳細(xì)信息,包括調(diào)用的成功或失敗狀態(tài)、執(zhí)行時(shí)間等。
因此,為了獲得準(zhǔn)確的結(jié)果,客戶端應(yīng)該確保提供正確的輸入?yún)?shù)。如果輸入?yún)?shù)不正確,API可能會(huì)返回錯(cuò)誤的結(jié)果,這對(duì)于用戶來(lái)說(shuō)可能是不可接受的。另外,客戶端還應(yīng)該確保與API的連接是穩(wěn)定的,以避免在調(diào)用期間發(fā)生連接中斷或其他網(wǎng)絡(luò)問(wèn)題。
2.3 過(guò)濾API調(diào)用
在過(guò)濾過(guò)程中,Toolformer通過(guò)API調(diào)用后的token計(jì)算Toolformer的加權(quán)交叉熵?fù)p失。
然后,比較兩種不同的損失計(jì)算:
(i)一種是API調(diào)用,其結(jié)果作為輸入給Toolformer
(ii)一種是沒(méi)有API調(diào)用或者API調(diào)用但沒(méi)有返回結(jié)果。
如果為API調(diào)用提供輸入和輸出,使得Toolformer更容易預(yù)測(cè)未來(lái)的token,那么API調(diào)用就被認(rèn)為是有用的。應(yīng)用過(guò)濾閾值僅保留兩個(gè)損失之間的差值大于或等于閾值的API調(diào)用。
2.4 模型微調(diào)
最后,Toolformer將剩余的API調(diào)用與原始輸入合并,并創(chuàng)建一個(gè)新的API調(diào)用來(lái)增強(qiáng)的數(shù)據(jù)集。換句話說(shuō),增強(qiáng)的數(shù)據(jù)集包含與原始數(shù)據(jù)集相同的文本,只插入了API調(diào)用。
然后,使用新的數(shù)據(jù)集使用標(biāo)準(zhǔn)語(yǔ)言建模目標(biāo)對(duì)ToolFormer進(jìn)行微調(diào)。這樣可以確保在增強(qiáng)的數(shù)據(jù)集上微調(diào)模型會(huì)暴露給與在原始數(shù)據(jù)集上微調(diào)相同的內(nèi)容。通過(guò)在準(zhǔn)確的位置插入API調(diào)用,并使用幫助模型預(yù)測(cè)未來(lái)token的輸入,對(duì)增強(qiáng)數(shù)據(jù)的微調(diào)使語(yǔ)言模型能夠了解何時(shí)以及如何根據(jù)自己的反饋使用API調(diào)用。
2.5 推理
在推理過(guò)程中,當(dāng)語(yǔ)言模型產(chǎn)生“→”token時(shí),解碼過(guò)程被中斷,這表明 API 調(diào)用的下一個(gè)預(yù)期響應(yīng)。然后,調(diào)用適當(dāng)?shù)?API 來(lái)獲取響應(yīng),并在插入響應(yīng)和token之后繼續(xù)解碼。
此時(shí),我們需要確保獲取的響應(yīng)與上一個(gè)token所期望的響應(yīng)相匹配。如果不匹配,我們需要調(diào)整 API 調(diào)用以獲得正確的響應(yīng)。在繼續(xù)解碼之前,我們還需要執(zhí)行一些數(shù)據(jù)處理來(lái)準(zhǔn)備下一步的推理過(guò)程。這些數(shù)據(jù)處理包括對(duì)響應(yīng)的分析、對(duì)上下文的理解以及對(duì)推理路徑的選擇。因此,在推理過(guò)程中,不僅需要調(diào)用 API 來(lái)獲取響應(yīng),還需要進(jìn)行一系列的數(shù)據(jù)處理和分析,以確保推理過(guò)程的正確性和連貫性。
2.6 API工具
Toolformer 中每個(gè)可以使用的API工具都要滿足以下兩個(gè)條件:
- 輸入/輸出都需要表示為文本序列。
- 有可用的演示表達(dá)如何使用這些工具。
Toolformer 的初始實(shí)現(xiàn)中支持了五個(gè)API工具:
- 問(wèn)答回答:這是另一個(gè)LM,可以回答簡(jiǎn)單的事實(shí)問(wèn)題。
- 計(jì)算器:目前只支持4個(gè)基本的算術(shù)運(yùn)算,并四舍五入到小數(shù)點(diǎn)后兩位。
- Wiki搜索:返回從維基百科剪切下來(lái)的短文本的搜索引擎。
- 機(jī)器翻譯系統(tǒng):一個(gè)可以將任何語(yǔ)言的短語(yǔ)翻譯成英語(yǔ)的LM。
- 日歷:對(duì)日歷的API調(diào)用,該調(diào)用返回當(dāng)前日期而不接受任何輸入。
下圖顯示了使用的所有API的輸入和輸出示例:
3. 應(yīng)用示例
Toolformer在LAMA、數(shù)學(xué)數(shù)據(jù)集、問(wèn)題解答和時(shí)間數(shù)據(jù)集等任務(wù)中的性能優(yōu)于基線模型和GPT-3,但在多語(yǔ)言問(wèn)答中表現(xiàn)不如其他模型。Toolformer使用API調(diào)用來(lái)完成任務(wù),例如LAMA API、Calculator API和Wikipedia搜索工具API。
3.1 LAMA
任務(wù)是完成一個(gè)缺少事實(shí)的陳述語(yǔ)句。Toolformer 的性能優(yōu)于基線模型,甚至更大的模型,如 GPT-3。下表展示了通過(guò) LAMA API 調(diào)用獲得的結(jié)果:
3.2 數(shù)學(xué)數(shù)據(jù)集
任務(wù)是評(píng)估 Toolformer 的數(shù)學(xué)推理能力來(lái)對(duì)比各種基線模型。Toolformer 的性能優(yōu)于其他模型,可能是因?yàn)樗鼘?duì) API 調(diào)用示例進(jìn)行了微調(diào)。允許模型進(jìn)行 API 調(diào)用可以顯著提高所有任務(wù)的性能,并優(yōu)于 OPT 和 GPT-3等更大的模型。在幾乎所有情況下,模型都決定向計(jì)算器工具尋求幫助。
下表展示了通過(guò) Calculator API 調(diào)用獲得的結(jié)果:
3.3 問(wèn)題解答
任務(wù)是回答問(wèn)題,Toolformer 的性能優(yōu)于同樣大小的基線模型,但是優(yōu)于 GPT-3(175B)。Toolformer 利用 Wikipedia 的搜索工具來(lái)完成這項(xiàng)任務(wù)中的大多數(shù)示例。下表展示了通過(guò) Wikipedia 搜索工具 API 調(diào)用獲得的結(jié)果:
3.4 多語(yǔ)言問(wèn)答
問(wèn)答數(shù)據(jù)集被用于多語(yǔ)言問(wèn)答基準(zhǔn)測(cè)試 MLQA,其中包含英語(yǔ)上下文段落和阿拉伯語(yǔ)、德語(yǔ)、西班牙語(yǔ)、印地語(yǔ)、越南語(yǔ)或簡(jiǎn)體中文的問(wèn)題。Toolformer 在這里并不是最強(qiáng)大的表現(xiàn)者,這可能是由于 CCNet 在所有語(yǔ)言上都缺乏調(diào)優(yōu)。
下表展示了通過(guò) Wikipedia 搜索工具 API 調(diào)用獲得的結(jié)果:
3.5 時(shí)間數(shù)據(jù)集
任務(wù)是了解當(dāng)前日期對(duì)于回答問(wèn)題至關(guān)重要的位置。Toolformer 能夠超越基線,但是,顯然它沒(méi)有100% 地利用日歷工具。相反,它使用的是維基百科的搜索。下表展示了通過(guò) Wikipedia 搜索工具 API 調(diào)用獲得的結(jié)果:
4. ToolFormer 的局限
Toolformer 仍然存在一些局限性,例如無(wú)法同時(shí)使用多個(gè)工具、無(wú)法處理返回結(jié)果過(guò)多的工具、對(duì)輸入措辭敏感導(dǎo)致效率低下、未考慮使用成本可能導(dǎo)致高計(jì)算成本等問(wèn)題。具體如下:
- 由于每個(gè)工具的 API 調(diào)用都是獨(dú)立生成的,因此 Toolformer 無(wú)法在一個(gè)流程中使用多個(gè)工具。
- 特別是對(duì)于可能返回?cái)?shù)百個(gè)不同結(jié)果的工具(如搜索引擎),Toolformer 不能以交互方式使用。
- 使用 Toolformer 進(jìn)行訓(xùn)練的模型對(duì)輸入的確切措辭非常敏感,這種方法對(duì)于某些工具來(lái)說(shuō)效率很低,需要大量的文檔以生成少量有用的 API 調(diào)用。
- 在決定使用每個(gè)工具時(shí),沒(méi)有考慮使用它的成本,這可能會(huì)導(dǎo)致較高的計(jì)算成本。
5. 小結(jié)
Toolformer 是一個(gè)大型語(yǔ)言模型,通過(guò)使用 In-Context Learning 來(lái)提高模型理解和生成適合給定上下文或情況的語(yǔ)言能力。它使用 API 調(diào)用來(lái)注釋大量數(shù)據(jù),然后使用這些 API 調(diào)用對(duì)模型進(jìn)行微調(diào),以進(jìn)行有用的 API 調(diào)用。Toolformer 學(xué)會(huì)預(yù)測(cè)每個(gè)任務(wù)將使用哪個(gè)工具。然而,Toolformer 仍然存在一些局限性,如無(wú)法在一個(gè)流程中使用多個(gè)工具,對(duì)于可能返回?cái)?shù)百個(gè)不同結(jié)果的工具不能以交互方式使用等。
【參考資料與關(guān)聯(lián)閱讀】
- Toolformer: Language Models Can Teach Themselves to Use Tools,https://arxiv.org/pdf/2302.04761.pdf
- Meta's Toolformer Uses APIs to Outperform GPT-3 on Zero-Shot NLP Tasks,https://www.infoq.com/news/2023/04/meta-toolformer/
- Toolformer: Language Models Can Teach Themselves to Use Tools (2023),https://kikaben.com/toolformer-2023/
- Breaking Down Toolformer,https://www.shaped.ai/blog/breaking-down-toolformer
- Toolformer: Meta Re-enters the ChatGPT Race With a New Model Using Wikipedia,https://thechainsaw.com/business/meta-toolformer-ai/
- Toolformer language model uses external tools on its own,https://the-decoder.com/toolformer-language-model-uses-external-tools-on-its-own/