import{S as Mt,i as ft,s as ht,e as r,k as p,w as m,t,M as jt,c as o,d as s,m as d,a as u,x as M,h as a,b as c,N as vt,G as n,g as i,y as f,q as h,o as j,B as v,v as yt}from"../../chunks/vendor-hf-doc-builder.js";import{T as Jt}from"../../chunks/Tip-hf-doc-builder.js";import{I as Ps}from"../../chunks/IconCopyLink-hf-doc-builder.js";import{C as U}from"../../chunks/CodeBlock-hf-doc-builder.js";function Ut(rs){let y;return{c(){y=t(`\u{1F4A1} Quelques informations sur le r\xE9\xE9chantillonnage: Si un signal audio a \xE9t\xE9 \xE9chantillonn\xE9 \xE0 8 kHz, de sorte qu'il a 8000 lectures d'\xE9chantillon par seconde, nous savons que l'audio ne contient aucune fr\xE9quence sup\xE9rieure \xE0 4 kHz. 
Ceci est garanti par le th\xE9or\xE8me d'\xE9chantillonnage de Nyquist. Pour cette raison, nous pouvons \xEAtre certains qu'entre les points d'\xE9chantillonnage, le signal continu d'origine fait toujours une courbe lisse.
L'augmentation du pr\xE9l\xE8vement vers un taux d'\xE9chantillonnage plus \xE9lev\xE9 consiste alors \xE0 calculer des valeurs d'\xE9chantillonnage suppl\xE9mentaires qui se situent entre les valeurs existantes, en approximant cette courbe. 
Le sous-\xE9chantillonnage, cependant, n\xE9cessite que nous filtrons d'abord toutes les fr\xE9quences qui seraient sup\xE9rieures \xE0 la nouvelle limite de Nyquist, avant d'estimer les nouveaux points d'\xE9chantillonnage. 
En d'autres termes, vous ne pouvez pas sous-\xE9chantillonner d'un facteur 2x en jetant simplement tous les autres \xE9chantillons - cela cr\xE9era des distorsions dans le signal appel\xE9es alias. 
Faire un r\xE9\xE9chantillonnage correct est d\xE9licat et mieux laiss\xE9 \xE0 des biblioth\xE8ques bien test\xE9es telles que librosa ou \u{1F917} *Datasets*.`)},l(q){y=a(q,`\u{1F4A1} Quelques informations sur le r\xE9\xE9chantillonnage: Si un signal audio a \xE9t\xE9 \xE9chantillonn\xE9 \xE0 8 kHz, de sorte qu'il a 8000 lectures d'\xE9chantillon par seconde, nous savons que l'audio ne contient aucune fr\xE9quence sup\xE9rieure \xE0 4 kHz. 
Ceci est garanti par le th\xE9or\xE8me d'\xE9chantillonnage de Nyquist. Pour cette raison, nous pouvons \xEAtre certains qu'entre les points d'\xE9chantillonnage, le signal continu d'origine fait toujours une courbe lisse.
L'augmentation du pr\xE9l\xE8vement vers un taux d'\xE9chantillonnage plus \xE9lev\xE9 consiste alors \xE0 calculer des valeurs d'\xE9chantillonnage suppl\xE9mentaires qui se situent entre les valeurs existantes, en approximant cette courbe. 
Le sous-\xE9chantillonnage, cependant, n\xE9cessite que nous filtrons d'abord toutes les fr\xE9quences qui seraient sup\xE9rieures \xE0 la nouvelle limite de Nyquist, avant d'estimer les nouveaux points d'\xE9chantillonnage. 
En d'autres termes, vous ne pouvez pas sous-\xE9chantillonner d'un facteur 2x en jetant simplement tous les autres \xE9chantillons - cela cr\xE9era des distorsions dans le signal appel\xE9es alias. 
Faire un r\xE9\xE9chantillonnage correct est d\xE9licat et mieux laiss\xE9 \xE0 des biblioth\xE8ques bien test\xE9es telles que librosa ou \u{1F917} *Datasets*.`)},m(q,T){i(q,y,T)},d(q){q&&s(y)}}}function Tt(rs){let y,q,T,k,Ae,X,Os,Ie,Ks,os,R,en,xe,sn,nn,us,b,_e,ln,tn,Ce,an,rn,Ee,on,is,$,G,$e,Y,un,ze,pn,ps,w,dn,Be,cn,mn,ke,Mn,fn,ds,Q,cs,pe,hn,ms,F,Ms,de,Re,jn,fs,D,hs,ce,vn,js,N,vs,z,Z,Ge,H,yn,Ne,Jn,ys,J,Un,Ze,Tn,qn,Ve,bn,wn,We,gn,An,Se,In,xn,Js,L,Us,me,_n,Ts,P,qs,Me,Xe,Cn,bs,O,ws,fe,En,gs,B,V,Ye,K,$n,Qe,zn,As,W,Bn,Fe,kn,Rn,Is,g,Gn,ee,Nn,Zn,De,Vn,Wn,xs,se,_s,S,Sn,He,Xn,Yn,Cs,ne,Es,A,Qn,Le,Fn,Dn,Pe,Hn,Ln,$s,le,zs,he,Oe,Pn,Bs,te,ks,I,On,Ke,Kn,el,es,sl,nl,Rs,ae,Gs,re,je,yl,Ns,ve,ll,Zs,x,tl,ss,al,rl,oe,ol,ul,Vs,_,il,ns,pl,dl,ls,cl,ml,Ws,ue,Ss,C,Ml,ts,fl,hl,as,jl,vl,Xs;return X=new Ps({}),Y=new Ps({}),Q=new U({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwQXVkaW8lMEElMEFtaW5kcyUyMCUzRCUyMG1pbmRzLmNhc3RfY29sdW1uKCUyMmF1ZGlvJTIyJTJDJTIwQXVkaW8oc2FtcGxpbmdfcmF0ZSUzRDE2XzAwMCkp",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> Audio

minds = minds.cast_column(<span class="hljs-string">&quot;audio&quot;</span>, Audio(sampling_rate=<span class="hljs-number">16_000</span>))`}}),F=new U({props:{code:"bWluZHMlNUIwJTVE",highlighted:'minds[<span class="hljs-number">0</span>]'}}),D=new U({props:{code:"JTdCJTBBJTIwJTIwJTIwJTIwJTIycGF0aCUyMiUzQSUyMCUyMiUyRnJvb3QlMkYuY2FjaGUlMkZodWdnaW5nZmFjZSUyRmRhdGFzZXRzJTJGZG93bmxvYWRzJTJGZXh0cmFjdGVkJTJGZjE0OTQ4ZTBlODRiZTYzOGRkNzk0M2FjMzY1MThhNGNmMzMyNGU4YjdhYTMzMWM1YWIxMTU0MTUxOGU5MzY4YyUyRmVuLUFVflBBWV9CSUxMJTJGcmVzcG9uc2VfNC53YXYlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJhdWRpbyUyMiUzQSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMnBhdGglMjIlM0ElMjAlMjIlMkZyb290JTJGLmNhY2hlJTJGaHVnZ2luZ2ZhY2UlMkZkYXRhc2V0cyUyRmRvd25sb2FkcyUyRmV4dHJhY3RlZCUyRmYxNDk0OGUwZTg0YmU2MzhkZDc5NDNhYzM2NTE4YTRjZjMzMjRlOGI3YWEzMzFjNWFiMTE1NDE1MThlOTM2OGMlMkZlbi1BVX5QQVlfQklMTCUyRnJlc3BvbnNlXzQud2F2JTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyYXJyYXklMjIlM0ElMjBhcnJheSglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAyLjA2MzQyNDNlLTA1JTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwMS45NDM3ODM3ZS0wNCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMDIuMjQxOTM0MGUtMDQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAuLi4lMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjA5LjM4NTI4NjJlLTA0JTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwMS4xMzAyNDUyZS0wMyUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMDcuMTUzMTQyOWUtMDQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBkdHlwZSUzRGZsb2F0MzIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjApJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyc2FtcGxpbmdfcmF0ZSUyMiUzQSUyMDE2MDAwJTJDJTBBJTIwJTIwJTIwJTIwJTdEJTJDJTBBJTIwJTIwJTIwJTIwJTIydHJhbnNjcmlwdGlvbiUyMiUzQSUyMCUyMkklMjB3b3VsZCUyMGxpa2UlMjB0byUyMHBheSUyMG15JTIwZWxlY3RyaWNpdHklMjBiaWxsJTIwdXNpbmclMjBteSUyMGNhcmQlMjBjYW4lMjB5b3UlMjBwbGVhc2UlMjBhc3Npc3QlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJpbnRlbnRfY2xhc3MlMjIlM0ElMjAxMyUyQyUwQSU3RCUwQQ==",highlighted:`{
    <span class="hljs-comment">&quot;path&quot;</span>: <span class="hljs-comment">&quot;/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-AU~PAY_BILL/response_4.wav&quot;</span>,
    <span class="hljs-comment">&quot;audio&quot;</span>: {
        <span class="hljs-comment">&quot;path&quot;</span>: <span class="hljs-comment">&quot;/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-AU~PAY_BILL/response_4.wav&quot;</span>,
        <span class="hljs-comment">&quot;array&quot;</span>: array(
            [
                <span class="hljs-number">2.0634243e-05</span>,
                <span class="hljs-number">1.9437837e-04</span>,
                <span class="hljs-number">2.2419340e-04</span>,
                ...,
                <span class="hljs-number">9.3852862e-04</span>,
                <span class="hljs-number">1.1302452e-03</span>,
                <span class="hljs-number">7.1531429e-04</span>,
            ],
            dtype=float32,
        ),
        <span class="hljs-comment">&quot;sampling_rate&quot;</span>: <span class="hljs-number">16000</span>,
    },
    <span class="hljs-comment">&quot;transcription&quot;</span>: <span class="hljs-comment">&quot;I would like to pay my electricity bill using my card can you please assist&quot;</span>,
    <span class="hljs-comment">&quot;intent_class&quot;</span>: <span class="hljs-number">13</span>,
}
`}}),N=new Jt({props:{$$slots:{default:[Ut]},$$scope:{ctx:rs}}}),H=new Ps({}),L=new U({props:{code:"TUFYX0RVUkFUSU9OX0lOX1NFQ09ORFMlMjAlM0QlMjAyMC4wJTBBJTBBJTBBZGVmJTIwaXNfYXVkaW9fbGVuZ3RoX2luX3JhbmdlKGlucHV0X2xlbmd0aCklM0ElMEElMjAlMjAlMjAlMjByZXR1cm4lMjBpbnB1dF9sZW5ndGglMjAlM0MlMjBNQVhfRFVSQVRJT05fSU5fU0VDT05EUw==",highlighted:`MAX_DURATION_IN_SECONDS = <span class="hljs-number">20.0</span>


<span class="hljs-keyword">def</span> <span class="hljs-title function_">is_audio_length_in_range</span>(<span class="hljs-params">input_length</span>):
    <span class="hljs-keyword">return</span> input_length &lt; MAX_DURATION_IN_SECONDS`}}),P=new U({props:{code:"JTIzJTIwVXRpbGlzZXolMjBsaWJyb3NhJTIwcG91ciUyMG9idGVuaXIlMjBsYSUyMGR1ciVDMyVBOWUlMjBkZSUyMGwnZXhlbXBsZSUyMCVDMyVBMCUyMHBhcnRpciUyMGR1JTIwZmljaGllciUyMGF1ZGlvJTBBbmV3X2NvbHVtbiUyMCUzRCUyMCU1QmxpYnJvc2EuZ2V0X2R1cmF0aW9uKHBhdGglM0R4KSUyMGZvciUyMHglMjBpbiUyMG1pbmRzJTVCJTIycGF0aCUyMiU1RCU1RCUwQW1pbmRzJTIwJTNEJTIwbWluZHMuYWRkX2NvbHVtbiglMjJkdXJhdGlvbiUyMiUyQyUyMG5ld19jb2x1bW4pJTBBJTBBJTIzJTIwdXRpbGlzZXIlMjBsYSUyMG0lQzMlQTl0aG9kZSUyMCU2MGZpbHRlciU2MCUyMGRlJTIwJUYwJTlGJUE0JTk3JTIwRGF0YXNldHMlMjBwb3VyJTIwYXBwbGlxdWVyJTIwbGElMjBmb25jdGlvbiUyMGRlJTIwZmlsdHJhZ2UlMEFtaW5kcyUyMCUzRCUyMG1pbmRzLmZpbHRlcihpc19hdWRpb19sZW5ndGhfaW5fcmFuZ2UlMkMlMjBpbnB1dF9jb2x1bW5zJTNEJTVCJTIyZHVyYXRpb24lMjIlNUQpJTBBJTBBJTIzJTIwc3VwcHJpbWVyJTIwbGElMjBjb2xvbm5lJTIwZCdhc3Npc3RhbmNlJTIwdGVtcG9yYWlyZSUwQW1pbmRzJTIwJTNEJTIwbWluZHMucmVtb3ZlX2NvbHVtbnMoJTVCJTIyZHVyYXRpb24lMjIlNUQpJTBBbWluZHM=",highlighted:`<span class="hljs-comment"># Utilisez librosa pour obtenir la dur\xE9e de l&#x27;exemple \xE0 partir du fichier audio</span>
new_column = [librosa.get_duration(path=x) <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> minds[<span class="hljs-string">&quot;path&quot;</span>]]
minds = minds.add_column(<span class="hljs-string">&quot;duration&quot;</span>, new_column)

<span class="hljs-comment"># utiliser la m\xE9thode \`filter\` de \u{1F917} Datasets pour appliquer la fonction de filtrage</span>
minds = minds.<span class="hljs-built_in">filter</span>(is_audio_length_in_range, input_columns=[<span class="hljs-string">&quot;duration&quot;</span>])

<span class="hljs-comment"># supprimer la colonne d&#x27;assistance temporaire</span>
minds = minds.remove_columns([<span class="hljs-string">&quot;duration&quot;</span>])
minds`}}),O=new U({props:{code:"RGF0YXNldCglN0JmZWF0dXJlcyUzQSUyMCU1QiUyMnBhdGglMjIlMkMlMjAlMjJhdWRpbyUyMiUyQyUyMCUyMnRyYW5zY3JpcHRpb24lMjIlMkMlMjAlMjJpbnRlbnRfY2xhc3MlMjIlNUQlMkMlMjBudW1fcm93cyUzQSUyMDYyNCU3RCk=",highlighted:'<span class="hljs-constructor">Dataset({<span class="hljs-params">features</span>: [<span class="hljs-string">&quot;path&quot;</span>, <span class="hljs-string">&quot;audio&quot;</span>, <span class="hljs-string">&quot;transcription&quot;</span>, <span class="hljs-string">&quot;intent_class&quot;</span>], <span class="hljs-params">num_rows</span>: 624})</span>'}}),K=new Ps({}),se=new U({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFdoaXNwZXJGZWF0dXJlRXh0cmFjdG9yJTBBJTBBZmVhdHVyZV9leHRyYWN0b3IlMjAlM0QlMjBXaGlzcGVyRmVhdHVyZUV4dHJhY3Rvci5mcm9tX3ByZXRyYWluZWQoJTIyb3BlbmFpJTJGd2hpc3Blci1zbWFsbCUyMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> WhisperFeatureExtractor

feature_extractor = WhisperFeatureExtractor.from_pretrained(<span class="hljs-string">&quot;openai/whisper-small&quot;</span>)`}}),ne=new U({props:{code:"ZGVmJTIwcHJlcGFyZV9kYXRhc2V0KGV4YW1wbGUpJTNBJTBBJTIwJTIwJTIwJTIwYXVkaW8lMjAlM0QlMjBleGFtcGxlJTVCJTIyYXVkaW8lMjIlNUQlMEElMjAlMjAlMjAlMjBmZWF0dXJlcyUyMCUzRCUyMGZlYXR1cmVfZXh0cmFjdG9yKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGF1ZGlvJTVCJTIyYXJyYXklMjIlNUQlMkMlMjBzYW1wbGluZ19yYXRlJTNEYXVkaW8lNUIlMjJzYW1wbGluZ19yYXRlJTIyJTVEJTJDJTIwcGFkZGluZyUzRFRydWUlMEElMjAlMjAlMjAlMjApJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwZmVhdHVyZXM=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">prepare_dataset</span>(<span class="hljs-params">example</span>):
    audio = example[<span class="hljs-string">&quot;audio&quot;</span>]
    features = feature_extractor(
        audio[<span class="hljs-string">&quot;array&quot;</span>], sampling_rate=audio[<span class="hljs-string">&quot;sampling_rate&quot;</span>], padding=<span class="hljs-literal">True</span>
    )
    <span class="hljs-keyword">return</span> features`}}),le=new U({props:{code:"bWluZHMlMjAlM0QlMjBtaW5kcy5tYXAocHJlcGFyZV9kYXRhc2V0KSUwQW1pbmRz",highlighted:`minds = minds.<span class="hljs-built_in">map</span>(prepare_dataset)
minds`}}),te=new U({props:{code:"RGF0YXNldCglMEElMjAlMjAlMjAlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QiUyMnBhdGglMjIlMkMlMjAlMjJhdWRpbyUyMiUyQyUyMCUyMnRyYW5zY3JpcHRpb24lMjIlMkMlMjAlMjJpbnRlbnRfY2xhc3MlMjIlMkMlMjAlMjJpbnB1dF9mZWF0dXJlcyUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwNjI0JTJDJTBBJTIwJTIwJTIwJTIwJTdEJTBBKQ==",highlighted:`Dataset(
    <span class="hljs-punctuation">{</span>
<span class="hljs-symbol">        features:</span> [<span class="hljs-string">&quot;path&quot;</span>, <span class="hljs-string">&quot;audio&quot;</span>, <span class="hljs-string">&quot;transcription&quot;</span>, <span class="hljs-string">&quot;intent_class&quot;</span>, <span class="hljs-string">&quot;input_features&quot;</span>],
<span class="hljs-symbol">        num_rows:</span> <span class="hljs-number">624</span>,
    <span class="hljs-punctuation">}</span>
)`}}),ae=new U({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBZXhhbXBsZSUyMCUzRCUyMG1pbmRzJTVCMCU1RCUwQWlucHV0X2ZlYXR1cmVzJTIwJTNEJTIwZXhhbXBsZSU1QiUyMmlucHV0X2ZlYXR1cmVzJTIyJTVEJTBBJTBBcGx0LmZpZ3VyZSgpLnNldF9maWd3aWR0aCgxMiklMEFsaWJyb3NhLmRpc3BsYXkuc3BlY3Nob3coJTBBJTIwJTIwJTIwJTIwbnAuYXNhcnJheShpbnB1dF9mZWF0dXJlcyU1QjAlNUQpJTJDJTBBJTIwJTIwJTIwJTIweF9heGlzJTNEJTIydGltZSUyMiUyQyUwQSUyMCUyMCUyMCUyMHlfYXhpcyUzRCUyMm1lbCUyMiUyQyUwQSUyMCUyMCUyMCUyMHNyJTNEZmVhdHVyZV9leHRyYWN0b3Iuc2FtcGxpbmdfcmF0ZSUyQyUwQSUyMCUyMCUyMCUyMGhvcF9sZW5ndGglM0RmZWF0dXJlX2V4dHJhY3Rvci5ob3BfbGVuZ3RoJTJDJTBBKSUwQXBsdC5jb2xvcmJhcigp",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np

example = minds[<span class="hljs-number">0</span>]
input_features = example[<span class="hljs-string">&quot;input_features&quot;</span>]

plt.figure().set_figwidth(<span class="hljs-number">12</span>)
librosa.display.specshow(
    np.asarray(input_features[<span class="hljs-number">0</span>]),
    x_axis=<span class="hljs-string">&quot;time&quot;</span>,
    y_axis=<span class="hljs-string">&quot;mel&quot;</span>,
    sr=feature_extractor.sampling_rate,
    hop_length=feature_extractor.hop_length,
)
plt.colorbar()`}}),ue=new U({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Qcm9jZXNzb3IlMEElMEFwcm9jZXNzb3IlMjAlM0QlMjBBdXRvUHJvY2Vzc29yLmZyb21fcHJldHJhaW5lZCglMjJvcGVuYWklMkZ3aGlzcGVyLXNtYWxsJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoProcessor

processor = AutoProcessor.from_pretrained(<span class="hljs-string">&quot;openai/whisper-small&quot;</span>)`}}),{c(){y=r("meta"),q=p(),T=r("h1"),k=r("a"),Ae=r("span"),m(X.$$.fragment),Os=p(),Ie=r("span"),Ks=t("Pr\xE9traitement d'un jeu de donn\xE9es audio"),os=p(),R=r("p"),en=t("Le chargement d\u2019un jeu de donn\xE9es avec \u{1F917} "),xe=r("em"),sn=t("Datasets"),nn=t(` n\u2019est que la moiti\xE9 du plaisir.
Si vous pr\xE9voyez de l\u2019utiliser pour entra\xEEner un mod\xE8le ou pour ex\xE9cuter l\u2019inf\xE9rence, vous devrez d\u2019abord pr\xE9traiter les donn\xE9es. En g\xE9n\xE9ral, cela impliquera les \xE9tapes suivantes:`),us=p(),b=r("ul"),_e=r("li"),ln=t("R\xE9\xE9chantillonnage des donn\xE9es audio"),tn=p(),Ce=r("li"),an=t("Filtrage du jeu de donn\xE9es"),rn=p(),Ee=r("li"),on=t("Conversion des donn\xE9es audio en entr\xE9e attendue du mod\xE8le"),is=p(),$=r("h2"),G=r("a"),$e=r("span"),m(Y.$$.fragment),un=p(),ze=r("span"),pn=t("R\xE9\xE9chantillonnage des donn\xE9es audio"),ps=p(),w=r("p"),dn=t("La fonction "),Be=r("code"),cn=t("load_dataset"),mn=t(` t\xE9l\xE9charge des exemples audio avec le taux d\u2019\xE9chantillonnage avec lequel ils ont \xE9t\xE9 publi\xE9s.
Ce n\u2019est pas toujours le taux d\u2019\xE9chantillonnage attendu par un mod\xE8le que vous pr\xE9voyez d\u2019entra\xEEner ou d\u2019utiliser pour l\u2019inf\xE9rence.
S\u2019il existe un \xE9cart entre les taux d\u2019\xE9chantillonnage, vous pouvez r\xE9\xE9chantillonner l\u2019audio \xE0 la fr\xE9quence d\u2019\xE9chantillonnage attendue du mod\xE8le.
La plupart des mod\xE8les pr\xE9-entra\xEEn\xE9s disponibles ont \xE9t\xE9 pr\xE9-entra\xEEn\xE9s sur des jeux de donn\xE9es audio \xE0 une fr\xE9quence d\u2019\xE9chantillonnage de 16 kHz.
Lorsque nous avons explor\xE9 le jeu de donn\xE9es MINDS-14, vous avez peut-\xEAtre remarqu\xE9 qu\u2019il est \xE9chantillonn\xE9 \xE0 8 kHz, ce qui signifie que nous devrons probablement le sur\xE9chantillonner.
Pour ce faire, utilisez la m\xE9thode `),ke=r("code"),Mn=t("cast_column"),fn=t(` de \u{1F917} Datasets.
Cette op\xE9ration ne modifie pas l\u2019audio sur place, mais plut\xF4t les signaux aux jeux de donn\xE9es pour r\xE9\xE9chantillonner les exemples audio \xE0 la vol\xE9e lorsqu\u2019ils sont charg\xE9s.
Le code suivant d\xE9finira la fr\xE9quence d\u2019\xE9chantillonnage \xE0 16 kHz :`),ds=p(),m(Q.$$.fragment),cs=p(),pe=r("p"),hn=t("Rechargez le premier exemple audio dans le jeu de donn\xE9es MINDS-14 et v\xE9rifiez qu\u2019il a \xE9t\xE9 r\xE9\xE9chantillonn\xE9 \xE0 la \xAB fr\xE9quence d\u2019\xE9chantillonnage \xBB souhait\xE9e :"),ms=p(),m(F.$$.fragment),Ms=p(),de=r("p"),Re=r("strong"),jn=t("Sortie :"),fs=p(),m(D.$$.fragment),hs=p(),ce=r("p"),vn=t("Vous remarquerez peut-\xEAtre que les valeurs de tableau sont maintenant \xE9galement diff\xE9rentes. C\u2019est parce que nous avons maintenant deux fois plus de valeurs d\u2019amplitude pour chacune d\u2019entre elles que nous avions auparavant."),js=p(),m(N.$$.fragment),vs=p(),z=r("h2"),Z=r("a"),Ge=r("span"),m(H.$$.fragment),yn=p(),Ne=r("span"),Jn=t("Filtrage du jeu de donn\xE9es"),ys=p(),J=r("p"),Un=t(`Vous devrez peut-\xEAtre filtrer les donn\xE9es en fonction de certains crit\xE8res. L\u2019un des cas courants consiste \xE0 limiter les exemples audio \xE0 une certaine dur\xE9e.
Par exemple, nous pourrions vouloir filtrer tous les exemples de plus de 20 secondes pour \xE9viter les erreurs de m\xE9moire insuffisante lors de l\u2019entra\xEEnement d\u2019un mod\xE8le.
Nous pouvons le faire en utilisant la  m\xE9thode `),Ze=r("code"),Tn=t("filter"),qn=t(" de \u{1F917} "),Ve=r("em"),bn=t("Datasets"),wn=t(` et en lui passant une fonction avec une logique de filtrage. Commen\xE7ons par \xE9crire une fonction qui indique quels exemples conserver et lesquels rejeter.
Cette fonction, `),We=r("code"),gn=t("is_audio_length_in_range', renvoie "),An=t("True"),Se=r("code"),In=t("si un \xE9chantillon est inf\xE9rieur \xE0 20s et"),xn=t("False` s\u2019il est plus long que 20s."),Js=p(),m(L.$$.fragment),Us=p(),me=r("p"),_n=t(`La fonction de filtrage peut \xEAtre appliqu\xE9e \xE0 la colonne d\u2019un jeu de donn\xE9es, mais nous n\u2019avons pas de colonne avec une dur\xE9e de piste audio dans ce jeu de donn\xE9es.
Cependant, nous pouvons en cr\xE9er un, filtrer en fonction des valeurs de cette colonne, puis le supprimer.`),Ts=p(),m(P.$$.fragment),qs=p(),Me=r("p"),Xe=r("strong"),Cn=t("Sortie :"),bs=p(),m(O.$$.fragment),ws=p(),fe=r("p"),En=t("Nous pouvons v\xE9rifier que le jeu de donn\xE9es a \xE9t\xE9 filtr\xE9 de 654 exemples \xE0 624."),gs=p(),B=r("h2"),V=r("a"),Ye=r("span"),m(K.$$.fragment),$n=p(),Qe=r("span"),zn=t("Pr\xE9traitement des donn\xE9es audio"),As=p(),W=r("p"),Bn=t(`L\u2019un des aspects les plus difficiles de l\u2019utilisation d\u2019ensembles de donn\xE9es audio consiste \xE0 pr\xE9parer les donn\xE9es dans le bon format pour la formation des mod\xE8les.
Comme vous l\u2019avez vu, les donn\xE9es audio brutes se pr\xE9sentent sous la forme d\u2019un tableau de valeurs d\u2019\xE9chantillon.
Cependant, les mod\xE8les pr\xE9-entra\xEEn\xE9s, que vous les utilisiez pour l\u2019inf\xE9rence ou que vous souhaitiez les finetuner pour votre t\xE2che, s\u2019attendent \xE0 ce que les donn\xE9es brutes soient converties en fonctionnalit\xE9s d\u2019entr\xE9e.
Les exigences pour les caract\xE9ristiques d\u2019entr\xE9e peuvent varier d\u2019un mod\xE8le \xE0 l\u2019autre. Elles d\xE9pendent de l\u2019architecture du mod\xE8le et des donn\xE9es avec lesquelles il a \xE9t\xE9 pr\xE9-entra\xEEn\xE9.
La bonne nouvelle est que, pour chaque mod\xE8le audio pris en charge, \u{1F917} `),Fe=r("em"),kn=t("Transformers"),Rn=t(" offrent une classe d\u2019extracteur de caract\xE9ristiques qui peut convertir les donn\xE9es audio brutes en caract\xE9ristiques d\u2019entr\xE9e attendues par le mod\xE8le."),Is=p(),g=r("p"),Gn=t("Alors, que fait un extracteur de caract\xE9ristiques avec les donn\xE9es audio brutes ? Jetons un coup d\u2019\u0153il \xE0 l\u2019extracteur de caract\xE9ristiques de "),ee=r("a"),Nn=t("Whisper"),Zn=t(` pour comprendre certaines transformations d\u2019extraction de caract\xE9ristiques courantes.
Whisper est un mod\xE8le pr\xE9-entra\xEEn\xE9 pour la reconnaissance vocale automatique (ASR) publi\xE9 en septembre 2022 par Alec Radford et al. d\u2019OpenAI.
Tout d\u2019abord, l\u2019extracteur de fonction Whisper pave / tronque un batch d\u2019exemples audio de sorte que tous les exemples ont une longueur d\u2019entr\xE9e de 30s.
Les exemples plus courts sont compl\xE9t\xE9s \xE0 30s en ajoutant des z\xE9ros \xE0 la fin de la s\xE9quence (les z\xE9ros dans un signal audio correspondent \xE0 l\u2019absence de signal ou au silence). Les exemples de plus de 30 ans sont tronqu\xE9s \xE0 30 s.
\xC9tant donn\xE9 que tous les \xE9l\xE9ments du batch sont rembourr\xE9s/tronqu\xE9s \xE0 une longueur maximale dans l\u2019espace d\u2019entr\xE9e, il n\u2019y a pas besoin d\u2019un masque d\u2019attention.
Whisper est unique \xE0 cet \xE9gard, la plupart des autres mod\xE8les audio n\xE9cessitent un masque d\u2019attention qui d\xE9taille o\xF9 les s\xE9quences ont \xE9t\xE9 rembourr\xE9es, et donc o\xF9 elles doivent \xEAtre ignor\xE9es dans le m\xE9canisme d\u2019auto-attention.
Whisper est entra\xEEn\xE9 pour fonctionner sans masque d\u2019attention et d\xE9duire directement des signaux vocaux o\xF9 ignorer les entr\xE9es.
La deuxi\xE8me op\xE9ration effectu\xE9e par l\u2019extracteur de fonctions Whisper consiste \xE0 convertir les matrices audio rembourr\xE9es en spectrogrammes log-mel.
Ces spectrogrammes d\xE9crivent comment les fr\xE9quences d\u2019un signal changent au fil du temps, exprim\xE9es sur l\u2019\xE9chelle mel et mesur\xE9es en d\xE9cibels (la partie log) pour rendre les fr\xE9quences et les amplitudes plus repr\xE9sentatives de l\u2019audition humaine.
Toutes ces transformations peuvent \xEAtre appliqu\xE9es \xE0 vos donn\xE9es audio brutes avec quelques lignes de code.
Allons de l\u2019avant et chargeons l\u2019extracteur de caract\xE9ristiques \xE0 partir du `),De=r("em"),Vn=t("checkpoint"),Wn=t(" de Whisper pr\xE9-entra\xEEn\xE9 pour \xEAtre pr\xEAt pour nos donn\xE9es audio:"),xs=p(),m(se.$$.fragment),_s=p(),S=r("p"),Sn=t("Ensuite, vous pouvez \xE9crire une fonction pour pr\xE9-traiter un seul exemple audio en le faisant passer par le "),He=r("code"),Xn=t("feature_extractor"),Yn=t("."),Cs=p(),m(ne.$$.fragment),Es=p(),A=r("p"),Qn=t("Nous pouvons appliquer la fonction de pr\xE9paration des donn\xE9es \xE0 tous nos exemples d\u2019entra\xEEnement en utilisant la m\xE9thode "),Le=r("code"),Fn=t("map"),Dn=t(" de \u{1F917} "),Pe=r("em"),Hn=t("Datasets"),Ln=t(" :"),$s=p(),m(le.$$.fragment),zs=p(),he=r("p"),Oe=r("strong"),Pn=t("Sortie :"),Bs=p(),m(te.$$.fragment),ks=p(),I=r("p"),On=t("Aussi simple que cela, nous avons maintenant des spectrogrammes log-mel comme "),Ke=r("code"),Kn=t("input_features"),el=t(` dans le jeu de donn\xE9es.
Visualisons-le pour l\u2019un des exemples de `),es=r("code"),sl=t("minds"),nl=t(" :"),Rs=p(),m(ae.$$.fragment),Gs=p(),re=r("div"),je=r("img"),Ns=p(),ve=r("p"),ll=t("Vous pouvez maintenant voir \xE0 quoi ressemble l\u2019entr\xE9e audio du mod\xE8le Whisper apr\xE8s le pr\xE9traitement."),Zs=p(),x=r("p"),tl=t(`La classe d\u2019extracteur de caract\xE9ristiques du mod\xE8le se charge de transformer les donn\xE9es audio brutes au format attendu par le mod\xE8le. Cependant, de nombreuses t\xE2ches impliquant l\u2019audio sont multimodales, par exemple la reconnaissance vocale.
Dans de tels cas, \u{1F917} `),ss=r("em"),al=t("Transformers"),rl=t(" offrent \xE9galement des tokeniseurs sp\xE9cifiques au mod\xE8le pour traiter les entr\xE9es de texte. Pour une plong\xE9e approfondie dans les tokeniseurs, veuillez vous r\xE9f\xE9rer \xE0 notre "),oe=r("a"),ol=t("cours de NLP"),ul=t("."),Vs=p(),_=r("p"),il=t(`Vous pouvez charger s\xE9par\xE9ment l\u2019extracteur de caract\xE9ristiques et le tokeniseur pour Whisper et d\u2019autres mod\xE8les multimodaux, ou vous pouvez charger les deux via un processeur.
Pour rendre les choses encore plus simples, utilisez `),ns=r("code"),pl=t("AutoProcessor"),dl=t(" pour charger l\u2019extracteur de caract\xE9ristiques et le processeur d\u2019un mod\xE8le \xE0 partir d\u2019un "),ls=r("em"),cl=t("checkpoint"),ml=t(", comme ceci :"),Ws=p(),m(ue.$$.fragment),Ss=p(),C=r("p"),Ml=t(`Nous avons illustr\xE9 ici les \xE9tapes fondamentales de pr\xE9paration des donn\xE9es. Bien entendu, les donn\xE9es personnalis\xE9es peuvent n\xE9cessiter un pr\xE9traitement plus complexe.
Dans ce cas, vous pouvez \xE9tendre la fonction `),ts=r("code"),fl=t("prepare_dataset"),hl=t(` pour effectuer n\u2019importe quel type de transformations de donn\xE9es personnalis\xE9es.
Avec \u{1F917} `),as=r("em"),jl=t("Datasets"),vl=t(", si vous pouvez l\u2019\xE9crire en tant que fonction Python, vous pouvez l\u2019appliquer \xE0 votre jeu de donn\xE9es !"),this.h()},l(e){const l=jt('[data-svelte="svelte-1phssyn"]',document.head);y=o(l,"META",{name:!0,content:!0}),l.forEach(s),q=d(e),T=o(e,"H1",{class:!0});var ie=u(T);k=o(ie,"A",{id:!0,class:!0,href:!0});var Jl=u(k);Ae=o(Jl,"SPAN",{});var Ul=u(Ae);M(X.$$.fragment,Ul),Ul.forEach(s),Jl.forEach(s),Os=d(ie),Ie=o(ie,"SPAN",{});var Tl=u(Ie);Ks=a(Tl,"Pr\xE9traitement d'un jeu de donn\xE9es audio"),Tl.forEach(s),ie.forEach(s),os=d(e),R=o(e,"P",{});var Ys=u(R);en=a(Ys,"Le chargement d\u2019un jeu de donn\xE9es avec \u{1F917} "),xe=o(Ys,"EM",{});var ql=u(xe);sn=a(ql,"Datasets"),ql.forEach(s),nn=a(Ys,` n\u2019est que la moiti\xE9 du plaisir.
Si vous pr\xE9voyez de l\u2019utiliser pour entra\xEEner un mod\xE8le ou pour ex\xE9cuter l\u2019inf\xE9rence, vous devrez d\u2019abord pr\xE9traiter les donn\xE9es. En g\xE9n\xE9ral, cela impliquera les \xE9tapes suivantes:`),Ys.forEach(s),us=d(e),b=o(e,"UL",{});var ye=u(b);_e=o(ye,"LI",{});var bl=u(_e);ln=a(bl,"R\xE9\xE9chantillonnage des donn\xE9es audio"),bl.forEach(s),tn=d(ye),Ce=o(ye,"LI",{});var wl=u(Ce);an=a(wl,"Filtrage du jeu de donn\xE9es"),wl.forEach(s),rn=d(ye),Ee=o(ye,"LI",{});var gl=u(Ee);on=a(gl,"Conversion des donn\xE9es audio en entr\xE9e attendue du mod\xE8le"),gl.forEach(s),ye.forEach(s),is=d(e),$=o(e,"H2",{class:!0});var Qs=u($);G=o(Qs,"A",{id:!0,class:!0,href:!0});var Al=u(G);$e=o(Al,"SPAN",{});var Il=u($e);M(Y.$$.fragment,Il),Il.forEach(s),Al.forEach(s),un=d(Qs),ze=o(Qs,"SPAN",{});var xl=u(ze);pn=a(xl,"R\xE9\xE9chantillonnage des donn\xE9es audio"),xl.forEach(s),Qs.forEach(s),ps=d(e),w=o(e,"P",{});var Je=u(w);dn=a(Je,"La fonction "),Be=o(Je,"CODE",{});var _l=u(Be);cn=a(_l,"load_dataset"),_l.forEach(s),mn=a(Je,` t\xE9l\xE9charge des exemples audio avec le taux d\u2019\xE9chantillonnage avec lequel ils ont \xE9t\xE9 publi\xE9s.
Ce n\u2019est pas toujours le taux d\u2019\xE9chantillonnage attendu par un mod\xE8le que vous pr\xE9voyez d\u2019entra\xEEner ou d\u2019utiliser pour l\u2019inf\xE9rence.
S\u2019il existe un \xE9cart entre les taux d\u2019\xE9chantillonnage, vous pouvez r\xE9\xE9chantillonner l\u2019audio \xE0 la fr\xE9quence d\u2019\xE9chantillonnage attendue du mod\xE8le.
La plupart des mod\xE8les pr\xE9-entra\xEEn\xE9s disponibles ont \xE9t\xE9 pr\xE9-entra\xEEn\xE9s sur des jeux de donn\xE9es audio \xE0 une fr\xE9quence d\u2019\xE9chantillonnage de 16 kHz.
Lorsque nous avons explor\xE9 le jeu de donn\xE9es MINDS-14, vous avez peut-\xEAtre remarqu\xE9 qu\u2019il est \xE9chantillonn\xE9 \xE0 8 kHz, ce qui signifie que nous devrons probablement le sur\xE9chantillonner.
Pour ce faire, utilisez la m\xE9thode `),ke=o(Je,"CODE",{});var Cl=u(ke);Mn=a(Cl,"cast_column"),Cl.forEach(s),fn=a(Je,` de \u{1F917} Datasets.
Cette op\xE9ration ne modifie pas l\u2019audio sur place, mais plut\xF4t les signaux aux jeux de donn\xE9es pour r\xE9\xE9chantillonner les exemples audio \xE0 la vol\xE9e lorsqu\u2019ils sont charg\xE9s.
Le code suivant d\xE9finira la fr\xE9quence d\u2019\xE9chantillonnage \xE0 16 kHz :`),Je.forEach(s),ds=d(e),M(Q.$$.fragment,e),cs=d(e),pe=o(e,"P",{});var El=u(pe);hn=a(El,"Rechargez le premier exemple audio dans le jeu de donn\xE9es MINDS-14 et v\xE9rifiez qu\u2019il a \xE9t\xE9 r\xE9\xE9chantillonn\xE9 \xE0 la \xAB fr\xE9quence d\u2019\xE9chantillonnage \xBB souhait\xE9e :"),El.forEach(s),ms=d(e),M(F.$$.fragment,e),Ms=d(e),de=o(e,"P",{});var $l=u(de);Re=o($l,"STRONG",{});var zl=u(Re);jn=a(zl,"Sortie :"),zl.forEach(s),$l.forEach(s),fs=d(e),M(D.$$.fragment,e),hs=d(e),ce=o(e,"P",{});var Bl=u(ce);vn=a(Bl,"Vous remarquerez peut-\xEAtre que les valeurs de tableau sont maintenant \xE9galement diff\xE9rentes. C\u2019est parce que nous avons maintenant deux fois plus de valeurs d\u2019amplitude pour chacune d\u2019entre elles que nous avions auparavant."),Bl.forEach(s),js=d(e),M(N.$$.fragment,e),vs=d(e),z=o(e,"H2",{class:!0});var Fs=u(z);Z=o(Fs,"A",{id:!0,class:!0,href:!0});var kl=u(Z);Ge=o(kl,"SPAN",{});var Rl=u(Ge);M(H.$$.fragment,Rl),Rl.forEach(s),kl.forEach(s),yn=d(Fs),Ne=o(Fs,"SPAN",{});var Gl=u(Ne);Jn=a(Gl,"Filtrage du jeu de donn\xE9es"),Gl.forEach(s),Fs.forEach(s),ys=d(e),J=o(e,"P",{});var E=u(J);Un=a(E,`Vous devrez peut-\xEAtre filtrer les donn\xE9es en fonction de certains crit\xE8res. L\u2019un des cas courants consiste \xE0 limiter les exemples audio \xE0 une certaine dur\xE9e.
Par exemple, nous pourrions vouloir filtrer tous les exemples de plus de 20 secondes pour \xE9viter les erreurs de m\xE9moire insuffisante lors de l\u2019entra\xEEnement d\u2019un mod\xE8le.
Nous pouvons le faire en utilisant la  m\xE9thode `),Ze=o(E,"CODE",{});var Nl=u(Ze);Tn=a(Nl,"filter"),Nl.forEach(s),qn=a(E," de \u{1F917} "),Ve=o(E,"EM",{});var Zl=u(Ve);bn=a(Zl,"Datasets"),Zl.forEach(s),wn=a(E,` et en lui passant une fonction avec une logique de filtrage. Commen\xE7ons par \xE9crire une fonction qui indique quels exemples conserver et lesquels rejeter.
Cette fonction, `),We=o(E,"CODE",{});var Vl=u(We);gn=a(Vl,"is_audio_length_in_range', renvoie "),Vl.forEach(s),An=a(E,"True"),Se=o(E,"CODE",{});var Wl=u(Se);In=a(Wl,"si un \xE9chantillon est inf\xE9rieur \xE0 20s et"),Wl.forEach(s),xn=a(E,"False` s\u2019il est plus long que 20s."),E.forEach(s),Js=d(e),M(L.$$.fragment,e),Us=d(e),me=o(e,"P",{});var Sl=u(me);_n=a(Sl,`La fonction de filtrage peut \xEAtre appliqu\xE9e \xE0 la colonne d\u2019un jeu de donn\xE9es, mais nous n\u2019avons pas de colonne avec une dur\xE9e de piste audio dans ce jeu de donn\xE9es.
Cependant, nous pouvons en cr\xE9er un, filtrer en fonction des valeurs de cette colonne, puis le supprimer.`),Sl.forEach(s),Ts=d(e),M(P.$$.fragment,e),qs=d(e),Me=o(e,"P",{});var Xl=u(Me);Xe=o(Xl,"STRONG",{});var Yl=u(Xe);Cn=a(Yl,"Sortie :"),Yl.forEach(s),Xl.forEach(s),bs=d(e),M(O.$$.fragment,e),ws=d(e),fe=o(e,"P",{});var Ql=u(fe);En=a(Ql,"Nous pouvons v\xE9rifier que le jeu de donn\xE9es a \xE9t\xE9 filtr\xE9 de 654 exemples \xE0 624."),Ql.forEach(s),gs=d(e),B=o(e,"H2",{class:!0});var Ds=u(B);V=o(Ds,"A",{id:!0,class:!0,href:!0});var Fl=u(V);Ye=o(Fl,"SPAN",{});var Dl=u(Ye);M(K.$$.fragment,Dl),Dl.forEach(s),Fl.forEach(s),$n=d(Ds),Qe=o(Ds,"SPAN",{});var Hl=u(Qe);zn=a(Hl,"Pr\xE9traitement des donn\xE9es audio"),Hl.forEach(s),Ds.forEach(s),As=d(e),W=o(e,"P",{});var Hs=u(W);Bn=a(Hs,`L\u2019un des aspects les plus difficiles de l\u2019utilisation d\u2019ensembles de donn\xE9es audio consiste \xE0 pr\xE9parer les donn\xE9es dans le bon format pour la formation des mod\xE8les.
Comme vous l\u2019avez vu, les donn\xE9es audio brutes se pr\xE9sentent sous la forme d\u2019un tableau de valeurs d\u2019\xE9chantillon.
Cependant, les mod\xE8les pr\xE9-entra\xEEn\xE9s, que vous les utilisiez pour l\u2019inf\xE9rence ou que vous souhaitiez les finetuner pour votre t\xE2che, s\u2019attendent \xE0 ce que les donn\xE9es brutes soient converties en fonctionnalit\xE9s d\u2019entr\xE9e.
Les exigences pour les caract\xE9ristiques d\u2019entr\xE9e peuvent varier d\u2019un mod\xE8le \xE0 l\u2019autre. Elles d\xE9pendent de l\u2019architecture du mod\xE8le et des donn\xE9es avec lesquelles il a \xE9t\xE9 pr\xE9-entra\xEEn\xE9.
La bonne nouvelle est que, pour chaque mod\xE8le audio pris en charge, \u{1F917} `),Fe=o(Hs,"EM",{});var Ll=u(Fe);kn=a(Ll,"Transformers"),Ll.forEach(s),Rn=a(Hs," offrent une classe d\u2019extracteur de caract\xE9ristiques qui peut convertir les donn\xE9es audio brutes en caract\xE9ristiques d\u2019entr\xE9e attendues par le mod\xE8le."),Hs.forEach(s),Is=d(e),g=o(e,"P",{});var Ue=u(g);Gn=a(Ue,"Alors, que fait un extracteur de caract\xE9ristiques avec les donn\xE9es audio brutes ? Jetons un coup d\u2019\u0153il \xE0 l\u2019extracteur de caract\xE9ristiques de "),ee=o(Ue,"A",{href:!0,rel:!0});var Pl=u(ee);Nn=a(Pl,"Whisper"),Pl.forEach(s),Zn=a(Ue,` pour comprendre certaines transformations d\u2019extraction de caract\xE9ristiques courantes.
Whisper est un mod\xE8le pr\xE9-entra\xEEn\xE9 pour la reconnaissance vocale automatique (ASR) publi\xE9 en septembre 2022 par Alec Radford et al. d\u2019OpenAI.
Tout d\u2019abord, l\u2019extracteur de fonction Whisper pave / tronque un batch d\u2019exemples audio de sorte que tous les exemples ont une longueur d\u2019entr\xE9e de 30s.
Les exemples plus courts sont compl\xE9t\xE9s \xE0 30s en ajoutant des z\xE9ros \xE0 la fin de la s\xE9quence (les z\xE9ros dans un signal audio correspondent \xE0 l\u2019absence de signal ou au silence). Les exemples de plus de 30 ans sont tronqu\xE9s \xE0 30 s.
\xC9tant donn\xE9 que tous les \xE9l\xE9ments du batch sont rembourr\xE9s/tronqu\xE9s \xE0 une longueur maximale dans l\u2019espace d\u2019entr\xE9e, il n\u2019y a pas besoin d\u2019un masque d\u2019attention.
Whisper est unique \xE0 cet \xE9gard, la plupart des autres mod\xE8les audio n\xE9cessitent un masque d\u2019attention qui d\xE9taille o\xF9 les s\xE9quences ont \xE9t\xE9 rembourr\xE9es, et donc o\xF9 elles doivent \xEAtre ignor\xE9es dans le m\xE9canisme d\u2019auto-attention.
Whisper est entra\xEEn\xE9 pour fonctionner sans masque d\u2019attention et d\xE9duire directement des signaux vocaux o\xF9 ignorer les entr\xE9es.
La deuxi\xE8me op\xE9ration effectu\xE9e par l\u2019extracteur de fonctions Whisper consiste \xE0 convertir les matrices audio rembourr\xE9es en spectrogrammes log-mel.
Ces spectrogrammes d\xE9crivent comment les fr\xE9quences d\u2019un signal changent au fil du temps, exprim\xE9es sur l\u2019\xE9chelle mel et mesur\xE9es en d\xE9cibels (la partie log) pour rendre les fr\xE9quences et les amplitudes plus repr\xE9sentatives de l\u2019audition humaine.
Toutes ces transformations peuvent \xEAtre appliqu\xE9es \xE0 vos donn\xE9es audio brutes avec quelques lignes de code.
Allons de l\u2019avant et chargeons l\u2019extracteur de caract\xE9ristiques \xE0 partir du `),De=o(Ue,"EM",{});var Ol=u(De);Vn=a(Ol,"checkpoint"),Ol.forEach(s),Wn=a(Ue," de Whisper pr\xE9-entra\xEEn\xE9 pour \xEAtre pr\xEAt pour nos donn\xE9es audio:"),Ue.forEach(s),xs=d(e),M(se.$$.fragment,e),_s=d(e),S=o(e,"P",{});var Ls=u(S);Sn=a(Ls,"Ensuite, vous pouvez \xE9crire une fonction pour pr\xE9-traiter un seul exemple audio en le faisant passer par le "),He=o(Ls,"CODE",{});var Kl=u(He);Xn=a(Kl,"feature_extractor"),Kl.forEach(s),Yn=a(Ls,"."),Ls.forEach(s),Cs=d(e),M(ne.$$.fragment,e),Es=d(e),A=o(e,"P",{});var Te=u(A);Qn=a(Te,"Nous pouvons appliquer la fonction de pr\xE9paration des donn\xE9es \xE0 tous nos exemples d\u2019entra\xEEnement en utilisant la m\xE9thode "),Le=o(Te,"CODE",{});var et=u(Le);Fn=a(et,"map"),et.forEach(s),Dn=a(Te," de \u{1F917} "),Pe=o(Te,"EM",{});var st=u(Pe);Hn=a(st,"Datasets"),st.forEach(s),Ln=a(Te," :"),Te.forEach(s),$s=d(e),M(le.$$.fragment,e),zs=d(e),he=o(e,"P",{});var nt=u(he);Oe=o(nt,"STRONG",{});var lt=u(Oe);Pn=a(lt,"Sortie :"),lt.forEach(s),nt.forEach(s),Bs=d(e),M(te.$$.fragment,e),ks=d(e),I=o(e,"P",{});var qe=u(I);On=a(qe,"Aussi simple que cela, nous avons maintenant des spectrogrammes log-mel comme "),Ke=o(qe,"CODE",{});var tt=u(Ke);Kn=a(tt,"input_features"),tt.forEach(s),el=a(qe,` dans le jeu de donn\xE9es.
Visualisons-le pour l\u2019un des exemples de `),es=o(qe,"CODE",{});var at=u(es);sl=a(at,"minds"),at.forEach(s),nl=a(qe," :"),qe.forEach(s),Rs=d(e),M(ae.$$.fragment,e),Gs=d(e),re=o(e,"DIV",{class:!0});var rt=u(re);je=o(rt,"IMG",{src:!0,alt:!0}),rt.forEach(s),Ns=d(e),ve=o(e,"P",{});var ot=u(ve);ll=a(ot,"Vous pouvez maintenant voir \xE0 quoi ressemble l\u2019entr\xE9e audio du mod\xE8le Whisper apr\xE8s le pr\xE9traitement."),ot.forEach(s),Zs=d(e),x=o(e,"P",{});var be=u(x);tl=a(be,`La classe d\u2019extracteur de caract\xE9ristiques du mod\xE8le se charge de transformer les donn\xE9es audio brutes au format attendu par le mod\xE8le. Cependant, de nombreuses t\xE2ches impliquant l\u2019audio sont multimodales, par exemple la reconnaissance vocale.
Dans de tels cas, \u{1F917} `),ss=o(be,"EM",{});var ut=u(ss);al=a(ut,"Transformers"),ut.forEach(s),rl=a(be," offrent \xE9galement des tokeniseurs sp\xE9cifiques au mod\xE8le pour traiter les entr\xE9es de texte. Pour une plong\xE9e approfondie dans les tokeniseurs, veuillez vous r\xE9f\xE9rer \xE0 notre "),oe=o(be,"A",{href:!0,rel:!0});var it=u(oe);ol=a(it,"cours de NLP"),it.forEach(s),ul=a(be,"."),be.forEach(s),Vs=d(e),_=o(e,"P",{});var we=u(_);il=a(we,`Vous pouvez charger s\xE9par\xE9ment l\u2019extracteur de caract\xE9ristiques et le tokeniseur pour Whisper et d\u2019autres mod\xE8les multimodaux, ou vous pouvez charger les deux via un processeur.
Pour rendre les choses encore plus simples, utilisez `),ns=o(we,"CODE",{});var pt=u(ns);pl=a(pt,"AutoProcessor"),pt.forEach(s),dl=a(we," pour charger l\u2019extracteur de caract\xE9ristiques et le processeur d\u2019un mod\xE8le \xE0 partir d\u2019un "),ls=o(we,"EM",{});var dt=u(ls);cl=a(dt,"checkpoint"),dt.forEach(s),ml=a(we,", comme ceci :"),we.forEach(s),Ws=d(e),M(ue.$$.fragment,e),Ss=d(e),C=o(e,"P",{});var ge=u(C);Ml=a(ge,`Nous avons illustr\xE9 ici les \xE9tapes fondamentales de pr\xE9paration des donn\xE9es. Bien entendu, les donn\xE9es personnalis\xE9es peuvent n\xE9cessiter un pr\xE9traitement plus complexe.
Dans ce cas, vous pouvez \xE9tendre la fonction `),ts=o(ge,"CODE",{});var ct=u(ts);fl=a(ct,"prepare_dataset"),ct.forEach(s),hl=a(ge,` pour effectuer n\u2019importe quel type de transformations de donn\xE9es personnalis\xE9es.
Avec \u{1F917} `),as=o(ge,"EM",{});var mt=u(as);jl=a(mt,"Datasets"),mt.forEach(s),vl=a(ge,", si vous pouvez l\u2019\xE9crire en tant que fonction Python, vous pouvez l\u2019appliquer \xE0 votre jeu de donn\xE9es !"),ge.forEach(s),this.h()},h(){c(y,"name","hf:doc:metadata"),c(y,"content",JSON.stringify(qt)),c(k,"id","prtraitement-dun-jeu-de-donnes-audio"),c(k,"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"),c(k,"href","#prtraitement-dun-jeu-de-donnes-audio"),c(T,"class","relative group"),c(G,"id","rchantillonnage-des-donnes-audio"),c(G,"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"),c(G,"href","#rchantillonnage-des-donnes-audio"),c($,"class","relative group"),c(Z,"id","filtrage-du-jeu-de-donnes"),c(Z,"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"),c(Z,"href","#filtrage-du-jeu-de-donnes"),c(z,"class","relative group"),c(V,"id","prtraitement-des-donnes-audio"),c(V,"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"),c(V,"href","#prtraitement-des-donnes-audio"),c(B,"class","relative group"),c(ee,"href","https://cdn.openai.com/papers/whisper.pdf"),c(ee,"rel","nofollow"),vt(je.src,yl="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/log_mel_whisper.png")||c(je,"src",yl),c(je,"alt","Log mel spectrogram plot"),c(re,"class","flex justify-center"),c(oe,"href","https://huggingface.co/learn/nlp-course/fr/chapter2/4"),c(oe,"rel","nofollow")},m(e,l){n(document.head,y),i(e,q,l),i(e,T,l),n(T,k),n(k,Ae),f(X,Ae,null),n(T,Os),n(T,Ie),n(Ie,Ks),i(e,os,l),i(e,R,l),n(R,en),n(R,xe),n(xe,sn),n(R,nn),i(e,us,l),i(e,b,l),n(b,_e),n(_e,ln),n(b,tn),n(b,Ce),n(Ce,an),n(b,rn),n(b,Ee),n(Ee,on),i(e,is,l),i(e,$,l),n($,G),n(G,$e),f(Y,$e,null),n($,un),n($,ze),n(ze,pn),i(e,ps,l),i(e,w,l),n(w,dn),n(w,Be),n(Be,cn),n(w,mn),n(w,ke),n(ke,Mn),n(w,fn),i(e,ds,l),f(Q,e,l),i(e,cs,l),i(e,pe,l),n(pe,hn),i(e,ms,l),f(F,e,l),i(e,Ms,l),i(e,de,l),n(de,Re),n(Re,jn),i(e,fs,l),f(D,e,l),i(e,hs,l),i(e,ce,l),n(ce,vn),i(e,js,l),f(N,e,l),i(e,vs,l),i(e,z,l),n(z,Z),n(Z,Ge),f(H,Ge,null),n(z,yn),n(z,Ne),n(Ne,Jn),i(e,ys,l),i(e,J,l),n(J,Un),n(J,Ze),n(Ze,Tn),n(J,qn),n(J,Ve),n(Ve,bn),n(J,wn),n(J,We),n(We,gn),n(J,An),n(J,Se),n(Se,In),n(J,xn),i(e,Js,l),f(L,e,l),i(e,Us,l),i(e,me,l),n(me,_n),i(e,Ts,l),f(P,e,l),i(e,qs,l),i(e,Me,l),n(Me,Xe),n(Xe,Cn),i(e,bs,l),f(O,e,l),i(e,ws,l),i(e,fe,l),n(fe,En),i(e,gs,l),i(e,B,l),n(B,V),n(V,Ye),f(K,Ye,null),n(B,$n),n(B,Qe),n(Qe,zn),i(e,As,l),i(e,W,l),n(W,Bn),n(W,Fe),n(Fe,kn),n(W,Rn),i(e,Is,l),i(e,g,l),n(g,Gn),n(g,ee),n(ee,Nn),n(g,Zn),n(g,De),n(De,Vn),n(g,Wn),i(e,xs,l),f(se,e,l),i(e,_s,l),i(e,S,l),n(S,Sn),n(S,He),n(He,Xn),n(S,Yn),i(e,Cs,l),f(ne,e,l),i(e,Es,l),i(e,A,l),n(A,Qn),n(A,Le),n(Le,Fn),n(A,Dn),n(A,Pe),n(Pe,Hn),n(A,Ln),i(e,$s,l),f(le,e,l),i(e,zs,l),i(e,he,l),n(he,Oe),n(Oe,Pn),i(e,Bs,l),f(te,e,l),i(e,ks,l),i(e,I,l),n(I,On),n(I,Ke),n(Ke,Kn),n(I,el),n(I,es),n(es,sl),n(I,nl),i(e,Rs,l),f(ae,e,l),i(e,Gs,l),i(e,re,l),n(re,je),i(e,Ns,l),i(e,ve,l),n(ve,ll),i(e,Zs,l),i(e,x,l),n(x,tl),n(x,ss),n(ss,al),n(x,rl),n(x,oe),n(oe,ol),n(x,ul),i(e,Vs,l),i(e,_,l),n(_,il),n(_,ns),n(ns,pl),n(_,dl),n(_,ls),n(ls,cl),n(_,ml),i(e,Ws,l),f(ue,e,l),i(e,Ss,l),i(e,C,l),n(C,Ml),n(C,ts),n(ts,fl),n(C,hl),n(C,as),n(as,jl),n(C,vl),Xs=!0},p(e,[l]){const ie={};l&2&&(ie.$$scope={dirty:l,ctx:e}),N.$set(ie)},i(e){Xs||(h(X.$$.fragment,e),h(Y.$$.fragment,e),h(Q.$$.fragment,e),h(F.$$.fragment,e),h(D.$$.fragment,e),h(N.$$.fragment,e),h(H.$$.fragment,e),h(L.$$.fragment,e),h(P.$$.fragment,e),h(O.$$.fragment,e),h(K.$$.fragment,e),h(se.$$.fragment,e),h(ne.$$.fragment,e),h(le.$$.fragment,e),h(te.$$.fragment,e),h(ae.$$.fragment,e),h(ue.$$.fragment,e),Xs=!0)},o(e){j(X.$$.fragment,e),j(Y.$$.fragment,e),j(Q.$$.fragment,e),j(F.$$.fragment,e),j(D.$$.fragment,e),j(N.$$.fragment,e),j(H.$$.fragment,e),j(L.$$.fragment,e),j(P.$$.fragment,e),j(O.$$.fragment,e),j(K.$$.fragment,e),j(se.$$.fragment,e),j(ne.$$.fragment,e),j(le.$$.fragment,e),j(te.$$.fragment,e),j(ae.$$.fragment,e),j(ue.$$.fragment,e),Xs=!1},d(e){s(y),e&&s(q),e&&s(T),v(X),e&&s(os),e&&s(R),e&&s(us),e&&s(b),e&&s(is),e&&s($),v(Y),e&&s(ps),e&&s(w),e&&s(ds),v(Q,e),e&&s(cs),e&&s(pe),e&&s(ms),v(F,e),e&&s(Ms),e&&s(de),e&&s(fs),v(D,e),e&&s(hs),e&&s(ce),e&&s(js),v(N,e),e&&s(vs),e&&s(z),v(H),e&&s(ys),e&&s(J),e&&s(Js),v(L,e),e&&s(Us),e&&s(me),e&&s(Ts),v(P,e),e&&s(qs),e&&s(Me),e&&s(bs),v(O,e),e&&s(ws),e&&s(fe),e&&s(gs),e&&s(B),v(K),e&&s(As),e&&s(W),e&&s(Is),e&&s(g),e&&s(xs),v(se,e),e&&s(_s),e&&s(S),e&&s(Cs),v(ne,e),e&&s(Es),e&&s(A),e&&s($s),v(le,e),e&&s(zs),e&&s(he),e&&s(Bs),v(te,e),e&&s(ks),e&&s(I),e&&s(Rs),v(ae,e),e&&s(Gs),e&&s(re),e&&s(Ns),e&&s(ve),e&&s(Zs),e&&s(x),e&&s(Vs),e&&s(_),e&&s(Ws),v(ue,e),e&&s(Ss),e&&s(C)}}}const qt={local:"prtraitement-dun-jeu-de-donnes-audio",sections:[{local:"rchantillonnage-des-donnes-audio",title:"R\xE9\xE9chantillonnage des donn\xE9es audio"},{local:"filtrage-du-jeu-de-donnes",title:"Filtrage du jeu de donn\xE9es"},{local:"prtraitement-des-donnes-audio",title:"Pr\xE9traitement des donn\xE9es audio"}],title:"Pr\xE9traitement d'un jeu de donn\xE9es audio"};function bt(rs){return yt(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class xt extends Mt{constructor(y){super();ft(this,y,bt,Tt,ht,{})}}export{xt as default,qt as metadata};
