#
Demander de l’aide sur les forums

Le forum d’Hugging Face est un endroit idéal pour obtenir de l’aide de l’équipe open source d’Hugging Face et de la communauté au sens large. Voici à quoi ressemble la page principale :

Dans la partie gauche, vous pouvez voir toutes les catégories dans lesquelles les différents sujets sont regroupés, tandis que la partie droite montre les sujets les plus récents. Un sujet est un message qui contient un titre, une catégorie et une description. C’est assez similaire au format des issues GitHub que nous avons vu lors de la création de notre propre jeu de données dans le chapitre 5. Comme son nom l’indique, la catégorie Beginners est principalement destinée aux personnes qui débutent avec les bibliothèques et l’écosystème d’Hugging Face. Toute question sur l’une des bibliothèques est la bienvenue ici, que ce soit pour déboguer du code ou pour demander de l’aide sur la façon de faire quelque chose. (Cela dit, si votre question concerne une bibliothèque en particulier, vous devriez probablement vous diriger vers la catégorie de bibliothèque correspondante sur le forum).

De même, les catégories Intermediate et Research sont destinées aux questions plus avancées. Par exemple sur les bibliothèques ou sur une avancée en recherche en NLP dont vous aimeriez discuter.

Et naturellement, nous devrions aussi mentionner la catégorie Course où vous pouvez poser toutes les questions que vous avez en rapport avec le cours d’Hugging Face !

Une fois une catégorie choisie, vous êtes prêt à rédiger votre premier sujet. Vous pouvez trouver quelques indications dans le forum sur la façon de le faire. Dans cette section, nous allons jeter un coup d’oeil à certaines caractéristiques d’un bon sujet.

##
Rédiger un bon message sur le forum

A titre d’exemple, supposons que nous essayons de générer des enchâssements à partir d’articles Wikipédia pour créer un moteur de recherche personnalisé. Comme d’habitude, nous chargeons le tokenizer et le modèle comme suit :

    from transformers import AutoTokenizer, AutoModel

    model_checkpoint = "distilbert-base-uncased"
    tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
    model = AutoModel.from_pretrained(model_checkpoint)

Supposons maintenant que nous essayons d’enchâsser une section entière de l’article Wikipedia sur Transformers (la franchise de films, pas la bibliothèque !):

    text = """
    Generation One is a retroactive term for the Transformers characters that
    appeared between 1984 and 1993. The Transformers began with the 1980s Japanese
    toy lines Micro Change and Diaclone. They presented robots able to transform
    into everyday vehicles, electronic items or weapons. Hasbro bought the Micro
    Change and Diaclone toys, and partnered with Takara. Marvel Comics was hired by
    Hasbro to create the backstory; editor-in-chief Jim Shooter wrote an overall
    story, and gave the task of creating the characthers to writer Dennis O'Neil.
    Unhappy with O'Neil's work (although O'Neil created the name "Optimus Prime"),
    Shooter chose Bob Budiansky to create the characters.

    The Transformers mecha were largely designed by Shōji Kawamori, the creator of
    the Japanese mecha anime franchise Macross (which was adapted into the Robotech
    franchise in North America). Kawamori came up with the idea of transforming
    mechs while working on the Diaclone and Macross franchises in the early 1980s
    (such as the VF-1 Valkyrie in Macross and Robotech), with his Diaclone mechs
    later providing the basis for Transformers.

    The primary concept of Generation One is that the heroic Optimus Prime, the
    villainous Megatron, and their finest soldiers crash land on pre-historic Earth
    in the Ark and the Nemesis before awakening in 1985, Cybertron hurtling through
    the Neutral zone as an effect of the war. The Marvel comic was originally part
    of the main Marvel Universe, with appearances from Spider-Man and Nick Fury,
    plus some cameos, as well as a visit to the Savage Land.

    The Transformers TV series began around the same time. Produced by Sunbow
    Productions and Marvel Productions, later Hasbro Productions, from the start it
    contradicted Budiansky's backstories. The TV series shows the Autobots looking
    for new energy sources, and crash landing as the Decepticons attack. Marvel
    interpreted the Autobots as destroying a rogue asteroid approaching Cybertron.
    Shockwave is loyal to Megatron in the TV series, keeping Cybertron in a
    stalemate during his absence, but in the comic book he attempts to take command
    of the Decepticons. The TV series would also differ wildly from the origins
    Budiansky had created for the Dinobots, the Decepticon turned Autobot Jetfire
    (known as Skyfire on TV), the Constructicons (who combine to form
    Devastator),[19][20] and Omega Supreme. The Marvel comic establishes early on
    that Prime wields the Creation Matrix, which gives life to machines. In the
    second season, the two-part episode The Key to Vector Sigma introduced the
    ancient Vector Sigma computer, which served the same original purpose as the
    Creation Matrix (giving life to Transformers), and its guardian Alpha Trion.
    """

    text_fr = """
    Génération 1 est un terme rétroactif pour les personnages de Transformers qui sont apparus
    entre 1984 et 1993. Les Transformers ont commencé avec les lignes de jouets japonaises
    des années 1980, Micro Change et Diaclone. Elles présentaient des robots capables
    de se transformer en véhicules de tous les jours, en objets électroniques ou en armes.
    Hasbro a acheté les jouets Micro Change et Diaclone, et s'est associé à Takara.
    Marvel Comics est engagé par Hasbro pour créer l'histoire de fond ; le rédacteur en chef
    Jim Shooter a écrit une histoire générale et confie la tâche de créer les personnages au
    scénariste Dennis O'Neil. Mécontent du travail d'O'Neil (bien que ce dernier ait créé
    le nom "Optimus Prime"), Shooter choisit Bob Budiansky pour créer les personnages.

    Les mecha de Transformers ont été en grande partie conçus par Shōji Kawamori, le créateur
    de l'anime japonais Macross (qui a été adapté en Robotech en Amérique du Nord). Kawamori
    a eu l'idée de transformer des mechas transformables alors qu'il travaillait sur les
    franchises Diaclone et Macross au début des années 1980 (comme le VF-1 Valkyrie dans
    Macross et Robotech), et ses méchas Diaclone ont plus tard servi de base à Transformers.

    Le concept principal de la Génération 1 est que l'héroïque Optimus Prime, le méchant
    Megatron, et leurs meilleurs soldats s'écrasent sur une Terre préhistorique dans l'Arche
    et le Némésis avant de se réveiller en 1985, Cybertron traversant à toute allure la zone
    neutre en raison de la guerre. La bande dessinée Marvel faisait à l'origine partie
    de l'univers principal de Marvel, avec des apparitions de Spider-Man et Nick Fury,
    plus quelques caméos, ainsi qu'une visite à la Terre Sauvage.

    La série télévisée Transformers a commencé à peu près à la même époque.
    Produite par Sunbow Productions et Marvel Productions, puis Hasbro Productions,
    dès le début elle a contredit les histoires de Budiansky. La série TV montre les Autobots
    cherchant de nouvelles sources d'énergie et s'écrasent lors de l'attaque des Decepticons.
    Marvel a interprété les Autobots comme la destruction d'un astéroïde malveillant
    s'approchant de Cybertron. Shockwave est loyal envers Megatron dans la série TV,
    et maintient Cybertron dans une impasse en son absence.
    Cybertron dans une impasse pendant son absence, mais dans la BD,
    il tente de prendre le commandement des Decepticons.
    La série télévisée s'écarte aussi radicalement des origines que Budiansky avait
    créé pour les Dinobots, le Decepticon devenu Autobot Jetfire
    (connu sous le nom de Skyfire à la télévision),
    les Constructicons (qui s'associent pour former Devastator) et Oméga Suprême.
    La bande dessinée Marvel établit très tôt que Prime manie la matrice de création,
    qui donne la vie aux machines. Dans la saison, l'épisode en deux parties
    The Key to Vector Sigma a introduit l'ancien ordinateur l'ancien ordinateur
    Vector Sigma, qui servait le même objectif original que la matrice de création
    (donner la vie aux Transformers), et son gardien Alpha Trion.
    """

    inputs = tokenizer(text, return_tensors="pt")
    logits = model(**inputs).logits

    IndexError: index out of range in self

Oh nous avons rencontré un problème. Le message d’erreur est bien plus énigmatique que ceux que nous avons vus dans la section 2 ! Nous n’arrivons pas à comprendre le traceback complet, alors nous décidons de nous tourner vers le forum d’Hugging Face pour obtenir de l’aide. Comment pouvons-nous élaborer le sujet ?

Pour commencer, nous devons cliquer sur le bouton New Topic dans le coin supérieur droit (notez que pour créer un sujet, nous devons être connectés) :

Cela fait apparaître une interface de rédaction où nous pouvons saisir le titre de notre sujet, sélectionner une catégorie et rédiger le contenu :

Puisque l’erreur semble concerner exclusivement 🤗 Transformers, nous allons la sélectionner pour la catégorie. Notre première tentative d’explication du problème pourrait ressembler à quelque chose comme ça :

Bien que ce sujet contienne le message d’erreur pour lequel nous avons besoin d’aide, il y a quelques problèmes avec la façon dont il est écrit :

1. le titre n’est pas très descriptif, ainsi toute personne parcourant le forum ne sera pas en mesure de dire de quoi il s’agit sans lire également le corps du sujet,
2. le corps du texte ne fournit pas suffisamment d’informations sur l’origine de l’erreur et sur la manière de la reproduire,
3. le sujet s’adresse directement à quelques personnes sur un ton quelque peu exigeant.

Les sujets comme celui-ci ne sont pas susceptibles d’obtenir une réponse rapide (si tant est qu’ils en obtiennent une) alors voyons comment nous pouvons l’améliorer. Commençons par la première question, celle du choix d’un bon titre.

###
Choisir un titre descriptif

Si vous essayez d’obtenir de l’aide pour résoudre un bug dans votre code, une bonne règle de base consiste à inclure suffisamment d’informations dans le titre pour que les autres puissent rapidement déterminer s’ils pensent pouvoir répondre à votre question ou non. Dans notre exemple, nous connaissons le nom de l’exception et savons qu’elle est déclenchée dans la passe avant du modèle, où nous appelons `model(**inputs)`. Pour communiquer cela, un titre possible pourrait être :

> Source de l’IndexError dans la passe avant d’AutoModel ?

Ce titre indique au lecteur où vous pensez que le bug provient, et s’il a déjà rencontré un `IndexError`, il y a de fortes chances qu’il sache comment le déboguer. Bien sûr, le titre peut être ce que vous voulez et d’autres variations comme :

> Pourquoi mon modèle produit-il un IndexError ?

pourrait également convenir. Maintenant que nous avons un titre descriptif, voyons comment améliorer le corps du texte.

###
Formatage de vos extraits de code

La lecture du code source est déjà difficile dans un IDE, mais c’est encore plus difficile lorsque le code est copié et collé en texte brut ! Heureusement, le forum d’Hugging Face supporte l’utilisation de Markdown donc vous devriez toujours entourer vos blocs de code avec trois backticks (```) pour qu’ils soient plus facilement lisibles. Faisons cela pour embellir le message d’erreur et pendant que nous y sommes, rendons le corps un peu plus poli que notre version originale :

Comme vous pouvez le voir dans la capture d’écran, le fait d’entourer les blocs de code de backticks convertit le texte brut en code formaté, avec un style de couleur ! Notez également que des backticks simples peuvent être utilisés pour formater des variables en ligne comme nous l’avons fait pour `distilbert-base-uncased`. Ce sujet a l’air bien meilleur, et avec un peu de chance, nous pourrions trouver quelqu’un dans la communauté qui pourrait deviner à quoi correspond l’erreur. Cependant, au lieu de compter sur la chance, rendons la vie plus facile en incluant le traceback dans ses moindres détails !

###
Inclure le <i> traceback </i> complet

Puisque la dernière ligne de le traceback est souvent suffisante pour déboguer votre propre code, il peut être tentant de ne fournir que cela dans votre sujet pour “gagner de la place”. Bien que bien intentionné, cela rend en fait le débogage du problème plus difficile pour les autres, car les informations situées plus haut dans le traceback peuvent également être très utiles. Une bonne pratique consiste donc à copier et coller le traceback entier, en veillant à ce qu’elle soit bien formatée. Comme ces tracebacks peuvent être assez longs, certaines personnes préfèrent les montrer après avoir expliqué le code source. C’est ce que nous allons faire. Maintenant, notre sujet de forum ressemble à ce qui suit :

Ceci est beaucoup plus informatif et un lecteur attentif pourrait être en mesure d’indiquer que le problème semble être dû à la transmission d’une longue entrée en raison de cette ligne dans le traceback :

> Token indices sequence length is longer than the specified maximum sequence length for this model (583 > 512).

Cependant, nous pouvons leur faciliter les choses en leur fournissant le code qui a déclenché l’erreur. C’est ce que nous allons faire maintenant.

###
Fournir un exemple reproductible

Si vous avez déjà essayé de déboguer le code de quelqu’un d’autre, vous avez probablement d’abord essayé de recréer le problème qu’il a signalé afin de pouvoir commencer à travailler sur le traceback pour identifier l’erreur. Il en va de même lorsqu’il s’agit d’obtenir (ou de donner) de l’aide sur les forums. Il est donc très utile de pouvoir fournir un petit exemple qui reproduit l’erreur. La moitié du temps, le simple fait de faire cet exercice vous aidera à comprendre ce qui ne va pas. Dans tous les cas, la pièce manquante de notre exemple est de montrer les entrées que nous avons fournies au modèle. En faisant cela, nous obtenons quelque chose comme l’exemple complet suivant :

Ce sujet contient maintenant un bon lot d’informations et il est rédigé d’une manière qui a beaucoup plus de chances d’attirer l’attention de la communauté et d’obtenir une réponse utile. Avec ces directives de base, vous pouvez maintenant créer de superbes sujets pour trouver les réponses à vos questions sur 🤗 Transformers !