Passer à la navigation

Format des Données

Afficher en Markdown

Ce guide décrit le format de données requis pour les ensembles de données de chat Hugging Face et montre comment utiliser des modèles de chat avec les tokenizers Hugging Face pour ajouter des jetons spéciaux ou des informations spécifiques à une tâche.

Ensembles de Données de Chat Hugging Face

Les ensembles de données de chat Hugging Face doivent avoir la structure suivante : Chaque exemple de l’ensemble de données doit être un dictionnaire avec une clé messages. Les messages doivent être une liste de dictionnaires, chacun ayant une clé role et content. Le role a généralement l’une des valeurs suivantes : system, user et assistant. Par exemple :

{
"messages": [
{
"role": "system",
"content": "Ceci est un message système utile."
},
{
"role": "user",
"content": "Voici une question d'utilisateur"
},
{
"role": "assistant",
"content": "Voici la réponse de l'assistant."
}
]
}

Modèles de Chat

La mise en forme des données de cette manière nous permet de tirer parti de la fonctionnalité apply_chat_template des tokenizers Hugging Face pour combiner les messages. Les modèles de chat peuvent être utilisés pour ajouter des jetons spéciaux ou des informations spécifiques à une tâche à chaque exemple de l’ensemble de données. Consultez la documentation HuggingFace apply_chat_template pour plus de détails.

Par défaut, apply_chat_template tente d’appliquer le chat_template associé au tokenizer. Cependant, dans certains cas, les utilisateurs peuvent souhaiter spécifier leur propre modèle de chat. Notez également que de nombreux tokenizers n’ont pas de chat_template associés, auquel cas un modèle de chat explicite est requis. Les utilisateurs peuvent spécifier une chaîne de modèle de chat explicite au format Jinja et la transmettre à apply_chat_template. Voici un exemple utilisant un modèle simple qui ajoute un en-tête de rôle à chaque tour :

from transformers import AutoTokenizer
example_template = "{% for message in messages %}{% set content = '<|start_header_id|>' + message['role'] + '<|end_header_id|>\n\n'+ message['content'] | trim + '<|eot_id|>' %}{{ content }}{% endfor %}"
example_input = [
{
'role': 'user',
'content': 'Bonjour !'
},
{
'role': 'assistant',
'content': 'Salut !'
}
]
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-1B")
output = tokenizer.apply_chat_template(example_input, chat_template=example_template, tokenize=False)
## c'est la chaîne de sortie que nous attendons
expected_output = '<|start_header_id|>user<|end_header_id|>\n\nBonjour !<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\nSalut !<|eot_id|>'
assert output == expected_output
:hide:

Pour plus de détails sur la création de modèles de chat, consultez la documentation Hugging Face.