IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Guidance, un langage pour le contrôle des grands modèles linguistiques modernes
Il serait plus efficace et plus efficient que l'invite ou le chaînage traditionnel

Le , par Anthony

106PARTAGES

5  0 
Guidance, un langage pour le contrôle des grands modèles linguistiques modernes, il serait plus efficace et plus efficient que l'invite ou le chaînage traditionnel

Un grand modèle de langage (LLM) est un algorithme d'apprentissage profond capable de reconnaître, de résumer, de traduire, de prédire et de générer du texte et d'autres contenus sur la base des connaissances acquises à partir d'énormes ensembles de données d'apprentissage. Les modèles de langage utilisent des méthodes statistiques pour prédire le prochain élément de langage naturel dans une séquence, en déterminant efficacement le mot suivant en fonction des mots précédents. Les LLM sont des modèles de langage basés sur des réseaux neuronaux formés sur d'énormes ensembles de données comportant des centaines de millions à plus d'un trillion de paramètres. La taille des LLM et leurs données d'entraînement améliorent la qualité des modèles, mais posent des problèmes d'infrastructure, car ils nécessitent de vastes ressources informatiques. Les plus grands et les plus puissants LLM sont basés sur une architecture de transformateur en raison de son efficacité de calcul lors du traitement de séquences en parallèle. Leur utilisation s'étend au-delà des applications de traitement du langage naturel (traduction, assistants d'IA, chatbots, etc.), avec des cas d'utilisation dans les soins de santé, le développement de logiciels et de nombreux autres domaines.


[QUOTE]Guidance vous permet de contrôler les modèles de langage modernes de manière plus efficace et efficiente que le prompting ou le chaînage traditionnel. Les programmes Guidance vous permettent d'entrelacer la génération, le prompting et le contrôle logique en un seul flux continu correspondant à la façon dont le modèle de langage traite réellement le texte. Il a été démontré que des structures de sortie simples telles que la Chain of Thought et ses nombreuses variantes (par exemple ART, Auto-CoT, etc.) améliorent les performances du LLM. L'avènement de LLM plus puissants comme GPT-4 permet une structure encore plus riche, et Guidance rend cette structure plus facile et plus abordable.

Caractéristiques :

  • Syntaxe simple et intuitive, basée sur le modèle Handlebars.
  • Structure de sortie riche avec de multiples générations, sélections, conditionnelles, utilisation d'outils, etc.
  • Diffusion semblable à un playground dans les carnets Jupyter/VSCode.
  • Mise en cache intelligente des générations basée sur les seeds.
  • Prise en charge des modèles de chat basés sur les rôles (par exemple ChatGPT).
  • Intégration facile avec les modèles Hugging Face, y compris l'accélération de Guidance pour des gains de vitesse par rapport au prompting standard, le token healing pour optimiser les limites du prompt, et les guides de motifs regex pour faire respecter les formats.

Installation

Code : Sélectionner tout
pip install guidance

Diffusion live

