import{S as Jb,i as jb,s as bb,e as a,k as p,w as m,t as l,M as Eb,c as r,d as t,m as c,a as o,x as f,h as n,b as d,G as s,g as u,y as M,q as h,o as v,B as y,v as Ub}from"../../chunks/vendor-hf-doc-builder.js";import{T as yb}from"../../chunks/Tip-hf-doc-builder.js";import{I as H}from"../../chunks/IconCopyLink-hf-doc-builder.js";import{C as J}from"../../chunks/CodeBlock-hf-doc-builder.js";function Tb(Gt){let T;return{c(){T=l('Vous pouvez changer l\'identifiant de langue de `"dv"` pour un identifiant de langue de votre choix. Pour voir toutes les langues possibles dans Common Voice 13, consultez la carte du jeu de donn\xE9es sur le *Hub* : https://huggingface.co/datasets/mozilla-foundation/common_voice_13_0')},l(C){T=n(C,'Vous pouvez changer l\'identifiant de langue de `"dv"` pour un identifiant de langue de votre choix. Pour voir toutes les langues possibles dans Common Voice 13, consultez la carte du jeu de donn\xE9es sur le *Hub* : https://huggingface.co/datasets/mozilla-foundation/common_voice_13_0')},m(C,F){u(C,T,F)},d(C){C&&t(T)}}}function wb(Gt){let T;return{c(){T=l("Si vous ne voulez pas t\xE9l\xE9charger les *checkpoints* du mod\xE8le vers le *Hub*, mettez `push_to_hub=False`.")},l(C){T=n(C,"Si vous ne voulez pas t\xE9l\xE9charger les *checkpoints* du mod\xE8le vers le *Hub*, mettez `push_to_hub=False`.")},m(C,F){u(C,T,F)},d(C){C&&t(T)}}}function _b(Gt){let T,C,F,Se,wl,gs,ku,_l,Zu,Kr,D,Gu,gl,$u,Nu,Il,Bu,zu,Cl,Au,xu,eo,$t,Vu,so,P,Xu,ql,Ru,Su,Wl,Qu,Yu,kl,Fu,Hu,to,Qe,Du,Zl,Pu,Lu,lo,qe,Ye,Gl,Is,Ou,$l,Ku,no,L,ep,Nl,sp,tp,Cs,Bl,lp,np,zl,ap,rp,ao,O,qs,op,Al,ip,up,pp,xl,cp,dp,Vl,mp,fp,Xl,Mp,ro,w,hp,Rl,vp,yp,Sl,Jp,jp,Ql,bp,Ep,Yl,Up,Tp,Fl,wp,_p,Ws,gp,Ip,oo,ks,io,Nt,Hl,Cp,uo,Zs,po,We,Fe,Dl,Gs,qp,Pl,Wp,co,ke,$s,kp,Zp,Ll,Gp,$p,mo,A,Np,Ol,Bp,zp,Kl,Ap,xp,en,Vp,Xp,sn,Rp,Sp,fo,Ns,Mo,Bt,tn,Qp,ho,Bs,vo,He,yo,q,Yp,ln,Fp,Hp,nn,Dp,Pp,an,Lp,Op,rn,Kp,ec,on,sc,tc,Jo,zs,jo,Ze,De,un,As,lc,pn,nc,bo,zt,ac,Eo,ce,cn,rc,oc,dn,ic,uc,xs,pc,mn,cc,dc,Uo,W,mc,fn,fc,Mc,Vs,hc,vc,Xs,yc,Jc,Rs,jc,bc,Mn,Ec,Uc,To,b,Tc,hn,wc,_c,vn,gc,Ic,yn,Cc,qc,Jn,Wc,kc,jn,Zc,Gc,bn,$c,Nc,En,Bc,zc,wo,At,Ac,_o,Ss,go,de,xc,Un,Vc,Xc,Tn,Rc,Sc,Io,Pe,Qc,wn,Yc,Fc,Co,me,Hc,_n,Dc,Pc,gn,Lc,Oc,qo,K,Kc,In,ed,sd,Cn,td,ld,qn,nd,ad,Wo,Qs,ko,x,rd,Wn,od,id,kn,ud,pd,Zn,cd,dd,Gn,md,fd,Zo,Ge,Le,$n,Ys,Md,Nn,hd,Go,Oe,vd,Bn,yd,Jd,$o,Fs,No,xt,zn,jd,Bo,Hs,zo,Vt,bd,Ao,Ke,Ed,Ds,An,Ud,Td,xo,Ps,Vo,Xt,wd,Xo,fe,$e,_d,xn,gd,Id,Vn,Cd,qd,Wd,Xn,kd,Zd,Ls,Gd,Rn,$d,Nd,Ro,Os,So,ee,Bd,Sn,zd,Ad,Qn,xd,Vd,Yn,Xd,Rd,Qo,Ks,Yo,Me,Sd,Fn,Qd,Yd,Hn,Fd,Hd,Fo,et,Ho,he,Dd,Dn,Pd,Ld,Pn,Od,Kd,Do,st,Po,Rt,em,Lo,tt,Oo,St,Ln,sm,Ko,lt,ei,es,tm,On,lm,nm,si,Ne,ss,Kn,nt,am,ea,rm,ti,ts,om,at,im,um,li,se,sa,ta,pm,cm,la,rt,dm,na,mm,fm,Mm,aa,ot,hm,ra,vm,ym,Jm,oa,ia,jm,ni,ls,bm,ua,Em,Um,ai,Be,ns,pa,it,Tm,ca,wm,ri,V,_m,da,gm,Im,ma,Cm,qm,fa,Wm,km,Ma,Zm,Gm,oi,X,$m,ha,Nm,Bm,va,zm,Am,ya,xm,Vm,Ja,Xm,Rm,ii,E,Sm,ja,Qm,Ym,ba,Fm,Hm,Ea,Dm,Pm,Ua,Lm,Om,Ta,Km,ef,wa,sf,tf,_a,lf,nf,ui,ve,af,ga,rf,of,Ia,uf,pf,pi,ut,ci,Qt,cf,di,pt,mi,Yt,df,fi,ze,as,Ca,ct,mf,qa,ff,Mi,rs,Mf,Ft,hf,vf,hi,os,yf,Wa,Jf,jf,vi,dt,yi,k,bf,ka,Ef,Uf,Za,Tf,wf,Ga,_f,gf,$a,If,Cf,Na,qf,Wf,Ji,mt,ji,Ae,is,Ba,ft,kf,za,Zf,bi,ye,Gf,Aa,$f,Nf,xa,Bf,zf,Ei,Mt,Ui,U,Af,Va,xf,Vf,Xa,Xf,Rf,Ra,Sf,Qf,ht,Yf,Ff,Sa,Hf,Df,Qa,Pf,Lf,Ya,Of,Kf,Ti,vt,wi,xe,us,Fa,yt,eM,Ha,sM,_i,Je,tM,Da,lM,nM,Jt,aM,rM,gi,jt,Ii,ps,Ci,je,oM,Pa,iM,uM,La,pM,cM,qi,bt,Wi,Ht,dM,ki,Ve,cs,Oa,Et,mM,Ka,fM,Zi,Dt,MM,Gi,Ut,$i,te,hM,er,vM,yM,sr,JM,jM,Tt,tr,bM,EM,Ni,Pt,lr,UM,Bi,ds,nr,B,Lt,TM,wM,Ot,_M,gM,Kt,IM,CM,el,qM,WM,sl,kM,ZM,tl,GM,$M,ar,z,ll,NM,BM,nl,zM,AM,al,xM,VM,rl,XM,RM,ol,SM,QM,il,YM,zi,ms,FM,rr,HM,DM,Ai,fs,PM,wt,LM,OM,xi,be,KM,or,eh,sh,_t,th,lh,Vi,_,nh,ir,ah,rh,ur,oh,ih,pr,uh,ph,cr,ch,dh,dr,mh,fh,mr,Mh,hh,Xi,Ee,vh,fr,yh,Jh,Mr,jh,bh,Ri,gt,Si,Ue,Eh,hr,Uh,Th,vr,wh,_h,Qi,It,Yi,Te,gh,yr,Ih,Ch,Jr,qh,Wh,Fi,le,kh,jr,Zh,Gh,br,$h,Nh,Er,Bh,zh,Hi,ne,Ah,Ur,xh,Vh,Tr,Xh,Rh,wr,Sh,Qh,Di,Z,Yh,_r,Fh,Hh,gr,Dh,Ph,Ir,Lh,Oh,Cr,Kh,ev,qr,sv,tv,Pi,Xe,Ms,Wr,Ct,lv,kr,nv,Li,g,av,Zr,rv,ov,Gr,iv,uv,$r,pv,cv,Nr,dv,mv,Br,fv,Mv,qt,hv,vv,Oi,Wt,Ki,Re,hs,zr,kt,yv,Ar,Jv,eu,j,jv,xr,bv,Ev,Vr,Uv,Tv,Xr,wv,_v,Rr,gv,Iv,Sr,Cv,qv,Qr,Wv,kv,Yr,Zv,Gv,Fr,$v,Nv,su,R,Bv,Hr,zv,Av,Dr,xv,Vv,Pr,Xv,Rv,ul,Sv,Qv,tu;return gs=new H({}),Is=new H({}),ks=new J({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMG5vdGVib29rX2xvZ2luJTBBJTBBbm90ZWJvb2tfbG9naW4oKQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> notebook_login

notebook_login()`}}),Zs=new J({props:{code:"TG9naW4lMjBzdWNjZXNzZnVsJTBBWW91ciUyMHRva2VuJTIwaGFzJTIwYmVlbiUyMHNhdmVkJTIwdG8lMjAlMkZyb290JTJGLmh1Z2dpbmdmYWNlJTJGdG9rZW4=",highlighted:`Login successful
Your token has been saved to /root/.huggingface/token`}}),Gs=new H({}),Ns=new J({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTJDJTIwRGF0YXNldERpY3QlMEElMEFjb21tb25fdm9pY2UlMjAlM0QlMjBEYXRhc2V0RGljdCgpJTBBJTBBY29tbW9uX3ZvaWNlJTVCJTIydHJhaW4lMjIlNUQlMjAlM0QlMjBsb2FkX2RhdGFzZXQoJTBBJTIwJTIwJTIwJTIwJTIybW96aWxsYS1mb3VuZGF0aW9uJTJGY29tbW9uX3ZvaWNlXzEzXzAlMjIlMkMlMjAlMjJkdiUyMiUyQyUyMHNwbGl0JTNEJTIydHJhaW4lMkJ2YWxpZGF0aW9uJTIyJTBBKSUwQWNvbW1vbl92b2ljZSU1QiUyMnRlc3QlMjIlNUQlMjAlM0QlMjBsb2FkX2RhdGFzZXQoJTBBJTIwJTIwJTIwJTIwJTIybW96aWxsYS1mb3VuZGF0aW9uJTJGY29tbW9uX3ZvaWNlXzEzXzAlMjIlMkMlMjAlMjJkdiUyMiUyQyUyMHNwbGl0JTNEJTIydGVzdCUyMiUwQSklMEElMEFwcmludChjb21tb25fdm9pY2Up",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset, DatasetDict

common_voice = DatasetDict()

common_voice[<span class="hljs-string">&quot;train&quot;</span>] = load_dataset(
    <span class="hljs-string">&quot;mozilla-foundation/common_voice_13_0&quot;</span>, <span class="hljs-string">&quot;dv&quot;</span>, split=<span class="hljs-string">&quot;train+validation&quot;</span>
)
common_voice[<span class="hljs-string">&quot;test&quot;</span>] = load_dataset(
    <span class="hljs-string">&quot;mozilla-foundation/common_voice_13_0&quot;</span>, <span class="hljs-string">&quot;dv&quot;</span>, split=<span class="hljs-string">&quot;test&quot;</span>
)

<span class="hljs-built_in">print</span>(common_voice)`}}),Bs=new J({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2NsaWVudF9pZCclMkMlMjAncGF0aCclMkMlMjAnYXVkaW8nJTJDJTIwJ3NlbnRlbmNlJyUyQyUyMCd1cF92b3RlcyclMkMlMjAnZG93bl92b3RlcyclMkMlMjAnYWdlJyUyQyUyMCdnZW5kZXInJTJDJTIwJ2FjY2VudCclMkMlMjAnbG9jYWxlJyUyQyUyMCdzZWdtZW50JyUyQyUyMCd2YXJpYW50JyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwNDkwNCUwQSUyMCUyMCUyMCUyMCU3RCklMEElMjAlMjAlMjAlMjB0ZXN0JTNBJTIwRGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidjbGllbnRfaWQnJTJDJTIwJ3BhdGgnJTJDJTIwJ2F1ZGlvJyUyQyUyMCdzZW50ZW5jZSclMkMlMjAndXBfdm90ZXMnJTJDJTIwJ2Rvd25fdm90ZXMnJTJDJTIwJ2FnZSclMkMlMjAnZ2VuZGVyJyUyQyUyMCdhY2NlbnQnJTJDJTIwJ2xvY2FsZSclMkMlMjAnc2VnbWVudCclMkMlMjAndmFyaWFudCclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDIyMTIlMEElMjAlMjAlMjAlMjAlN0QpJTBBJTdEKQ==",highlighted:`DatasetDict({
    train: <span class="hljs-built_in">Dataset</span>({
        features: [<span class="hljs-string">&#x27;client_id&#x27;</span>, <span class="hljs-string">&#x27;path&#x27;</span>, <span class="hljs-string">&#x27;audio&#x27;</span>, <span class="hljs-string">&#x27;sentence&#x27;</span>, <span class="hljs-string">&#x27;up_votes&#x27;</span>, <span class="hljs-string">&#x27;down_votes&#x27;</span>, <span class="hljs-string">&#x27;age&#x27;</span>, <span class="hljs-string">&#x27;gender&#x27;</span>, <span class="hljs-string">&#x27;accent&#x27;</span>, <span class="hljs-string">&#x27;locale&#x27;</span>, <span class="hljs-string">&#x27;segment&#x27;</span>, <span class="hljs-string">&#x27;variant&#x27;</span>],
        num_rows: <span class="hljs-number">4904</span>
    })
    test: <span class="hljs-built_in">Dataset</span>({
        features: [<span class="hljs-string">&#x27;client_id&#x27;</span>, <span class="hljs-string">&#x27;path&#x27;</span>, <span class="hljs-string">&#x27;audio&#x27;</span>, <span class="hljs-string">&#x27;sentence&#x27;</span>, <span class="hljs-string">&#x27;up_votes&#x27;</span>, <span class="hljs-string">&#x27;down_votes&#x27;</span>, <span class="hljs-string">&#x27;age&#x27;</span>, <span class="hljs-string">&#x27;gender&#x27;</span>, <span class="hljs-string">&#x27;accent&#x27;</span>, <span class="hljs-string">&#x27;locale&#x27;</span>, <span class="hljs-string">&#x27;segment&#x27;</span>, <span class="hljs-string">&#x27;variant&#x27;</span>],
        num_rows: <span class="hljs-number">2212</span>
    })
})`}}),He=new yb({props:{$$slots:{default:[Tb]},$$scope:{ctx:Gt}}}),zs=new J({props:{code:"Y29tbW9uX3ZvaWNlJTIwJTNEJTIwY29tbW9uX3ZvaWNlLnNlbGVjdF9jb2x1bW5zKCU1QiUyMmF1ZGlvJTIyJTJDJTIwJTIyc2VudGVuY2UlMjIlNUQp",highlighted:'common_voice = common_voice.select_columns([<span class="hljs-string">&quot;audio&quot;</span>, <span class="hljs-string">&quot;sentence&quot;</span>])'}}),As=new H({}),Ss=new J({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy5tb2RlbHMud2hpc3Blci50b2tlbml6YXRpb25fd2hpc3BlciUyMGltcG9ydCUyMFRPX0xBTkdVQUdFX0NPREUlMEElMEFUT19MQU5HVUFHRV9DT0RF",highlighted:`<span class="hljs-keyword">from</span> transformers.models.whisper.tokenization_whisper <span class="hljs-keyword">import</span> TO_LANGUAGE_CODE

TO_LANGUAGE_CODE`}}),Qs=new J({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFdoaXNwZXJQcm9jZXNzb3IlMEElMEFwcm9jZXNzb3IlMjAlM0QlMjBXaGlzcGVyUHJvY2Vzc29yLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjAlMjJvcGVuYWklMkZ3aGlzcGVyLXNtYWxsJTIyJTJDJTIwbGFuZ3VhZ2UlM0QlMjJzaW5oYWxlc2UlMjIlMkMlMjB0YXNrJTNEJTIydHJhbnNjcmliZSUyMiUwQSk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> WhisperProcessor

processor = WhisperProcessor.from_pretrained(
    <span class="hljs-string">&quot;openai/whisper-small&quot;</span>, language=<span class="hljs-string">&quot;sinhalese&quot;</span>, task=<span class="hljs-string">&quot;transcribe&quot;</span>
)`}}),Ys=new H({}),Fs=new J({props:{code:"Y29tbW9uX3ZvaWNlJTVCJTIydHJhaW4lMjIlNUQuZmVhdHVyZXM=",highlighted:'common_voice[<span class="hljs-string">&quot;train&quot;</span>].features'}}),Hs=new J({props:{code:"JTdCJ2F1ZGlvJyUzQSUyMEF1ZGlvKHNhbXBsaW5nX3JhdGUlM0Q0ODAwMCUyQyUyMG1vbm8lM0RUcnVlJTJDJTIwZGVjb2RlJTNEVHJ1ZSUyQyUyMGlkJTNETm9uZSklMkMlMEElMjAnc2VudGVuY2UnJTNBJTIwVmFsdWUoZHR5cGUlM0Qnc3RyaW5nJyUyQyUyMGlkJTNETm9uZSklN0Q=",highlighted:`{<span class="hljs-string">&#x27;audio&#x27;</span>: Audio(<span class="hljs-attribute">sampling_rate</span>=48000, <span class="hljs-attribute">mono</span>=<span class="hljs-literal">True</span>, <span class="hljs-attribute">decode</span>=<span class="hljs-literal">True</span>, <span class="hljs-attribute">id</span>=None),
 <span class="hljs-string">&#x27;sentence&#x27;</span>: Value(<span class="hljs-attribute">dtype</span>=<span class="hljs-string">&#x27;string&#x27;</span>, <span class="hljs-attribute">id</span>=None)}`}}),Ps=new J({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwQXVkaW8lMEElMEFzYW1wbGluZ19yYXRlJTIwJTNEJTIwcHJvY2Vzc29yLmZlYXR1cmVfZXh0cmFjdG9yLnNhbXBsaW5nX3JhdGUlMEFjb21tb25fdm9pY2UlMjAlM0QlMjBjb21tb25fdm9pY2UuY2FzdF9jb2x1bW4oJTIyYXVkaW8lMjIlMkMlMjBBdWRpbyhzYW1wbGluZ19yYXRlJTNEc2FtcGxpbmdfcmF0ZSkp",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> Audio

sampling_rate = processor.feature_extractor.sampling_rate
common_voice = common_voice.cast_column(<span class="hljs-string">&quot;audio&quot;</span>, Audio(sampling_rate=sampling_rate))`}}),Os=new J({props:{code:"ZGVmJTIwcHJlcGFyZV9kYXRhc2V0KGV4YW1wbGUpJTNBJTBBJTIwJTIwJTIwJTIwYXVkaW8lMjAlM0QlMjBleGFtcGxlJTVCJTIyYXVkaW8lMjIlNUQlMEElMEElMjAlMjAlMjAlMjBleGFtcGxlJTIwJTNEJTIwcHJvY2Vzc29yKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGF1ZGlvJTNEYXVkaW8lNUIlMjJhcnJheSUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNhbXBsaW5nX3JhdGUlM0RhdWRpbyU1QiUyMnNhbXBsaW5nX3JhdGUlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0ZXh0JTNEZXhhbXBsZSU1QiUyMnNlbnRlbmNlJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwKSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMGNvbXB1dGUlMjBpbnB1dCUyMGxlbmd0aCUyMG9mJTIwYXVkaW8lMjBzYW1wbGUlMjBpbiUyMHNlY29uZHMlMEElMjAlMjAlMjAlMjBleGFtcGxlJTVCJTIyaW5wdXRfbGVuZ3RoJTIyJTVEJTIwJTNEJTIwbGVuKGF1ZGlvJTVCJTIyYXJyYXklMjIlNUQpJTIwJTJGJTIwYXVkaW8lNUIlMjJzYW1wbGluZ19yYXRlJTIyJTVEJTBBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwZXhhbXBsZQ==",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>]

    example = processor(
        audio=audio[<span class="hljs-string">&quot;array&quot;</span>],
        sampling_rate=audio[<span class="hljs-string">&quot;sampling_rate&quot;</span>],
        text=example[<span class="hljs-string">&quot;sentence&quot;</span>],
    )

    <span class="hljs-comment"># compute input length of audio sample in seconds</span>
    example[<span class="hljs-string">&quot;input_length&quot;</span>] = <span class="hljs-built_in">len</span>(audio[<span class="hljs-string">&quot;array&quot;</span>]) / audio[<span class="hljs-string">&quot;sampling_rate&quot;</span>]

    <span class="hljs-keyword">return</span> example`}}),Ks=new J({props:{code:"Y29tbW9uX3ZvaWNlJTIwJTNEJTIwY29tbW9uX3ZvaWNlLm1hcCglMEElMjAlMjAlMjAlMjBwcmVwYXJlX2RhdGFzZXQlMkMlMjByZW1vdmVfY29sdW1ucyUzRGNvbW1vbl92b2ljZS5jb2x1bW5fbmFtZXMlNUIlMjJ0cmFpbiUyMiU1RCUyQyUyMG51bV9wcm9jJTNEMSUwQSk=",highlighted:`common_voice = common_voice.<span class="hljs-built_in">map</span>(
    prepare_dataset, remove_columns=common_voice.column_names[<span class="hljs-string">&quot;train&quot;</span>], num_proc=<span class="hljs-number">1</span>
)`}}),et=new J({props:{code:"bWF4X2lucHV0X2xlbmd0aCUyMCUzRCUyMDMwLjAlMEElMEElMEFkZWYlMjBpc19hdWRpb19pbl9sZW5ndGhfcmFuZ2UobGVuZ3RoKSUzQSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMGxlbmd0aCUyMCUzQyUyMG1heF9pbnB1dF9sZW5ndGg=",highlighted:`max_input_length = <span class="hljs-number">30.0</span>


<span class="hljs-keyword">def</span> <span class="hljs-title function_">is_audio_in_length_range</span>(<span class="hljs-params">length</span>):
    <span class="hljs-keyword">return</span> length &lt; max_input_length`}}),st=new J({props:{code:"Y29tbW9uX3ZvaWNlJTVCJTIydHJhaW4lMjIlNUQlMjAlM0QlMjBjb21tb25fdm9pY2UlNUIlMjJ0cmFpbiUyMiU1RC5maWx0ZXIoJTBBJTIwJTIwJTIwJTIwaXNfYXVkaW9faW5fbGVuZ3RoX3JhbmdlJTJDJTBBJTIwJTIwJTIwJTIwaW5wdXRfY29sdW1ucyUzRCU1QiUyMmlucHV0X2xlbmd0aCUyMiU1RCUyQyUwQSk=",highlighted:`common_voice[<span class="hljs-string">&quot;train&quot;</span>] = common_voice[<span class="hljs-string">&quot;train&quot;</span>].<span class="hljs-built_in">filter</span>(
    is_audio_in_length_range,
    input_columns=[<span class="hljs-string">&quot;input_length&quot;</span>],
)`}}),tt=new J({props:{code:"Y29tbW9uX3ZvaWNlJTVCJTIydHJhaW4lMjIlNUQ=",highlighted:'common_voice[<span class="hljs-string">&quot;train&quot;</span>]'}}),lt=new J({props:{code:"RGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidpbnB1dF9mZWF0dXJlcyclMkMlMjAnbGFiZWxzJyUyQyUyMCdpbnB1dF9sZW5ndGgnJTVEJTJDJTBBJTIwJTIwJTIwJTIwbnVtX3Jvd3MlM0ElMjA0OTA0JTBBJTdEKQ==",highlighted:`<span class="hljs-built_in">Dataset</span>({
    features: <span class="hljs-selector-attr">[<span class="hljs-string">&#x27;input_features&#x27;</span>, <span class="hljs-string">&#x27;labels&#x27;</span>, <span class="hljs-string">&#x27;input_length&#x27;</span>]</span>,
    num_rows: <span class="hljs-number">4904</span>
})`}}),nt=new H({}),it=new H({}),ut=new J({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFmcm9tJTIwZGF0YWNsYXNzZXMlMjBpbXBvcnQlMjBkYXRhY2xhc3MlMEFmcm9tJTIwdHlwaW5nJTIwaW1wb3J0JTIwQW55JTJDJTIwRGljdCUyQyUyMExpc3QlMkMlMjBVbmlvbiUwQSUwQSUwQSU0MGRhdGFjbGFzcyUwQWNsYXNzJTIwRGF0YUNvbGxhdG9yU3BlZWNoU2VxMlNlcVdpdGhQYWRkaW5nJTNBJTBBJTIwJTIwJTIwJTIwcHJvY2Vzc29yJTNBJTIwQW55JTBBJTBBJTIwJTIwJTIwJTIwZGVmJTIwX19jYWxsX18oJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2VsZiUyQyUyMGZlYXR1cmVzJTNBJTIwTGlzdCU1QkRpY3QlNUJzdHIlMkMlMjBVbmlvbiU1Qkxpc3QlNUJpbnQlNUQlMkMlMjB0b3JjaC5UZW5zb3IlNUQlNUQlNUQlMEElMjAlMjAlMjAlMjApJTIwLSUzRSUyMERpY3QlNUJzdHIlMkMlMjB0b3JjaC5UZW5zb3IlNUQlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBkaXZpc2VyJTIwbGVzJTIwZW50ciVDMyVBOWVzJTIwZXQlMjBsZXMlMjAlQzMlQTl0aXF1ZXR0ZXMlMjBjYXIlMjBlbGxlcyUyMGRvaXZlbnQlMjAlQzMlQUF0cmUlMjBkZSUyMGxvbmd1ZXVycyUyMGRpZmYlQzMlQTlyZW50ZXMlMjBldCUyMG4lQzMlQTljZXNzaXRlbnQlMjBkZXMlMjBtJUMzJUE5dGhvZGVzJTIwZGUlMjByZW1wbGlzc2FnZSUyMGRpZmYlQzMlQTlyZW50ZXMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjB0cmFpdGVyJTIwZCdhYm9yZCUyMGxlcyUyMGVudHIlQzMlQTllcyUyMGF1ZGlvJTIwZW4lMjByZW52b3lhbnQlMjBzaW1wbGVtZW50JTIwZGVzJTIwdGVuc2V1cnMlMjBUb3JjaCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlucHV0X2ZlYXR1cmVzJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdCJTIyaW5wdXRfZmVhdHVyZXMlMjIlM0ElMjBmZWF0dXJlJTVCJTIyaW5wdXRfZmVhdHVyZXMlMjIlNUQlNUIwJTVEJTdEJTIwZm9yJTIwZmVhdHVyZSUyMGluJTIwZmVhdHVyZXMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBiYXRjaCUyMCUzRCUyMHNlbGYucHJvY2Vzc29yLmZlYXR1cmVfZXh0cmFjdG9yLnBhZChpbnB1dF9mZWF0dXJlcyUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIycHQlMjIpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwb2J0ZW5pciUyMGxlcyUyMHMlQzMlQTlxdWVuY2VzJTIwZCclQzMlQTl0aXF1ZXR0ZXMlMjB0b2tlbmlzJUMzJUE5ZXMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsYWJlbF9mZWF0dXJlcyUyMCUzRCUyMCU1QiU3QiUyMmlucHV0X2lkcyUyMiUzQSUyMGZlYXR1cmUlNUIlMjJsYWJlbHMlMjIlNUQlN0QlMjBmb3IlMjBmZWF0dXJlJTIwaW4lMjBmZWF0dXJlcyU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMHJlbWJvdXJyZXIlMjBsZXMlMjAlQzMlQTl0aXF1ZXR0ZXMlMjAlQzMlQTAlMjBsYSUyMGxvbmd1ZXVyJTIwbWF4aW1hbGUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsYWJlbHNfYmF0Y2glMjAlM0QlMjBzZWxmLnByb2Nlc3Nvci50b2tlbml6ZXIucGFkKGxhYmVsX2ZlYXR1cmVzJTJDJTIwcmV0dXJuX3RlbnNvcnMlM0QlMjJwdCUyMiklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjByZW1wbGFjZXIlMjBsZSUyMHJlbXBsaXNzYWdlJTIwcGFyJTIwLTEwMCUyMHBvdXIlMjBpZ25vcmVyJTIwY29ycmVjdGVtZW50JTIwbGVzJTIwcGVydGVzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbGFiZWxzJTIwJTNEJTIwbGFiZWxzX2JhdGNoJTVCJTIyaW5wdXRfaWRzJTIyJTVELm1hc2tlZF9maWxsKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxhYmVsc19iYXRjaC5hdHRlbnRpb25fbWFzay5uZSgxKSUyQyUyMC0xMDAlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjApJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwc2klMjBsZSUyMHRva2VuJTIwYm9zJTIwZXN0JTIwYWpvdXQlQzMlQTklMjBsb3JzJTIwZGUlMjBsJyVDMyVBOXRhcGUlMjBkZSUyMHRva2VuaXNhdGlvbiUyMHByJUMzJUE5YyVDMyVBOWRlbnRlJTJDJTIwY291cGVyJTIwbGUlMjB0b2tlbiUyMGJvcyUyMGljaSUyMHB1aXNxdSdpbCUyMHNlcmElMjBkZSUyMHRvdXRlJTIwZmElQzMlQTdvbiUyMGFqb3V0JUMzJUE5JTIwcGx1cyUyMHRhcmQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMChsYWJlbHMlNUIlM0ElMkMlMjAwJTVEJTIwJTNEJTNEJTIwc2VsZi5wcm9jZXNzb3IudG9rZW5pemVyLmJvc190b2tlbl9pZCkuYWxsKCkuY3B1KCkuaXRlbSgpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbGFiZWxzJTIwJTNEJTIwbGFiZWxzJTVCJTNBJTJDJTIwMSUzQSU1RCUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJhdGNoJTVCJTIybGFiZWxzJTIyJTVEJTIwJTNEJTIwbGFiZWxzJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwYmF0Y2g=",highlighted:`<span class="hljs-keyword">import</span> torch

<span class="hljs-keyword">from</span> dataclasses <span class="hljs-keyword">import</span> dataclass
<span class="hljs-keyword">from</span> typing <span class="hljs-keyword">import</span> <span class="hljs-type">Any</span>, <span class="hljs-type">Dict</span>, <span class="hljs-type">List</span>, <span class="hljs-type">Union</span>


<span class="hljs-meta">@dataclass</span>
<span class="hljs-keyword">class</span> <span class="hljs-title class_">DataCollatorSpeechSeq2SeqWithPadding</span>:
    processor: <span class="hljs-type">Any</span>

    <span class="hljs-keyword">def</span> <span class="hljs-title function_">__call__</span>(<span class="hljs-params">
        self, features: <span class="hljs-type">List</span>[<span class="hljs-type">Dict</span>[<span class="hljs-built_in">str</span>, <span class="hljs-type">Union</span>[<span class="hljs-type">List</span>[<span class="hljs-built_in">int</span>], torch.Tensor]]]
    </span>) -&gt; <span class="hljs-type">Dict</span>[<span class="hljs-built_in">str</span>, torch.Tensor]:
        <span class="hljs-comment"># diviser les entr\xE9es et les \xE9tiquettes car elles doivent \xEAtre de longueurs diff\xE9rentes et n\xE9cessitent des m\xE9thodes de remplissage diff\xE9rentes</span>
        <span class="hljs-comment"># traiter d&#x27;abord les entr\xE9es audio en renvoyant simplement des tenseurs Torch</span>
        input_features = [
            {<span class="hljs-string">&quot;input_features&quot;</span>: feature[<span class="hljs-string">&quot;input_features&quot;</span>][<span class="hljs-number">0</span>]} <span class="hljs-keyword">for</span> feature <span class="hljs-keyword">in</span> features
        ]
        batch = self.processor.feature_extractor.pad(input_features, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)

        <span class="hljs-comment"># obtenir les s\xE9quences d&#x27;\xE9tiquettes tokenis\xE9es</span>
        label_features = [{<span class="hljs-string">&quot;input_ids&quot;</span>: feature[<span class="hljs-string">&quot;labels&quot;</span>]} <span class="hljs-keyword">for</span> feature <span class="hljs-keyword">in</span> features]
        <span class="hljs-comment"># rembourrer les \xE9tiquettes \xE0 la longueur maximale</span>
        labels_batch = self.processor.tokenizer.pad(label_features, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)

        <span class="hljs-comment"># remplacer le remplissage par -100 pour ignorer correctement les pertes</span>
        labels = labels_batch[<span class="hljs-string">&quot;input_ids&quot;</span>].masked_fill(
            labels_batch.attention_mask.ne(<span class="hljs-number">1</span>), -<span class="hljs-number">100</span>
        )

        <span class="hljs-comment"># si le token bos est ajout\xE9 lors de l&#x27;\xE9tape de tokenisation pr\xE9c\xE9dente, couper le token bos ici puisqu&#x27;il sera de toute fa\xE7on ajout\xE9 plus tard</span>
        <span class="hljs-keyword">if</span> (labels[:, <span class="hljs-number">0</span>] == self.processor.tokenizer.bos_token_id).<span class="hljs-built_in">all</span>().cpu().item():
            labels = labels[:, <span class="hljs-number">1</span>:]

        batch[<span class="hljs-string">&quot;labels&quot;</span>] = labels

        <span class="hljs-keyword">return</span> batch`}}),pt=new J({props:{code:"ZGF0YV9jb2xsYXRvciUyMCUzRCUyMERhdGFDb2xsYXRvclNwZWVjaFNlcTJTZXFXaXRoUGFkZGluZyhwcm9jZXNzb3IlM0Rwcm9jZXNzb3Ip",highlighted:"data_collator = DataCollatorSpeechSeq2SeqWithPadding(processor=processor)"}}),ct=new H({}),dt=new J({props:{code:"aW1wb3J0JTIwZXZhbHVhdGUlMEElMEFtZXRyaWMlMjAlM0QlMjBldmFsdWF0ZS5sb2FkKCUyMndlciUyMik=",highlighted:`<span class="hljs-keyword">import</span> evaluate

metric = evaluate.load(<span class="hljs-string">&quot;wer&quot;</span>)`}}),mt=new J({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy5tb2RlbHMud2hpc3Blci5lbmdsaXNoX25vcm1hbGl6ZXIlMjBpbXBvcnQlMjBCYXNpY1RleHROb3JtYWxpemVyJTBBJTBBbm9ybWFsaXplciUyMCUzRCUyMEJhc2ljVGV4dE5vcm1hbGl6ZXIoKSUwQSUwQSUwQWRlZiUyMGNvbXB1dGVfbWV0cmljcyhwcmVkKSUzQSUwQSUyMCUyMCUyMCUyMHByZWRfaWRzJTIwJTNEJTIwcHJlZC5wcmVkaWN0aW9ucyUwQSUyMCUyMCUyMCUyMGxhYmVsX2lkcyUyMCUzRCUyMHByZWQubGFiZWxfaWRzJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwcmVtcGxhY2VyJTIwLTEwMCUyMHBhciUyMHBhZF90b2tlbl9pZCUwQSUyMCUyMCUyMCUyMGxhYmVsX2lkcyU1QmxhYmVsX2lkcyUyMCUzRCUzRCUyMC0xMDAlNUQlMjAlM0QlMjBwcm9jZXNzb3IudG9rZW5pemVyLnBhZF90b2tlbl9pZCUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMG5vdXMlMjBuZSUyMHZvdWxvbnMlMjBwYXMlMjBncm91cGVyJTIwbGVzJTIwKnRva2VucyolMjBsb3JzJTIwZHUlMjBjYWxjdWwlMjBkZXMlMjBtJUMzJUE5dHJpcXVlcyUwQSUyMCUyMCUyMCUyMHByZWRfc3RyJTIwJTNEJTIwcHJvY2Vzc29yLmJhdGNoX2RlY29kZShwcmVkX2lkcyUyQyUyMHNraXBfc3BlY2lhbF90b2tlbnMlM0RUcnVlKSUwQSUyMCUyMCUyMCUyMGxhYmVsX3N0ciUyMCUzRCUyMHByb2Nlc3Nvci5iYXRjaF9kZWNvZGUobGFiZWxfaWRzJTJDJTIwc2tpcF9zcGVjaWFsX3Rva2VucyUzRFRydWUpJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwY2FsY3VsZXIlMjBsZSUyMFdlciUyMG9ydGhvZ3JhcGhpcXVlJTBBJTIwJTIwJTIwJTIwd2VyX29ydGhvJTIwJTNEJTIwMTAwJTIwKiUyMG1ldHJpYy5jb21wdXRlKHByZWRpY3Rpb25zJTNEcHJlZF9zdHIlMkMlMjByZWZlcmVuY2VzJTNEbGFiZWxfc3RyKSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMGNhbGN1bGVyJTIwbGUlMjBXRVIlMjBub3JtYWxpcyVDMyVBOSUwQSUyMCUyMCUyMCUyMHByZWRfc3RyX25vcm0lMjAlM0QlMjAlNUJub3JtYWxpemVyKHByZWQpJTIwZm9yJTIwcHJlZCUyMGluJTIwcHJlZF9zdHIlNUQlMEElMjAlMjAlMjAlMjBsYWJlbF9zdHJfbm9ybSUyMCUzRCUyMCU1Qm5vcm1hbGl6ZXIobGFiZWwpJTIwZm9yJTIwbGFiZWwlMjBpbiUyMGxhYmVsX3N0ciU1RCUwQSUyMCUyMCUyMCUyMCUyMyUyMGFmaW4lMjBkZSUyMG4nJUMzJUE5dmFsdWVyJTIwcXVlJTIwbGVzJTIwJUMzJUE5Y2hhbnRpbGxvbnMlMjBjb3JyZXNwb25kYW50JTIwJUMzJUEwJTIwZGVzJTIwciVDMyVBOWYlQzMlQTlyZW5jZXMlMjBub24lMjBudWxsZXMlMEElMjAlMjAlMjAlMjBwcmVkX3N0cl9ub3JtJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJlZF9zdHJfbm9ybSU1QmklNUQlMjBmb3IlMjBpJTIwaW4lMjByYW5nZShsZW4ocHJlZF9zdHJfbm9ybSkpJTIwaWYlMjBsZW4obGFiZWxfc3RyX25vcm0lNUJpJTVEKSUyMCUzRSUyMDAlMEElMjAlMjAlMjAlMjAlNUQlMEElMjAlMjAlMjAlMjBsYWJlbF9zdHJfbm9ybSUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxhYmVsX3N0cl9ub3JtJTVCaSU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMGklMjBpbiUyMHJhbmdlKGxlbihsYWJlbF9zdHJfbm9ybSkpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBsZW4obGFiZWxfc3RyX25vcm0lNUJpJTVEKSUyMCUzRSUyMDAlMEElMjAlMjAlMjAlMjAlNUQlMEElMEElMjAlMjAlMjAlMjB3ZXIlMjAlM0QlMjAxMDAlMjAqJTIwbWV0cmljLmNvbXB1dGUocHJlZGljdGlvbnMlM0RwcmVkX3N0cl9ub3JtJTJDJTIwcmVmZXJlbmNlcyUzRGxhYmVsX3N0cl9ub3JtKSUwQSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMCU3QiUyMndlcl9vcnRobyUyMiUzQSUyMHdlcl9vcnRobyUyQyUyMCUyMndlciUyMiUzQSUyMHdlciU3RA==",highlighted:`<span class="hljs-keyword">from</span> transformers.models.whisper.english_normalizer <span class="hljs-keyword">import</span> BasicTextNormalizer

normalizer = BasicTextNormalizer()


<span class="hljs-keyword">def</span> <span class="hljs-title function_">compute_metrics</span>(<span class="hljs-params">pred</span>):
    pred_ids = pred.predictions
    label_ids = pred.label_ids

    <span class="hljs-comment"># remplacer -100 par pad_token_id</span>
    label_ids[label_ids == -<span class="hljs-number">100</span>] = processor.tokenizer.pad_token_id

    <span class="hljs-comment"># nous ne voulons pas grouper les *tokens* lors du calcul des m\xE9triques</span>
    pred_str = processor.batch_decode(pred_ids, skip_special_tokens=<span class="hljs-literal">True</span>)
    label_str = processor.batch_decode(label_ids, skip_special_tokens=<span class="hljs-literal">True</span>)

    <span class="hljs-comment"># calculer le Wer orthographique</span>
    wer_ortho = <span class="hljs-number">100</span> * metric.compute(predictions=pred_str, references=label_str)

    <span class="hljs-comment"># calculer le WER normalis\xE9</span>
    pred_str_norm = [normalizer(pred) <span class="hljs-keyword">for</span> pred <span class="hljs-keyword">in</span> pred_str]
    label_str_norm = [normalizer(label) <span class="hljs-keyword">for</span> label <span class="hljs-keyword">in</span> label_str]
    <span class="hljs-comment"># afin de n&#x27;\xE9valuer que les \xE9chantillons correspondant \xE0 des r\xE9f\xE9rences non nulles</span>
    pred_str_norm = [
        pred_str_norm[i] <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-built_in">len</span>(pred_str_norm)) <span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(label_str_norm[i]) &gt; <span class="hljs-number">0</span>
    ]
    label_str_norm = [
        label_str_norm[i]
        <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-built_in">len</span>(label_str_norm))
        <span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(label_str_norm[i]) &gt; <span class="hljs-number">0</span>
    ]

    wer = <span class="hljs-number">100</span> * metric.compute(predictions=pred_str_norm, references=label_str_norm)

    <span class="hljs-keyword">return</span> {<span class="hljs-string">&quot;wer_ortho&quot;</span>: wer_ortho, <span class="hljs-string">&quot;wer&quot;</span>: wer}`}}),ft=new H({}),Mt=new J({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFdoaXNwZXJGb3JDb25kaXRpb25hbEdlbmVyYXRpb24lMEElMEFtb2RlbCUyMCUzRCUyMFdoaXNwZXJGb3JDb25kaXRpb25hbEdlbmVyYXRpb24uZnJvbV9wcmV0cmFpbmVkKCUyMm9wZW5haSUyRndoaXNwZXItc21hbGwlMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> WhisperForConditionalGeneration

model = WhisperForConditionalGeneration.from_pretrained(<span class="hljs-string">&quot;openai/whisper-small&quot;</span>)`}}),vt=new J({props:{code:"ZnJvbSUyMGZ1bmN0b29scyUyMGltcG9ydCUyMHBhcnRpYWwlMEElMEElMjMlMjBkJUMzJUE5c2FjdGl2ZXIlMjBsZSUyMGNhY2hlJTIwcGVuZGFudCUyMGwnZW50cmElQzMlQUVuZW1lbnQlMjBjYXIlMjBpbCUyMGVzdCUyMGluY29tcGF0aWJsZSUyMGF2ZWMlMjBsZSUyMGNoZWNrcG9pbnRpbmclMjBkdSUyMGdyYWRpZW50JTBBbW9kZWwuY29uZmlnLnVzZV9jYWNoZSUyMCUzRCUyMEZhbHNlJTBBJTBBJTIzJTIwZCVDMyVBOWZpbmlyJTIwbGElMjBsYW5ndWUlMjBldCUyMGxhJTIwdCVDMyVBMmNoZSUyMHBvdXIlMjBsYSUyMGclQzMlQTluJUMzJUE5cmF0aW9uJTIwZXQlMjByJUMzJUE5YWN0aXZlciUyMGxlJTIwY2FjaGUlMEFtb2RlbC5nZW5lcmF0ZSUyMCUzRCUyMHBhcnRpYWwoJTBBJTIwJTIwJTIwJTIwbW9kZWwuZ2VuZXJhdGUlMkMlMjBsYW5ndWFnZSUzRCUyMnNpbmhhbGVzZSUyMiUyQyUyMHRhc2slM0QlMjJ0cmFuc2NyaWJlJTIyJTJDJTIwdXNlX2NhY2hlJTNEVHJ1ZSUwQSk=",highlighted:`<span class="hljs-keyword">from</span> functools <span class="hljs-keyword">import</span> partial

<span class="hljs-comment"># d\xE9sactiver le cache pendant l&#x27;entra\xEEnement car il est incompatible avec le checkpointing du gradient</span>
model.config.use_cache = <span class="hljs-literal">False</span>

<span class="hljs-comment"># d\xE9finir la langue et la t\xE2che pour la g\xE9n\xE9ration et r\xE9activer le cache</span>
model.generate = partial(
    model.generate, language=<span class="hljs-string">&quot;sinhalese&quot;</span>, task=<span class="hljs-string">&quot;transcribe&quot;</span>, use_cache=<span class="hljs-literal">True</span>
)`}}),yt=new H({}),jt=new J({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFNlcTJTZXFUcmFpbmluZ0FyZ3VtZW50cyUwQSUwQXRyYWluaW5nX2FyZ3MlMjAlM0QlMjBTZXEyU2VxVHJhaW5pbmdBcmd1bWVudHMoJTBBJTIwJTIwJTIwJTIwb3V0cHV0X2RpciUzRCUyMi4lMkZ3aGlzcGVyLXNtYWxsLWR2JTIyJTJDJTIwJTIwJTIzJTIwbm9tJTIwc3VyJTIwbGUlMjBIdWIlMEElMjAlMjAlMjAlMjBwZXJfZGV2aWNlX3RyYWluX2JhdGNoX3NpemUlM0QxNiUyQyUwQSUyMCUyMCUyMCUyMGdyYWRpZW50X2FjY3VtdWxhdGlvbl9zdGVwcyUzRDElMkMlMjAlMjAlMjMlMjAlQzMlQTAlMjB4MiUyMCUyMHBvdXIlMjBjaGFxdWUlMjBkaW1pbnV0aW9uJTIwZGUlMjAyeCUyMGRlJTIwbGElMjB0YWlsbGUlMjBkdSUyMGJhdGNoJTBBJTIwJTIwJTIwJTIwbGVhcm5pbmdfcmF0ZSUzRDFlLTUlMkMlMEElMjAlMjAlMjAlMjBscl9zY2hlZHVsZXJfdHlwZSUzRCUyMmNvbnN0YW50X3dpdGhfd2FybXVwJTIyJTJDJTBBJTIwJTIwJTIwJTIwd2FybXVwX3N0ZXBzJTNENTAlMkMlMEElMjAlMjAlMjAlMjBtYXhfc3RlcHMlM0Q1MDAlMkMlMjAlMjAlMjMlMjBhdWdtZW50ZXIlMjBqdXNxdSclQzMlQTAlMjA0MDAwJTIwc2klMjB2b3VzJTIwZGlzcG9zZXolMjBkZSUyMHZvdHJlJTIwcHJvcHJlJTIwR1BVJTIwb3UlMjBkJ3VuJTIwcGxhbiUyMENvbGFiJTIwcGF5YW50JTBBJTIwJTIwJTIwJTIwZ3JhZGllbnRfY2hlY2twb2ludGluZyUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjBmcDE2JTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMGZwMTZfZnVsbF9ldmFsJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMGV2YWx1YXRpb25fc3RyYXRlZ3klM0QlMjJzdGVwcyUyMiUyQyUwQSUyMCUyMCUyMCUyMHBlcl9kZXZpY2VfZXZhbF9iYXRjaF9zaXplJTNEMTYlMkMlMEElMjAlMjAlMjAlMjBwcmVkaWN0X3dpdGhfZ2VuZXJhdGUlM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwZ2VuZXJhdGlvbl9tYXhfbGVuZ3RoJTNEMjI1JTJDJTBBJTIwJTIwJTIwJTIwc2F2ZV9zdGVwcyUzRDUwMCUyQyUwQSUyMCUyMCUyMCUyMGV2YWxfc3RlcHMlM0Q1MDAlMkMlMEElMjAlMjAlMjAlMjBsb2dnaW5nX3N0ZXBzJTNEMjUlMkMlMEElMjAlMjAlMjAlMjByZXBvcnRfdG8lM0QlNUIlMjJ0ZW5zb3Jib2FyZCUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGxvYWRfYmVzdF9tb2RlbF9hdF9lbmQlM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwbWV0cmljX2Zvcl9iZXN0X21vZGVsJTNEJTIyd2VyJTIyJTJDJTBBJTIwJTIwJTIwJTIwZ3JlYXRlcl9pc19iZXR0ZXIlM0RGYWxzZSUyQyUwQSUyMCUyMCUyMCUyMHB1c2hfdG9faHViJTNEVHJ1ZSUyQyUwQSk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Seq2SeqTrainingArguments

training_args = Seq2SeqTrainingArguments(
    output_dir=<span class="hljs-string">&quot;./whisper-small-dv&quot;</span>,  <span class="hljs-comment"># nom sur le Hub</span>
    per_device_train_batch_size=<span class="hljs-number">16</span>,
    gradient_accumulation_steps=<span class="hljs-number">1</span>,  <span class="hljs-comment"># \xE0 x2  pour chaque diminution de 2x de la taille du batch</span>
    learning_rate=<span class="hljs-number">1e-5</span>,
    lr_scheduler_type=<span class="hljs-string">&quot;constant_with_warmup&quot;</span>,
    warmup_steps=<span class="hljs-number">50</span>,
    max_steps=<span class="hljs-number">500</span>,  <span class="hljs-comment"># augmenter jusqu&#x27;\xE0 4000 si vous disposez de votre propre GPU ou d&#x27;un plan Colab payant</span>
    gradient_checkpointing=<span class="hljs-literal">True</span>,
    fp16=<span class="hljs-literal">True</span>,
    fp16_full_eval=<span class="hljs-literal">True</span>,
    evaluation_strategy=<span class="hljs-string">&quot;steps&quot;</span>,
    per_device_eval_batch_size=<span class="hljs-number">16</span>,
    predict_with_generate=<span class="hljs-literal">True</span>,
    generation_max_length=<span class="hljs-number">225</span>,
    save_steps=<span class="hljs-number">500</span>,
    eval_steps=<span class="hljs-number">500</span>,
    logging_steps=<span class="hljs-number">25</span>,
    report_to=[<span class="hljs-string">&quot;tensorboard&quot;</span>],
    load_best_model_at_end=<span class="hljs-literal">True</span>,
    metric_for_best_model=<span class="hljs-string">&quot;wer&quot;</span>,
    greater_is_better=<span class="hljs-literal">False</span>,
    push_to_hub=<span class="hljs-literal">True</span>,
)`}}),ps=new yb({props:{$$slots:{default:[wb]},$$scope:{ctx:Gt}}}),bt=new J({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFNlcTJTZXFUcmFpbmVyJTBBJTBBdHJhaW5lciUyMCUzRCUyMFNlcTJTZXFUcmFpbmVyKCUwQSUyMCUyMCUyMCUyMGFyZ3MlM0R0cmFpbmluZ19hcmdzJTJDJTBBJTIwJTIwJTIwJTIwbW9kZWwlM0Rtb2RlbCUyQyUwQSUyMCUyMCUyMCUyMHRyYWluX2RhdGFzZXQlM0Rjb21tb25fdm9pY2UlNUIlMjJ0cmFpbiUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGV2YWxfZGF0YXNldCUzRGNvbW1vbl92b2ljZSU1QiUyMnRlc3QlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBkYXRhX2NvbGxhdG9yJTNEZGF0YV9jb2xsYXRvciUyQyUwQSUyMCUyMCUyMCUyMGNvbXB1dGVfbWV0cmljcyUzRGNvbXB1dGVfbWV0cmljcyUyQyUwQSUyMCUyMCUyMCUyMHRva2VuaXplciUzRHByb2Nlc3NvciUyQyUwQSk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Seq2SeqTrainer

trainer = Seq2SeqTrainer(
    args=training_args,
    model=model,
    train_dataset=common_voice[<span class="hljs-string">&quot;train&quot;</span>],
    eval_dataset=common_voice[<span class="hljs-string">&quot;test&quot;</span>],
    data_collator=data_collator,
    compute_metrics=compute_metrics,
    tokenizer=processor,
)`}}),Et=new H({}),Ut=new J({props:{code:"dHJhaW5lci50cmFpbigp",highlighted:"trainer.train()"}}),gt=new J({props:{code:"a3dhcmdzJTIwJTNEJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIyZGF0YXNldF90YWdzJTIyJTNBJTIwJTIybW96aWxsYS1mb3VuZGF0aW9uJTJGY29tbW9uX3ZvaWNlXzEzXzAlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJkYXRhc2V0JTIyJTNBJTIwJTIyQ29tbW9uJTIwVm9pY2UlMjAxMyUyMiUyQyUyMCUyMCUyMyUyMGElMjAncHJldHR5JyUyMG5hbWUlMjBmb3IlMjB0aGUlMjB0cmFpbmluZyUyMGRhdGFzZXQlMEElMjAlMjAlMjAlMjAlMjJsYW5ndWFnZSUyMiUzQSUyMCUyMmR2JTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIybW9kZWxfbmFtZSUyMiUzQSUyMCUyMldoaXNwZXIlMjBTbWFsbCUyMER2JTIwLSUyMFNhbmNoaXQlMjBHYW5kaGklMjIlMkMlMjAlMjAlMjMlMjBhJTIwJ3ByZXR0eSclMjBuYW1lJTIwZm9yJTIweW91ciUyMG1vZGVsJTBBJTIwJTIwJTIwJTIwJTIyZmluZXR1bmVkX2Zyb20lMjIlM0ElMjAlMjJvcGVuYWklMkZ3aGlzcGVyLXNtYWxsJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIydGFza3MlMjIlM0ElMjAlMjJhdXRvbWF0aWMtc3BlZWNoLXJlY29nbml0aW9uJTIyJTJDJTBBJTdE",highlighted:`kwargs = {
    <span class="hljs-string">&quot;dataset_tags&quot;</span>: <span class="hljs-string">&quot;mozilla-foundation/common_voice_13_0&quot;</span>,
    <span class="hljs-string">&quot;dataset&quot;</span>: <span class="hljs-string">&quot;Common Voice 13&quot;</span>,  <span class="hljs-comment"># a &#x27;pretty&#x27; name for the training dataset</span>
    <span class="hljs-string">&quot;language&quot;</span>: <span class="hljs-string">&quot;dv&quot;</span>,
    <span class="hljs-string">&quot;model_name&quot;</span>: <span class="hljs-string">&quot;Whisper Small Dv - Sanchit Gandhi&quot;</span>,  <span class="hljs-comment"># a &#x27;pretty&#x27; name for your model</span>
    <span class="hljs-string">&quot;finetuned_from&quot;</span>: <span class="hljs-string">&quot;openai/whisper-small&quot;</span>,
    <span class="hljs-string">&quot;tasks&quot;</span>: <span class="hljs-string">&quot;automatic-speech-recognition&quot;</span>,
}`}}),It=new J({props:{code:"dHJhaW5lci5wdXNoX3RvX2h1YigqKmt3YXJncyk=",highlighted:"trainer.push_to_hub(**kwargs)"}}),Ct=new H({}),Wt=new J({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBcGlwZSUyMCUzRCUyMHBpcGVsaW5lKCUyMmF1dG9tYXRpYy1zcGVlY2gtcmVjb2duaXRpb24lMjIlMkMlMjBtb2RlbCUzRCUyMnNhbmNoaXQtZ2FuZGhpJTJGd2hpc3Blci1zbWFsbC1kdiUyMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline

pipe = pipeline(<span class="hljs-string">&quot;automatic-speech-recognition&quot;</span>, model=<span class="hljs-string">&quot;sanchit-gandhi/whisper-small-dv&quot;</span>)`}}),kt=new H({}),{c(){T=a("meta"),C=p(),F=a("h1"),Se=a("a"),wl=a("span"),m(gs.$$.fragment),ku=p(),_l=a("span"),Zu=l("Comment finetuner un syst\xE8me de reconnaissance automatique de la parole avec l'API Trainer"),Kr=p(),D=a("p"),Gu=l("Dans cette section, nous allons couvrir un guide \xE9tape par \xE9tape pour "),gl=a("em"),$u=l("finetuner"),Nu=l(" Whisper pour la reconnaissance automatique de la parole sur le jeu de donn\xE9es Common Voice 13. Nous utiliserons la version \u201D"),Il=a("em"),Bu=l("small"),zu=l("\u201D du mod\xE8le et un jeu de donn\xE9es relativement l\xE9ger, vous permettant d\u2019ex\xE9cuter le "),Cl=a("em"),Au=l("finetuning"),xu=l(" assez rapidement sur n\u2019importe quel GPU de plus de 16 Go avec de faibles besoins en espace disque, comme le GPU T4 de 16 Go fourni dans le volet gratuit de Google Colab."),eo=p(),$t=a("p"),Vu=l("Si vous disposez d\u2019un GPU plus petit ou si vous rencontrez des probl\xE8mes de m\xE9moire pendant l\u2019entra\xEEnement, vous pouvez suivre les suggestions fournies pour r\xE9duire l\u2019utilisation de la m\xE9moire. \xC0 l\u2019inverse, si vous avez acc\xE8s \xE0 un GPU plus puissant, vous pouvez modifier les arguments d\u2019entra\xEEnement pour maximiser votre capacit\xE9 de traitement. Ce guide est donc accessible quelles que soient les sp\xE9cifications de votre GPU !"),so=p(),P=a("p"),Xu=l("De m\xEAme, ce guide porte plus pr\xE9cis\xE9ment sur le "),ql=a("em"),Ru=l("finetuning"),Su=l(" sur la langue Dhivehi mais les \xE9tapes couvertes ici se g\xE9n\xE9ralisent \xE0 n\u2019importe quelle langue du jeu de donn\xE9es Common Voice, et plus g\xE9n\xE9ralement \xE0 n\u2019importe quel jeu de donn\xE9es d\u2019ASR disponible sur le "),Wl=a("em"),Qu=l("Hub"),Yu=l(`.
Vous pouvez modifier le code pour passer rapidement \xE0 la langue de votre choix et `),kl=a("em"),Fu=l("finetuner"),Hu=l(" un mod\xE8le Whisper dans votre langue maternelle \u{1F30D}."),to=p(),Qe=a("p"),Du=l("Commen\xE7ons et donnons le coup d\u2019envoi de notre pipeline de "),Zl=a("em"),Pu=l("finetuning"),Lu=l(" !"),lo=p(),qe=a("h2"),Ye=a("a"),Gl=a("span"),m(Is.$$.fragment),Ou=p(),$l=a("span"),Ku=l("Pr\xE9parer l'environnement"),no=p(),L=a("p"),ep=l("Nous vous conseillons vivement de t\xE9l\xE9charger les "),Nl=a("em"),sp=l("checkpoints"),tp=l(" du mod\xE8le directement sur le "),Cs=a("a"),Bl=a("em"),lp=l("Hub"),np=l(`.
Le `),zl=a("em"),ap=l("Hub"),rp=l(" offre les avantages suivants :"),ao=p(),O=a("ul"),qs=a("li"),op=l("Un contr\xF4le de version int\xE9gr\xE9 : vous pouvez \xEAtre s\xFBr qu\u2019aucun "),Al=a("em"),ip=l("checkpoint"),up=l(" n\u2019est perdu pendant l\u2019entra\xEEnement."),pp=p(),xl=a("li"),cp=l("Tensorboard : suivi des mesures importantes au cours de l\u2019entra\xEEnement."),dp=p(),Vl=a("li"),mp=l("Cartes de mod\xE8le : documenter ce que fait un mod\xE8le et ses cas d\u2019utilisation pr\xE9vus."),fp=p(),Xl=a("li"),Mp=l("Communaut\xE9 : un moyen facile de partager et de collaborer avec la communaut\xE9 ! \u{1F917}"),ro=p(),w=a("p"),hp=l("Lier le "),Rl=a("em"),vp=l("notebook"),yp=l(" au "),Sl=a("em"),Jp=l("Hub"),jp=l(" est tr\xE8s simple, il suffit d\u2019entrer votre "),Ql=a("em"),bp=l("token"),Ep=l(" d\u2019authentification au "),Yl=a("em"),Up=l("Hub"),Tp=l(` lorsque l\u2019on vous y invite.
Votre `),Fl=a("em"),wp=l("token"),_p=l(" d\u2019authentification est trouvable "),Ws=a("a"),gp=l("ici"),Ip=l("."),oo=p(),m(ks.$$.fragment),io=p(),Nt=a("p"),Hl=a("strong"),Cp=l("Sortie :"),uo=p(),m(Zs.$$.fragment),po=p(),We=a("h2"),Fe=a("a"),Dl=a("span"),m(Gs.$$.fragment),qp=p(),Pl=a("span"),Wp=l("Charger le jeu de donn\xE9es"),co=p(),ke=a("p"),$s=a("a"),kp=l("Common Voice 13"),Zp=l(" contient environ dix heures de donn\xE9es Dhivehi \xE9tiquet\xE9es, dont trois sont des donn\xE9es de test. Il s\u2019agit de tr\xE8s peu de donn\xE9es pour un "),Ll=a("em"),Gp=l("finetuning"),$p=l(", nous nous appuierons donc sur la connaissance multilingue acquise par Whisper pendant le pr\xE9-entra\xEEnement."),mo=p(),A=a("p"),Np=l("En utilisant les \u{1F917} "),Ol=a("em"),Bp=l("Datasets"),zp=l(", le t\xE9l\xE9chargement et la pr\xE9paration des donn\xE9es sont extr\xEAmement simples. Nous pouvons t\xE9l\xE9charger et pr\xE9parer les ensembles de Common Voice 13 en une seule ligne de code. Puisque le Dhivehi est tr\xE8s pauvre en ressources, nous combinerons les splits "),Kl=a("code"),Ap=l("train"),xp=l(" et "),en=a("code"),Vp=l("validation"),Xp=l(" pour obtenir environ sept heures de donn\xE9es d\u2019entra\xEEnement. Nous utiliserons les trois heures de donn\xE9es "),sn=a("code"),Rp=l("test"),Sp=l(" comme notre ensemble de test :"),fo=p(),m(Ns.$$.fragment),Mo=p(),Bt=a("p"),tn=a("strong"),Qp=l("Sortie :"),ho=p(),m(Bs.$$.fragment),vo=p(),m(He.$$.fragment),yo=p(),q=a("p"),Yp=l("La plupart des jeux de donn\xE9es d\u2019ASR ne fournissent que des \xE9chantillons audio en entr\xE9e ("),ln=a("code"),Fp=l("audio"),Hp=l(") et le texte transcrit correspondant ("),nn=a("code"),Dp=l("sentence"),Pp=l(`).
Common Voice contient des m\xE9tadonn\xE9es suppl\xE9mentaires, telles que `),an=a("code"),Lp=l("accent"),Op=l(" et "),rn=a("code"),Kp=l("locale"),ec=l(`, que nous pouvons ignorer pour l\u2019ASR.
En gardant le `),on=a("em"),sc=l("notebook"),tc=l(" aussi g\xE9n\xE9ral que possible, nous ne consid\xE9rons que l\u2019audio d\u2019entr\xE9e et le texte transcrit en \xE9cartant les informations de m\xE9tadonn\xE9es suppl\xE9mentaires :"),Jo=p(),m(zs.$$.fragment),jo=p(),Ze=a("h2"),De=a("a"),un=a("span"),m(As.$$.fragment),lc=p(),pn=a("span"),nc=l("Extracteur de caract\xE9ristiques, tokeniser et processeur"),bo=p(),zt=a("p"),ac=l("Le pipeline d\u2019ASR peut \xEAtre d\xE9compos\xE9 en trois \xE9tapes :"),Eo=p(),ce=a("ol"),cn=a("li"),rc=l("L\u2019extracteur de caract\xE9ristiques qui pr\xE9-traite les entr\xE9es audio brutes en spectrogrammes log-m\xE9l."),oc=p(),dn=a("li"),ic=l("Le mod\xE8le qui effectue l\u2019association s\xE9quence-s\xE9quence"),uc=p(),xs=a("li"),pc=l("Le tokenizer qui post-traite les "),mn=a("em"),cc=l("tokens"),dc=l(" pr\xE9dits en texte."),Uo=p(),W=a("p"),mc=l("Dans \u{1F917} "),fn=a("em"),fc=l("Transformers"),Mc=l(", le mod\xE8le Whisper est associ\xE9 \xE0 un extracteur de caract\xE9ristiques et \xE0 un tokenizer, appel\xE9s respectivement "),Vs=a("a"),hc=l("WhisperFeatureExtractor"),vc=l(" et "),Xs=a("a"),yc=l("WhisperTokenizer"),Jc=l(`.
Pour nous simplifier la vie, ces deux objets sont regroup\xE9s dans une seule classe, appel\xE9e `),Rs=a("a"),jc=l("WhisperProcessor"),bc=l(`.
Nous pouvons appeler le WhisperProcessor pour effectuer \xE0 la fois le pr\xE9traitement audio et le post-traitement des `),Mn=a("em"),Ec=l("tokens"),Uc=l(" de texte. Ce faisant, nous n\u2019avons besoin de suivre que deux objets pendant l\u2019entra\xEEningment : le processeur et le mod\xE8le."),To=p(),b=a("p"),Tc=l("Lors d\u2019un "),hn=a("em"),wc=l("finetun\xE9"),_c=l(" multilingue, nous devons d\xE9finir la "),vn=a("code"),gc=l('"language"'),Ic=l(" et la "),yn=a("code"),Cc=l('"task"'),qc=l(` lors de l\u2019instanciation du processeur.
La `),Jn=a("code"),Wc=l('"language"'),kc=l(" doit \xEAtre fix\xE9e \xE0 la langue audio source, et la t\xE2che \xE0 "),jn=a("code"),Zc=l('"translate"'),Gc=l(" pour la reconnaissance vocale ou \xE0 "),bn=a("code"),$c=l('"translate"'),Nc=l(" pour la traduction vocale. Ces arguments modifient le comportement du "),En=a("em"),Bc=l("tokens"),zc=l(", et doivent \xEAtre d\xE9finis correctement pour s\u2019assurer que les \xE9tiquettes cibles sont encod\xE9es correctement."),wo=p(),At=a("p"),Ac=l("Nous pouvons voir toutes les langues possibles support\xE9es par Whisper en important la liste des langues :"),_o=p(),m(Ss.$$.fragment),go=p(),de=a("p"),xc=l(`Si vous parcourez cette liste, vous remarquerez que de nombreuses langues sont pr\xE9sentes, mais que le dhivehi est l\u2019une des rares \xE0 ne pas l\u2019\xEAtre !
Cela signifie que Whisper n\u2019a pas \xE9t\xE9 pr\xE9-entra\xEEn\xE9 sur le dhivehi. Cependant, cela ne signifie pas que nous ne pouvons pas `),Un=a("em"),Vc=l("finetuner"),Xc=l(` Whisper sur cette langue.
En faisant cela, nous allons entra\xEEner Whisper dans une nouvelle langue, une langue non support\xE9e par le `),Tn=a("em"),Rc=l("checkpoint"),Sc=l(" pr\xE9-entra\xEEn\xE9. C\u2019est plut\xF4t cool, non ?"),Io=p(),Pe=a("p"),Qc=l("Lorsque vous le "),wn=a("em"),Yc=l("finetunez"),Fc=l(" sur une nouvelle langue, Whisper fait un bon travail en tirant parti de sa connaissance des 96 autres langues sur lesquelles il a \xE9t\xE9 pr\xE9-entra\xEEn\xE9. En g\xE9n\xE9ral, toutes les langues modernes seront linguistiquement similaires \xE0 au moins l\u2019une des 96 langues que Whisper conna\xEEt d\xE9j\xE0, nous nous inscrivons donc dans ce paradigme de repr\xE9sentation des connaissances interlinguistiques."),Co=p(),me=a("p"),Hc=l("Ce que nous devons faire pour cette nouvelle langue, est de trouver la langue "),_n=a("strong"),Dc=l("la plus similaire"),Pc=l(` sur laquelle Whisper a \xE9t\xE9 pr\xE9-entra\xEEn\xE9. L\u2019article de Wikip\xE9dia sur le dhivehi indique que cette langue est \xE9troitement li\xE9e \xE0 la langue cinghalaise du Sri Lanka.
Si nous v\xE9rifions \xE0 nouveau les codes de langue, nous pouvons voir que le cinghalais est pr\xE9sent dans le jeu de langues de Whisper, nous pouvons donc en toute s\xE9curit\xE9 mettre notre argument de langue \xE0 `),gn=a("code"),Lc=l('"sinhalese"'),Oc=l("."),qo=p(),K=a("p"),Kc=l("Nous allons charger notre processeur \xE0 partir du "),In=a("em"),ed=l("checkpoint"),sd=l(" pr\xE9-entra\xEEn\xE9, en fixant la langue \xE0 "),Cn=a("code"),td=l('"sinhalese"'),ld=l(" et la t\xE2che \xE0 "),qn=a("code"),nd=l('"transcribe"'),ad=l(" comme expliqu\xE9 ci-dessus :"),Wo=p(),m(Qs.$$.fragment),ko=p(),x=a("p"),rd=l("Il est utile de rappeler que dans la plupart des cas, vous constaterez que la langue sur laquelle vous souhaitez effectuer un "),Wn=a("em"),od=l("finetuning"),id=l(" se trouve dans l\u2019ensemble des langues de pr\xE9-entra\xEEnement, auquel cas vous pouvez simplement d\xE9finir cette langue directement comme langue audio source ! Notez que ces deux arguments doivent \xEAtre omis pour le "),kn=a("em"),ud=l("finetuning"),pd=l(" en anglais o\xF9 il n\u2019y a qu\u2019une seule option pour la langue ("),Zn=a("code"),cd=l('"English"'),dd=l(") et la t\xE2che ("),Gn=a("code"),md=l('"transcribe"'),fd=l(")."),Zo=p(),Ge=a("h2"),Le=a("a"),$n=a("span"),m(Ys.$$.fragment),Md=p(),Nn=a("span"),hd=l("Pr\xE9traitement des donn\xE9es"),Go=p(),Oe=a("p"),vd=l("Jetons un coup d\u2019oeil aux caract\xE9ristiques du jeu de donn\xE9es. Portez une attention particuli\xE8re \xE0 la colonne "),Bn=a("code"),yd=l('"audio"'),Jd=l(", elle d\xE9taille le taux d\u2019\xE9chantillonnage de nos entr\xE9es audio :"),$o=p(),m(Fs.$$.fragment),No=p(),xt=a("p"),zn=a("strong"),jd=l("Sortie :"),Bo=p(),m(Hs.$$.fragment),zo=p(),Vt=a("p"),bd=l("Puisque notre audio d\u2019entr\xE9e est \xE9chantillonn\xE9 \xE0 48kHz, nous devons le sous-\xE9chantillonner \xE0 16kHz avant de le passer \xE0 l\u2019extracteur de caract\xE9ristiques de Whisper qui est la fr\xE9quence d\u2019\xE9chantillonnage attendue par le mod\xE8le."),Ao=p(),Ke=a("p"),Ed=l("Nous allons r\xE9gler les entr\xE9es audio \xE0 la bonne fr\xE9quence d\u2019\xE9chantillonnage en utilisant la m\xE9thode "),Ds=a("a"),An=a("code"),Ud=l("cast_column"),Td=l(" du jeu de donn\xE9es. Cette op\xE9ration ne modifie pas l\u2019audio sur place, mais signale aux jeux de donn\xE9es de r\xE9\xE9chantillonner les \xE9chantillons audio \xE0 la vol\xE9e lorsqu\u2019ils sont charg\xE9s :"),xo=p(),m(Ps.$$.fragment),Vo=p(),Xt=a("p"),wd=l("Nous pouvons maintenant \xE9crire une fonction pour pr\xE9parer nos donn\xE9es pour le mod\xE8le :"),Xo=p(),fe=a("ol"),$e=a("li"),_d=l("Nous chargeons et r\xE9\xE9chantillonnons les donn\xE9es audio \xE9chantillon par \xE9chantillon en appelant "),xn=a("code"),gd=l('sample["audio"]'),Id=l(". Comme expliqu\xE9 ci-dessus, \u{1F917} "),Vn=a("em"),Cd=l("Datasets"),qd=l(" effectue toutes les op\xE9rations de r\xE9\xE9chantillonnage n\xE9cessaires \xE0 la vol\xE9e."),Wd=p(),Xn=a("li"),kd=l("Nous utilisons l\u2019extracteur de caract\xE9ristiques pour calculer les caract\xE9ristiques d\u2019entr\xE9e du spectrogramme log-mel \xE0 partir de notre tableau audio unidimensionnel."),Zd=p(),Ls=a("li"),Gd=l("Nous encodons les transcriptions en identifiants d\u2019\xE9tiquettes \xE0 l\u2019aide d\u2019un "),Rn=a("em"),$d=l("tokenizer"),Nd=l("."),Ro=p(),m(Os.$$.fragment),So=p(),ee=a("p"),Bd=l("Nous pouvons appliquer la fonction de pr\xE9paration des donn\xE9es \xE0 tous nos exemples d\u2019entra\xEEnement en utilisant la m\xE9thode "),Sn=a("code"),zd=l(".map"),Ad=l(" de \u{1F917} "),Qn=a("em"),xd=l("Datasets"),Vd=l(". Nous allons supprimer les colonnes des donn\xE9es d\u2019entra\xEEnement brutes (l\u2019audio et le texte), en ne laissant que les colonnes renvoy\xE9es par la fonction "),Yn=a("code"),Xd=l("prepare_dataset"),Rd=l(" :"),Qo=p(),m(Ks.$$.fragment),Yo=p(),Me=a("p"),Sd=l("Enfin, nous filtrons toutes les donn\xE9es d\u2019entra\xEEnement contenant des \xE9chantillons audio de plus de 30 secondes. Ces \xE9chantillons seraient sinon tronqu\xE9s par l\u2019extracteur de caract\xE9ristiques de Whisper, ce qui pourrait affecter la stabilit\xE9 de l\u2019entra\xEEnement. Nous d\xE9finissons une fonction qui renvoie "),Fn=a("code"),Qd=l("True"),Yd=l(" pour les \xE9chantillons de moins de 30 secondes, et "),Hn=a("code"),Fd=l("False"),Hd=l(" pour ceux qui sont plus longs :"),Fo=p(),m(et.$$.fragment),Ho=p(),he=a("p"),Dd=l("Nous appliquons notre fonction de filtrage \xE0 tous les \xE9chantillons de notre jeu de donn\xE9es d\u2019entra\xEEnement par le biais de la m\xE9thode "),Dn=a("code"),Pd=l(".filter"),Ld=l(" de \u{1F917} "),Pn=a("em"),Od=l("Datasets"),Kd=l(" :"),Do=p(),m(st.$$.fragment),Po=p(),Rt=a("p"),em=l("V\xE9rifions la quantit\xE9 de donn\xE9es d\u2019entra\xEEnement que nous avons supprim\xE9e gr\xE2ce \xE0 cette \xE9tape de filtrage :"),Lo=p(),m(tt.$$.fragment),Oo=p(),St=a("p"),Ln=a("strong"),sm=l("Sortie :"),Ko=p(),m(lt.$$.fragment),ei=p(),es=a("p"),tm=l(`Dans ce cas, nous avons en fait le m\xEAme nombre d\u2019\xE9chantillons que pr\xE9c\xE9demment, donc il n\u2019y a pas d\u2019\xE9chantillons de plus de 30s.
Cela pourrait ne pas \xEAtre le cas si vous changez de langue, il est donc pr\xE9f\xE9rable de garder cette \xE9tape de filtrage en place pour plus de robustesse. Nos donn\xE9es sont maintenant pr\xEAtes \xE0 \xEAtre entra\xEEn\xE9es ! Continuons et regardons comment nous pouvons utiliser ces donn\xE9es pour le `),On=a("em"),lm=l("finetuning"),nm=l("."),si=p(),Ne=a("h2"),ss=a("a"),Kn=a("span"),m(nt.$$.fragment),am=p(),ea=a("span"),rm=l("Entra\xEEnement et \xE9valuation"),ti=p(),ts=a("p"),om=l(`Maintenant que nous avons pr\xE9par\xE9 nos donn\xE9es, nous sommes pr\xEAts \xE0 plonger dans le pipeline d\u2019entra\xEEnement.
`),at=a("a"),im=l("Trainer"),um=l(`
va faire le gros du travail \xE0 notre place. Tout ce que nous avons \xE0 faire est de :`),li=p(),se=a("ul"),sa=a("li"),ta=a("p"),pm=l("D\xE9finir un assembleur de donn\xE9es qui prend nos donn\xE9es pr\xE9trait\xE9es et pr\xE9pare des tenseurs PyTorch adapt\xE9s au mod\xE8le."),cm=p(),la=a("li"),rt=a("p"),dm=l("M\xE9triques d\u2019\xE9valuation : lors de l\u2019\xE9valuation, nous voulons \xE9valuer le mod\xE8le en utilisant la m\xE9trique du taux d\u2019erreur au niveau du mot (WER). Nous devons d\xE9finir une fonction "),na=a("code"),mm=l("compute_metrics"),fm=l(" qui g\xE8re ce calcul."),Mm=p(),aa=a("li"),ot=a("p"),hm=l("Charger un "),ra=a("em"),vm=l("checkpoint"),ym=l(" pr\xE9-entra\xEEn\xE9 et le configurer correctement pour l\u2019entra\xEEnement."),Jm=p(),oa=a("li"),ia=a("p"),jm=l("D\xE9finir les arguments d\u2019entra\xEEnement : ils seront utilis\xE9s par le Trainer pour construire le plannificateur d\u2019entra\xEEnement."),ni=p(),ls=a("p"),bm=l("Une fois le mod\xE8le "),ua=a("em"),Em=l("finetun\xE9"),Um=l(", nous l\u2019\xE9valuerons sur les donn\xE9es de test pour v\xE9rifier que nous l\u2019avons correctement entra\xEEn\xE9 \xE0 transcrire la parole en Dhivehi."),ai=p(),Be=a("h3"),ns=a("a"),pa=a("span"),m(it.$$.fragment),Tm=p(),ca=a("span"),wm=l("D\xE9finir un assembleur de donn\xE9es"),ri=p(),V=a("p"),_m=l("L\u2019assembleur de donn\xE9es pour un mod\xE8le audio s\xE9quence-\xE0-s\xE9quence est unique dans le sens o\xF9 il traite les "),da=a("code"),gm=l("input_features"),Im=l(" et les "),ma=a("code"),Cm=l("labels"),qm=l(" ind\xE9pendamment : les "),fa=a("code"),Wm=l("input_features"),km=l(" doivent \xEAtre trait\xE9es par l\u2019extracteur de caract\xE9ristiques et les "),Ma=a("code"),Zm=l("labels"),Gm=l(" par le tokenizer."),oi=p(),X=a("p"),$m=l("Les "),ha=a("code"),Nm=l("input_features"),Bm=l(" sont d\xE9j\xE0 rembourr\xE9es \xE0 30s et converties en un spectrogramme log-Mel de dimension fixe, donc tout ce que nous avons \xE0 faire est de les convertir en tenseurs PyTorch batch\xE9s. Nous le faisons en utilisant la m\xE9thode "),va=a("code"),zm=l(".pad"),Am=l(" de l\u2019extracteur de caract\xE9ristiques avec "),ya=a("code"),xm=l("return_tensors=pt"),Vm=l(". Notez qu\u2019aucun rembourrage suppl\xE9mentaire n\u2019est appliqu\xE9 ici puisque les entr\xE9es sont de dimension fixe, les "),Ja=a("code"),Xm=l("input_features"),Rm=l(" sont simplement converties en tenseurs PyTorch."),ii=p(),E=a("p"),Sm=l("D\u2019un autre c\xF4t\xE9, les "),ja=a("code"),Qm=l("labels"),Ym=l(" ne sont pas rembourr\xE9s. Les s\xE9quences sont d\u2019abord remplac\xE9es par la longueur maximale du batch \xE0 l\u2019aide de la m\xE9thode "),ba=a("code"),Fm=l(".pad"),Hm=l(" du "),Ea=a("em"),Dm=l("tokenizer"),Pm=l(". Les "),Ua=a("em"),Lm=l("tokens"),Om=l(" de remplissage sont ensuite remplac\xE9s par "),Ta=a("code"),Km=l("-100"),ef=l(" de sorte que ces tokens ne sont "),wa=a("strong"),sf=l("pas"),tf=l(" pris en compte lors du calcul de la perte. Nous coupons ensuite le d\xE9but du "),_a=a("em"),lf=l("token"),nf=l(" de transcription du d\xE9but de la s\xE9quence d\u2019\xE9tiquettes comme nous l\u2019ajouterons plus tard pendant l\u2019entra\xEEnement."),ui=p(),ve=a("p"),af=l("Nous pouvons utiliser le "),ga=a("code"),rf=l("WhisperProcessor"),of=l(" que nous avons d\xE9fini plus t\xF4t pour effectuer \xE0 la fois les op\xE9rations de l\u2019extracteur de caract\xE9ristiques et du "),Ia=a("em"),uf=l("tokenizer"),pf=l(" :"),pi=p(),m(ut.$$.fragment),ci=p(),Qt=a("p"),cf=l("Nous pouvons maintenant initialiser l\u2019assembleur de donn\xE9es que nous venons de d\xE9finir :"),di=p(),m(pt.$$.fragment),mi=p(),Yt=a("p"),df=l("En avant !"),fi=p(),ze=a("h3"),as=a("a"),Ca=a("span"),m(ct.$$.fragment),mf=p(),qa=a("span"),ff=l("M\xE9triques d'\xE9valuation"),Mi=p(),rs=a("p"),Mf=l("Ensuite, nous d\xE9finissons la m\xE9trique d\u2019\xE9valuation que nous utiliserons sur notre ensemble d\u2019\xE9valuation. Nous utiliserons le taux d\u2019erreur au niveaud du mot (WER) introduit dans la section "),Ft=a("a"),hf=l("\xE9valuation"),vf=l(", la m\xE9trique \u201Cde-facto\u201D pour \xE9valuer les syst\xE8mes d\u2019ASR."),hi=p(),os=a("p"),yf=l("Nous chargerons la m\xE9trique WER \xE0 partir d\u2019 \u{1F917} "),Wa=a("em"),Jf=l("Evaluate"),jf=l(" :"),vi=p(),m(dt.$$.fragment),yi=p(),k=a("p"),bf=l("Il suffit ensuite de d\xE9finir une fonction qui prend les pr\xE9dictions de notre mod\xE8le et renvoie la m\xE9trique WER. Cette fonction, appel\xE9e "),ka=a("code"),Ef=l("compute_metrics"),Uf=l(", remplace d\u2019abord "),Za=a("code"),Tf=l("-100"),wf=l(" par le "),Ga=a("code"),_f=l("pad_token_id"),gf=l(" dans "),$a=a("code"),If=l("label_ids"),Cf=l(" (annulant l\u2019\xE9tape que nous avons appliqu\xE9e dans l\u2019assembleur de donn\xE9es pour ignorer correctement les "),Na=a("em"),qf=l("tokens"),Wf=l(" rembourr\xE9s dans la perte). Il d\xE9code ensuite les identifiants pr\xE9dits et les identifiants d\u2019\xE9tiquettes en cha\xEEnes de caract\xE8res. Enfin, il calcule le WER entre les pr\xE9dictions et les \xE9tiquettes de r\xE9f\xE9rence. Ici, nous avons la possibilit\xE9 d\u2019\xE9valuer les transcriptions et les pr\xE9dictions \u201Cnormalis\xE9es\u201D, dont la ponctuation et la casse ont \xE9t\xE9 supprim\xE9es. Nous vous recommandons de proc\xE9der ainsi pour b\xE9n\xE9ficier de l\u2019am\xE9lioration du WER obtenue par la normalisation des transcriptions."),Ji=p(),m(mt.$$.fragment),ji=p(),Ae=a("h3"),is=a("a"),Ba=a("span"),m(ft.$$.fragment),kf=p(),za=a("span"),Zf=l("Charger un *checkpoint* pr\xE9-entra\xEEn\xE9"),bi=p(),ye=a("p"),Gf=l("Chargeons maintenant le "),Aa=a("em"),$f=l("checkpoint"),Nf=l(" pr\xE9-entra\xEEn\xE9 de Whisper small. Encore une fois, ceci est trivial gr\xE2ce \xE0 l\u2019utilisation de \u{1F917} "),xa=a("em"),Bf=l("Transformers"),zf=l(" !"),Ei=p(),m(Mt.$$.fragment),Ui=p(),U=a("p"),Af=l("Nous allons mettre "),Va=a("code"),xf=l("use_cache"),Vf=l(" \xE0 "),Xa=a("code"),Xf=l("False"),Rf=l(" pour l\u2019entra\xEEnement puisque nous utilisons ["),Ra=a("em"),Sf=l("gradient checkpointing"),Qf=l("] ("),ht=a("a"),Yf=l("https://huggingface.co/docs/transformers/v4.18.0/en/performance#gradient-checkpointing"),Ff=l(") et que les deux sont incompatibles. Nous allons aussi surcharger deux arguments de g\xE9n\xE9ration pour contr\xF4ler le comportement du mod\xE8le pendant l\u2019inf\xE9rence : nous allons forcer la langue et les "),Sa=a("em"),Hf=l("tokens"),Df=l(" de t\xE2che pendant la g\xE9n\xE9ration en d\xE9finissant les arguments "),Qa=a("code"),Pf=l("language"),Lf=l(" et "),Ya=a("code"),Of=l("task"),Kf=l(", et aussi r\xE9activer le cache pour la g\xE9n\xE9ration afin d\u2019acc\xE9l\xE9rer le temps d\u2019inf\xE9rence :"),Ti=p(),m(vt.$$.fragment),wi=p(),xe=a("h2"),us=a("a"),Fa=a("span"),m(yt.$$.fragment),eM=p(),Ha=a("span"),sM=l("D\xE9finir la configuration de l'entra\xEEnement"),_i=p(),Je=a("p"),tM=l(`Dans la derni\xE8re \xE9tape, nous d\xE9finissons tous les param\xE8tres li\xE9s \xE0 l\u2019entra\xEEnement. Ici, nous fixons le nombre d\u2019\xE9tapes d\u2019entra\xEEnement \xE0 500.
Cela repr\xE9sente suffisamment d\u2019\xE9tapes pour voir une grande am\xE9lioration du WER par rapport au mod\xE8le pr\xE9-entra\xEEn\xE9, tout en s\u2019assurant que le `),Da=a("em"),lM=l("finetuning"),nM=l(" peut \xEAtre ex\xE9cut\xE9 en environ 45 minutes sur un niveau gratuit de Google Colab. Pour plus de d\xE9tails sur les arguments d\u2019entra\xEEnement, reportez-vous \xE0 la documentation de [Seq2SeqTrainingArguments] ("),Jt=a("a"),aM=l("https://huggingface.co/docs/transformers/main_classes/trainer#transformers.Seq2SeqTrainingArguments"),rM=l(")."),gi=p(),m(jt.$$.fragment),Ii=p(),m(ps.$$.fragment),Ci=p(),je=a("p"),oM=l("Nous pouvons transmettre les arguments d\u2019entra\xEEnement au "),Pa=a("em"),iM=l("Trainer"),uM=l(" avec notre mod\xE8le, notre jeu de donn\xE9es, notre assembleur de donn\xE9es et la fonction "),La=a("code"),pM=l("compute_metrics"),cM=l(" :"),qi=p(),m(bt.$$.fragment),Wi=p(),Ht=a("p"),dM=l("Et voil\xE0, nous sommes pr\xEAts \xE0 entra\xEEner !"),ki=p(),Ve=a("h4"),cs=a("a"),Oa=a("span"),m(Et.$$.fragment),mM=p(),Ka=a("span"),fM=l("Entra\xEEnement"),Zi=p(),Dt=a("p"),MM=l("Pour lancer l\u2019entra\xEEnement, il suffit d\u2019ex\xE9cuter :"),Gi=p(),m(Ut.$$.fragment),$i=p(),te=a("p"),hM=l("L\u2019entra\xEEnement prendra environ 45 minutes en fonction de votre GPU ou de celui allou\xE9 par Google Colab. En fonction de votre GPU, il est possible que vous rencontriez une erreur CUDA "),er=a("code"),vM=l('"out-of-memory"'),yM=l(" lorsque vous commencez \xE0 entra\xEEner. Dans ce cas, vous pouvez r\xE9duire le "),sr=a("code"),JM=l("per_device_train_batch_size"),jM=l(" par incr\xE9ments d\u2019un facteur 2 et utiliser "),Tt=a("a"),tr=a("code"),bM=l("gradient_accumulation_steps"),EM=l(" pour compenser."),Ni=p(),Pt=a("p"),lr=a("strong"),UM=l("Sortie :"),Bi=p(),ds=a("table"),nr=a("thead"),B=a("tr"),Lt=a("th"),TM=l("Training Loss"),wM=p(),Ot=a("th"),_M=l("Epoch"),gM=p(),Kt=a("th"),IM=l("Step"),CM=p(),el=a("th"),qM=l("Validation Loss"),WM=p(),sl=a("th"),kM=l("Wer Ortho"),ZM=p(),tl=a("th"),GM=l("Wer"),$M=p(),ar=a("tbody"),z=a("tr"),ll=a("td"),NM=l("0.136"),BM=p(),nl=a("td"),zM=l("1.63"),AM=p(),al=a("td"),xM=l("500"),VM=p(),rl=a("td"),XM=l("0.1727"),RM=p(),ol=a("td"),SM=l("63.8972"),QM=p(),il=a("td"),YM=l("14.0661"),zi=p(),ms=a("p"),FM=l("Notre WER final est de 14,1 % ce qui n\u2019est pas mal pour sept heures de donn\xE9es d\u2019entra\xEEnement et seulement 500 \xE9tapes d\u2019entra\xEEnement ! Cela repr\xE9sente une am\xE9lioration de 112 % par rapport au mod\xE8le pr\xE9-entra\xEEn\xE9 ! Cela signifie que nous avons pris un mod\xE8le qui n\u2019avait aucune connaissance du dhivehi et que nous l\u2019avons "),rr=a("em"),HM=l("finetun\xE9"),DM=l(" pour reconna\xEEtre l\u2019dhivehi avec une pr\xE9cision ad\xE9quate en moins d\u2019une heure \u{1F92F}."),Ai=p(),fs=a("p"),PM=l("La grande question est de savoir comment cela se compare \xE0 d\u2019autres syst\xE8mes ASR. Pour cela, nous pouvons consulter le [classement autoevaluate] ("),wt=a("a"),LM=l("https://huggingface.co/spaces/autoevaluate/leaderboards?dataset=mozilla-foundation%2Fcommon_voice_13_0&only_verified=0&task=automatic-speech-recognition&config=dv&split=test&metric=wer"),OM=l(") qui cat\xE9gorise les mod\xE8les par langue et par jeu de donn\xE9es, et les classe ensuite en fonction de leur WER."),xi=p(),be=a("p"),KM=l("En regardant le classement, nous voyons que notre mod\xE8le entra\xEEn\xE9 pour 500 \xE9tapes bat de mani\xE8re convaincante le "),or=a("em"),eh=l("checkpoint"),sh=p(),_t=a("a"),th=l("Whisper Small"),lh=l(" pr\xE9-entra\xEEn\xE9 que nous avons \xE9valu\xE9 dans la section pr\xE9c\xE9dente. Bon travail \u{1F44F}"),Vi=p(),_=a("p"),nh=l("Nous voyons qu\u2019il y a quelques "),ir=a("em"),ah=l("checkpoints"),rh=l(" qui font mieux que celui que nous avons entra\xEEn\xE9. La beaut\xE9 du "),ur=a("em"),oh=l("Hub"),ih=l(" est qu\u2019il s\u2019agit d\u2019une plateforme "),pr=a("em"),uh=l("collaborative"),ph=l(". Si nous n\u2019avons pas le temps ou les ressources pour effectuer un entra\xEEnement plus long nous-m\xEAmes, nous pouvons charger un "),cr=a("em"),ch=l("checkpoint"),dh=l(` que quelqu\u2019un d\u2019autre dans la communaut\xE9 a entra\xEEn\xE9 et a eu la gentillesse de partager (en s\u2019assurant de le remercier pour cela !).
Vous pourrez charger ces `),dr=a("em"),mh=l("checkpoints"),fh=l(" exactement de la m\xEAme mani\xE8re que les pr\xE9-entra\xEEn\xE9s en utilisant la classe "),mr=a("code"),Mh=l("pipeline"),hh=l(" comme nous l\u2019avons fait pr\xE9c\xE9demment ! Ainsi, rien ne vous emp\xEAche de s\xE9lectionner le meilleur mod\xE8le du leaderboard pour l\u2019utiliser dans le cadre de votre t\xE2che !"),Xi=p(),Ee=a("p"),vh=l("Nous pouvons automatiquement soumettre notre "),fr=a("em"),yh=l("checkpoint"),Jh=l(" au classement lorsque nous envoyons les r\xE9sultats de l\u2019entra\xEEnement au "),Mr=a("em"),jh=l("Hub"),bh=l(". Nous devons simplement d\xE9finir les arguments de mot-cl\xE9 appropri\xE9s (kwargs). Vous pouvez modifier ces valeurs pour qu\u2019elles correspondent \xE0 votre jeu de donn\xE9es, \xE0 votre langue et au nom de votre mod\xE8le en cons\xE9quence :"),Ri=p(),m(gt.$$.fragment),Si=p(),Ue=a("p"),Eh=l("Les r\xE9sultats de l\u2019entra\xEEnement peuvent maintenant \xEAtre t\xE9l\xE9charg\xE9s vers le "),hr=a("em"),Uh=l("Hub"),Th=l(". Pour ce faire, ex\xE9cutez la commande "),vr=a("code"),wh=l("push_to_hub"),_h=l(" :"),Qi=p(),m(It.$$.fragment),Yi=p(),Te=a("p"),gh=l("Ceci sauvegardera les logs d\u2019entra\xEEnement et les poids des mod\xE8les sous "),yr=a("code"),Ih=l(`"votre-nom-d'utilisateur/le-nom-que-vous-avez-choisi"`),Ch=l(". Pour cet exemple, regardez le t\xE9l\xE9chargement \xE0 "),Jr=a("code"),qh=l("sanchit-gandhi/whisper-small-dv"),Wh=l("."),Fi=p(),le=a("p"),kh=l("Bien que le mod\xE8le "),jr=a("em"),Zh=l("finetun\xE9"),Gh=l(` donne des r\xE9sultats satisfaisants sur les donn\xE9es de test de Common Voice 13, il n\u2019est en aucun cas optimal.
Le but de ce guide est de d\xE9montrer comment `),br=a("em"),$h=l("finetuner"),Nh=l(" un mod\xE8le ASR en utilisant le "),Er=a("em"),Bh=l("Trainer"),zh=l(" pour la reconnaissance automatique de la parole multilingue."),Hi=p(),ne=a("p"),Ah=l("Si vous avez acc\xE8s \xE0 votre propre GPU ou si vous \xEAtes abonn\xE9 \xE0 un plan payant de Google Colab, vous pouvez augmenter "),Ur=a("code"),xh=l("max_pas"),Vh=l(" \xE0 4000 pas pour am\xE9liorer davantage le WER en entra\xEEnant plus de pas. Entra\xEEner 4000 pas prendra environ 3 \xE0 5 heures en fonction de votre GPU et donnera des r\xE9sultats WER inf\xE9rieurs d\u2019environ 3 % \xE0 l\u2019entra\xEEnement de 500 pas. Si vous d\xE9cidez d\u2019entra\xEEner sur 4000 pas, nous vous recommandons \xE9galement de changer le planificateur de taux d\u2019apprentissage pour un plan "),Tr=a("em"),Xh=l("lin\xE9aire"),Rh=l(" (set "),wr=a("code"),Sh=l('lr_scheduler_type="linear"'),Qh=l("), car cela permettra d\u2019augmenter les performances sur de longues p\xE9riodes d\u2019entra\xEEnement."),Di=p(),Z=a("p"),Yh=l("Les r\xE9sultats pourraient probablement \xEAtre am\xE9lior\xE9s en optimisant les hyperparam\xE8tres d\u2019entra\xEEnement, tels que "),_r=a("em"),Fh=l("learning rate"),Hh=l(" et "),gr=a("em"),Dh=l("dropout"),Ph=l(", et en utilisant un "),Ir=a("em"),Lh=l("checkpoint"),Oh=l(" pr\xE9-entra\xEEn\xE9 plus grand ("),Cr=a("code"),Kh=l("medium"),ev=l(" ou "),qr=a("code"),sv=l("large"),tv=l("). Nous laissons cet exercice au lecteur."),Pi=p(),Xe=a("h2"),Ms=a("a"),Wr=a("span"),m(Ct.$$.fragment),lv=p(),kr=a("span"),nv=l("Partager votre mod\xE8le"),Li=p(),g=a("p"),av=l("Vous pouvez maintenant partager ce mod\xE8le avec n\u2019importe qui en utilisant le lien sur le "),Zr=a("em"),rv=l("Hub"),ov=l(". Ils peuvent le charger avec l\u2019identifiant "),Gr=a("code"),iv=l(`"votre-nom-d'utilisateur/le-nom-que-vous-avez-choisi"`),uv=l(" directement dans l\u2019objet "),$r=a("code"),pv=l("pipeline()"),cv=l(". Par exemple, pour charger le "),Nr=a("em"),dv=l("checkpoint"),mv=p(),Br=a("em"),fv=l("finetun\xE9"),Mv=p(),qt=a("a"),hv=l("\u201Csanchit-gandhi/whisper-small-dv\u201D"),vv=l(" :"),Oi=p(),m(Wt.$$.fragment),Ki=p(),Re=a("h2"),hs=a("a"),zr=a("span"),m(kt.$$.fragment),yv=p(),Ar=a("span"),Jv=l("Conclusion"),eu=p(),j=a("p"),jv=l("Dans cette section, nous avons couvert un guide \xE9tape par \xE9tape sur le "),xr=a("em"),bv=l("finetuning"),Ev=l(" du mod\xE8le Whisper pour la reconnaissance vocale en utilisants \u{1F917} "),Vr=a("em"),Uv=l("Jeux de donn\xE9es"),Tv=l(", \u{1F917} "),Xr=a("em"),wv=l("Transformers"),_v=l(" et le "),Rr=a("em"),gv=l("Hub"),Iv=l(". Nous avons d\u2019abord charg\xE9 le sous-ensemble Dhivehi du jeu de donn\xE9es Common Voice 13 et l\u2019avons pr\xE9trait\xE9 en calculant des spectrogrammes log-mel et en tokenisant le texte. Nous avons ensuite d\xE9fini un assembleur de donn\xE9es, une m\xE9trique d\u2019\xE9valuation et des arguments d\u2019entra\xEEnement, avant d\u2019utiliser le "),Sr=a("em"),Cv=l("Trainer"),qv=l(" pour entra\xEEner et \xE9valuer notre mod\xE8le. Nous avons termin\xE9 en t\xE9l\xE9chargeant le mod\xE8le "),Qr=a("em"),Wv=l("finetun\xE9"),kv=l(" sur le "),Yr=a("em"),Zv=l("Hub"),Gv=l(", et nous avons montr\xE9 comment le partager et l\u2019utiliser avec la classe "),Fr=a("code"),$v=l("pipeline()"),Nv=l("."),su=p(),R=a("p"),Bv=l("Si vous avez suivi jusqu\u2019\xE0 ce point, vous devriez maintenant avoir un "),Hr=a("em"),zv=l("checkpoint"),Av=p(),Dr=a("em"),xv=l("finetun\xE9"),Vv=l(` pour la reconnaissance automatique de la parole, bien jou\xE9 ! \u{1F973}
Plus important encore, vous \xEAtes \xE9quip\xE9 de tous les outils n\xE9cessaires pour `),Pr=a("em"),Xv=l("finetuner"),Rv=l(" le mod\xE8le Whisper sur n\u2019importe quel jeu de donn\xE9es ou domaine de reconnaissance vocale. Alors, qu\u2019attendez-vous ? Choisissez l\u2019un des jeux de donn\xE9es couverts dans la section "),ul=a("a"),Sv=l("Choisir un jeu de donn\xE9es"),Qv=l(" ou s\xE9lectionnez un jeu de donn\xE9es de votre choix, et voyez si vous pouvez obtenir des performances de pointe ! Le classement vous attend\u2026"),this.h()},l(e){const i=Eb('[data-svelte="svelte-1phssyn"]',document.head);T=r(i,"META",{name:!0,content:!0}),i.forEach(t),C=c(e),F=r(e,"H1",{class:!0});var Zt=o(F);Se=r(Zt,"A",{id:!0,class:!0,href:!0});var Lr=o(Se);wl=r(Lr,"SPAN",{});var Yv=o(wl);f(gs.$$.fragment,Yv),Yv.forEach(t),Lr.forEach(t),ku=c(Zt),_l=r(Zt,"SPAN",{});var Fv=o(_l);Zu=n(Fv,"Comment finetuner un syst\xE8me de reconnaissance automatique de la parole avec l'API Trainer"),Fv.forEach(t),Zt.forEach(t),Kr=c(e),D=r(e,"P",{});var vs=o(D);Gu=n(vs,"Dans cette section, nous allons couvrir un guide \xE9tape par \xE9tape pour "),gl=r(vs,"EM",{});var Hv=o(gl);$u=n(Hv,"finetuner"),Hv.forEach(t),Nu=n(vs," Whisper pour la reconnaissance automatique de la parole sur le jeu de donn\xE9es Common Voice 13. Nous utiliserons la version \u201D"),Il=r(vs,"EM",{});var Dv=o(Il);Bu=n(Dv,"small"),Dv.forEach(t),zu=n(vs,"\u201D du mod\xE8le et un jeu de donn\xE9es relativement l\xE9ger, vous permettant d\u2019ex\xE9cuter le "),Cl=r(vs,"EM",{});var Pv=o(Cl);Au=n(Pv,"finetuning"),Pv.forEach(t),xu=n(vs," assez rapidement sur n\u2019importe quel GPU de plus de 16 Go avec de faibles besoins en espace disque, comme le GPU T4 de 16 Go fourni dans le volet gratuit de Google Colab."),vs.forEach(t),eo=c(e),$t=r(e,"P",{});var Lv=o($t);Vu=n(Lv,"Si vous disposez d\u2019un GPU plus petit ou si vous rencontrez des probl\xE8mes de m\xE9moire pendant l\u2019entra\xEEnement, vous pouvez suivre les suggestions fournies pour r\xE9duire l\u2019utilisation de la m\xE9moire. \xC0 l\u2019inverse, si vous avez acc\xE8s \xE0 un GPU plus puissant, vous pouvez modifier les arguments d\u2019entra\xEEnement pour maximiser votre capacit\xE9 de traitement. Ce guide est donc accessible quelles que soient les sp\xE9cifications de votre GPU !"),Lv.forEach(t),so=c(e),P=r(e,"P",{});var ys=o(P);Xu=n(ys,"De m\xEAme, ce guide porte plus pr\xE9cis\xE9ment sur le "),ql=r(ys,"EM",{});var Ov=o(ql);Ru=n(Ov,"finetuning"),Ov.forEach(t),Su=n(ys," sur la langue Dhivehi mais les \xE9tapes couvertes ici se g\xE9n\xE9ralisent \xE0 n\u2019importe quelle langue du jeu de donn\xE9es Common Voice, et plus g\xE9n\xE9ralement \xE0 n\u2019importe quel jeu de donn\xE9es d\u2019ASR disponible sur le "),Wl=r(ys,"EM",{});var Kv=o(Wl);Qu=n(Kv,"Hub"),Kv.forEach(t),Yu=n(ys,`.
Vous pouvez modifier le code pour passer rapidement \xE0 la langue de votre choix et `),kl=r(ys,"EM",{});var ey=o(kl);Fu=n(ey,"finetuner"),ey.forEach(t),Hu=n(ys," un mod\xE8le Whisper dans votre langue maternelle \u{1F30D}."),ys.forEach(t),to=c(e),Qe=r(e,"P",{});var lu=o(Qe);Du=n(lu,"Commen\xE7ons et donnons le coup d\u2019envoi de notre pipeline de "),Zl=r(lu,"EM",{});var sy=o(Zl);Pu=n(sy,"finetuning"),sy.forEach(t),Lu=n(lu," !"),lu.forEach(t),lo=c(e),qe=r(e,"H2",{class:!0});var nu=o(qe);Ye=r(nu,"A",{id:!0,class:!0,href:!0});var ty=o(Ye);Gl=r(ty,"SPAN",{});var ly=o(Gl);f(Is.$$.fragment,ly),ly.forEach(t),ty.forEach(t),Ou=c(nu),$l=r(nu,"SPAN",{});var ny=o($l);Ku=n(ny,"Pr\xE9parer l'environnement"),ny.forEach(t),nu.forEach(t),no=c(e),L=r(e,"P",{});var Js=o(L);ep=n(Js,"Nous vous conseillons vivement de t\xE9l\xE9charger les "),Nl=r(Js,"EM",{});var ay=o(Nl);sp=n(ay,"checkpoints"),ay.forEach(t),tp=n(Js," du mod\xE8le directement sur le "),Cs=r(Js,"A",{href:!0,rel:!0});var ry=o(Cs);Bl=r(ry,"EM",{});var oy=o(Bl);lp=n(oy,"Hub"),oy.forEach(t),ry.forEach(t),np=n(Js,`.
Le `),zl=r(Js,"EM",{});var iy=o(zl);ap=n(iy,"Hub"),iy.forEach(t),rp=n(Js," offre les avantages suivants :"),Js.forEach(t),ao=c(e),O=r(e,"UL",{});var js=o(O);qs=r(js,"LI",{});var au=o(qs);op=n(au,"Un contr\xF4le de version int\xE9gr\xE9 : vous pouvez \xEAtre s\xFBr qu\u2019aucun "),Al=r(au,"EM",{});var uy=o(Al);ip=n(uy,"checkpoint"),uy.forEach(t),up=n(au," n\u2019est perdu pendant l\u2019entra\xEEnement."),au.forEach(t),pp=c(js),xl=r(js,"LI",{});var py=o(xl);cp=n(py,"Tensorboard : suivi des mesures importantes au cours de l\u2019entra\xEEnement."),py.forEach(t),dp=c(js),Vl=r(js,"LI",{});var cy=o(Vl);mp=n(cy,"Cartes de mod\xE8le : documenter ce que fait un mod\xE8le et ses cas d\u2019utilisation pr\xE9vus."),cy.forEach(t),fp=c(js),Xl=r(js,"LI",{});var dy=o(Xl);Mp=n(dy,"Communaut\xE9 : un moyen facile de partager et de collaborer avec la communaut\xE9 ! \u{1F917}"),dy.forEach(t),js.forEach(t),ro=c(e),w=r(e,"P",{});var S=o(w);hp=n(S,"Lier le "),Rl=r(S,"EM",{});var my=o(Rl);vp=n(my,"notebook"),my.forEach(t),yp=n(S," au "),Sl=r(S,"EM",{});var fy=o(Sl);Jp=n(fy,"Hub"),fy.forEach(t),jp=n(S," est tr\xE8s simple, il suffit d\u2019entrer votre "),Ql=r(S,"EM",{});var My=o(Ql);bp=n(My,"token"),My.forEach(t),Ep=n(S," d\u2019authentification au "),Yl=r(S,"EM",{});var hy=o(Yl);Up=n(hy,"Hub"),hy.forEach(t),Tp=n(S,` lorsque l\u2019on vous y invite.
Votre `),Fl=r(S,"EM",{});var vy=o(Fl);wp=n(vy,"token"),vy.forEach(t),_p=n(S," d\u2019authentification est trouvable "),Ws=r(S,"A",{href:!0,rel:!0});var yy=o(Ws);gp=n(yy,"ici"),yy.forEach(t),Ip=n(S,"."),S.forEach(t),oo=c(e),f(ks.$$.fragment,e),io=c(e),Nt=r(e,"P",{});var Jy=o(Nt);Hl=r(Jy,"STRONG",{});var jy=o(Hl);Cp=n(jy,"Sortie :"),jy.forEach(t),Jy.forEach(t),uo=c(e),f(Zs.$$.fragment,e),po=c(e),We=r(e,"H2",{class:!0});var ru=o(We);Fe=r(ru,"A",{id:!0,class:!0,href:!0});var by=o(Fe);Dl=r(by,"SPAN",{});var Ey=o(Dl);f(Gs.$$.fragment,Ey),Ey.forEach(t),by.forEach(t),qp=c(ru),Pl=r(ru,"SPAN",{});var Uy=o(Pl);Wp=n(Uy,"Charger le jeu de donn\xE9es"),Uy.forEach(t),ru.forEach(t),co=c(e),ke=r(e,"P",{});var Or=o(ke);$s=r(Or,"A",{href:!0,rel:!0});var Ty=o($s);kp=n(Ty,"Common Voice 13"),Ty.forEach(t),Zp=n(Or," contient environ dix heures de donn\xE9es Dhivehi \xE9tiquet\xE9es, dont trois sont des donn\xE9es de test. Il s\u2019agit de tr\xE8s peu de donn\xE9es pour un "),Ll=r(Or,"EM",{});var wy=o(Ll);Gp=n(wy,"finetuning"),wy.forEach(t),$p=n(Or,", nous nous appuierons donc sur la connaissance multilingue acquise par Whisper pendant le pr\xE9-entra\xEEnement."),Or.forEach(t),mo=c(e),A=r(e,"P",{});var we=o(A);Np=n(we,"En utilisant les \u{1F917} "),Ol=r(we,"EM",{});var _y=o(Ol);Bp=n(_y,"Datasets"),_y.forEach(t),zp=n(we,", le t\xE9l\xE9chargement et la pr\xE9paration des donn\xE9es sont extr\xEAmement simples. Nous pouvons t\xE9l\xE9charger et pr\xE9parer les ensembles de Common Voice 13 en une seule ligne de code. Puisque le Dhivehi est tr\xE8s pauvre en ressources, nous combinerons les splits "),Kl=r(we,"CODE",{});var gy=o(Kl);Ap=n(gy,"train"),gy.forEach(t),xp=n(we," et "),en=r(we,"CODE",{});var Iy=o(en);Vp=n(Iy,"validation"),Iy.forEach(t),Xp=n(we," pour obtenir environ sept heures de donn\xE9es d\u2019entra\xEEnement. Nous utiliserons les trois heures de donn\xE9es "),sn=r(we,"CODE",{});var Cy=o(sn);Rp=n(Cy,"test"),Cy.forEach(t),Sp=n(we," comme notre ensemble de test :"),we.forEach(t),fo=c(e),f(Ns.$$.fragment,e),Mo=c(e),Bt=r(e,"P",{});var qy=o(Bt);tn=r(qy,"STRONG",{});var Wy=o(tn);Qp=n(Wy,"Sortie :"),Wy.forEach(t),qy.forEach(t),ho=c(e),f(Bs.$$.fragment,e),vo=c(e),f(He.$$.fragment,e),yo=c(e),q=r(e,"P",{});var ae=o(q);Yp=n(ae,"La plupart des jeux de donn\xE9es d\u2019ASR ne fournissent que des \xE9chantillons audio en entr\xE9e ("),ln=r(ae,"CODE",{});var ky=o(ln);Fp=n(ky,"audio"),ky.forEach(t),Hp=n(ae,") et le texte transcrit correspondant ("),nn=r(ae,"CODE",{});var Zy=o(nn);Dp=n(Zy,"sentence"),Zy.forEach(t),Pp=n(ae,`).
Common Voice contient des m\xE9tadonn\xE9es suppl\xE9mentaires, telles que `),an=r(ae,"CODE",{});var Gy=o(an);Lp=n(Gy,"accent"),Gy.forEach(t),Op=n(ae," et "),rn=r(ae,"CODE",{});var $y=o(rn);Kp=n($y,"locale"),$y.forEach(t),ec=n(ae,`, que nous pouvons ignorer pour l\u2019ASR.
En gardant le `),on=r(ae,"EM",{});var Ny=o(on);sc=n(Ny,"notebook"),Ny.forEach(t),tc=n(ae," aussi g\xE9n\xE9ral que possible, nous ne consid\xE9rons que l\u2019audio d\u2019entr\xE9e et le texte transcrit en \xE9cartant les informations de m\xE9tadonn\xE9es suppl\xE9mentaires :"),ae.forEach(t),Jo=c(e),f(zs.$$.fragment,e),jo=c(e),Ze=r(e,"H2",{class:!0});var ou=o(Ze);De=r(ou,"A",{id:!0,class:!0,href:!0});var By=o(De);un=r(By,"SPAN",{});var zy=o(un);f(As.$$.fragment,zy),zy.forEach(t),By.forEach(t),lc=c(ou),pn=r(ou,"SPAN",{});var Ay=o(pn);nc=n(Ay,"Extracteur de caract\xE9ristiques, tokeniser et processeur"),Ay.forEach(t),ou.forEach(t),bo=c(e),zt=r(e,"P",{});var xy=o(zt);ac=n(xy,"Le pipeline d\u2019ASR peut \xEAtre d\xE9compos\xE9 en trois \xE9tapes :"),xy.forEach(t),Eo=c(e),ce=r(e,"OL",{});var pl=o(ce);cn=r(pl,"LI",{});var Vy=o(cn);rc=n(Vy,"L\u2019extracteur de caract\xE9ristiques qui pr\xE9-traite les entr\xE9es audio brutes en spectrogrammes log-m\xE9l."),Vy.forEach(t),oc=c(pl),dn=r(pl,"LI",{});var Xy=o(dn);ic=n(Xy,"Le mod\xE8le qui effectue l\u2019association s\xE9quence-s\xE9quence"),Xy.forEach(t),uc=c(pl),xs=r(pl,"LI",{});var iu=o(xs);pc=n(iu,"Le tokenizer qui post-traite les "),mn=r(iu,"EM",{});var Ry=o(mn);cc=n(Ry,"tokens"),Ry.forEach(t),dc=n(iu," pr\xE9dits en texte."),iu.forEach(t),pl.forEach(t),Uo=c(e),W=r(e,"P",{});var re=o(W);mc=n(re,"Dans \u{1F917} "),fn=r(re,"EM",{});var Sy=o(fn);fc=n(Sy,"Transformers"),Sy.forEach(t),Mc=n(re,", le mod\xE8le Whisper est associ\xE9 \xE0 un extracteur de caract\xE9ristiques et \xE0 un tokenizer, appel\xE9s respectivement "),Vs=r(re,"A",{href:!0,rel:!0});var Qy=o(Vs);hc=n(Qy,"WhisperFeatureExtractor"),Qy.forEach(t),vc=n(re," et "),Xs=r(re,"A",{href:!0,rel:!0});var Yy=o(Xs);yc=n(Yy,"WhisperTokenizer"),Yy.forEach(t),Jc=n(re,`.
Pour nous simplifier la vie, ces deux objets sont regroup\xE9s dans une seule classe, appel\xE9e `),Rs=r(re,"A",{href:!0,rel:!0});var Fy=o(Rs);jc=n(Fy,"WhisperProcessor"),Fy.forEach(t),bc=n(re,`.
Nous pouvons appeler le WhisperProcessor pour effectuer \xE0 la fois le pr\xE9traitement audio et le post-traitement des `),Mn=r(re,"EM",{});var Hy=o(Mn);Ec=n(Hy,"tokens"),Hy.forEach(t),Uc=n(re," de texte. Ce faisant, nous n\u2019avons besoin de suivre que deux objets pendant l\u2019entra\xEEningment : le processeur et le mod\xE8le."),re.forEach(t),To=c(e),b=r(e,"P",{});var G=o(b);Tc=n(G,"Lors d\u2019un "),hn=r(G,"EM",{});var Dy=o(hn);wc=n(Dy,"finetun\xE9"),Dy.forEach(t),_c=n(G," multilingue, nous devons d\xE9finir la "),vn=r(G,"CODE",{});var Py=o(vn);gc=n(Py,'"language"'),Py.forEach(t),Ic=n(G," et la "),yn=r(G,"CODE",{});var Ly=o(yn);Cc=n(Ly,'"task"'),Ly.forEach(t),qc=n(G,` lors de l\u2019instanciation du processeur.
La `),Jn=r(G,"CODE",{});var Oy=o(Jn);Wc=n(Oy,'"language"'),Oy.forEach(t),kc=n(G," doit \xEAtre fix\xE9e \xE0 la langue audio source, et la t\xE2che \xE0 "),jn=r(G,"CODE",{});var Ky=o(jn);Zc=n(Ky,'"translate"'),Ky.forEach(t),Gc=n(G," pour la reconnaissance vocale ou \xE0 "),bn=r(G,"CODE",{});var eJ=o(bn);$c=n(eJ,'"translate"'),eJ.forEach(t),Nc=n(G," pour la traduction vocale. Ces arguments modifient le comportement du "),En=r(G,"EM",{});var sJ=o(En);Bc=n(sJ,"tokens"),sJ.forEach(t),zc=n(G,", et doivent \xEAtre d\xE9finis correctement pour s\u2019assurer que les \xE9tiquettes cibles sont encod\xE9es correctement."),G.forEach(t),wo=c(e),At=r(e,"P",{});var tJ=o(At);Ac=n(tJ,"Nous pouvons voir toutes les langues possibles support\xE9es par Whisper en important la liste des langues :"),tJ.forEach(t),_o=c(e),f(Ss.$$.fragment,e),go=c(e),de=r(e,"P",{});var cl=o(de);xc=n(cl,`Si vous parcourez cette liste, vous remarquerez que de nombreuses langues sont pr\xE9sentes, mais que le dhivehi est l\u2019une des rares \xE0 ne pas l\u2019\xEAtre !
Cela signifie que Whisper n\u2019a pas \xE9t\xE9 pr\xE9-entra\xEEn\xE9 sur le dhivehi. Cependant, cela ne signifie pas que nous ne pouvons pas `),Un=r(cl,"EM",{});var lJ=o(Un);Vc=n(lJ,"finetuner"),lJ.forEach(t),Xc=n(cl,` Whisper sur cette langue.
En faisant cela, nous allons entra\xEEner Whisper dans une nouvelle langue, une langue non support\xE9e par le `),Tn=r(cl,"EM",{});var nJ=o(Tn);Rc=n(nJ,"checkpoint"),nJ.forEach(t),Sc=n(cl," pr\xE9-entra\xEEn\xE9. C\u2019est plut\xF4t cool, non ?"),cl.forEach(t),Io=c(e),Pe=r(e,"P",{});var uu=o(Pe);Qc=n(uu,"Lorsque vous le "),wn=r(uu,"EM",{});var aJ=o(wn);Yc=n(aJ,"finetunez"),aJ.forEach(t),Fc=n(uu," sur une nouvelle langue, Whisper fait un bon travail en tirant parti de sa connaissance des 96 autres langues sur lesquelles il a \xE9t\xE9 pr\xE9-entra\xEEn\xE9. En g\xE9n\xE9ral, toutes les langues modernes seront linguistiquement similaires \xE0 au moins l\u2019une des 96 langues que Whisper conna\xEEt d\xE9j\xE0, nous nous inscrivons donc dans ce paradigme de repr\xE9sentation des connaissances interlinguistiques."),uu.forEach(t),Co=c(e),me=r(e,"P",{});var dl=o(me);Hc=n(dl,"Ce que nous devons faire pour cette nouvelle langue, est de trouver la langue "),_n=r(dl,"STRONG",{});var rJ=o(_n);Dc=n(rJ,"la plus similaire"),rJ.forEach(t),Pc=n(dl,` sur laquelle Whisper a \xE9t\xE9 pr\xE9-entra\xEEn\xE9. L\u2019article de Wikip\xE9dia sur le dhivehi indique que cette langue est \xE9troitement li\xE9e \xE0 la langue cinghalaise du Sri Lanka.
Si nous v\xE9rifions \xE0 nouveau les codes de langue, nous pouvons voir que le cinghalais est pr\xE9sent dans le jeu de langues de Whisper, nous pouvons donc en toute s\xE9curit\xE9 mettre notre argument de langue \xE0 `),gn=r(dl,"CODE",{});var oJ=o(gn);Lc=n(oJ,'"sinhalese"'),oJ.forEach(t),Oc=n(dl,"."),dl.forEach(t),qo=c(e),K=r(e,"P",{});var bs=o(K);Kc=n(bs,"Nous allons charger notre processeur \xE0 partir du "),In=r(bs,"EM",{});var iJ=o(In);ed=n(iJ,"checkpoint"),iJ.forEach(t),sd=n(bs," pr\xE9-entra\xEEn\xE9, en fixant la langue \xE0 "),Cn=r(bs,"CODE",{});var uJ=o(Cn);td=n(uJ,'"sinhalese"'),uJ.forEach(t),ld=n(bs," et la t\xE2che \xE0 "),qn=r(bs,"CODE",{});var pJ=o(qn);nd=n(pJ,'"transcribe"'),pJ.forEach(t),ad=n(bs," comme expliqu\xE9 ci-dessus :"),bs.forEach(t),Wo=c(e),f(Qs.$$.fragment,e),ko=c(e),x=r(e,"P",{});var _e=o(x);rd=n(_e,"Il est utile de rappeler que dans la plupart des cas, vous constaterez que la langue sur laquelle vous souhaitez effectuer un "),Wn=r(_e,"EM",{});var cJ=o(Wn);od=n(cJ,"finetuning"),cJ.forEach(t),id=n(_e," se trouve dans l\u2019ensemble des langues de pr\xE9-entra\xEEnement, auquel cas vous pouvez simplement d\xE9finir cette langue directement comme langue audio source ! Notez que ces deux arguments doivent \xEAtre omis pour le "),kn=r(_e,"EM",{});var dJ=o(kn);ud=n(dJ,"finetuning"),dJ.forEach(t),pd=n(_e," en anglais o\xF9 il n\u2019y a qu\u2019une seule option pour la langue ("),Zn=r(_e,"CODE",{});var mJ=o(Zn);cd=n(mJ,'"English"'),mJ.forEach(t),dd=n(_e,") et la t\xE2che ("),Gn=r(_e,"CODE",{});var fJ=o(Gn);md=n(fJ,'"transcribe"'),fJ.forEach(t),fd=n(_e,")."),_e.forEach(t),Zo=c(e),Ge=r(e,"H2",{class:!0});var pu=o(Ge);Le=r(pu,"A",{id:!0,class:!0,href:!0});var MJ=o(Le);$n=r(MJ,"SPAN",{});var hJ=o($n);f(Ys.$$.fragment,hJ),hJ.forEach(t),MJ.forEach(t),Md=c(pu),Nn=r(pu,"SPAN",{});var vJ=o(Nn);hd=n(vJ,"Pr\xE9traitement des donn\xE9es"),vJ.forEach(t),pu.forEach(t),Go=c(e),Oe=r(e,"P",{});var cu=o(Oe);vd=n(cu,"Jetons un coup d\u2019oeil aux caract\xE9ristiques du jeu de donn\xE9es. Portez une attention particuli\xE8re \xE0 la colonne "),Bn=r(cu,"CODE",{});var yJ=o(Bn);yd=n(yJ,'"audio"'),yJ.forEach(t),Jd=n(cu,", elle d\xE9taille le taux d\u2019\xE9chantillonnage de nos entr\xE9es audio :"),cu.forEach(t),$o=c(e),f(Fs.$$.fragment,e),No=c(e),xt=r(e,"P",{});var JJ=o(xt);zn=r(JJ,"STRONG",{});var jJ=o(zn);jd=n(jJ,"Sortie :"),jJ.forEach(t),JJ.forEach(t),Bo=c(e),f(Hs.$$.fragment,e),zo=c(e),Vt=r(e,"P",{});var bJ=o(Vt);bd=n(bJ,"Puisque notre audio d\u2019entr\xE9e est \xE9chantillonn\xE9 \xE0 48kHz, nous devons le sous-\xE9chantillonner \xE0 16kHz avant de le passer \xE0 l\u2019extracteur de caract\xE9ristiques de Whisper qui est la fr\xE9quence d\u2019\xE9chantillonnage attendue par le mod\xE8le."),bJ.forEach(t),Ao=c(e),Ke=r(e,"P",{});var du=o(Ke);Ed=n(du,"Nous allons r\xE9gler les entr\xE9es audio \xE0 la bonne fr\xE9quence d\u2019\xE9chantillonnage en utilisant la m\xE9thode "),Ds=r(du,"A",{href:!0,rel:!0});var EJ=o(Ds);An=r(EJ,"CODE",{});var UJ=o(An);Ud=n(UJ,"cast_column"),UJ.forEach(t),EJ.forEach(t),Td=n(du," du jeu de donn\xE9es. Cette op\xE9ration ne modifie pas l\u2019audio sur place, mais signale aux jeux de donn\xE9es de r\xE9\xE9chantillonner les \xE9chantillons audio \xE0 la vol\xE9e lorsqu\u2019ils sont charg\xE9s :"),du.forEach(t),xo=c(e),f(Ps.$$.fragment,e),Vo=c(e),Xt=r(e,"P",{});var TJ=o(Xt);wd=n(TJ,"Nous pouvons maintenant \xE9crire une fonction pour pr\xE9parer nos donn\xE9es pour le mod\xE8le :"),TJ.forEach(t),Xo=c(e),fe=r(e,"OL",{});var ml=o(fe);$e=r(ml,"LI",{});var fl=o($e);_d=n(fl,"Nous chargeons et r\xE9\xE9chantillonnons les donn\xE9es audio \xE9chantillon par \xE9chantillon en appelant "),xn=r(fl,"CODE",{});var wJ=o(xn);gd=n(wJ,'sample["audio"]'),wJ.forEach(t),Id=n(fl,". Comme expliqu\xE9 ci-dessus, \u{1F917} "),Vn=r(fl,"EM",{});var _J=o(Vn);Cd=n(_J,"Datasets"),_J.forEach(t),qd=n(fl," effectue toutes les op\xE9rations de r\xE9\xE9chantillonnage n\xE9cessaires \xE0 la vol\xE9e."),fl.forEach(t),Wd=c(ml),Xn=r(ml,"LI",{});var gJ=o(Xn);kd=n(gJ,"Nous utilisons l\u2019extracteur de caract\xE9ristiques pour calculer les caract\xE9ristiques d\u2019entr\xE9e du spectrogramme log-mel \xE0 partir de notre tableau audio unidimensionnel."),gJ.forEach(t),Zd=c(ml),Ls=r(ml,"LI",{});var mu=o(Ls);Gd=n(mu,"Nous encodons les transcriptions en identifiants d\u2019\xE9tiquettes \xE0 l\u2019aide d\u2019un "),Rn=r(mu,"EM",{});var IJ=o(Rn);$d=n(IJ,"tokenizer"),IJ.forEach(t),Nd=n(mu,"."),mu.forEach(t),ml.forEach(t),Ro=c(e),f(Os.$$.fragment,e),So=c(e),ee=r(e,"P",{});var Es=o(ee);Bd=n(Es,"Nous pouvons appliquer la fonction de pr\xE9paration des donn\xE9es \xE0 tous nos exemples d\u2019entra\xEEnement en utilisant la m\xE9thode "),Sn=r(Es,"CODE",{});var CJ=o(Sn);zd=n(CJ,".map"),CJ.forEach(t),Ad=n(Es," de \u{1F917} "),Qn=r(Es,"EM",{});var qJ=o(Qn);xd=n(qJ,"Datasets"),qJ.forEach(t),Vd=n(Es,". Nous allons supprimer les colonnes des donn\xE9es d\u2019entra\xEEnement brutes (l\u2019audio et le texte), en ne laissant que les colonnes renvoy\xE9es par la fonction "),Yn=r(Es,"CODE",{});var WJ=o(Yn);Xd=n(WJ,"prepare_dataset"),WJ.forEach(t),Rd=n(Es," :"),Es.forEach(t),Qo=c(e),f(Ks.$$.fragment,e),Yo=c(e),Me=r(e,"P",{});var Ml=o(Me);Sd=n(Ml,"Enfin, nous filtrons toutes les donn\xE9es d\u2019entra\xEEnement contenant des \xE9chantillons audio de plus de 30 secondes. Ces \xE9chantillons seraient sinon tronqu\xE9s par l\u2019extracteur de caract\xE9ristiques de Whisper, ce qui pourrait affecter la stabilit\xE9 de l\u2019entra\xEEnement. Nous d\xE9finissons une fonction qui renvoie "),Fn=r(Ml,"CODE",{});var kJ=o(Fn);Qd=n(kJ,"True"),kJ.forEach(t),Yd=n(Ml," pour les \xE9chantillons de moins de 30 secondes, et "),Hn=r(Ml,"CODE",{});var ZJ=o(Hn);Fd=n(ZJ,"False"),ZJ.forEach(t),Hd=n(Ml," pour ceux qui sont plus longs :"),Ml.forEach(t),Fo=c(e),f(et.$$.fragment,e),Ho=c(e),he=r(e,"P",{});var hl=o(he);Dd=n(hl,"Nous appliquons notre fonction de filtrage \xE0 tous les \xE9chantillons de notre jeu de donn\xE9es d\u2019entra\xEEnement par le biais de la m\xE9thode "),Dn=r(hl,"CODE",{});var GJ=o(Dn);Pd=n(GJ,".filter"),GJ.forEach(t),Ld=n(hl," de \u{1F917} "),Pn=r(hl,"EM",{});var $J=o(Pn);Od=n($J,"Datasets"),$J.forEach(t),Kd=n(hl," :"),hl.forEach(t),Do=c(e),f(st.$$.fragment,e),Po=c(e),Rt=r(e,"P",{});var NJ=o(Rt);em=n(NJ,"V\xE9rifions la quantit\xE9 de donn\xE9es d\u2019entra\xEEnement que nous avons supprim\xE9e gr\xE2ce \xE0 cette \xE9tape de filtrage :"),NJ.forEach(t),Lo=c(e),f(tt.$$.fragment,e),Oo=c(e),St=r(e,"P",{});var BJ=o(St);Ln=r(BJ,"STRONG",{});var zJ=o(Ln);sm=n(zJ,"Sortie :"),zJ.forEach(t),BJ.forEach(t),Ko=c(e),f(lt.$$.fragment,e),ei=c(e),es=r(e,"P",{});var fu=o(es);tm=n(fu,`Dans ce cas, nous avons en fait le m\xEAme nombre d\u2019\xE9chantillons que pr\xE9c\xE9demment, donc il n\u2019y a pas d\u2019\xE9chantillons de plus de 30s.
Cela pourrait ne pas \xEAtre le cas si vous changez de langue, il est donc pr\xE9f\xE9rable de garder cette \xE9tape de filtrage en place pour plus de robustesse. Nos donn\xE9es sont maintenant pr\xEAtes \xE0 \xEAtre entra\xEEn\xE9es ! Continuons et regardons comment nous pouvons utiliser ces donn\xE9es pour le `),On=r(fu,"EM",{});var AJ=o(On);lm=n(AJ,"finetuning"),AJ.forEach(t),nm=n(fu,"."),fu.forEach(t),si=c(e),Ne=r(e,"H2",{class:!0});var Mu=o(Ne);ss=r(Mu,"A",{id:!0,class:!0,href:!0});var xJ=o(ss);Kn=r(xJ,"SPAN",{});var VJ=o(Kn);f(nt.$$.fragment,VJ),VJ.forEach(t),xJ.forEach(t),am=c(Mu),ea=r(Mu,"SPAN",{});var XJ=o(ea);rm=n(XJ,"Entra\xEEnement et \xE9valuation"),XJ.forEach(t),Mu.forEach(t),ti=c(e),ts=r(e,"P",{});var hu=o(ts);om=n(hu,`Maintenant que nous avons pr\xE9par\xE9 nos donn\xE9es, nous sommes pr\xEAts \xE0 plonger dans le pipeline d\u2019entra\xEEnement.
`),at=r(hu,"A",{href:!0,rel:!0});var RJ=o(at);im=n(RJ,"Trainer"),RJ.forEach(t),um=n(hu,`
va faire le gros du travail \xE0 notre place. Tout ce que nous avons \xE0 faire est de :`),hu.forEach(t),li=c(e),se=r(e,"UL",{});var Us=o(se);sa=r(Us,"LI",{});var SJ=o(sa);ta=r(SJ,"P",{});var QJ=o(ta);pm=n(QJ,"D\xE9finir un assembleur de donn\xE9es qui prend nos donn\xE9es pr\xE9trait\xE9es et pr\xE9pare des tenseurs PyTorch adapt\xE9s au mod\xE8le."),QJ.forEach(t),SJ.forEach(t),cm=c(Us),la=r(Us,"LI",{});var YJ=o(la);rt=r(YJ,"P",{});var vu=o(rt);dm=n(vu,"M\xE9triques d\u2019\xE9valuation : lors de l\u2019\xE9valuation, nous voulons \xE9valuer le mod\xE8le en utilisant la m\xE9trique du taux d\u2019erreur au niveau du mot (WER). Nous devons d\xE9finir une fonction "),na=r(vu,"CODE",{});var FJ=o(na);mm=n(FJ,"compute_metrics"),FJ.forEach(t),fm=n(vu," qui g\xE8re ce calcul."),vu.forEach(t),YJ.forEach(t),Mm=c(Us),aa=r(Us,"LI",{});var HJ=o(aa);ot=r(HJ,"P",{});var yu=o(ot);hm=n(yu,"Charger un "),ra=r(yu,"EM",{});var DJ=o(ra);vm=n(DJ,"checkpoint"),DJ.forEach(t),ym=n(yu," pr\xE9-entra\xEEn\xE9 et le configurer correctement pour l\u2019entra\xEEnement."),yu.forEach(t),HJ.forEach(t),Jm=c(Us),oa=r(Us,"LI",{});var PJ=o(oa);ia=r(PJ,"P",{});var LJ=o(ia);jm=n(LJ,"D\xE9finir les arguments d\u2019entra\xEEnement : ils seront utilis\xE9s par le Trainer pour construire le plannificateur d\u2019entra\xEEnement."),LJ.forEach(t),PJ.forEach(t),Us.forEach(t),ni=c(e),ls=r(e,"P",{});var Ju=o(ls);bm=n(Ju,"Une fois le mod\xE8le "),ua=r(Ju,"EM",{});var OJ=o(ua);Em=n(OJ,"finetun\xE9"),OJ.forEach(t),Um=n(Ju,", nous l\u2019\xE9valuerons sur les donn\xE9es de test pour v\xE9rifier que nous l\u2019avons correctement entra\xEEn\xE9 \xE0 transcrire la parole en Dhivehi."),Ju.forEach(t),ai=c(e),Be=r(e,"H3",{class:!0});var ju=o(Be);ns=r(ju,"A",{id:!0,class:!0,href:!0});var KJ=o(ns);pa=r(KJ,"SPAN",{});var ej=o(pa);f(it.$$.fragment,ej),ej.forEach(t),KJ.forEach(t),Tm=c(ju),ca=r(ju,"SPAN",{});var sj=o(ca);wm=n(sj,"D\xE9finir un assembleur de donn\xE9es"),sj.forEach(t),ju.forEach(t),ri=c(e),V=r(e,"P",{});var ge=o(V);_m=n(ge,"L\u2019assembleur de donn\xE9es pour un mod\xE8le audio s\xE9quence-\xE0-s\xE9quence est unique dans le sens o\xF9 il traite les "),da=r(ge,"CODE",{});var tj=o(da);gm=n(tj,"input_features"),tj.forEach(t),Im=n(ge," et les "),ma=r(ge,"CODE",{});var lj=o(ma);Cm=n(lj,"labels"),lj.forEach(t),qm=n(ge," ind\xE9pendamment : les "),fa=r(ge,"CODE",{});var nj=o(fa);Wm=n(nj,"input_features"),nj.forEach(t),km=n(ge," doivent \xEAtre trait\xE9es par l\u2019extracteur de caract\xE9ristiques et les "),Ma=r(ge,"CODE",{});var aj=o(Ma);Zm=n(aj,"labels"),aj.forEach(t),Gm=n(ge," par le tokenizer."),ge.forEach(t),oi=c(e),X=r(e,"P",{});var Ie=o(X);$m=n(Ie,"Les "),ha=r(Ie,"CODE",{});var rj=o(ha);Nm=n(rj,"input_features"),rj.forEach(t),Bm=n(Ie," sont d\xE9j\xE0 rembourr\xE9es \xE0 30s et converties en un spectrogramme log-Mel de dimension fixe, donc tout ce que nous avons \xE0 faire est de les convertir en tenseurs PyTorch batch\xE9s. Nous le faisons en utilisant la m\xE9thode "),va=r(Ie,"CODE",{});var oj=o(va);zm=n(oj,".pad"),oj.forEach(t),Am=n(Ie," de l\u2019extracteur de caract\xE9ristiques avec "),ya=r(Ie,"CODE",{});var ij=o(ya);xm=n(ij,"return_tensors=pt"),ij.forEach(t),Vm=n(Ie,". Notez qu\u2019aucun rembourrage suppl\xE9mentaire n\u2019est appliqu\xE9 ici puisque les entr\xE9es sont de dimension fixe, les "),Ja=r(Ie,"CODE",{});var uj=o(Ja);Xm=n(uj,"input_features"),uj.forEach(t),Rm=n(Ie," sont simplement converties en tenseurs PyTorch."),Ie.forEach(t),ii=c(e),E=r(e,"P",{});var $=o(E);Sm=n($,"D\u2019un autre c\xF4t\xE9, les "),ja=r($,"CODE",{});var pj=o(ja);Qm=n(pj,"labels"),pj.forEach(t),Ym=n($," ne sont pas rembourr\xE9s. Les s\xE9quences sont d\u2019abord remplac\xE9es par la longueur maximale du batch \xE0 l\u2019aide de la m\xE9thode "),ba=r($,"CODE",{});var cj=o(ba);Fm=n(cj,".pad"),cj.forEach(t),Hm=n($," du "),Ea=r($,"EM",{});var dj=o(Ea);Dm=n(dj,"tokenizer"),dj.forEach(t),Pm=n($,". Les "),Ua=r($,"EM",{});var mj=o(Ua);Lm=n(mj,"tokens"),mj.forEach(t),Om=n($," de remplissage sont ensuite remplac\xE9s par "),Ta=r($,"CODE",{});var fj=o(Ta);Km=n(fj,"-100"),fj.forEach(t),ef=n($," de sorte que ces tokens ne sont "),wa=r($,"STRONG",{});var Mj=o(wa);sf=n(Mj,"pas"),Mj.forEach(t),tf=n($," pris en compte lors du calcul de la perte. Nous coupons ensuite le d\xE9but du "),_a=r($,"EM",{});var hj=o(_a);lf=n(hj,"token"),hj.forEach(t),nf=n($," de transcription du d\xE9but de la s\xE9quence d\u2019\xE9tiquettes comme nous l\u2019ajouterons plus tard pendant l\u2019entra\xEEnement."),$.forEach(t),ui=c(e),ve=r(e,"P",{});var vl=o(ve);af=n(vl,"Nous pouvons utiliser le "),ga=r(vl,"CODE",{});var vj=o(ga);rf=n(vj,"WhisperProcessor"),vj.forEach(t),of=n(vl," que nous avons d\xE9fini plus t\xF4t pour effectuer \xE0 la fois les op\xE9rations de l\u2019extracteur de caract\xE9ristiques et du "),Ia=r(vl,"EM",{});var yj=o(Ia);uf=n(yj,"tokenizer"),yj.forEach(t),pf=n(vl," :"),vl.forEach(t),pi=c(e),f(ut.$$.fragment,e),ci=c(e),Qt=r(e,"P",{});var Jj=o(Qt);cf=n(Jj,"Nous pouvons maintenant initialiser l\u2019assembleur de donn\xE9es que nous venons de d\xE9finir :"),Jj.forEach(t),di=c(e),f(pt.$$.fragment,e),mi=c(e),Yt=r(e,"P",{});var jj=o(Yt);df=n(jj,"En avant !"),jj.forEach(t),fi=c(e),ze=r(e,"H3",{class:!0});var bu=o(ze);as=r(bu,"A",{id:!0,class:!0,href:!0});var bj=o(as);Ca=r(bj,"SPAN",{});var Ej=o(Ca);f(ct.$$.fragment,Ej),Ej.forEach(t),bj.forEach(t),mf=c(bu),qa=r(bu,"SPAN",{});var Uj=o(qa);ff=n(Uj,"M\xE9triques d'\xE9valuation"),Uj.forEach(t),bu.forEach(t),Mi=c(e),rs=r(e,"P",{});var Eu=o(rs);Mf=n(Eu,"Ensuite, nous d\xE9finissons la m\xE9trique d\u2019\xE9valuation que nous utiliserons sur notre ensemble d\u2019\xE9valuation. Nous utiliserons le taux d\u2019erreur au niveaud du mot (WER) introduit dans la section "),Ft=r(Eu,"A",{href:!0});var Tj=o(Ft);hf=n(Tj,"\xE9valuation"),Tj.forEach(t),vf=n(Eu,", la m\xE9trique \u201Cde-facto\u201D pour \xE9valuer les syst\xE8mes d\u2019ASR."),Eu.forEach(t),hi=c(e),os=r(e,"P",{});var Uu=o(os);yf=n(Uu,"Nous chargerons la m\xE9trique WER \xE0 partir d\u2019 \u{1F917} "),Wa=r(Uu,"EM",{});var wj=o(Wa);Jf=n(wj,"Evaluate"),wj.forEach(t),jf=n(Uu," :"),Uu.forEach(t),vi=c(e),f(dt.$$.fragment,e),yi=c(e),k=r(e,"P",{});var oe=o(k);bf=n(oe,"Il suffit ensuite de d\xE9finir une fonction qui prend les pr\xE9dictions de notre mod\xE8le et renvoie la m\xE9trique WER. Cette fonction, appel\xE9e "),ka=r(oe,"CODE",{});var _j=o(ka);Ef=n(_j,"compute_metrics"),_j.forEach(t),Uf=n(oe,", remplace d\u2019abord "),Za=r(oe,"CODE",{});var gj=o(Za);Tf=n(gj,"-100"),gj.forEach(t),wf=n(oe," par le "),Ga=r(oe,"CODE",{});var Ij=o(Ga);_f=n(Ij,"pad_token_id"),Ij.forEach(t),gf=n(oe," dans "),$a=r(oe,"CODE",{});var Cj=o($a);If=n(Cj,"label_ids"),Cj.forEach(t),Cf=n(oe," (annulant l\u2019\xE9tape que nous avons appliqu\xE9e dans l\u2019assembleur de donn\xE9es pour ignorer correctement les "),Na=r(oe,"EM",{});var qj=o(Na);qf=n(qj,"tokens"),qj.forEach(t),Wf=n(oe," rembourr\xE9s dans la perte). Il d\xE9code ensuite les identifiants pr\xE9dits et les identifiants d\u2019\xE9tiquettes en cha\xEEnes de caract\xE8res. Enfin, il calcule le WER entre les pr\xE9dictions et les \xE9tiquettes de r\xE9f\xE9rence. Ici, nous avons la possibilit\xE9 d\u2019\xE9valuer les transcriptions et les pr\xE9dictions \u201Cnormalis\xE9es\u201D, dont la ponctuation et la casse ont \xE9t\xE9 supprim\xE9es. Nous vous recommandons de proc\xE9der ainsi pour b\xE9n\xE9ficier de l\u2019am\xE9lioration du WER obtenue par la normalisation des transcriptions."),oe.forEach(t),Ji=c(e),f(mt.$$.fragment,e),ji=c(e),Ae=r(e,"H3",{class:!0});var Tu=o(Ae);is=r(Tu,"A",{id:!0,class:!0,href:!0});var Wj=o(is);Ba=r(Wj,"SPAN",{});var kj=o(Ba);f(ft.$$.fragment,kj),kj.forEach(t),Wj.forEach(t),kf=c(Tu),za=r(Tu,"SPAN",{});var Zj=o(za);Zf=n(Zj,"Charger un *checkpoint* pr\xE9-entra\xEEn\xE9"),Zj.forEach(t),Tu.forEach(t),bi=c(e),ye=r(e,"P",{});var yl=o(ye);Gf=n(yl,"Chargeons maintenant le "),Aa=r(yl,"EM",{});var Gj=o(Aa);$f=n(Gj,"checkpoint"),Gj.forEach(t),Nf=n(yl," pr\xE9-entra\xEEn\xE9 de Whisper small. Encore une fois, ceci est trivial gr\xE2ce \xE0 l\u2019utilisation de \u{1F917} "),xa=r(yl,"EM",{});var $j=o(xa);Bf=n($j,"Transformers"),$j.forEach(t),zf=n(yl," !"),yl.forEach(t),Ei=c(e),f(Mt.$$.fragment,e),Ui=c(e),U=r(e,"P",{});var N=o(U);Af=n(N,"Nous allons mettre "),Va=r(N,"CODE",{});var Nj=o(Va);xf=n(Nj,"use_cache"),Nj.forEach(t),Vf=n(N," \xE0 "),Xa=r(N,"CODE",{});var Bj=o(Xa);Xf=n(Bj,"False"),Bj.forEach(t),Rf=n(N," pour l\u2019entra\xEEnement puisque nous utilisons ["),Ra=r(N,"EM",{});var zj=o(Ra);Sf=n(zj,"gradient checkpointing"),zj.forEach(t),Qf=n(N,"] ("),ht=r(N,"A",{href:!0,rel:!0});var Aj=o(ht);Yf=n(Aj,"https://huggingface.co/docs/transformers/v4.18.0/en/performance#gradient-checkpointing"),Aj.forEach(t),Ff=n(N,") et que les deux sont incompatibles. Nous allons aussi surcharger deux arguments de g\xE9n\xE9ration pour contr\xF4ler le comportement du mod\xE8le pendant l\u2019inf\xE9rence : nous allons forcer la langue et les "),Sa=r(N,"EM",{});var xj=o(Sa);Hf=n(xj,"tokens"),xj.forEach(t),Df=n(N," de t\xE2che pendant la g\xE9n\xE9ration en d\xE9finissant les arguments "),Qa=r(N,"CODE",{});var Vj=o(Qa);Pf=n(Vj,"language"),Vj.forEach(t),Lf=n(N," et "),Ya=r(N,"CODE",{});var Xj=o(Ya);Of=n(Xj,"task"),Xj.forEach(t),Kf=n(N,", et aussi r\xE9activer le cache pour la g\xE9n\xE9ration afin d\u2019acc\xE9l\xE9rer le temps d\u2019inf\xE9rence :"),N.forEach(t),Ti=c(e),f(vt.$$.fragment,e),wi=c(e),xe=r(e,"H2",{class:!0});var wu=o(xe);us=r(wu,"A",{id:!0,class:!0,href:!0});var Rj=o(us);Fa=r(Rj,"SPAN",{});var Sj=o(Fa);f(yt.$$.fragment,Sj),Sj.forEach(t),Rj.forEach(t),eM=c(wu),Ha=r(wu,"SPAN",{});var Qj=o(Ha);sM=n(Qj,"D\xE9finir la configuration de l'entra\xEEnement"),Qj.forEach(t),wu.forEach(t),_i=c(e),Je=r(e,"P",{});var Jl=o(Je);tM=n(Jl,`Dans la derni\xE8re \xE9tape, nous d\xE9finissons tous les param\xE8tres li\xE9s \xE0 l\u2019entra\xEEnement. Ici, nous fixons le nombre d\u2019\xE9tapes d\u2019entra\xEEnement \xE0 500.
Cela repr\xE9sente suffisamment d\u2019\xE9tapes pour voir une grande am\xE9lioration du WER par rapport au mod\xE8le pr\xE9-entra\xEEn\xE9, tout en s\u2019assurant que le `),Da=r(Jl,"EM",{});var Yj=o(Da);lM=n(Yj,"finetuning"),Yj.forEach(t),nM=n(Jl," peut \xEAtre ex\xE9cut\xE9 en environ 45 minutes sur un niveau gratuit de Google Colab. Pour plus de d\xE9tails sur les arguments d\u2019entra\xEEnement, reportez-vous \xE0 la documentation de [Seq2SeqTrainingArguments] ("),Jt=r(Jl,"A",{href:!0,rel:!0});var Fj=o(Jt);aM=n(Fj,"https://huggingface.co/docs/transformers/main_classes/trainer#transformers.Seq2SeqTrainingArguments"),Fj.forEach(t),rM=n(Jl,")."),Jl.forEach(t),gi=c(e),f(jt.$$.fragment,e),Ii=c(e),f(ps.$$.fragment,e),Ci=c(e),je=r(e,"P",{});var jl=o(je);oM=n(jl,"Nous pouvons transmettre les arguments d\u2019entra\xEEnement au "),Pa=r(jl,"EM",{});var Hj=o(Pa);iM=n(Hj,"Trainer"),Hj.forEach(t),uM=n(jl," avec notre mod\xE8le, notre jeu de donn\xE9es, notre assembleur de donn\xE9es et la fonction "),La=r(jl,"CODE",{});var Dj=o(La);pM=n(Dj,"compute_metrics"),Dj.forEach(t),cM=n(jl," :"),jl.forEach(t),qi=c(e),f(bt.$$.fragment,e),Wi=c(e),Ht=r(e,"P",{});var Pj=o(Ht);dM=n(Pj,"Et voil\xE0, nous sommes pr\xEAts \xE0 entra\xEEner !"),Pj.forEach(t),ki=c(e),Ve=r(e,"H4",{class:!0});var _u=o(Ve);cs=r(_u,"A",{id:!0,class:!0,href:!0});var Lj=o(cs);Oa=r(Lj,"SPAN",{});var Oj=o(Oa);f(Et.$$.fragment,Oj),Oj.forEach(t),Lj.forEach(t),mM=c(_u),Ka=r(_u,"SPAN",{});var Kj=o(Ka);fM=n(Kj,"Entra\xEEnement"),Kj.forEach(t),_u.forEach(t),Zi=c(e),Dt=r(e,"P",{});var e2=o(Dt);MM=n(e2,"Pour lancer l\u2019entra\xEEnement, il suffit d\u2019ex\xE9cuter :"),e2.forEach(t),Gi=c(e),f(Ut.$$.fragment,e),$i=c(e),te=r(e,"P",{});var Ts=o(te);hM=n(Ts,"L\u2019entra\xEEnement prendra environ 45 minutes en fonction de votre GPU ou de celui allou\xE9 par Google Colab. En fonction de votre GPU, il est possible que vous rencontriez une erreur CUDA "),er=r(Ts,"CODE",{});var s2=o(er);vM=n(s2,'"out-of-memory"'),s2.forEach(t),yM=n(Ts," lorsque vous commencez \xE0 entra\xEEner. Dans ce cas, vous pouvez r\xE9duire le "),sr=r(Ts,"CODE",{});var t2=o(sr);JM=n(t2,"per_device_train_batch_size"),t2.forEach(t),jM=n(Ts," par incr\xE9ments d\u2019un facteur 2 et utiliser "),Tt=r(Ts,"A",{href:!0,rel:!0});var l2=o(Tt);tr=r(l2,"CODE",{});var n2=o(tr);bM=n(n2,"gradient_accumulation_steps"),n2.forEach(t),l2.forEach(t),EM=n(Ts," pour compenser."),Ts.forEach(t),Ni=c(e),Pt=r(e,"P",{});var a2=o(Pt);lr=r(a2,"STRONG",{});var r2=o(lr);UM=n(r2,"Sortie :"),r2.forEach(t),a2.forEach(t),Bi=c(e),ds=r(e,"TABLE",{});var gu=o(ds);nr=r(gu,"THEAD",{});var o2=o(nr);B=r(o2,"TR",{});var ie=o(B);Lt=r(ie,"TH",{align:!0});var i2=o(Lt);TM=n(i2,"Training Loss"),i2.forEach(t),wM=c(ie),Ot=r(ie,"TH",{align:!0});var u2=o(Ot);_M=n(u2,"Epoch"),u2.forEach(t),gM=c(ie),Kt=r(ie,"TH",{align:!0});var p2=o(Kt);IM=n(p2,"Step"),p2.forEach(t),CM=c(ie),el=r(ie,"TH",{align:!0});var c2=o(el);qM=n(c2,"Validation Loss"),c2.forEach(t),WM=c(ie),sl=r(ie,"TH",{align:!0});var d2=o(sl);kM=n(d2,"Wer Ortho"),d2.forEach(t),ZM=c(ie),tl=r(ie,"TH",{align:!0});var m2=o(tl);GM=n(m2,"Wer"),m2.forEach(t),ie.forEach(t),o2.forEach(t),$M=c(gu),ar=r(gu,"TBODY",{});var f2=o(ar);z=r(f2,"TR",{});var ue=o(z);ll=r(ue,"TD",{align:!0});var M2=o(ll);NM=n(M2,"0.136"),M2.forEach(t),BM=c(ue),nl=r(ue,"TD",{align:!0});var h2=o(nl);zM=n(h2,"1.63"),h2.forEach(t),AM=c(ue),al=r(ue,"TD",{align:!0});var v2=o(al);xM=n(v2,"500"),v2.forEach(t),VM=c(ue),rl=r(ue,"TD",{align:!0});var y2=o(rl);XM=n(y2,"0.1727"),y2.forEach(t),RM=c(ue),ol=r(ue,"TD",{align:!0});var J2=o(ol);SM=n(J2,"63.8972"),J2.forEach(t),QM=c(ue),il=r(ue,"TD",{align:!0});var j2=o(il);YM=n(j2,"14.0661"),j2.forEach(t),ue.forEach(t),f2.forEach(t),gu.forEach(t),zi=c(e),ms=r(e,"P",{});var Iu=o(ms);FM=n(Iu,"Notre WER final est de 14,1 % ce qui n\u2019est pas mal pour sept heures de donn\xE9es d\u2019entra\xEEnement et seulement 500 \xE9tapes d\u2019entra\xEEnement ! Cela repr\xE9sente une am\xE9lioration de 112 % par rapport au mod\xE8le pr\xE9-entra\xEEn\xE9 ! Cela signifie que nous avons pris un mod\xE8le qui n\u2019avait aucune connaissance du dhivehi et que nous l\u2019avons "),rr=r(Iu,"EM",{});var b2=o(rr);HM=n(b2,"finetun\xE9"),b2.forEach(t),DM=n(Iu," pour reconna\xEEtre l\u2019dhivehi avec une pr\xE9cision ad\xE9quate en moins d\u2019une heure \u{1F92F}."),Iu.forEach(t),Ai=c(e),fs=r(e,"P",{});var Cu=o(fs);PM=n(Cu,"La grande question est de savoir comment cela se compare \xE0 d\u2019autres syst\xE8mes ASR. Pour cela, nous pouvons consulter le [classement autoevaluate] ("),wt=r(Cu,"A",{href:!0,rel:!0});var E2=o(wt);LM=n(E2,"https://huggingface.co/spaces/autoevaluate/leaderboards?dataset=mozilla-foundation%2Fcommon_voice_13_0&only_verified=0&task=automatic-speech-recognition&config=dv&split=test&metric=wer"),E2.forEach(t),OM=n(Cu,") qui cat\xE9gorise les mod\xE8les par langue et par jeu de donn\xE9es, et les classe ensuite en fonction de leur WER."),Cu.forEach(t),xi=c(e),be=r(e,"P",{});var bl=o(be);KM=n(bl,"En regardant le classement, nous voyons que notre mod\xE8le entra\xEEn\xE9 pour 500 \xE9tapes bat de mani\xE8re convaincante le "),or=r(bl,"EM",{});var U2=o(or);eh=n(U2,"checkpoint"),U2.forEach(t),sh=c(bl),_t=r(bl,"A",{href:!0,rel:!0});var T2=o(_t);th=n(T2,"Whisper Small"),T2.forEach(t),lh=n(bl," pr\xE9-entra\xEEn\xE9 que nous avons \xE9valu\xE9 dans la section pr\xE9c\xE9dente. Bon travail \u{1F44F}"),bl.forEach(t),Vi=c(e),_=r(e,"P",{});var Q=o(_);nh=n(Q,"Nous voyons qu\u2019il y a quelques "),ir=r(Q,"EM",{});var w2=o(ir);ah=n(w2,"checkpoints"),w2.forEach(t),rh=n(Q," qui font mieux que celui que nous avons entra\xEEn\xE9. La beaut\xE9 du "),ur=r(Q,"EM",{});var _2=o(ur);oh=n(_2,"Hub"),_2.forEach(t),ih=n(Q," est qu\u2019il s\u2019agit d\u2019une plateforme "),pr=r(Q,"EM",{});var g2=o(pr);uh=n(g2,"collaborative"),g2.forEach(t),ph=n(Q,". Si nous n\u2019avons pas le temps ou les ressources pour effectuer un entra\xEEnement plus long nous-m\xEAmes, nous pouvons charger un "),cr=r(Q,"EM",{});var I2=o(cr);ch=n(I2,"checkpoint"),I2.forEach(t),dh=n(Q,` que quelqu\u2019un d\u2019autre dans la communaut\xE9 a entra\xEEn\xE9 et a eu la gentillesse de partager (en s\u2019assurant de le remercier pour cela !).
Vous pourrez charger ces `),dr=r(Q,"EM",{});var C2=o(dr);mh=n(C2,"checkpoints"),C2.forEach(t),fh=n(Q," exactement de la m\xEAme mani\xE8re que les pr\xE9-entra\xEEn\xE9s en utilisant la classe "),mr=r(Q,"CODE",{});var q2=o(mr);Mh=n(q2,"pipeline"),q2.forEach(t),hh=n(Q," comme nous l\u2019avons fait pr\xE9c\xE9demment ! Ainsi, rien ne vous emp\xEAche de s\xE9lectionner le meilleur mod\xE8le du leaderboard pour l\u2019utiliser dans le cadre de votre t\xE2che !"),Q.forEach(t),Xi=c(e),Ee=r(e,"P",{});var El=o(Ee);vh=n(El,"Nous pouvons automatiquement soumettre notre "),fr=r(El,"EM",{});var W2=o(fr);yh=n(W2,"checkpoint"),W2.forEach(t),Jh=n(El," au classement lorsque nous envoyons les r\xE9sultats de l\u2019entra\xEEnement au "),Mr=r(El,"EM",{});var k2=o(Mr);jh=n(k2,"Hub"),k2.forEach(t),bh=n(El,". Nous devons simplement d\xE9finir les arguments de mot-cl\xE9 appropri\xE9s (kwargs). Vous pouvez modifier ces valeurs pour qu\u2019elles correspondent \xE0 votre jeu de donn\xE9es, \xE0 votre langue et au nom de votre mod\xE8le en cons\xE9quence :"),El.forEach(t),Ri=c(e),f(gt.$$.fragment,e),Si=c(e),Ue=r(e,"P",{});var Ul=o(Ue);Eh=n(Ul,"Les r\xE9sultats de l\u2019entra\xEEnement peuvent maintenant \xEAtre t\xE9l\xE9charg\xE9s vers le "),hr=r(Ul,"EM",{});var Z2=o(hr);Uh=n(Z2,"Hub"),Z2.forEach(t),Th=n(Ul,". Pour ce faire, ex\xE9cutez la commande "),vr=r(Ul,"CODE",{});var G2=o(vr);wh=n(G2,"push_to_hub"),G2.forEach(t),_h=n(Ul," :"),Ul.forEach(t),Qi=c(e),f(It.$$.fragment,e),Yi=c(e),Te=r(e,"P",{});var Tl=o(Te);gh=n(Tl,"Ceci sauvegardera les logs d\u2019entra\xEEnement et les poids des mod\xE8les sous "),yr=r(Tl,"CODE",{});var $2=o(yr);Ih=n($2,`"votre-nom-d'utilisateur/le-nom-que-vous-avez-choisi"`),$2.forEach(t),Ch=n(Tl,". Pour cet exemple, regardez le t\xE9l\xE9chargement \xE0 "),Jr=r(Tl,"CODE",{});var N2=o(Jr);qh=n(N2,"sanchit-gandhi/whisper-small-dv"),N2.forEach(t),Wh=n(Tl,"."),Tl.forEach(t),Fi=c(e),le=r(e,"P",{});var ws=o(le);kh=n(ws,"Bien que le mod\xE8le "),jr=r(ws,"EM",{});var B2=o(jr);Zh=n(B2,"finetun\xE9"),B2.forEach(t),Gh=n(ws,` donne des r\xE9sultats satisfaisants sur les donn\xE9es de test de Common Voice 13, il n\u2019est en aucun cas optimal.
Le but de ce guide est de d\xE9montrer comment `),br=r(ws,"EM",{});var z2=o(br);$h=n(z2,"finetuner"),z2.forEach(t),Nh=n(ws," un mod\xE8le ASR en utilisant le "),Er=r(ws,"EM",{});var A2=o(Er);Bh=n(A2,"Trainer"),A2.forEach(t),zh=n(ws," pour la reconnaissance automatique de la parole multilingue."),ws.forEach(t),Hi=c(e),ne=r(e,"P",{});var _s=o(ne);Ah=n(_s,"Si vous avez acc\xE8s \xE0 votre propre GPU ou si vous \xEAtes abonn\xE9 \xE0 un plan payant de Google Colab, vous pouvez augmenter "),Ur=r(_s,"CODE",{});var x2=o(Ur);xh=n(x2,"max_pas"),x2.forEach(t),Vh=n(_s," \xE0 4000 pas pour am\xE9liorer davantage le WER en entra\xEEnant plus de pas. Entra\xEEner 4000 pas prendra environ 3 \xE0 5 heures en fonction de votre GPU et donnera des r\xE9sultats WER inf\xE9rieurs d\u2019environ 3 % \xE0 l\u2019entra\xEEnement de 500 pas. Si vous d\xE9cidez d\u2019entra\xEEner sur 4000 pas, nous vous recommandons \xE9galement de changer le planificateur de taux d\u2019apprentissage pour un plan "),Tr=r(_s,"EM",{});var V2=o(Tr);Xh=n(V2,"lin\xE9aire"),V2.forEach(t),Rh=n(_s," (set "),wr=r(_s,"CODE",{});var X2=o(wr);Sh=n(X2,'lr_scheduler_type="linear"'),X2.forEach(t),Qh=n(_s,"), car cela permettra d\u2019augmenter les performances sur de longues p\xE9riodes d\u2019entra\xEEnement."),_s.forEach(t),Di=c(e),Z=r(e,"P",{});var pe=o(Z);Yh=n(pe,"Les r\xE9sultats pourraient probablement \xEAtre am\xE9lior\xE9s en optimisant les hyperparam\xE8tres d\u2019entra\xEEnement, tels que "),_r=r(pe,"EM",{});var R2=o(_r);Fh=n(R2,"learning rate"),R2.forEach(t),Hh=n(pe," et "),gr=r(pe,"EM",{});var S2=o(gr);Dh=n(S2,"dropout"),S2.forEach(t),Ph=n(pe,", et en utilisant un "),Ir=r(pe,"EM",{});var Q2=o(Ir);Lh=n(Q2,"checkpoint"),Q2.forEach(t),Oh=n(pe," pr\xE9-entra\xEEn\xE9 plus grand ("),Cr=r(pe,"CODE",{});var Y2=o(Cr);Kh=n(Y2,"medium"),Y2.forEach(t),ev=n(pe," ou "),qr=r(pe,"CODE",{});var F2=o(qr);sv=n(F2,"large"),F2.forEach(t),tv=n(pe,"). Nous laissons cet exercice au lecteur."),pe.forEach(t),Pi=c(e),Xe=r(e,"H2",{class:!0});var qu=o(Xe);Ms=r(qu,"A",{id:!0,class:!0,href:!0});var H2=o(Ms);Wr=r(H2,"SPAN",{});var D2=o(Wr);f(Ct.$$.fragment,D2),D2.forEach(t),H2.forEach(t),lv=c(qu),kr=r(qu,"SPAN",{});var P2=o(kr);nv=n(P2,"Partager votre mod\xE8le"),P2.forEach(t),qu.forEach(t),Li=c(e),g=r(e,"P",{});var Y=o(g);av=n(Y,"Vous pouvez maintenant partager ce mod\xE8le avec n\u2019importe qui en utilisant le lien sur le "),Zr=r(Y,"EM",{});var L2=o(Zr);rv=n(L2,"Hub"),L2.forEach(t),ov=n(Y,". Ils peuvent le charger avec l\u2019identifiant "),Gr=r(Y,"CODE",{});var O2=o(Gr);iv=n(O2,`"votre-nom-d'utilisateur/le-nom-que-vous-avez-choisi"`),O2.forEach(t),uv=n(Y," directement dans l\u2019objet "),$r=r(Y,"CODE",{});var K2=o($r);pv=n(K2,"pipeline()"),K2.forEach(t),cv=n(Y,". Par exemple, pour charger le "),Nr=r(Y,"EM",{});var eb=o(Nr);dv=n(eb,"checkpoint"),eb.forEach(t),mv=c(Y),Br=r(Y,"EM",{});var sb=o(Br);fv=n(sb,"finetun\xE9"),sb.forEach(t),Mv=c(Y),qt=r(Y,"A",{href:!0,rel:!0});var tb=o(qt);hv=n(tb,"\u201Csanchit-gandhi/whisper-small-dv\u201D"),tb.forEach(t),vv=n(Y," :"),Y.forEach(t),Oi=c(e),f(Wt.$$.fragment,e),Ki=c(e),Re=r(e,"H2",{class:!0});var Wu=o(Re);hs=r(Wu,"A",{id:!0,class:!0,href:!0});var lb=o(hs);zr=r(lb,"SPAN",{});var nb=o(zr);f(kt.$$.fragment,nb),nb.forEach(t),lb.forEach(t),yv=c(Wu),Ar=r(Wu,"SPAN",{});var ab=o(Ar);Jv=n(ab,"Conclusion"),ab.forEach(t),Wu.forEach(t),eu=c(e),j=r(e,"P",{});var I=o(j);jv=n(I,"Dans cette section, nous avons couvert un guide \xE9tape par \xE9tape sur le "),xr=r(I,"EM",{});var rb=o(xr);bv=n(rb,"finetuning"),rb.forEach(t),Ev=n(I," du mod\xE8le Whisper pour la reconnaissance vocale en utilisants \u{1F917} "),Vr=r(I,"EM",{});var ob=o(Vr);Uv=n(ob,"Jeux de donn\xE9es"),ob.forEach(t),Tv=n(I,", \u{1F917} "),Xr=r(I,"EM",{});var ib=o(Xr);wv=n(ib,"Transformers"),ib.forEach(t),_v=n(I," et le "),Rr=r(I,"EM",{});var ub=o(Rr);gv=n(ub,"Hub"),ub.forEach(t),Iv=n(I,". Nous avons d\u2019abord charg\xE9 le sous-ensemble Dhivehi du jeu de donn\xE9es Common Voice 13 et l\u2019avons pr\xE9trait\xE9 en calculant des spectrogrammes log-mel et en tokenisant le texte. Nous avons ensuite d\xE9fini un assembleur de donn\xE9es, une m\xE9trique d\u2019\xE9valuation et des arguments d\u2019entra\xEEnement, avant d\u2019utiliser le "),Sr=r(I,"EM",{});var pb=o(Sr);Cv=n(pb,"Trainer"),pb.forEach(t),qv=n(I," pour entra\xEEner et \xE9valuer notre mod\xE8le. Nous avons termin\xE9 en t\xE9l\xE9chargeant le mod\xE8le "),Qr=r(I,"EM",{});var cb=o(Qr);Wv=n(cb,"finetun\xE9"),cb.forEach(t),kv=n(I," sur le "),Yr=r(I,"EM",{});var db=o(Yr);Zv=n(db,"Hub"),db.forEach(t),Gv=n(I,", et nous avons montr\xE9 comment le partager et l\u2019utiliser avec la classe "),Fr=r(I,"CODE",{});var mb=o(Fr);$v=n(mb,"pipeline()"),mb.forEach(t),Nv=n(I,"."),I.forEach(t),su=c(e),R=r(e,"P",{});var Ce=o(R);Bv=n(Ce,"Si vous avez suivi jusqu\u2019\xE0 ce point, vous devriez maintenant avoir un "),Hr=r(Ce,"EM",{});var fb=o(Hr);zv=n(fb,"checkpoint"),fb.forEach(t),Av=c(Ce),Dr=r(Ce,"EM",{});var Mb=o(Dr);xv=n(Mb,"finetun\xE9"),Mb.forEach(t),Vv=n(Ce,` pour la reconnaissance automatique de la parole, bien jou\xE9 ! \u{1F973}
Plus important encore, vous \xEAtes \xE9quip\xE9 de tous les outils n\xE9cessaires pour `),Pr=r(Ce,"EM",{});var hb=o(Pr);Xv=n(hb,"finetuner"),hb.forEach(t),Rv=n(Ce," le mod\xE8le Whisper sur n\u2019importe quel jeu de donn\xE9es ou domaine de reconnaissance vocale. Alors, qu\u2019attendez-vous ? Choisissez l\u2019un des jeux de donn\xE9es couverts dans la section "),ul=r(Ce,"A",{href:!0});var vb=o(ul);Sv=n(vb,"Choisir un jeu de donn\xE9es"),vb.forEach(t),Qv=n(Ce," ou s\xE9lectionnez un jeu de donn\xE9es de votre choix, et voyez si vous pouvez obtenir des performances de pointe ! Le classement vous attend\u2026"),Ce.forEach(t),this.h()},h(){d(T,"name","hf:doc:metadata"),d(T,"content",JSON.stringify(gb)),d(Se,"id","comment-finetuner-un-systme-de-reconnaissance-automatique-de-la-parole-avec-lapi-trainer"),d(Se,"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"),d(Se,"href","#comment-finetuner-un-systme-de-reconnaissance-automatique-de-la-parole-avec-lapi-trainer"),d(F,"class","relative group"),d(Ye,"id","prparer-lenvironnement"),d(Ye,"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"),d(Ye,"href","#prparer-lenvironnement"),d(qe,"class","relative group"),d(Cs,"href","https://huggingface.co/"),d(Cs,"rel","nofollow"),d(Ws,"href","https://huggingface.co/settings/tokens"),d(Ws,"rel","nofollow"),d(Fe,"id","charger-le-jeu-de-donnes"),d(Fe,"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"),d(Fe,"href","#charger-le-jeu-de-donnes"),d(We,"class","relative group"),d($s,"href","https://huggingface.co/datasets/mozilla-foundation/common_voice_13_0"),d($s,"rel","nofollow"),d(De,"id","extracteur-de-caractristiques-tokeniser-et-processeur"),d(De,"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"),d(De,"href","#extracteur-de-caractristiques-tokeniser-et-processeur"),d(Ze,"class","relative group"),d(Vs,"href","https://huggingface.co/docs/transformers/main/model_doc/whisper#transformers.WhisperFeatureExtractor"),d(Vs,"rel","nofollow"),d(Xs,"href","https://huggingface.co/docs/transformers/main/model_doc/whisper#transformers.WhisperTokenizer"),d(Xs,"rel","nofollow"),d(Rs,"href","https://huggingface.co/docs/transformers/model_doc/whisper#transformers.WhisperProcessor"),d(Rs,"rel","nofollow"),d(Le,"id","prtraitement-des-donnes"),d(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"),d(Le,"href","#prtraitement-des-donnes"),d(Ge,"class","relative group"),d(Ds,"href","https://huggingface.co/docs/datasets/main/en/package_reference/main_classes#datasets.Dataset.cast_column"),d(Ds,"rel","nofollow"),d(ss,"id","entranement-et-valuation"),d(ss,"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"),d(ss,"href","#entranement-et-valuation"),d(Ne,"class","relative group"),d(at,"href","https://huggingface.co/transformers/master/main_classes/trainer.html?highlight=trainer"),d(at,"rel","nofollow"),d(ns,"id","dfinir-un-assembleur-de-donnes"),d(ns,"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"),d(ns,"href","#dfinir-un-assembleur-de-donnes"),d(Be,"class","relative group"),d(as,"id","mtriques-dvaluation"),d(as,"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"),d(as,"href","#mtriques-dvaluation"),d(ze,"class","relative group"),d(Ft,"href","%C3%A9valuation"),d(is,"id","charger-un-checkpoint-prentran"),d(is,"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"),d(is,"href","#charger-un-checkpoint-prentran"),d(Ae,"class","relative group"),d(ht,"href","https://huggingface.co/docs/transformers/v4.18.0/en/performance#gradient-checkpointing"),d(ht,"rel","nofollow"),d(us,"id","dfinir-la-configuration-de-lentranement"),d(us,"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"),d(us,"href","#dfinir-la-configuration-de-lentranement"),d(xe,"class","relative group"),d(Jt,"href","https://huggingface.co/docs/transformers/main_classes/trainer#transformers.Seq2SeqTrainingArguments"),d(Jt,"rel","nofollow"),d(cs,"id","entranement"),d(cs,"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"),d(cs,"href","#entranement"),d(Ve,"class","relative group"),d(Tt,"href","https://huggingface.co/docs/transformers/main_classes/trainer#transformers.Seq2SeqTrainingArguments.gradient_accumulation_steps"),d(Tt,"rel","nofollow"),d(Lt,"align","center"),d(Ot,"align","center"),d(Kt,"align","center"),d(el,"align","center"),d(sl,"align","center"),d(tl,"align","center"),d(ll,"align","center"),d(nl,"align","center"),d(al,"align","center"),d(rl,"align","center"),d(ol,"align","center"),d(il,"align","center"),d(wt,"href","https://huggingface.co/spaces/autoevaluate/leaderboards?dataset=mozilla-foundation%2Fcommon_voice_13_0&only_verified=0&task=automatic-speech-recognition&config=dv&split=test&metric=wer"),d(wt,"rel","nofollow"),d(_t,"href","https://huggingface.co/openai/whisper-small"),d(_t,"rel","nofollow"),d(Ms,"id","partager-votre-modle"),d(Ms,"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"),d(Ms,"href","#partager-votre-modle"),d(Xe,"class","relative group"),d(qt,"href","https://huggingface.co/sanchit-gandhi/whisper-small-dv"),d(qt,"rel","nofollow"),d(hs,"id","conclusion"),d(hs,"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"),d(hs,"href","#conclusion"),d(Re,"class","relative group"),d(ul,"href","choosing_dataset")},m(e,i){s(document.head,T),u(e,C,i),u(e,F,i),s(F,Se),s(Se,wl),M(gs,wl,null),s(F,ku),s(F,_l),s(_l,Zu),u(e,Kr,i),u(e,D,i),s(D,Gu),s(D,gl),s(gl,$u),s(D,Nu),s(D,Il),s(Il,Bu),s(D,zu),s(D,Cl),s(Cl,Au),s(D,xu),u(e,eo,i),u(e,$t,i),s($t,Vu),u(e,so,i),u(e,P,i),s(P,Xu),s(P,ql),s(ql,Ru),s(P,Su),s(P,Wl),s(Wl,Qu),s(P,Yu),s(P,kl),s(kl,Fu),s(P,Hu),u(e,to,i),u(e,Qe,i),s(Qe,Du),s(Qe,Zl),s(Zl,Pu),s(Qe,Lu),u(e,lo,i),u(e,qe,i),s(qe,Ye),s(Ye,Gl),M(Is,Gl,null),s(qe,Ou),s(qe,$l),s($l,Ku),u(e,no,i),u(e,L,i),s(L,ep),s(L,Nl),s(Nl,sp),s(L,tp),s(L,Cs),s(Cs,Bl),s(Bl,lp),s(L,np),s(L,zl),s(zl,ap),s(L,rp),u(e,ao,i),u(e,O,i),s(O,qs),s(qs,op),s(qs,Al),s(Al,ip),s(qs,up),s(O,pp),s(O,xl),s(xl,cp),s(O,dp),s(O,Vl),s(Vl,mp),s(O,fp),s(O,Xl),s(Xl,Mp),u(e,ro,i),u(e,w,i),s(w,hp),s(w,Rl),s(Rl,vp),s(w,yp),s(w,Sl),s(Sl,Jp),s(w,jp),s(w,Ql),s(Ql,bp),s(w,Ep),s(w,Yl),s(Yl,Up),s(w,Tp),s(w,Fl),s(Fl,wp),s(w,_p),s(w,Ws),s(Ws,gp),s(w,Ip),u(e,oo,i),M(ks,e,i),u(e,io,i),u(e,Nt,i),s(Nt,Hl),s(Hl,Cp),u(e,uo,i),M(Zs,e,i),u(e,po,i),u(e,We,i),s(We,Fe),s(Fe,Dl),M(Gs,Dl,null),s(We,qp),s(We,Pl),s(Pl,Wp),u(e,co,i),u(e,ke,i),s(ke,$s),s($s,kp),s(ke,Zp),s(ke,Ll),s(Ll,Gp),s(ke,$p),u(e,mo,i),u(e,A,i),s(A,Np),s(A,Ol),s(Ol,Bp),s(A,zp),s(A,Kl),s(Kl,Ap),s(A,xp),s(A,en),s(en,Vp),s(A,Xp),s(A,sn),s(sn,Rp),s(A,Sp),u(e,fo,i),M(Ns,e,i),u(e,Mo,i),u(e,Bt,i),s(Bt,tn),s(tn,Qp),u(e,ho,i),M(Bs,e,i),u(e,vo,i),M(He,e,i),u(e,yo,i),u(e,q,i),s(q,Yp),s(q,ln),s(ln,Fp),s(q,Hp),s(q,nn),s(nn,Dp),s(q,Pp),s(q,an),s(an,Lp),s(q,Op),s(q,rn),s(rn,Kp),s(q,ec),s(q,on),s(on,sc),s(q,tc),u(e,Jo,i),M(zs,e,i),u(e,jo,i),u(e,Ze,i),s(Ze,De),s(De,un),M(As,un,null),s(Ze,lc),s(Ze,pn),s(pn,nc),u(e,bo,i),u(e,zt,i),s(zt,ac),u(e,Eo,i),u(e,ce,i),s(ce,cn),s(cn,rc),s(ce,oc),s(ce,dn),s(dn,ic),s(ce,uc),s(ce,xs),s(xs,pc),s(xs,mn),s(mn,cc),s(xs,dc),u(e,Uo,i),u(e,W,i),s(W,mc),s(W,fn),s(fn,fc),s(W,Mc),s(W,Vs),s(Vs,hc),s(W,vc),s(W,Xs),s(Xs,yc),s(W,Jc),s(W,Rs),s(Rs,jc),s(W,bc),s(W,Mn),s(Mn,Ec),s(W,Uc),u(e,To,i),u(e,b,i),s(b,Tc),s(b,hn),s(hn,wc),s(b,_c),s(b,vn),s(vn,gc),s(b,Ic),s(b,yn),s(yn,Cc),s(b,qc),s(b,Jn),s(Jn,Wc),s(b,kc),s(b,jn),s(jn,Zc),s(b,Gc),s(b,bn),s(bn,$c),s(b,Nc),s(b,En),s(En,Bc),s(b,zc),u(e,wo,i),u(e,At,i),s(At,Ac),u(e,_o,i),M(Ss,e,i),u(e,go,i),u(e,de,i),s(de,xc),s(de,Un),s(Un,Vc),s(de,Xc),s(de,Tn),s(Tn,Rc),s(de,Sc),u(e,Io,i),u(e,Pe,i),s(Pe,Qc),s(Pe,wn),s(wn,Yc),s(Pe,Fc),u(e,Co,i),u(e,me,i),s(me,Hc),s(me,_n),s(_n,Dc),s(me,Pc),s(me,gn),s(gn,Lc),s(me,Oc),u(e,qo,i),u(e,K,i),s(K,Kc),s(K,In),s(In,ed),s(K,sd),s(K,Cn),s(Cn,td),s(K,ld),s(K,qn),s(qn,nd),s(K,ad),u(e,Wo,i),M(Qs,e,i),u(e,ko,i),u(e,x,i),s(x,rd),s(x,Wn),s(Wn,od),s(x,id),s(x,kn),s(kn,ud),s(x,pd),s(x,Zn),s(Zn,cd),s(x,dd),s(x,Gn),s(Gn,md),s(x,fd),u(e,Zo,i),u(e,Ge,i),s(Ge,Le),s(Le,$n),M(Ys,$n,null),s(Ge,Md),s(Ge,Nn),s(Nn,hd),u(e,Go,i),u(e,Oe,i),s(Oe,vd),s(Oe,Bn),s(Bn,yd),s(Oe,Jd),u(e,$o,i),M(Fs,e,i),u(e,No,i),u(e,xt,i),s(xt,zn),s(zn,jd),u(e,Bo,i),M(Hs,e,i),u(e,zo,i),u(e,Vt,i),s(Vt,bd),u(e,Ao,i),u(e,Ke,i),s(Ke,Ed),s(Ke,Ds),s(Ds,An),s(An,Ud),s(Ke,Td),u(e,xo,i),M(Ps,e,i),u(e,Vo,i),u(e,Xt,i),s(Xt,wd),u(e,Xo,i),u(e,fe,i),s(fe,$e),s($e,_d),s($e,xn),s(xn,gd),s($e,Id),s($e,Vn),s(Vn,Cd),s($e,qd),s(fe,Wd),s(fe,Xn),s(Xn,kd),s(fe,Zd),s(fe,Ls),s(Ls,Gd),s(Ls,Rn),s(Rn,$d),s(Ls,Nd),u(e,Ro,i),M(Os,e,i),u(e,So,i),u(e,ee,i),s(ee,Bd),s(ee,Sn),s(Sn,zd),s(ee,Ad),s(ee,Qn),s(Qn,xd),s(ee,Vd),s(ee,Yn),s(Yn,Xd),s(ee,Rd),u(e,Qo,i),M(Ks,e,i),u(e,Yo,i),u(e,Me,i),s(Me,Sd),s(Me,Fn),s(Fn,Qd),s(Me,Yd),s(Me,Hn),s(Hn,Fd),s(Me,Hd),u(e,Fo,i),M(et,e,i),u(e,Ho,i),u(e,he,i),s(he,Dd),s(he,Dn),s(Dn,Pd),s(he,Ld),s(he,Pn),s(Pn,Od),s(he,Kd),u(e,Do,i),M(st,e,i),u(e,Po,i),u(e,Rt,i),s(Rt,em),u(e,Lo,i),M(tt,e,i),u(e,Oo,i),u(e,St,i),s(St,Ln),s(Ln,sm),u(e,Ko,i),M(lt,e,i),u(e,ei,i),u(e,es,i),s(es,tm),s(es,On),s(On,lm),s(es,nm),u(e,si,i),u(e,Ne,i),s(Ne,ss),s(ss,Kn),M(nt,Kn,null),s(Ne,am),s(Ne,ea),s(ea,rm),u(e,ti,i),u(e,ts,i),s(ts,om),s(ts,at),s(at,im),s(ts,um),u(e,li,i),u(e,se,i),s(se,sa),s(sa,ta),s(ta,pm),s(se,cm),s(se,la),s(la,rt),s(rt,dm),s(rt,na),s(na,mm),s(rt,fm),s(se,Mm),s(se,aa),s(aa,ot),s(ot,hm),s(ot,ra),s(ra,vm),s(ot,ym),s(se,Jm),s(se,oa),s(oa,ia),s(ia,jm),u(e,ni,i),u(e,ls,i),s(ls,bm),s(ls,ua),s(ua,Em),s(ls,Um),u(e,ai,i),u(e,Be,i),s(Be,ns),s(ns,pa),M(it,pa,null),s(Be,Tm),s(Be,ca),s(ca,wm),u(e,ri,i),u(e,V,i),s(V,_m),s(V,da),s(da,gm),s(V,Im),s(V,ma),s(ma,Cm),s(V,qm),s(V,fa),s(fa,Wm),s(V,km),s(V,Ma),s(Ma,Zm),s(V,Gm),u(e,oi,i),u(e,X,i),s(X,$m),s(X,ha),s(ha,Nm),s(X,Bm),s(X,va),s(va,zm),s(X,Am),s(X,ya),s(ya,xm),s(X,Vm),s(X,Ja),s(Ja,Xm),s(X,Rm),u(e,ii,i),u(e,E,i),s(E,Sm),s(E,ja),s(ja,Qm),s(E,Ym),s(E,ba),s(ba,Fm),s(E,Hm),s(E,Ea),s(Ea,Dm),s(E,Pm),s(E,Ua),s(Ua,Lm),s(E,Om),s(E,Ta),s(Ta,Km),s(E,ef),s(E,wa),s(wa,sf),s(E,tf),s(E,_a),s(_a,lf),s(E,nf),u(e,ui,i),u(e,ve,i),s(ve,af),s(ve,ga),s(ga,rf),s(ve,of),s(ve,Ia),s(Ia,uf),s(ve,pf),u(e,pi,i),M(ut,e,i),u(e,ci,i),u(e,Qt,i),s(Qt,cf),u(e,di,i),M(pt,e,i),u(e,mi,i),u(e,Yt,i),s(Yt,df),u(e,fi,i),u(e,ze,i),s(ze,as),s(as,Ca),M(ct,Ca,null),s(ze,mf),s(ze,qa),s(qa,ff),u(e,Mi,i),u(e,rs,i),s(rs,Mf),s(rs,Ft),s(Ft,hf),s(rs,vf),u(e,hi,i),u(e,os,i),s(os,yf),s(os,Wa),s(Wa,Jf),s(os,jf),u(e,vi,i),M(dt,e,i),u(e,yi,i),u(e,k,i),s(k,bf),s(k,ka),s(ka,Ef),s(k,Uf),s(k,Za),s(Za,Tf),s(k,wf),s(k,Ga),s(Ga,_f),s(k,gf),s(k,$a),s($a,If),s(k,Cf),s(k,Na),s(Na,qf),s(k,Wf),u(e,Ji,i),M(mt,e,i),u(e,ji,i),u(e,Ae,i),s(Ae,is),s(is,Ba),M(ft,Ba,null),s(Ae,kf),s(Ae,za),s(za,Zf),u(e,bi,i),u(e,ye,i),s(ye,Gf),s(ye,Aa),s(Aa,$f),s(ye,Nf),s(ye,xa),s(xa,Bf),s(ye,zf),u(e,Ei,i),M(Mt,e,i),u(e,Ui,i),u(e,U,i),s(U,Af),s(U,Va),s(Va,xf),s(U,Vf),s(U,Xa),s(Xa,Xf),s(U,Rf),s(U,Ra),s(Ra,Sf),s(U,Qf),s(U,ht),s(ht,Yf),s(U,Ff),s(U,Sa),s(Sa,Hf),s(U,Df),s(U,Qa),s(Qa,Pf),s(U,Lf),s(U,Ya),s(Ya,Of),s(U,Kf),u(e,Ti,i),M(vt,e,i),u(e,wi,i),u(e,xe,i),s(xe,us),s(us,Fa),M(yt,Fa,null),s(xe,eM),s(xe,Ha),s(Ha,sM),u(e,_i,i),u(e,Je,i),s(Je,tM),s(Je,Da),s(Da,lM),s(Je,nM),s(Je,Jt),s(Jt,aM),s(Je,rM),u(e,gi,i),M(jt,e,i),u(e,Ii,i),M(ps,e,i),u(e,Ci,i),u(e,je,i),s(je,oM),s(je,Pa),s(Pa,iM),s(je,uM),s(je,La),s(La,pM),s(je,cM),u(e,qi,i),M(bt,e,i),u(e,Wi,i),u(e,Ht,i),s(Ht,dM),u(e,ki,i),u(e,Ve,i),s(Ve,cs),s(cs,Oa),M(Et,Oa,null),s(Ve,mM),s(Ve,Ka),s(Ka,fM),u(e,Zi,i),u(e,Dt,i),s(Dt,MM),u(e,Gi,i),M(Ut,e,i),u(e,$i,i),u(e,te,i),s(te,hM),s(te,er),s(er,vM),s(te,yM),s(te,sr),s(sr,JM),s(te,jM),s(te,Tt),s(Tt,tr),s(tr,bM),s(te,EM),u(e,Ni,i),u(e,Pt,i),s(Pt,lr),s(lr,UM),u(e,Bi,i),u(e,ds,i),s(ds,nr),s(nr,B),s(B,Lt),s(Lt,TM),s(B,wM),s(B,Ot),s(Ot,_M),s(B,gM),s(B,Kt),s(Kt,IM),s(B,CM),s(B,el),s(el,qM),s(B,WM),s(B,sl),s(sl,kM),s(B,ZM),s(B,tl),s(tl,GM),s(ds,$M),s(ds,ar),s(ar,z),s(z,ll),s(ll,NM),s(z,BM),s(z,nl),s(nl,zM),s(z,AM),s(z,al),s(al,xM),s(z,VM),s(z,rl),s(rl,XM),s(z,RM),s(z,ol),s(ol,SM),s(z,QM),s(z,il),s(il,YM),u(e,zi,i),u(e,ms,i),s(ms,FM),s(ms,rr),s(rr,HM),s(ms,DM),u(e,Ai,i),u(e,fs,i),s(fs,PM),s(fs,wt),s(wt,LM),s(fs,OM),u(e,xi,i),u(e,be,i),s(be,KM),s(be,or),s(or,eh),s(be,sh),s(be,_t),s(_t,th),s(be,lh),u(e,Vi,i),u(e,_,i),s(_,nh),s(_,ir),s(ir,ah),s(_,rh),s(_,ur),s(ur,oh),s(_,ih),s(_,pr),s(pr,uh),s(_,ph),s(_,cr),s(cr,ch),s(_,dh),s(_,dr),s(dr,mh),s(_,fh),s(_,mr),s(mr,Mh),s(_,hh),u(e,Xi,i),u(e,Ee,i),s(Ee,vh),s(Ee,fr),s(fr,yh),s(Ee,Jh),s(Ee,Mr),s(Mr,jh),s(Ee,bh),u(e,Ri,i),M(gt,e,i),u(e,Si,i),u(e,Ue,i),s(Ue,Eh),s(Ue,hr),s(hr,Uh),s(Ue,Th),s(Ue,vr),s(vr,wh),s(Ue,_h),u(e,Qi,i),M(It,e,i),u(e,Yi,i),u(e,Te,i),s(Te,gh),s(Te,yr),s(yr,Ih),s(Te,Ch),s(Te,Jr),s(Jr,qh),s(Te,Wh),u(e,Fi,i),u(e,le,i),s(le,kh),s(le,jr),s(jr,Zh),s(le,Gh),s(le,br),s(br,$h),s(le,Nh),s(le,Er),s(Er,Bh),s(le,zh),u(e,Hi,i),u(e,ne,i),s(ne,Ah),s(ne,Ur),s(Ur,xh),s(ne,Vh),s(ne,Tr),s(Tr,Xh),s(ne,Rh),s(ne,wr),s(wr,Sh),s(ne,Qh),u(e,Di,i),u(e,Z,i),s(Z,Yh),s(Z,_r),s(_r,Fh),s(Z,Hh),s(Z,gr),s(gr,Dh),s(Z,Ph),s(Z,Ir),s(Ir,Lh),s(Z,Oh),s(Z,Cr),s(Cr,Kh),s(Z,ev),s(Z,qr),s(qr,sv),s(Z,tv),u(e,Pi,i),u(e,Xe,i),s(Xe,Ms),s(Ms,Wr),M(Ct,Wr,null),s(Xe,lv),s(Xe,kr),s(kr,nv),u(e,Li,i),u(e,g,i),s(g,av),s(g,Zr),s(Zr,rv),s(g,ov),s(g,Gr),s(Gr,iv),s(g,uv),s(g,$r),s($r,pv),s(g,cv),s(g,Nr),s(Nr,dv),s(g,mv),s(g,Br),s(Br,fv),s(g,Mv),s(g,qt),s(qt,hv),s(g,vv),u(e,Oi,i),M(Wt,e,i),u(e,Ki,i),u(e,Re,i),s(Re,hs),s(hs,zr),M(kt,zr,null),s(Re,yv),s(Re,Ar),s(Ar,Jv),u(e,eu,i),u(e,j,i),s(j,jv),s(j,xr),s(xr,bv),s(j,Ev),s(j,Vr),s(Vr,Uv),s(j,Tv),s(j,Xr),s(Xr,wv),s(j,_v),s(j,Rr),s(Rr,gv),s(j,Iv),s(j,Sr),s(Sr,Cv),s(j,qv),s(j,Qr),s(Qr,Wv),s(j,kv),s(j,Yr),s(Yr,Zv),s(j,Gv),s(j,Fr),s(Fr,$v),s(j,Nv),u(e,su,i),u(e,R,i),s(R,Bv),s(R,Hr),s(Hr,zv),s(R,Av),s(R,Dr),s(Dr,xv),s(R,Vv),s(R,Pr),s(Pr,Xv),s(R,Rv),s(R,ul),s(ul,Sv),s(R,Qv),tu=!0},p(e,[i]){const Zt={};i&2&&(Zt.$$scope={dirty:i,ctx:e}),He.$set(Zt);const Lr={};i&2&&(Lr.$$scope={dirty:i,ctx:e}),ps.$set(Lr)},i(e){tu||(h(gs.$$.fragment,e),h(Is.$$.fragment,e),h(ks.$$.fragment,e),h(Zs.$$.fragment,e),h(Gs.$$.fragment,e),h(Ns.$$.fragment,e),h(Bs.$$.fragment,e),h(He.$$.fragment,e),h(zs.$$.fragment,e),h(As.$$.fragment,e),h(Ss.$$.fragment,e),h(Qs.$$.fragment,e),h(Ys.$$.fragment,e),h(Fs.$$.fragment,e),h(Hs.$$.fragment,e),h(Ps.$$.fragment,e),h(Os.$$.fragment,e),h(Ks.$$.fragment,e),h(et.$$.fragment,e),h(st.$$.fragment,e),h(tt.$$.fragment,e),h(lt.$$.fragment,e),h(nt.$$.fragment,e),h(it.$$.fragment,e),h(ut.$$.fragment,e),h(pt.$$.fragment,e),h(ct.$$.fragment,e),h(dt.$$.fragment,e),h(mt.$$.fragment,e),h(ft.$$.fragment,e),h(Mt.$$.fragment,e),h(vt.$$.fragment,e),h(yt.$$.fragment,e),h(jt.$$.fragment,e),h(ps.$$.fragment,e),h(bt.$$.fragment,e),h(Et.$$.fragment,e),h(Ut.$$.fragment,e),h(gt.$$.fragment,e),h(It.$$.fragment,e),h(Ct.$$.fragment,e),h(Wt.$$.fragment,e),h(kt.$$.fragment,e),tu=!0)},o(e){v(gs.$$.fragment,e),v(Is.$$.fragment,e),v(ks.$$.fragment,e),v(Zs.$$.fragment,e),v(Gs.$$.fragment,e),v(Ns.$$.fragment,e),v(Bs.$$.fragment,e),v(He.$$.fragment,e),v(zs.$$.fragment,e),v(As.$$.fragment,e),v(Ss.$$.fragment,e),v(Qs.$$.fragment,e),v(Ys.$$.fragment,e),v(Fs.$$.fragment,e),v(Hs.$$.fragment,e),v(Ps.$$.fragment,e),v(Os.$$.fragment,e),v(Ks.$$.fragment,e),v(et.$$.fragment,e),v(st.$$.fragment,e),v(tt.$$.fragment,e),v(lt.$$.fragment,e),v(nt.$$.fragment,e),v(it.$$.fragment,e),v(ut.$$.fragment,e),v(pt.$$.fragment,e),v(ct.$$.fragment,e),v(dt.$$.fragment,e),v(mt.$$.fragment,e),v(ft.$$.fragment,e),v(Mt.$$.fragment,e),v(vt.$$.fragment,e),v(yt.$$.fragment,e),v(jt.$$.fragment,e),v(ps.$$.fragment,e),v(bt.$$.fragment,e),v(Et.$$.fragment,e),v(Ut.$$.fragment,e),v(gt.$$.fragment,e),v(It.$$.fragment,e),v(Ct.$$.fragment,e),v(Wt.$$.fragment,e),v(kt.$$.fragment,e),tu=!1},d(e){t(T),e&&t(C),e&&t(F),y(gs),e&&t(Kr),e&&t(D),e&&t(eo),e&&t($t),e&&t(so),e&&t(P),e&&t(to),e&&t(Qe),e&&t(lo),e&&t(qe),y(Is),e&&t(no),e&&t(L),e&&t(ao),e&&t(O),e&&t(ro),e&&t(w),e&&t(oo),y(ks,e),e&&t(io),e&&t(Nt),e&&t(uo),y(Zs,e),e&&t(po),e&&t(We),y(Gs),e&&t(co),e&&t(ke),e&&t(mo),e&&t(A),e&&t(fo),y(Ns,e),e&&t(Mo),e&&t(Bt),e&&t(ho),y(Bs,e),e&&t(vo),y(He,e),e&&t(yo),e&&t(q),e&&t(Jo),y(zs,e),e&&t(jo),e&&t(Ze),y(As),e&&t(bo),e&&t(zt),e&&t(Eo),e&&t(ce),e&&t(Uo),e&&t(W),e&&t(To),e&&t(b),e&&t(wo),e&&t(At),e&&t(_o),y(Ss,e),e&&t(go),e&&t(de),e&&t(Io),e&&t(Pe),e&&t(Co),e&&t(me),e&&t(qo),e&&t(K),e&&t(Wo),y(Qs,e),e&&t(ko),e&&t(x),e&&t(Zo),e&&t(Ge),y(Ys),e&&t(Go),e&&t(Oe),e&&t($o),y(Fs,e),e&&t(No),e&&t(xt),e&&t(Bo),y(Hs,e),e&&t(zo),e&&t(Vt),e&&t(Ao),e&&t(Ke),e&&t(xo),y(Ps,e),e&&t(Vo),e&&t(Xt),e&&t(Xo),e&&t(fe),e&&t(Ro),y(Os,e),e&&t(So),e&&t(ee),e&&t(Qo),y(Ks,e),e&&t(Yo),e&&t(Me),e&&t(Fo),y(et,e),e&&t(Ho),e&&t(he),e&&t(Do),y(st,e),e&&t(Po),e&&t(Rt),e&&t(Lo),y(tt,e),e&&t(Oo),e&&t(St),e&&t(Ko),y(lt,e),e&&t(ei),e&&t(es),e&&t(si),e&&t(Ne),y(nt),e&&t(ti),e&&t(ts),e&&t(li),e&&t(se),e&&t(ni),e&&t(ls),e&&t(ai),e&&t(Be),y(it),e&&t(ri),e&&t(V),e&&t(oi),e&&t(X),e&&t(ii),e&&t(E),e&&t(ui),e&&t(ve),e&&t(pi),y(ut,e),e&&t(ci),e&&t(Qt),e&&t(di),y(pt,e),e&&t(mi),e&&t(Yt),e&&t(fi),e&&t(ze),y(ct),e&&t(Mi),e&&t(rs),e&&t(hi),e&&t(os),e&&t(vi),y(dt,e),e&&t(yi),e&&t(k),e&&t(Ji),y(mt,e),e&&t(ji),e&&t(Ae),y(ft),e&&t(bi),e&&t(ye),e&&t(Ei),y(Mt,e),e&&t(Ui),e&&t(U),e&&t(Ti),y(vt,e),e&&t(wi),e&&t(xe),y(yt),e&&t(_i),e&&t(Je),e&&t(gi),y(jt,e),e&&t(Ii),y(ps,e),e&&t(Ci),e&&t(je),e&&t(qi),y(bt,e),e&&t(Wi),e&&t(Ht),e&&t(ki),e&&t(Ve),y(Et),e&&t(Zi),e&&t(Dt),e&&t(Gi),y(Ut,e),e&&t($i),e&&t(te),e&&t(Ni),e&&t(Pt),e&&t(Bi),e&&t(ds),e&&t(zi),e&&t(ms),e&&t(Ai),e&&t(fs),e&&t(xi),e&&t(be),e&&t(Vi),e&&t(_),e&&t(Xi),e&&t(Ee),e&&t(Ri),y(gt,e),e&&t(Si),e&&t(Ue),e&&t(Qi),y(It,e),e&&t(Yi),e&&t(Te),e&&t(Fi),e&&t(le),e&&t(Hi),e&&t(ne),e&&t(Di),e&&t(Z),e&&t(Pi),e&&t(Xe),y(Ct),e&&t(Li),e&&t(g),e&&t(Oi),y(Wt,e),e&&t(Ki),e&&t(Re),y(kt),e&&t(eu),e&&t(j),e&&t(su),e&&t(R)}}}const gb={local:"comment-finetuner-un-systme-de-reconnaissance-automatique-de-la-parole-avec-lapi-trainer",sections:[{local:"prparer-lenvironnement",title:"Pr\xE9parer l'environnement"},{local:"charger-le-jeu-de-donnes",title:"Charger le jeu de donn\xE9es"},{local:"extracteur-de-caractristiques-tokeniser-et-processeur",title:"Extracteur de caract\xE9ristiques, tokeniser et processeur"},{local:"prtraitement-des-donnes",title:"Pr\xE9traitement des donn\xE9es"},{local:"entranement-et-valuation",sections:[{local:"dfinir-un-assembleur-de-donnes",title:"D\xE9finir un assembleur de donn\xE9es"},{local:"mtriques-dvaluation",title:"M\xE9triques d'\xE9valuation"},{local:"charger-un-checkpoint-prentran",title:"Charger un *checkpoint* pr\xE9-entra\xEEn\xE9"}],title:"Entra\xEEnement et \xE9valuation"},{local:"dfinir-la-configuration-de-lentranement",sections:[{local:"entranement",title:"Entra\xEEnement"}],title:"D\xE9finir la configuration de l'entra\xEEnement"},{local:"partager-votre-modle",title:"Partager votre mod\xE8le"},{local:"conclusion",title:"Conclusion"}],title:"Comment finetuner un syst\xE8me de reconnaissance automatique de la parole avec l'API Trainer"};function Ib(Gt){return Ub(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Zb extends Jb{constructor(T){super();jb(this,T,Ib,_b,bb,{})}}export{Zb as default,gb as metadata};
