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.

Nom : guidance_logo_blue.png
Affichages : 95297
Taille : 11,5 Ko

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


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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 LLaMA 7B. Si nous devions exécuter la même invite adaptée pour être un appel de génération unique (la pratique standard aujourd'hui), cela prendrait environ 5 secondes (dont 4 pour la génération de jetons et 1 pour le traitement de l'invite). Cela signifie que l'accélération effectuée par Guidance permet de multiplier par deux la vitesse d'exécution de cette invite par rapport à l'approche standard. Dans la pratique, le facteur d'accélération exact dépend du format de votre invite spécifique et de la taille de votre modèle (les modèles plus grands en bénéficient davantage). Pour l'instant, l'accélération n'est prise en charge que pour les Transformers LLM.
Lire la suite sur https://github.com/microsoft/guidance

Source : Guidance

Et vous ?

Quel est votre avis sur le sujet ? Trouvez-vous que cette initiative est utile et pertinente ?

Comment évaluez-vous le langage Guidance par rapport aux autres langages de programmation pour les LLM (LMQL, LangChain, etc.) ?

Pensez-vous que ce langage apportera plus de rigueur dans le travail avec les LLM ?

Voir aussi

La société chinoise Baidu dévoile un chatbot d'IA générative basé sur un modèle de langage plus grand que GPT-3, mais l'on ignore encore de quoi le chatbot d'IA de Baidu est réellement capable

Meta dévoile son propre modèle de langage appelé LLaMA, fonctionnant comme un chatbot d'IA ordinaire, et indique qu'il est plus puissant et moins gourmand en ressources que ses concurrents

Microsoft annonce GPT-4, le modèle de langage, de type transformeur génératif pré-entraîné et assure qu'elle n'utilise pas les données de ses clients pour former ses modèles, il sera multimodal

Google dévoile PaLM-E, un modèle d'IA de type ChatGPT, qui prend en compte les besoins de l'utilisateur, une similitude est dégagée dans le récent article de Microsoft intitulé "ChatGPT for Robotic"

Les capacités émergentes des grands modèles linguistiques sont-elles un mirage ? Les grands modèles linguistiques ne sont pas supérieurs à la somme de leurs parties, selon des chercheurs de Stanford