Buckets:

rtrm's picture
download
raw
34.9 kB
<meta charset="utf-8" /><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;Unité 3 : Architectures de transformers pour l’audio&quot;,&quot;local&quot;:&quot;unité-3--architectures-de-transformers-pour-laudio&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Comment fonctionne un transformer ?&quot;,&quot;local&quot;:&quot;comment-fonctionne-un-transformer-&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Utilisation de transformers pour l’audio&quot;,&quot;local&quot;:&quot;utilisation-de-transformers-pour-laudio&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Entrées du modèle&quot;,&quot;local&quot;:&quot;entrées-du-modèle&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Entrée textuelle&quot;,&quot;local&quot;:&quot;entrée-textuelle&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Entrée sous forme de forme d’onde&quot;,&quot;local&quot;:&quot;entrée-sous-forme-de-forme-donde&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Entrée sous forme de spectrogramme&quot;,&quot;local&quot;:&quot;entrée-sous-forme-de-spectrogramme&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Sorties du modèle&quot;,&quot;local&quot;:&quot;sorties-du-modèle&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Sortie textuelle&quot;,&quot;local&quot;:&quot;sortie-textuelle&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Sortie sous forme de spectrogramme&quot;,&quot;local&quot;:&quot;sortie-sous-forme-de-spectrogramme&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Sortie sous forme de forme d’onde&quot;,&quot;local&quot;:&quot;sortie-sous-forme-de-forme-donde&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Conclusion&quot;,&quot;local&quot;:&quot;conclusion&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2}],&quot;depth&quot;:1}">
<link href="/docs/audio-course/pr_239/fr/_app/immutable/assets/0.e3b0c442.css" rel="modulepreload">
<link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/entry/start.48d22ca3.js">
<link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/chunks/scheduler.a045fce0.js">
<link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/chunks/singletons.932e46dd.js">
<link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/chunks/index.2447c7d9.js">
<link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/chunks/paths.50fd3c21.js">
<link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/entry/app.4e1ef9b0.js">
<link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/chunks/preload-helper.aa8f5fd5.js">
<link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/chunks/index.5135b896.js">
<link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/nodes/0.00a7cda2.js">
<link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/chunks/each.e59479a4.js">
<link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/nodes/18.2b4f19c2.js">
<link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/chunks/Tip.872c1b89.js">
<link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/chunks/MermaidChart.svelte_svelte_type_style_lang.59591d32.js"><!-- HEAD_svelte-u9bgzb_START --><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;Unité 3 : Architectures de transformers pour l’audio&quot;,&quot;local&quot;:&quot;unité-3--architectures-de-transformers-pour-laudio&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Comment fonctionne un transformer ?&quot;,&quot;local&quot;:&quot;comment-fonctionne-un-transformer-&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Utilisation de transformers pour l’audio&quot;,&quot;local&quot;:&quot;utilisation-de-transformers-pour-laudio&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Entrées du modèle&quot;,&quot;local&quot;:&quot;entrées-du-modèle&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Entrée textuelle&quot;,&quot;local&quot;:&quot;entrée-textuelle&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Entrée sous forme de forme d’onde&quot;,&quot;local&quot;:&quot;entrée-sous-forme-de-forme-donde&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Entrée sous forme de spectrogramme&quot;,&quot;local&quot;:&quot;entrée-sous-forme-de-spectrogramme&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Sorties du modèle&quot;,&quot;local&quot;:&quot;sorties-du-modèle&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Sortie textuelle&quot;,&quot;local&quot;:&quot;sortie-textuelle&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Sortie sous forme de spectrogramme&quot;,&quot;local&quot;:&quot;sortie-sous-forme-de-spectrogramme&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Sortie sous forme de forme d’onde&quot;,&quot;local&quot;:&quot;sortie-sous-forme-de-forme-donde&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Conclusion&quot;,&quot;local&quot;:&quot;conclusion&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2}],&quot;depth&quot;:1}"><!-- HEAD_svelte-u9bgzb_END --> <p></p> <div class="items-center shrink-0 min-w-[100px] max-sm:min-w-[50px] justify-end ml-auto flex" style="float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"><div class="inline-flex rounded-md max-sm:rounded-sm"><button class="inline-flex items-center gap-1 h-7 max-sm:h-7 px-2 max-sm:px-1.5 text-sm font-medium text-gray-800 border border-r-0 rounded-l-md max-sm:rounded-l-sm border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-live="polite"><span class="inline-flex items-center justify-center rounded-md p-0.5 max-sm:p-0 hover:text-gray-800 dark:hover:text-gray-200"><svg class="sm:size-3.5 size-3" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg></span> <span>Copy page</span></button> <button class="inline-flex items-center justify-center w-6 max-sm:w-5 h-7 max-sm:h-7 disabled:pointer-events-none text-sm text-gray-500 hover:text-gray-700 dark:hover:text-white rounded-r-md max-sm:rounded-r-sm border border-l transition border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-haspopup="menu" aria-expanded="false" aria-label="Open copy menu"><svg class="transition-transform text-gray-400 overflow-visible sm:size-3.5 size-3 rotate-0" width="1em" height="1em" viewBox="0 0 12 7" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L6 6L11 1" stroke="currentColor"></path></svg></button></div> </div> <h1 class="relative group"><a id="unité-3--architectures-de-transformers-pour-laudio" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#unité-3--architectures-de-transformers-pour-laudio"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Unité 3 : Architectures de transformers pour l’audio</span></h1> <p data-svelte-h="svelte-hjh2e3">Dans ce cours, nous examinons principalement les <em>transformers</em> et comment ils peuvent être appliqués aux tâches audio. Bien que vous n’ayez pas besoin de connaître les détails internes de ces modèles, il est utile de comprendre les principaux concepts qui les font fonctionner. Nous faisons donc ici un rappel rapide. Pour une plongée profonde dans les <em>transformers</em>, consultez notre <a href="https://huggingface.co/learn/nlp-course/fr/chapter1/1" rel="nofollow">cours de NLP</a>.</p> <h2 class="relative group"><a id="comment-fonctionne-un-transformer-" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#comment-fonctionne-un-transformer-"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Comment fonctionne un transformer ?</span></h2> <p data-svelte-h="svelte-1qzgufu">Le <em>transformer</em> original a été conçu pour traduire du texte écrit d’une langue à une autre. Son architecture ressemble à ceci :</p> <div class="flex justify-center" data-svelte-h="svelte-4s71rk"><img src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers.svg" alt="Original transformer architecture"></div> <p data-svelte-h="svelte-1wbffyo">À gauche se trouve l’<strong>encodeur</strong> et à droite le <strong>décodeur</strong>.</p> <ul data-svelte-h="svelte-1ck9bi5"><li>L’encodeur reçoit une entrée, dans ce cas une séquence de <em>tokens</em> de texte, et construit une représentation de celle-ci (ses caractéristiques). Cette partie du modèle est entraînée pour acquérir une compréhension à partir de l’entrée.</li> <li>Le décodeur utilise la représentation de l’encodeur (les caractéristiques) ainsi que d’autres entrées (les <em>tokens</em> prédits précédemment) pour générer une séquence cible. Cette partie du modèle est entraînée pour générer des extrants. Dans la conception originale, la séquence de sortie se composait de <em>tokens</em> de texte.
Il existe également des modèles basés sur des <em>transformers</em> n’utilisant que la partie encodeur (bon pour les tâches qui nécessitent une compréhension de l’entrée, comme la classification), ou uniquement la partie décodeur (bon pour les tâches telles que la génération de texte). Un exemple de modèle d’encodeur seul est BERT ; un exemple de modèle de décodeur seul est GPT2.
Une caractéristique clé des <em>transformers</em> est qu’ils sont construits avec des couches spéciales appelées <strong>couches d’attention</strong>. Ces couches indiquent au modèle d’accorder une attention particulière à certains éléments de la séquence d’entrée et d’en ignorer d’autres lors du calcul des représentations d’entités.</li></ul> <h2 class="relative group"><a id="utilisation-de-transformers-pour-laudio" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#utilisation-de-transformers-pour-laudio"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Utilisation de transformers pour l’audio</span></h2> <p data-svelte-h="svelte-mifguu">Les modèles audio que nous aborderons dans ce cours ont généralement un <em>transformer</em> standard comme indiqué ci-dessus, mais avec une légère modification du côté de l’entrée ou de la sortie pour gérer des données audio au lieu de texte. Puisque tous ces modèles sont des <em>transformers</em> dans l’âme, ils ont pour la plupart une architecture commune et les principales différences sont dans la façon dont ils sont entraînés et utilisés.</p> <div class="flex justify-center" data-svelte-h="svelte-nwa8hg"><img src="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/transformers_blocks.png" alt="The transformer with audio input and output"></div> <p data-svelte-h="svelte-1k5s6bc">Pour les tâches audio, les séquences d’entrée et/ou de sortie sont de l’audio au lieu de texte :</p> <ul data-svelte-h="svelte-1f3rz1h"><li>Reconnaissance automatique de la parole (ASR pour <em>Automatic speech recognition</em>) : l’entrée est la parole, la sortie est du texte.</li> <li>Synthèse vocale (TTS pour <em>Text-to-speech</em>) : l’entrée est du texte, la sortie est de la parole.</li> <li>Classification audio : l’entrée est de l’audio, la sortie est une probabilité de classe (une pour chaque élément de la séquence ou une probabilité de classe unique pour la séquence entière).</li> <li>Conversion vocale ou amélioration de la parole : l’entrée et la sortie sont de l’audio.</li></ul> <p data-svelte-h="svelte-vu2mlx">Il existe différentes façons de gérer l’audio afin qu’il puisse être utilisé via un <em>transformer</em>. La principale considération est de savoir s’il faut utiliser l’audio dans sa forme brute (comme une forme d’onde) ou le traiter comme un spectrogramme à la place.</p> <h2 class="relative group"><a id="entrées-du-modèle" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#entrées-du-modèle"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Entrées du modèle</span></h2> <p data-svelte-h="svelte-1emaony">L’entrée d’un modèle audio peut être du texte ou du son. L’objectif est de convertir cette entrée en un enchâssement pouvant être traité par le <em>transformer</em>.</p> <h3 class="relative group"><a id="entrée-textuelle" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#entrée-textuelle"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Entrée textuelle</span></h3> <p data-svelte-h="svelte-137ywy8">Un modèle de synthèse vocale prend du texte comme entrée. Cela fonctionne comme le <em>transformer</em> d’origine en NLP : le texte d’entrée est d’abord tokenisé, ce qui donne une séquence de <em>tokens</em> de texte. Cette séquence est envoyée via une couche d’enchâssement d’entrée pour convertir les <em>tokens</em> en vecteurs de 512 dimensions. Ces enchâssements sont ensuite transmis dans l’encodeur du <em>transformer</em>.</p> <h3 class="relative group"><a id="entrée-sous-forme-de-forme-donde" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#entrée-sous-forme-de-forme-donde"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Entrée sous forme de forme d’onde</span></h3> <p data-svelte-h="svelte-1d18oho">Un modèle de reconnaissance de la parole automatique prend l’audio comme entrée. Pour pouvoir utiliser un <em>transformer</em> pour l’ASR, nous devons d’abord convertir l’audio en une séquence d’enchâssements d’une manière ou d’une autre.
Des modèles tels que <strong><a href="https://arxiv.org/abs/2006.11477" rel="nofollow">Wav2Vec2</a></strong> et <strong><a href="https://arxiv.org/abs/2106.07447" rel="nofollow">HuBERT</a></strong> utilisent la forme d’onde audio directement comme entrée du modèle. Comme vous l’avez vu dans [le chapitre sur les données audio (../chapter1/introduction), une forme d’onde est une séquence unidimensionnelle de nombres à virgule flottante, où chaque nombre représente l’amplitude échantillonnée à un moment donné. Cette forme d’onde brute est d’abord normalisée à la moyenne nulle et à la variance unitaire, ce qui permet de normaliser les échantillons audio sur différents volumes (amplitudes).</p> <div class="flex justify-center" data-svelte-h="svelte-gtur9r"><img src="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/wav2vec2-input.png" alt="Wav2Vec2 uses a CNN to create embeddings from the input waveform"></div> <p data-svelte-h="svelte-1g9ou8x">Après la normalisation, la séquence d’échantillons audio est transformée en un enchâssement à l’aide d’un petit réseau neuronal convolutionnel, connu sous le nom d’encodeur de caractéristiques. Chacune des couches convolutives de ce réseau traite la séquence d’entrée, sous-échantillonnant l’audio pour réduire la longueur de la séquence, jusqu’à ce que la couche convolutive finale produise un vecteur à 512 dimensions avec l’enchâssement pour chaque 25 ms d’audio. Une fois que la séquence d’entrée a été transformée en une séquence de tels enchâssements, le <em>transformer</em> traitera les données comme d’habitude.</p> <h3 class="relative group"><a id="entrée-sous-forme-de-spectrogramme" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#entrée-sous-forme-de-spectrogramme"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Entrée sous forme de spectrogramme</span></h3> <p data-svelte-h="svelte-nciwcl">Un inconvénient de l’utilisation de la forme d’onde brute comme entrée est qu’elles ont tendance à avoir de longues longueurs de séquence. Par exemple, trente secondes d’audio à une fréquence d’échantillonnage de 16 kHz donnent une entrée de longueur <code>30 * 16000 = 480000</code>. Des longueurs de séquence plus longues nécessitent plus de calculs dans le <em>transformer</em> et donc une utilisation plus élevée de la mémoire.
Pour cette raison, les formes d’onde audio brutes ne sont généralement pas la forme la plus efficace de représenter une entrée audio. En utilisant un spectrogramme, nous obtenons la même quantité d’informations, mais sous une forme plus comprimée.</p> <div class="flex justify-center" data-svelte-h="svelte-byhcj1"><img src="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/whisper-input.png" alt="Whisper uses a CNN to create embeddings from the input spectrogram"></div> <p data-svelte-h="svelte-1dwybjp">Des modèles tels que <strong><a href="https://arxiv.org/abs/2212.04356" rel="nofollow">Whisper</a></strong> convertissent d’abord la forme d’onde en un spectrogramme log-mel. Whisper divise toujours l’audio en segments de 30 secondes, et le spectrogramme log-mel pour chaque segment a la forme <code>(80, 3000)</code> où 80 est le nombre de bacs mel et 3000 est la longueur de la séquence. En convertissant en spectrogramme log-mel, nous avons réduit la quantité de données d’entrée, mais plus important encore, il s’agit d’une séquence beaucoup plus courte que la forme d’onde brute. Le spectrogramme log-mel est ensuite traité par un petit réseau convolutif en une séquence d’enchâssements, allant ensuite dans le <em>transformer</em> comme d’habitude.</p> <p data-svelte-h="svelte-ky1v83">Dans les deux cas, l’entrée de la forme d’onde et du spectrogramme, il y a un petit réseau devant le <em>transformer</em> convertissant l’entrée en enchâssement, puis le <em>transformer</em>prend le relais pour faire son travail.</p> <h2 class="relative group"><a id="sorties-du-modèle" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#sorties-du-modèle"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Sorties du modèle</span></h2> <p data-svelte-h="svelte-uzv2d6">L’architecture du <em>transformer</em> génère une séquence de vecteurs à états cachés, également appelés enchâssement de sortie. Notre objectif est de transformer ces vecteurs en sortie textuelle ou audio.</p> <h3 class="relative group"><a id="sortie-textuelle" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#sortie-textuelle"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Sortie textuelle</span></h3> <p data-svelte-h="svelte-1kaiegy">L’objectif d’un modèle d’ASR est de prédire une séquence de <em>tokens</em> de texte. Cela se fait en ajoutant une tête de modélisation du langage (généralement une seule couche linéaire) suivie d’une softmax au-dessus de la sortie du <em>transformer</em>. On alors prédit les probabilités sur les <em>tokens</em> de texte dans le vocabulaire.</p> <h3 class="relative group"><a id="sortie-sous-forme-de-spectrogramme" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#sortie-sous-forme-de-spectrogramme"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Sortie sous forme de spectrogramme</span></h3> <p data-svelte-h="svelte-134yejw">Pour les modèles qui génèrent de l’audio, tels qu’un modèle de synthèse vocale, nous devons ajouter des couches pouvant produire une séquence audio. Il est très courant de générer un spectrogramme, puis d’utiliser un réseau neuronal supplémentaire, connu sous le nom de vocodeur, pour transformer ce spectrogramme en une forme d’onde.
Par exemple dans le modèle <strong><a href="https://arxiv.org/abs/2110.07205" rel="nofollow">SpeechT5</a></strong> la sortie du <em>transformer</em> est une séquence de vecteurs à 768 éléments. Une couche linéaire projette cette séquence dans un spectrogramme log-mel. Un post-réseau, composé de couches linéaires et convolutives supplémentaires, affine le spectrogramme en réduisant le bruit. Le vocodeur crée alors la forme d’onde audio finale.</p> <div class="flex justify-center" data-svelte-h="svelte-24c3yo"><img src="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/speecht5.png" alt="SpeechT5 outputs a spectrogram and uses a vocoder to create the waveform"></div> <blockquote class="tip">💡 Si vous prenez une forme d&#39;onde existante et appliquez la transformée de Fourier à court terme (TFCT), il est possible d&#39;effectuer l&#39;opération inverse pour obtenir à nouveau la forme d&#39;onde d&#39;origine. Cela fonctionne parce que le spectrogramme créé par la TFCT contient à la fois des informations d&#39;amplitude et de phase, et les deux sont nécessaires pour reconstruire la forme d&#39;onde. Cependant, les modèles audio qui génèrent leur sortie sous forme de spectrogramme ne prédisent généralement que les informations d&#39;amplitude, pas la phase. Pour transformer un tel spectrogramme en une forme d&#39;onde, nous devons en quelque sorte estimer l&#39;information de phase. C&#39;est ce que fait un vocodeur.</blockquote> <h3 class="relative group"><a id="sortie-sous-forme-de-forme-donde" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#sortie-sous-forme-de-forme-donde"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Sortie sous forme de forme d’onde</span></h3> <p data-svelte-h="svelte-5czlfi">Il est également possible pour les modèles de produire directement une forme d’onde au lieu d’un spectrogramme comme étape intermédiaire, mais nous n’avons actuellement aucun modèle dans 🤗 <em>Transformers</em> qui le fait.</p> <h2 class="relative group"><a id="conclusion" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#conclusion"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Conclusion</span></h2> <p data-svelte-h="svelte-5dg4ch">En résumé: la plupart des <em>transformers</em> audio se ressemblent plus que différents. Ils sont tous construits sur la même architecture et les mêmes couches d’attention, bien que certains modèles n’utilisent que la partie encodeur du <em>transformer</em> tandis que d’autres utilisent à la fois l’encodeur et le décodeur.
Vous avez également vu comment obtenir des données audio dans et hors des <em>transformers</em>. Pour effectuer les différentes tâches audio d’ASR, TTS, etc., nous pouvons simplement échanger les couches qui prétraitent les entrées en enchâssements, et échanger les couches qui post-traitent les enchâssements prédites en sorties, tandis que le <em>backbone</em> du <em>transformer</em> reste le même.
Examinons dans les suite différentes façons dont ces modèles peuvent être entraînés à effectuer une reconnaissance vocale automatique.</p> <a class="!text-gray-400 !no-underline text-sm flex items-center not-prose mt-4" href="https://github.com/huggingface/audio-transformers-course/blob/main/chapters/fr/chapter3/introduction.mdx" target="_blank"><svg class="mr-1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M31,16l-7,7l-1.41-1.41L28.17,16l-5.58-5.59L24,9l7,7z"></path><path d="M1,16l7-7l1.41,1.41L3.83,16l5.58,5.59L8,23l-7-7z"></path><path d="M12.419,25.484L17.639,6.552l1.932,0.518L14.351,26.002z"></path></svg> <span data-svelte-h="svelte-zjs2n5"><span class="underline">Update</span> on GitHub</span></a> <p></p>
<script>
{
__sveltekit_oc6cu6 = {
assets: "/docs/audio-course/pr_239/fr",
base: "/docs/audio-course/pr_239/fr",
env: {}
};
const element = document.currentScript.parentElement;
const data = [null,null];
Promise.all([
import("/docs/audio-course/pr_239/fr/_app/immutable/entry/start.48d22ca3.js"),
import("/docs/audio-course/pr_239/fr/_app/immutable/entry/app.4e1ef9b0.js")
]).then(([kit, app]) => {
kit.start(app, element, {
node_ids: [0, 18],
data,
form: null,
error: null
});
});
}
</script>

Xet Storage Details

Size:
34.9 kB
·
Xet hash:
5ff91b7957060fa12d637c743f49dbf46513d90a785d8418b77ae5dbf04b4b33

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.