Accélérez votre cycle de développement en diffusant des modèles complexes et des générations live dans votre carnet de notes. À première vue, Guidance ressemble à un langage de création de modèles, et tout comme les modèles Handlebars standard, vous pouvez faire de l'interpolation de variables (par exemple {{proverbe}}) et du contrôle logique. Mais contrairement aux langages de templating standard, les programmes Guidance ont un ordre d'exécution linéaire bien défini qui correspond directement à l'ordre des jetons tel qu'il est traité par le modèle de langage. Cela signifie qu'à tout moment de l'exécution, le modèle de langage peut être utilisé pour générer du texte (à l'aide de la commande {{gen}}) ou pour prendre des décisions concernant le flux de contrôle logique. Cette imbrication de la génération et de l'invite permet d'obtenir une structure de sortie précise qui produit des résultats clairs et analysables.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import guidance 
 
# set the default language model used to execute guidance programs 
guidance.llm = guidance.llms.OpenAI("text-davinci-003") 
 
# define a guidance program that adapts a proverb 
program = guidance("""Tweak this proverb to apply to model instructions instead. 
 
{{proverb}} 
- {{book}} {{chapter}}:{{verse}} 
 
UPDATED 
Where there is no guidance{{gen 'rewrite' stop="\\n-"}} 
- GPT {{gen 'chapter'}}:{{gen 'verse'}}""") 
 
# execute the program on a specific proverb 
executed_program = program( 
    proverb="Where there is no guidance, a people falls,\nbut in an abundance of counselors there is safety.", 
    book="Proverbs", 
    chapter=11, 
    verse=14 
)

Aperçu : https://raw.githubusercontent.com/mi..._animation.gif

Après avoir exécuté un programme, toutes les variables générées sont désormais facilement accessibles :

Code : Sélectionner tout
executed_program["rewrite"]

Dialogue de chat

Guidance prend en charge les modèles de dialogue basés sur l'API, tels que GPT-4, ainsi que les modèles de dialogue ouverts, tels que Vicuna, grâce à une API unifiée basée sur des balises de rôle (par exemple {{#system}}...{{/system}}). Cela permet de développer des dialogues interactifs qui combinent des modèles riches et un contrôle logique avec des modèles de chat modernes.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# connect to a chat model like GPT-4 or Vicuna 
gpt4 = guidance.llms.OpenAI("gpt-4") 
# vicuna = guidance.llms.transformers.Vicuna("your_path/vicuna_13B", device_map="auto") 
 
experts = guidance(''' 
{{#system~}} 
You are a helpful and terse assistant. 
{{~/system}} 
 
{{#user~}} 
I want a response to the following question: 
{{query}} 
Name 3 world-class experts (past or present) who would be great at answering this? 
Don't answer the question yet. 
{{~/user}} 
 
{{#assistant~}} 
{{gen 'expert_names' temperature=0 max_tokens=300}} 
{{~/assistant}} 
 
{{#user~}} 
Great, now please answer the question as if these experts had collaborated in writing a joint anonymous answer. 
{{~/user}} 
 
{{#assistant~}} 
{{gen 'answer' temperature=0 max_tokens=500}} 
{{~/assistant}} 
''', llm=gpt4) 
 
experts(query='How can I be more productive?')

Aperçu : https://raw.githubusercontent.com/mi..._animation.gif

Accélération du traitement par Guidance

Lorsque plusieurs générations ou instructions de flux de contrôle dirigées par le LLM sont utilisées dans un seul programme Guidance, il est possible d'améliorer de manière significative la performance de l'inférence en réutilisant de manière optimale les caches de clés/valeurs au fur et à mesure que l'on progresse dans l'invite. Cela signifie que Guidance ne demande au LLM que de générer le texte vert ci-dessous, et non le programme entier. Cela réduit de moitié le temps d'exécution de cette invite par rapport à une approche de génération standard.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# we use LLaMA here, but any GPT-style model will do 
llama = guidance.llms.Transformers("your_path/llama-7b", device=0) 
 
# we can pre-define valid option sets 
valid_weapons = ["sword", "axe", "mace", "spear", "bow", "crossbow"] 
 
# define the prompt 
character_maker = guidance("""The following is a character profile for an RPG game in JSON format. 
```json 
{ 
    "id": "{{id}}", 
    "description": "{{description}}", 
    "name": "{{gen 'name'}}", 
    "age": {{gen 'age' pattern='[0-9]+' stop=','}}, 
    "armor": "{{#select 'armor'}}leather{{or}}chainmail{{or}}plate{{/select}}", 
    "weapon": "{{select 'weapon' options=valid_weapons}}", 
    "class": "{{gen 'class'}}", 
    "mantra": "{{gen 'mantra' temperature=0.7}}", 
    "strength": {{gen 'strength' pattern='[0-9]+' stop=','}}, 
    "items": [{{#geneach 'items' num_iterations=5 join=', '}}"{{gen 'this' temperature=0.7}}"{{/geneach}}] 
}```""") 
 
# generate a character 
character_maker( 
    id="e1f491f7-7ab8-4dac-8c20-c92b5e7d883d", 
    description="A quick and nimble fighter.", 
    valid_weapons=valid_weapons, llm=llama 
)

Aperçu : https://raw.githubusercontent.com/mi..._animation.gif

L'invite ci-dessus prend typiquement un peu plus de 2,5 secondes pour se terminer sur un GPU A6000 en utilisant...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !