La nuit dernière, j'ai appris à nanochat d32 à compter les 'r' dans fraise (ou des variations similaires). Je pensais que ce serait un bon exemple amusant de la façon d'ajouter des capacités à nanochat et j'ai rédigé un guide complet ici : Cela se fait via une nouvelle tâche synthétique `SpellingBee` qui génère des exemples d'un utilisateur demandant ce type de problème, et une solution idéale d'un assistant. Nous procédons ensuite à un entraînement intermédiaire/SFT pour affiner le modèle LLM avec cette capacité, ou nous formons davantage avec RL pour le rendre plus robuste. Il y a de nombreux détails à bien gérer, surtout pour les modèles plus petits, et le guide les aborde. En résumé : - Vous devez garantir la diversité dans les invites/requêtes des utilisateurs. - Pour les petits modèles comme nanochat en particulier, vous devez faire très attention aux détails de tokenisation pour faciliter la tâche d'un LLM. En particulier, vous devez faire attention aux espaces, puis vous devez répartir le calcul de raisonnement sur de nombreux tokens de solution partielle : d'abord, nous standardisons le mot entre guillemets, puis nous l'épelons (pour décomposer les tokens), puis nous itérons et gardons un compteur explicite, etc. - J'encourage le modèle à résoudre le problème de deux manières distinctes : une manière manuelle (calcul mental dans sa tête) et également via l'utilisation d'outils de l'interpréteur Python auquel nanochat a accès. C'est un peu "fumée et miroirs" car chaque solution pour le moment est "propre", sans erreurs. On pourrait soit ajuster la tâche pour simuler des erreurs et démontrer des récupérations par exemple, soit exécuter RL. Très probablement, une combinaison des deux fonctionne le mieux, où le premier agit comme le préalable pour le RL et lui donne des éléments avec lesquels travailler. Si nanochat était un modèle beaucoup plus grand, on s'attendrait ou espérerait que cette capacité "émerge" plus facilement à un moment donné. Mais parce que le "cerveau" de nanochat d32 est de la taille d'une ~abeille, si nous voulons qu'il compte les r dans fraise, nous devons le faire en le sur-représentant dans les données, pour encourager le modèle à l'apprendre plus tôt. Mais ça fonctionne ! :)