深度學習自然語言處理 原創
作者:cola
用外部工具增強大型語言模型(LLM)已經成為解決復雜問題的一種方法。然而,用樣例數據對LLM進行微調的傳統方法,可能既昂貴又局限于一組預定義的工具。最近的上下文學習范式緩解了這一問題,但有限的上下文長度局限于少樣本樣例,導致不能完全挖掘工具的潛力。此外,當有許多工具可供選擇時,上下文學習可能完全不起作用。因此本文提出了一種替代方法ToolkenGPT
,它結合了雙方的優勢。
論文:
ToolkenGPT: Augmenting Frozen Language Models with Massive Tools via Tool Embeddings地址:
https://arxiv.org/abs/2305.11054
介紹
LLM已經成為各種現實世界應用程序的強大工具。隨著這些模型的不斷發展,人們對其與現實世界交互的潛力越來越感興趣,并通過與其他工具集成來增強其功能,如計算器、數據庫等。這些模型掌握和控制各種工具的能力不僅是其智能的標志,還標志著一條有希望的克服其部分基本弱點的道路。包括更新最新的世界知識,減少其幻覺,以及執行符號操作等。
然而,新工具的迅速出現,如高級軟件庫、新穎的API或特定領域的實用程序,為LLM的工具學習任務帶來了額外的豐富和復雜性。這種不斷的演變強調了賦予LLM快速適應和掌握大量新工具的能力的重要性。
表1展示了與LLM的工具集成的兩種主要研究方法。第一種方法涉及微調以學習特定工具。雖然這種方法可以產生很好的結果,但它的計算成本很高,并且缺乏對新工具的適應性。第二種方法依賴于上下文學習,LLM通過提示中提供的上下文樣例來學習如何使用工具。這種方法允許LLM處理新引入的工具。然而,上下文學習有其獨特的局限性,使它不可能在上下文中使用大量的工具。此外,僅通過少量樣本掌握新工具可能具有挑戰性。本文提出ToolkenGPT,一種使LLM能夠掌握大量的工具,而不需要任何微調,同時允許LLM快速適應新工具。ToolkenGPT的關鍵思想是將每個工具表示為一個新token(“toolken”),以增加詞匯表。具體來說,每個工具都與插入到LLM頭部的嵌入相關聯,就像常規的單詞tokens嵌入一樣。在生成過程中,一旦預測到toolken, LLM臨時切換到特殊模式(通過提示)以產生工具要執行的輸入參數,并將輸出注入到生成中(參見圖1)。這種方法為LLM提供了一種有效的方法,只需學習輕量級toolken嵌入即可掌握工具。
因此,ToolkenGPT結合了微調和上下文學習范式的優勢,同時避免了它們的局限性:與只能容納少量工具和少量樣例的上下文學習相比,ToolkenGPT允許大量工具(通過簡單地在詞匯表中插入各自的工具),并可以使用廣泛的樣例數據來學習toolken嵌入;與微調相比,不僅需要最小的訓練成本,而且還提供了一種方便的方法,通過擴展toolken詞匯表來動態插入任意新工具。
ToolkenGPT掌握大量工具
首先介紹一下工具使用語言建模的背景和符號表示。通常,LLMs對單詞標記序列為,其中每個單詞token來自LLM的詞匯,即,表示第步之前的部分詞token序列。在實踐中,通常設置序列的前綴(稱為提示),以引導LLM生成所需的內容。進一步深入,下一個token的分布被預測為,其中是當前上下文的最后一個隱藏狀態,是單詞token的嵌入矩陣(也稱為語言模型頭)。
給定工具集,我們的目標是使LLM能夠調用這些工具的子集來解決復雜的問題。所提出的靈活公式允許工具通過返回一些可以幫助LLM進行文本生成(例如計算)或影響現實世界環境(例如機器人動作)的結果來發揮作用。要在生成過程中調用工具,LLM首先需要選擇工具,然后輸入參數。在圖1所示的運行示例中,在答案生成過程(“Reasoning model”)中,選擇數學運算符square作為工具,并在“工具模式”中生成一個操作數16作為參數。一旦外部工具收到調用,它就會執行工具并返回結果256,返回Reasoning model。
框架概覽
ToolkenGPT的核心思想是明確地將工具制定為token。每個工具集被參數化為一個工具集嵌入向量,我們將一組工具集嵌入表示為一個矩陣,即。假設我們已經訓練了toolken嵌入,如圖1所示,LLM默認處于推理模式,以生成下一個token。該框架允許LLM統一考慮單詞token和工具token。具體來說,工具嵌入矩陣與連接。因此,LLM預測下一個token的概率如下:其中下一個token可以是詞token,也可以是工具集,即,且[;]是拼接操作。我們將工具表述為toolken嵌入,自然允許通過擴展toolken嵌入矩陣來快速適應新工具。要執行工具,一旦其toolken被預測為下一個令牌(如圖1中的“mode switch”所示),LLM將切換到“tool mode”,其目的是為工具生成參數。
具體來說,LLM暫停生成并將當前生成的上下文附加到另一個提示符。工具模式下的提示由預測工具的上下文樣例組成,展示如何通過引用特殊語法[tool]中的工具調用來生成工具參數。然后LLM可以在樣例中遵循模式來完成當前工具調用的參數。與之前完全依賴上下文學習進行工具學習的方法相比,所提出框架只將完成論證的簡單工作留給上下文學習。此外,對于單個指定工具的樣例,將有豐富的上下文空間。最后,將參數發送到指定的工具執行,并將返回值發送回推理模式下的文本。
學習工具嵌入
該框架凍結了原始LLM的參數,并使用工具嵌入引入了最小的額外訓練開銷。該嵌入矩陣包含唯一需要優化的參數,但與其他有效的LLM微調方法不同,它不需要梯度流過LLM參數的主體,從而導致非常穩定和高效的訓練。因此,toolken嵌入的微調與LLM推理使用了幾乎相同的GPU內存。每當添加新工具時,toolken嵌入可以方便地擴展,然后,在涉及新工具的工具樣例數據上的后續訓練逐漸細化其嵌入。此外,與只將少數示例消化為訓練信號的上下文學習方法不同,ToolkenGPT能夠從大規模樣例中調整工具嵌入。
本文主要關注通過工具樣例學習工具嵌入,它可以是域內訓練數據,也可以是LLM生成的合成數據。我們首先描述訓練數據的格式和訓練目標,并使用圖1中的相同示例來展示如何將其用于訓練。例如"the area is 256 square feet …"
可以標記為token序列s=("the","area","is","2","5","6","square ","feet",…)
。為了表明何時預測工具集,我們需要一個混合了詞token和工具集的平行序列,即s'=(“the”,“area”,“is”,“[square]”,“[N/a]”,“[N/a]”,“square”,“feet”,…)
。在s中(“2”,“5”,“6”)的子序列是返回的工具結果應該填充的地方,我們選擇s'中對應的第一個token作為工具調用的工具,以下token填充[N/A],表示在損失計算中被忽略。因此,給定一個由配對序列D={(s,s')}組成的數據集,ToolkenGPT的訓練目標為:
其中在公式1中定義了,是指示函數,表示我們在訓練期間忽略[N/A]標記。因此,我們的訓練過程在很大程度上與推理模式中的推理一致。
獲取配對數據的方法主要有兩種。首先,一些數據集與自然語言序列一起提供了基準事實工具調用。為了將數據用于監督學習,我們對其進行預處理,以獲得訓練所需的成對數據,如上文所述。其次,探索了用LLM合成工具樣例,分享了與自指導類似的想法。對這個過程的直觀解釋是將LLM中的知識提取到新的工具嵌入中。具體來說,我們可以用工具文檔和一些具有特殊語法指示工具調用的樣例來提示LLM,例如,The capital of U.S. is <capital> ("U.S.")="Washington D.C."
。在此基礎上,LLM可以生成一些新的用例,這些用例利用給定的工具并使用相同的語法引用工具調用。然后,我們可以輕松地定位工具調用,并將數據處理為用于訓練的成對數據。
實驗
作者將ToolkenGPT應用于三個不同的應用:用于數值推理的算術工具、用于基于知識的問答的數據庫API、用于具具計劃生成的機器人動作。重點關注方法如何準確地調用工具,以及它們如何成功地解決任務。實驗表明,ToolkenGPT可以有效地掌握大量工具,同時利用它們來解決復雜問題,性能有所提高,始終優于先進的提示技術。
數理推理
探索四個基本算術函數(+、?、×、÷)的可用性。此外,為了對更復雜數學問題中的工具處理能力進行基準測試,包括更多可用的工具,即擴展的函數集,并創建一組合成數據。結果表明,通過僅在合成數據上進行訓練,ToolkenGPT顯著優于基線。
數據集
為全面評估工具學習在數值推理方面的能力,策劃了兩個新的測試數據集:
GSM8K-XL:現有GSM8K數據集的增強版本。GSM8K是一個包含不同語言的小學數學應用題的數據集,涉及使用4種基本算術運算(+、?、×、÷)進行一系列計算,以得到最終答案。在測試集中,我們放大數字以增加LLMs的計算難度,這導致了GSM8K-XL數據集,具有568個具有更大數字的測試用例。
FuncQA:該數據集需要至少13個運算符(如power、sqrt、lcm)來解決,在沒有外部計算器的情況下,人類和LLM都具有挑戰性。將FuncQA分為兩個子集:68個只需一次操作即可求解的單跳問題(one-hop question, FuncQAone)和60個需要少量推理步驟的多跳問題(multi-hop question, FuncQAmulti)。
對比方法
我們為每個可用的數學運算符訓練toolken嵌入。在推理過程中,用4-shot思維鏈的例子來提示LLM。為了進行比較,對以下基線進行了評估:
使用ChatGPT作為基礎LLM。這個基線衡量了LLM用其自身的推理和計算能力回答復雜數值推理問題的能力。
思維鏈(chain -of- thought, CoT)是一種更先進的提示技術。在這種方法中,精心設計了一系列相互關聯的提示,以指導LLM一步步地推理過程。示例中的推理鏈與我們在ToolkenGPT中使用的推理鏈相同,但沒有可用的函數。
ReAct通過促使LLM以交錯的方式生成語言推理軌跡和工具調用,將推理和工具相結合。具體來說,不僅僅是提供推理鏈,還引入了特殊的語法來調用操作符。一旦在推理過程中檢測到語法,就會調用該工具來計算結果。
結果分析
表2顯示了所有方法在GSM8K-XL和FuncQA數據集上的性能。在GSM8K-XL數據集上,使用CoT的零樣本ChatGPT和少樣本學習在沒有工具幫助的情況下很難計算大量的數字,而ReAct和ToolkenGPT設法以較大的幅度持續提高準確性。這兩個方法都可以在必要時調用正確的工具,因為工具集只有4個基本操作符。
然而,對于FuncQAone和FuncQAmulti數據集,隨著工具數量的增加,學習調用適用的工具變得具有挑戰性。在ReAct中,盡管所有的工具都列在提示符的開頭,但在有限的上下文中包括每個工具的樣例是不可行的。因此,ReAct很容易受到缺少工具調用、錯誤的工具調用和預測錯誤的參數的影響,特別是對于沒有在上下文中樣例的工具。ToolkenGPT在單跳和多跳場景中都優于所有基線,當有許多工具時,顯示出卓越的工具學習能力。
基于知識的問答
由于有限的知識限制,LLM經常犯事實錯誤和幻覺。讓它們能夠訪問知識庫(KBs)是一個有希望的研究方向,以減少它們的幻覺。我們將對知識庫的訪問表述為查詢數據庫的API。因此,每個關系查詢都可以被視為一個工具,其輸入參數是主題實體,輸出是相應的尾部實體。
數據集
KAMEL是一個基于Wikidata的問答數據集。參照ToolFormer采用KAMEL來評估KB查詢工具的使用情況。KAMEL包含了來自Wikidata的243個關系的知識,每個關系都與一個問題模板相關聯,以便將Wikidata中的一個事實轉換為一個問題。這個數據集總共有234個工具。為了分析不同數量工具的性能,我們從原始測試集中抽樣創建了四個子集。每個子集由與不同數量關系相關的問題組成,分別對應于30、60、100和234。每個子集的大小是500。
對比方法
我們設置了兩個不同的框架:
ToolkenGPT(sup):從KAMEL的訓練集中每個關系采樣200個示例,并通過監督學習訓練toolken嵌入。該設置表示有足夠的域內訓練數據可用的真實場景。
ToolkenGPT(syn):假設域內訓練數據不可用,使用每個關系的文本描述與ChatGPT合成訓練數據,使用潛在的工具winner_of(NOBEL PEACE PRIZE IN 2020)→UNITED NATIONS WORLD FOOD PROGRAMME。平均使用40個示例來訓練每個toolken嵌入。
本文提出以下比較基線:
提示:用LLM的內部知識回答問題。我們在" question:[QUESTION]\nThe answer is"提示符中構建每個問題,并讓LLM繼續這個句子。
上下文學習(ICL):在提出問題之前,我們列出所有可用工具的工具樣例和描述。樣例以特定的語法顯示,以便LLM可以以類似的風格生成以進行解析。
上下文學習(desc):所有可用工具的描述將在上下文中提供,但它們的樣例并不直接顯示。相反,我們展示了測試子集中不包含的工具的樣例。
所有方法的基本模型都是LLaMA-13B。
結果分析
我們在圖2中展示了涉及不同數量關系的4個測試集上的實驗結果。ToolkenGPT(sup)取得了最高的結果,表明在有大量域內訓練數據時,學習toolken嵌入是一種有效的方法。相反,即使上下文學習也會在上下文中看到域內訓練數據,但它仍然不清楚要調用哪些工具。此外,當要使用的工具超過30個時,上下文長度限制會導致性能急劇下降。多工具場景中的失敗揭示了上下文學習范式的根本局限性。ToolkenGPT(syn)在所有子集中也優于所有其他基線。
合成訓練數據通常與數據集具有非常不同的表達風格,但仍然有助于LLM理解這些關系。這一成功反映了該框架的靈活性,即使在沒有域內訓練數據可用的情況下也可以應用。上下文學習(desc)在這項任務中通常失敗,因為LLM很難記憶在上下文中顯示的文本描述并將其映射到關系標識符。該結果證實了LLM在使用不熟悉的工具時存在困難這一猜想。基于這種觀察,我們有理由推測,LLM主要是從它們的標識符中回憶工具,而不是真正從它們的描述中學習使用工具。
具身計劃生成
最近,有許多研究嘗試利用LLM作為具身智能體的控制器。我們也探索了所提出框架如何應用于具身智能體的計劃生成。與之前提示LLM的方法相比,ToolkenGPT可以通過學習智能體動作和對象的toolken嵌入來更好地理解環境。
數據集
VirtualHome:一個典型家庭活動的仿真平臺,活動程序知識庫由許多可在VirtualHome中執行的任務和計劃組成。從活動程序中得出297個任務的子集。對于每個任務,給模型一個高級目標(例如:“讀書”)、詳細的指令(例如:“我會躺在床上,打開書開始閱讀”,以及對環境的描述,其中包括初始狀態和環境的對象列表(例如:“我在[家庭辦公室]。我可以操作的對象是['郵件','冰箱','電視',…,‘小說’)”。該模型被期望輸出一個可執行的計劃,它是一個動詞-對象指令的有序列表。每個任務都有一個初始狀態圖和最終狀態圖,從而能夠使用模擬器驗證生成的計劃,并將最終狀態與真實狀態進行比較。我們將數據集劃分為包含247個任務的訓練集和包含50個任務的測試集,數據集中總共使用了25個動詞和32個對象。
對比方法
我們認為VirtualHome中的所有動作和對象都是工具。加上一個額外的[END]函數表示計劃的結束,我們總共有58個工具。對于這個數據集,我們不需要圖1中描述的參數生成過程,因為這些工具不接受參數。在推理過程中,ToolkenGPT交替生成動作工具和對象工具,并以[END]工具結束。toolken嵌入在訓練集上進行訓練。將該方法與以下基線進行了比較:
上下文學習:提示LLM并將其輸出解析為計劃。LLM顯示了行動列表、3個樣例計劃和一個具有目標、詳細描述和環境描述的新任務。
Translation:使用SentenceRoBERTa-large將動作或對象轉換為具有最高余弦相似度的可用動作或對象。
Grounded Decoding:用affordance grounding函數,鼓勵LLM生成有效的動作和對象。
結果分析
我們在表3中列出了結果。盡管使用上下文學習的LLM在上下文中明確列出了所有有效的動作和對象,但有時它不能將其預測作為可接受的指令的基礎。即使動作和對象是有效的,但在VirtualHome中往往違反物理規律,導致成功率較低。ToolkenGPT不僅通過其設計自然地預測有效的動作和對象,而且還通過從更多的訓練任務中學習toolken嵌入來實現最高的成功率。圖3展示了一個具體的例子來說明差異。
分析
計算損耗
通過實驗比較了ToolkenGPT和微調在計算效率和性能方面的差異。本文在LLaMA-7B上實現了這兩種方法。結果列在表4中。對LLMs進行微調后,在FuncQA上的性能略好于ToolkenGPT。即使我們應用了以效率著稱的LoRA,但與訓練工具嵌入相比,微調的時間消耗明顯更長。
消融學習
ToolkenGPT的設計有利于工具選擇和參數完成。為了理解它們各自對性能的貢獻,我們進一步實現了一個將ReAct-style的提示和參數完成的子程序(工具模式)相結合的基線。在工具模式下,LLM只使用所選工具對樣例進行提示,這將提供比ReAct提示更相關的知識。如表5所示,添加工具模式確實可以通過提高參數補全的準確性來改進普通的ReAct提示方法。然而,ToolkenGPT仍然在很大程度上優于這個改進的基線,這表明toolken嵌入有效地幫助LLM決定何時調用以及調用哪個工具。
訓練數據
因為有兩種不同的訓練數據來源,并且很容易處理或合成更多的數據,所以在KAMEL上擴展實驗。對每個工具的ToolkenGPT(sup)和ToolkenGPT(syn)進行了10/20/40的訓練樣本采樣,并報告了在包含30個工具的測試集上的精度。結果匯總在表6中。在相同的數據規模預算下,使用監督數據進行訓練可以獲得更好的性能。盡管在大多數合成數據實例中沒有觀察到明顯的錯誤,但合成數據和測試集之間的分布差距可能會阻止toolken嵌入的良好表現。更大的訓練集有利于提高兩個數據源的性能。
總結
提出了ToolkenGPT,一種用大量外部工具來增強LLM的新方法。該方法為每個工具引入了toolken嵌入的概念,使LLM能夠像生成單詞標記一樣輕松地調用和使用不同的工具。該方法克服了當前微調和上下文學習范式的限制,使LLM能夠適應更大的工具集,并使用廣泛的樣例數據來學習工具嵌入。ToolkenGPT能夠快速適應和利用新工具,表明它有能力跟上不斷發展的大規模工具的步伐。
備注:昵稱-學校/公司-方向/會議(eg.ACL),進入技術/投稿群
id:DLNLPer,記得備注呦