Ajustement Fin De GPT-4o-Mini Pour Générer Des Articles De Blog

Le nouveau modèle GPT-4o-mini, publié le 18 juillet, dépasse GPT-3.5 et se rapproche des performances de GPT-4, tout en coûtant seulement la moitié de GPT-3.5. Il est également le plus rapide de toute la série de modèles. OpenAI a officiellement ouvert aujourd’hui l’interface d’ajustement fin de GPT-4o-mini, avec une allocation gratuite de 2M tokens par jour jusqu’au 23 septembre 2024.

Ce n’est pas que Llama 3.1 405B soit inabordable, mais GPT-4o-mini offre un meilleur rapport qualité-prix.

1 Scénarios d’application de l’ajustement fin

Pour des tâches simples, il suffit de rédiger des prompts, et le modèle peut bien les accomplir. Si la tâche est plus complexe, on peut essayer d’utiliser une chaîne de pensée pour décomposer la tâche en plusieurs étapes et raisonner progressivement. Mais pour des tâches nécessitant une sortie de haute précision et cohérente, un ajustement fin est nécessaire.

Le tableau ci-dessous compare les avantages et inconvénients de ces trois méthodes ainsi que leurs scénarios d’application.

Méthode Avantages Inconvénients Scénarios d’application
Ajustement fin Offre des résultats de haute qualité Nécessite beaucoup de temps et de ressources pour préparer et entraîner les données Nécessite une sortie stable, fiable et de haute qualité
Convient aux tâches complexes et à la personnalisation dans des domaines spécifiques Boucle de rétroaction lente, coût d’entraînement élevé Améliore les performances du modèle dans une tâche ou un domaine spécifique
Économise des tokens, réduit la latence Nécessite des connaissances de base en apprentissage profond Lorsque la tâche nécessite une haute précision ou un style, ton, format unique
Prompting Itération et test rapides Dépend de la qualité de conception des prompts Prototypage rapide et test de tâches courantes
Convient à l’exploration initiale et aux tâches générales Peut ne pas être assez précis pour des tâches complexes Lorsque l’on a besoin d’ajuster la sortie du modèle de manière flexible
Pas besoin de préparation de données supplémentaires ni de ressources d’entraînement Ne convient pas aux tâches avec de nombreux exemples et une logique complexe
Chaîne de pensée Fournit une logique et un raisonnement étape par étape Augmente la complexité et la longueur des prompts Traite les tâches nécessitant raisonnement et étapes logiques
Améliore les performances des tâches complexes Augmente l’utilisation des tokens et la latence Scénarios impliquant la résolution de problèmes en plusieurs étapes
Facile à combiner avec diverses stratégies et outils Peut ne pas suffire pour des tâches très complexes Lorsque l’on a besoin de processus logiques clairs et d’exécution étape par étape

Le théorème NFL nous dit qu’aucune méthode ne peut s’appliquer à tous les scénarios, et c’est pareil ici, l’ajustement fin n’est pas forcément meilleur que les deux autres méthodes. Mais il est clair que l’ajustement fin convient aux tâches “difficiles à décrire”, comme un style et un ton particuliers. De plus, ces trois méthodes ne sont pas incompatibles, un modèle ajusté finement utilisant des prompts soigneusement conçus, voire combiné avec une chaîne de pensée, pourrait donner de meilleurs résultats.

Pour simplement écrire un article ou un paragraphe, un prompt suffit. Mais pour un article de blog, si l’on considère le SEO, il y a beaucoup de détails, comme la fréquence d’apparition des mots-clés principaux, etc. Ces détails ne sont pas forcément bien compris par le grand modèle, et en tant qu’utilisateur, on ne peut pas forcément bien les décrire dans le prompt. Ainsi, pour rédiger un tel article de blog, on peut utiliser l’ajustement fin.

2 Préparation des données

Les données doivent être organisées au format jsonl, chaque ligne étant un json. Par exemple :

1
2
3
{"messages": [{"role": "system", "content": "Marv est un chatbot factuel qui est aussi sarcastique."}, {"role": "user", "content": "Quelle est la capitale de la France ?"}, {"role": "assistant", "content": "Paris, comme si tout le monde ne le savait pas déjà."}]}
{"messages": [{"role": "system", "content": "Marv est un chatbot factuel qui est aussi sarcastique."}, {"role": "user", "content": "Qui a écrit 'Roméo et Juliette' ?"}, {"role": "assistant", "content": "Oh, juste un gars nommé William Shakespeare. Vous en avez déjà entendu parler ?"}]}
{"messages": [{"role": "system", "content": "Marv est un chatbot factuel qui est aussi sarcastique."}, {"role": "user", "content": "Quelle est la distance entre la Lune et la Terre ?"}, {"role": "assistant", "content": "Environ 384 400 kilomètres. À quelques kilomètres près, comme si cela avait vraiment de l'importance."}]}

Il est également possible de définir des poids dans les dialogues multi-tours, un poids de 0 indiquant au modèle d’éviter ce type de réponse.

