Introducendo un nuovo modello per le chiamate di funzione nei modelli di linguaggio
Un nuovo modello migliora le capacità di chiamata delle funzioni dei modelli linguistici per compiti complessi.
― 7 leggere min
Indice
I modelli di linguaggio di grandi dimensioni (LLMs) hanno attirato molta attenzione perché possono gestire molti compiti complessi, come programmare, ragionare e interagire con diversi tipi di media. Per rendere questi modelli ancora più utili, devono imparare a usare strumenti esterni e API per completare compiti complessi. Questa abilità si chiama Chiamata di Funzione.
La chiamata di funzione consente agli LLM di accedere a informazioni aggiornate e specifiche per determinati settori e li aiuta a ricevere aiuto da strumenti che possono svolgere compiti specifici, come calcolare numeri o eseguire codice. Anche se si sono fatti progressi nell'insegnare agli LLM a usare la chiamata di funzione, non ci sono ancora molti modelli open source che funzionano bene come i modelli proprietari come GPT o Claude.
Per affrontare questo problema, presentiamo un nuovo modello che ha abilità di chiamata di funzione. Questo modello è addestrato utilizzando un metodo chiamato Apprendimento multi-task, che combina diversi compiti legati alla chiamata di funzione. Valutiamo questo modello rispetto a molti altri e scopriamo che si comporta molto bene in una varietà di situazioni.
Chiamata di Funzione nei Modelli di Linguaggio
La chiamata di funzione aiuta i modelli di linguaggio a utilizzare strumenti e risorse esterne alla loro conoscenza. Questo è fondamentale perché molti dati importanti sono memorizzati in formati specifici a cui gli LLM non possono accedere direttamente. Utilizzando la chiamata di funzione, gli LLM possono evitare "allucinazioni", o risposte false, ottenendo informazioni accurate e rilevanti.
Man mano che gli LLM vengono applicati più spesso a problemi reali, la necessità che agiscano come agenti intelligenti diventa sempre più importante. Per svolgere questo ruolo, gli LLM devono essere bravi in due capacità chiave: ragionamento e pianificazione, e chiamata di funzione.
Importanza della Chiamata di Funzione
La chiamata di funzione può espandere notevolmente ciò che i modelli di linguaggio possono fare. Ad esempio, possono risolvere problemi che richiedono informazioni in tempo reale, matematica complessa o abilità di programmazione. Ricerche recenti mostrano che gli LLM possono migliorare le loro abilità imparando a fare chiamate di funzione in modo più efficace.
Per insegnare agli LLM a chiamare funzioni con successo, sono state sviluppate varie tecniche. Alcuni approcci si concentrano su diversi modi di dare indicazioni al modello, mentre altri addestrano il modello per produrre direttamente chiamate di funzione.
Ci sono due categorie principali di modelli riguardo alla chiamata di funzione: modelli pre-addestrati in grado di chiamare funzioni e modelli che sono specificamente perfezionati per questo compito. I modelli pre-addestrati utilizzano una combinazione di apprendimento supervisionato e perfezionamento, ma i dettagli dei dati che usano spesso non sono disponibili. D'altra parte, i modelli specializzati per la chiamata di funzione si basano principalmente su dati sintetici generati da modelli leader.
Panoramica del Nuovo Modello
Il nuovo modello che abbiamo introdotto è progettato per essere capace di chiamata di funzione. È addestrato su vari compiti legati alla chiamata di funzione, come rilevare nomi di funzione, identificare parametri e generare risposte. Utilizziamo un approccio di addestramento multi-task dove gli stessi dati vengono presentati in formati diversi per aiutare il modello a imparare in modo efficace.
Il modello viene valutato utilizzando diversi benchmark e ha mostrato ottime prestazioni, in particolare sulla Classifica di Chiamata di Funzione di Berkeley.
Addestrare il Modello
Per addestrare il nostro modello, abbiamo utilizzato più set di dati legati ai compiti di chiamata di funzione. Ci siamo concentrati su compiti che richiedono diverse abilità per il modello da apprendere, raggruppandoli in compiti di alto e basso livello!
I compiti di alto livello sono più complessi e richiedono che il modello generi più chiamate di funzione. Questi includono:
Chiamata di Funzione Annidata: Questo implica chiamare una funzione il cui output viene utilizzato come input per un'altra funzione.
Catena di Funzioni: Qui, possono essere chiamate più funzioni per rispondere a una query, ma non sono annidate.
Funzioni Parallele: Questo richiede che il modello chiami la stessa funzione più volte con parametri diversi.
D'altra parte, i compiti di basso livello sono più semplici e includono:
Prossima Migliore Funzione: Scegliere la funzione più adatta da un elenco basato sull'input dell'utente.
Rilevamento del Nome della Funzione: Elencare i nomi delle funzioni necessarie per rispondere a una query.
Rilevamento della Coppia Parametro-Valore: Identificare i parametri rilevanti per le query degli utenti.
Inoltre, la Generazione di Risposte è un compito importante in cui il modello deve creare risposte in linguaggio naturale basate sulle chiamate di funzione effettuate.
Preparazione e Unificazione dei Dati
Per creare un dataset di addestramento solido, abbiamo unito più set di dati e li abbiamo unificati in un unico formato. Questo processo ha comportato la conversione delle informazioni in formato JSON, che è facile da leggere e ampiamente utilizzato nella programmazione. Ogni funzione è stata scritta in modo tale da includere il suo nome, descrizione e parametri.
Questa unificazione consente al modello di apprendere da compiti diversi senza la confusione di formati variabili. Mantenere i dati coerenti è fondamentale per un addestramento di successo.
Valutazione del Modello
Dopo aver addestrato il modello, abbiamo condotto valutazioni approfondite utilizzando vari benchmark per testare le sue prestazioni. La valutazione è essenziale per vedere quanto bene il modello generalizza su compiti che non ha visto prima.
Abbiamo utilizzato diversi set di dati per la valutazione, inclusa la Classifica di Chiamata di Funzione di Berkeley e altri che valutano diversi aspetti delle abilità di chiamata di funzione.
Risultati della Valutazione
I risultati delle nostre valutazioni mostrano che il nuovo modello si comporta molto bene rispetto ad altri modelli. In particolare, si posiziona in alto nella Classifica di Chiamata di Funzione di Berkeley e mostra buone prestazioni in compiti diversi.
Una delle scoperte significative è che il nostro modello si comporta in modo comparabile a modelli proprietari più grandi, nonostante sia più piccolo in dimensioni. Questo indica che si può ottenere efficienza ed efficacia senza la necessità di modelli enormi.
Sfide e Limitazioni
Anche se il modello mostra ottime capacità, ci sono sfide da considerare. Alcuni ambiti specifici, come la chiamata di funzione in Java e JavaScript, si sono rivelati difficili a causa dei requisiti unici di quei linguaggi di programmazione. Inoltre, alcuni compiti hanno affrontato problemi a causa della mancanza di API o limitazioni nel loro utilizzo.
Le metriche di valutazione variano tra diversi set di dati, il che può complicare i confronti tra modelli. Alcuni set di dati hanno informazioni mancanti o requisiti diversi, portando a risultati variabili.
Direzioni Future
Guardando al futuro, ci sono molti modi per migliorare ulteriormente il modello. Un'idea è includere specifiche più dettagliate per ogni funzione per migliorare la sua comprensione. Esplorare opzioni per lunghezze di contesto più lunghe potrebbe permettere al modello di considerare più informazioni durante le chiamate di funzione.
Inoltre, la ricerca continua nel tuning delle istruzioni potrebbe aiutare a perfezionare la capacità del modello di comprendere meglio le query degli utenti e produrre chiamate di funzione più accurate.
Conclusione
Il nuovo modello rappresenta un significativo progresso nelle capacità di chiamata di funzione per i modelli di linguaggio. Con il suo approccio di apprendimento multi-task e le forti prestazioni su vari benchmark, funge da strumento prezioso per sviluppare sistemi intelligenti che possono affrontare problemi reali. Sfruttando sia i dataset esistenti che nuovi metodi di addestramento, questo modello può migliorare l'efficacia dei modelli di linguaggio nel fare chiamate di funzione e risposte accurate, aprendo la strada a future innovazioni nel campo.
Titolo: Granite-Function Calling Model: Introducing Function Calling Abilities via Multi-task Learning of Granular Tasks
Estratto: Large language models (LLMs) have recently shown tremendous promise in serving as the backbone to agentic systems, as demonstrated by their performance in multi-faceted, challenging benchmarks like SWE-Bench and Agent-Bench. However, to realize the true potential of LLMs as autonomous agents, they must learn to identify, call, and interact with external tools and application program interfaces (APIs) to complete complex tasks. These tasks together are termed function calling. Endowing LLMs with function calling abilities leads to a myriad of advantages, such as access to current and domain-specific information in databases and knowledge sources, and the ability to outsource tasks that can be reliably performed by tools, e.g., a Python interpreter or calculator. While there has been significant progress in function calling with LLMs, there is still a dearth of open models that perform on par with proprietary LLMs like GPT, Claude, and Gemini. Therefore, in this work, we introduce the GRANITE-20B-FUNCTIONCALLING model under an Apache 2.0 license. The model is trained using a multi-task training approach on seven fundamental tasks encompassed in function calling, those being Nested Function Calling, Function Chaining, Parallel Functions, Function Name Detection, Parameter-Value Pair Detection, Next-Best Function, and Response Generation. We present a comprehensive evaluation on multiple out-of-domain datasets comparing GRANITE-20B-FUNCTIONCALLING to more than 15 other best proprietary and open models. GRANITE-20B-FUNCTIONCALLING provides the best performance among all open models on the Berkeley Function Calling Leaderboard and fourth overall. As a result of the diverse tasks and datasets used for training our model, we show that GRANITE-20B-FUNCTIONCALLING has better generalizability on multiple tasks in seven different evaluation datasets.
Autori: Ibrahim Abdelaziz, Kinjal Basu, Mayank Agarwal, Sadhana Kumaravel, Matthew Stallone, Rameswar Panda, Yara Rizk, GP Bhargav, Maxwell Crouse, Chulaka Gunasekara, Shajith Ikbal, Sachin Joshi, Hima Karanam, Vineet Kumar, Asim Munawar, Sumit Neelam, Dinesh Raghu, Udit Sharma, Adriana Meza Soria, Dheeraj Sreedhar, Praveen Venkateswaran, Merve Unuvar, David Cox, Salim Roukos, Luis Lastras, Pavan Kapanipathi
Ultimo aggiornamento: 2024-06-27 00:00:00
Lingua: English
URL di origine: https://arxiv.org/abs/2407.00121
Fonte PDF: https://arxiv.org/pdf/2407.00121
Licenza: https://creativecommons.org/licenses/by/4.0/
Modifiche: Questa sintesi è stata creata con l'assistenza di AI e potrebbe presentare delle imprecisioni. Per informazioni accurate, consultare i documenti originali collegati qui.
Si ringrazia arxiv per l'utilizzo della sua interoperabilità ad accesso aperto.
Link di riferimento
- https://huggingface.co/datasets/glaiveai/glaive-function-calling-v2
- https://huggingface.co/ibm-granite/
- https://github.com/Significant-Gravitas/AutoGPT
- https://github.com/yoheinakajima/babyagi
- https://rapidapi.com/hub
- https://github.com/public-apis/public-apis
- https://huggingface.co/ibm-granite/granite-20b-code-instruct
- https://gorilla.cs.berkeley.edu/blogs/8_berkeley_function_calling_leaderboard.html
- https://rapidapi.com/
- https://huggingface.co/datasets/Nexusflow/NexusRaven_API_evaluation
- https://gorilla.cs.berkeley.edu/blogs/8