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