1
2
3
{"messages": [{"role": "system", "content": "Marv est un chatbot factuel qui est aussi sarcastique."}, {"role": "user", "content": "Quelle est la capitale de la France ?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Peux-tu être plus sarcastique ?"}, {"role": "assistant", "content": "Paris, comme si tout le monde ne le savait pas déjà.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv est un chatbot factuel qui est aussi sarcastique."}, {"role": "user", "content": "Qui a écrit 'Roméo et Juliette' ?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Peux-tu être plus sarcastique ?"}, {"role": "assistant", "content": "Oh, juste un gars nommé William Shakespeare. Vous en avez déjà entendu parler ?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv est un chatbot factuel qui est aussi sarcastique."}, {"role": "user", "content": "Quelle est la distance entre la Lune et la Terre ?"}, {"role": "assistant", "content": "384 400 kilomètres", "weight": 0}, {"role": "user", "content": "Peux-tu être plus sarcastique ?"}, {"role": "assistant", "content": "Environ 384 400 kilomètres. À quelques kilomètres près, comme si cela avait vraiment de l'importance.", "weight": 1}]}

Bien sûr, le traitement des données est la partie la plus chronophage, mais vous pouvez également utiliser directement le jeu de données que j’ai créé. Ce jeu de données est utilisé pour ajuster finement le grand modèle, provenant de la capture de plus de 3000 pages dans 13 domaines de classification sur le site reads.alibaba.com, avec non seulement les données traitées en open source, mais aussi les données brutes et le code du crawler.

Téléchargez les données préparées et enregistrez l’ID du fichier retourné.

1
2
3
4
5
6
7
from openai import OpenAI
client = OpenAI()

client.files.create(
  file=open("all_filter_2120.jsonl", "rb"),
  purpose="fine-tune"
)

3 Ajustement fin du modèle

Une fois les données prêtes, vérifiées et le coût en tokens confirmé, vous pouvez créer une tâche d’ajustement fin.

1
2
3
4
5
6
7
from openai import OpenAI
client = OpenAI()

client.fine_tuning.jobs.create(
  training_file="file-zWptPbsD37ZnemssjpsK6CnF", 
  model="gpt-4o-mini"
)

Pour une configuration plus détaillée des paramètres, vous pouvez consulter la documentation API officielle.

UI d’ajustement fin OpenAI

Ces deux étapes peuvent également être rapidement réalisées via l’interface utilisateur, et après avoir soumis la tâche, vous pouvez également suivre en temps réel la progression et les variations de perte dans l’interface utilisateur.

Journal du processus d’ajustement fin OpenAI

4 Appel du modèle

Utilisez le code ci-dessous pour interroger l’état de la tâche d’ajustement fin. Une fois la tâche réussie, vous verrez le champ fine_tuned_model rempli avec le nom du modèle. Notez ce nom pour pouvoir l’appeler.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
from openai import OpenAI
client = OpenAI()

# Liste des tâches d'ajustement fin
client.fine_tuning.jobs.list(limit=10)

# Détails de la tâche d'ajustement fin
client.fine_tuning.jobs.retrieve("ftjob-gvP0VB7RlWcF3QHdQrEVf49Y")

# Annuler une tâche
client.fine_tuning.jobs.cancel("ftjob-gvP0VB7RlWcF3QHdQrEVf49Y")

# Voir le journal des tâches
client.fine_tuning.jobs.list_events(fine_tuning_job_id="ftjob-gvP0VB7RlWcF3QHdQrEVf49Y", limit=10)

# Supprimer un modèle ajusté finement
client.models.delete("ft:gpt-3.5-turbo:acemeco:suffix:abc123")

La méthode d’appel est la même que pour les modèles officiels, il suffit de modifier le nom du modèle, par exemple :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from openai import OpenAI
client = OpenAI()

completion = client.chat.completions.create(
  model="ft:gpt-4o-mini-2024-07-18:personal:0724:9oMH6S7A",
  messages=[
    {"role": "system", "content": "Veuillez rédiger un article SEO de pas moins de 800 mots basé sur le titre que je vous ai donné, incluant au moins 4 sous-titres au format HTML. N'incluez pas la balise <h1>, <body>. N'incluez pas la balise <html> au début et à la fin du contenu. Commencez directement par le contenu."},
    {"role": "user", "content": f"title:{task.title},core keyword:{task.coreKeywords},related keyword:{task.relatedKeywords}"}
  ]
)
print(completion.choices[0].message)

5 Évaluation des résultats

Pendant l’entraînement, deux indicateurs sont disponibles : la perte et la précision des tokens. L’explication officielle est la suivante :

La perte de validation et la précision des tokens de validation sont calculées de deux manières différentes : sur un petit lot de données à chaque étape, et sur l’ensemble du jeu de validation à la fin de chaque époque. Les indicateurs de perte et de précision des tokens sur l’ensemble du jeu de validation sont les plus précis pour suivre les performances globales du modèle. Ces statistiques visent à fournir une vérification de la rationalité pour s’assurer que l’entraînement se déroule bien (la perte devrait diminuer, la précision des tokens devrait augmenter).

Cependant, les indicateurs ne sont que des références, et l’efficacité réelle doit être évaluée par vous-même. Le modèle ajusté finement présente au moins les améliorations suivantes :

  • Augmentation de 20 % de la longueur des articles
  • Structure des articles plus proche des données d’entraînement
  • Plus d’erreurs de format (comme le format markdown, l’ajout de CSS, etc.)

Voici un article généré sur le thème “Quelle est la différence entre une fresque et une mosaïque ?” :

Évaluation des résultats

6 Articles de référence

Buy me a coffee~
Tim AlipayAlipay
Tim PayPalPayPal
Tim WeChat PayWeChat Pay
0%