import{S as sM,i as tM,s as nM,e as l,k as p,w as M,t as n,U as mo,M as aM,c as o,d as t,m as d,a as r,x as f,h as a,V as ho,b as c,N as Dh,G as s,g as u,y,L as lM,q as v,o as T,B as U,v as oM}from"../../chunks/vendor-hf-doc-builder.js";import{I as Ja}from"../../chunks/IconCopyLink-hf-doc-builder.js";import{C as E}from"../../chunks/CodeBlock-hf-doc-builder.js";function rM(Rd){let te,ga,ne,ue,Ds,Je,Mo,Os,fo,wa,G,yo,Ps,vo,To,Ks,Uo,bo,et,Eo,jo,st,Jo,go,Ia,Es,wo,qa,pe,ge,Io,tt,qo,So,_o,nt,Bo,Sa,N,Ro,at,ko,Go,lt,xo,Vo,ot,Co,Wo,_a,ae,de,rt,we,No,it,$o,Ba,ce,Fo,js,Zo,Ao,Ra,Ie,ka,Js,ut,Yo,Ga,qe,xa,gs,Qo,Va,Se,Ca,ws,pt,Xo,Wa,_e,Na,I,Ho,dt,zo,Lo,ct,Do,Oo,mt,Po,Ko,ht,er,sr,Mt,tr,nr,$a,Be,Fa,me,ar,ft,lr,or,Za,Re,Aa,Is,rr,Ya,ke,Qa,he,ir,yt,ur,pr,Xa,z,Ge,vt,dr,cr,Tt,mr,hr,xe,Ut,Mr,fr,bt,yr,vr,Me,Et,Tr,Ur,jt,br,Er,Ha,Ve,qs,kd,za,L,jr,Jt,Jr,gr,gt,wr,Ir,La,le,fe,wt,Ce,qr,It,Sr,Da,ye,_r,qt,Br,Rr,Oa,Ss,St,kr,Pa,m,Gr,_t,xr,Vr,We,Cr,Wr,Bt,Nr,$r,Rt,Fr,Zr,kt,Ar,Yr,Gt,Qr,Xr,xt,Hr,zr,Ne,Lr,Dr,Vt,Or,Pr,Ct,Kr,ei,Wt,si,ti,Nt,ni,ai,$e,li,$t,oi,ri,Ft,ii,ui,Zt,pi,di,Fe,At,ci,mi,Yt,hi,Mi,Qt,fi,yi,Xt,vi,Ti,Ka,ve,Ht,q,zt,Ui,bi,Lt,Ei,ji,Dt,Ji,gi,Ot,Pt,wi,Ii,Kt,qi,Si,en,_i,Bi,W,S,sn,Ri,ki,tn,Gi,xi,nn,Vi,Ci,an,Wi,Ni,ln,Ze,$i,Fi,on,Ae,Zi,Ai,_,rn,Yi,Qi,un,Xi,Hi,pn,zi,Li,dn,Di,Oi,cn,Ye,Pi,Ki,mn,Qe,eu,su,B,hn,tu,nu,Mn,au,lu,fn,ou,ru,yn,iu,uu,vn,Xe,pu,du,Tn,He,cu,mu,R,Un,hu,Mu,bn,fu,yu,En,vu,Tu,jn,Uu,bu,Jn,ze,Eu,ju,gn,Le,Ju,gu,k,wn,wu,Iu,In,qu,Su,qn,_u,Bu,Sn,Ru,ku,_n,Gu,xu,Bn,De,Vu,el,$,Cu,Oe,Wu,Nu,Rn,$u,Fu,kn,Zu,Au,sl,Pe,tl,D,Yu,Gn,Qu,Xu,xn,Hu,zu,nl,Ke,al,_s,Vn,Lu,ll,es,ol,Bs,Du,rl,ss,il,J,Ou,Cn,Pu,Ku,Wn,ep,sp,Nn,tp,np,$n,ap,lp,ts,op,rp,Fn,ip,up,ul,ns,pl,Rs,pp,dl,as,cl,ks,Zn,dp,ml,ls,hl,O,cp,An,mp,hp,Yn,Mp,fp,Ml,os,fl,Gs,Qn,yp,yl,rs,vl,g,vp,Xn,Tp,Up,Hn,bp,Ep,zn,jp,Jp,Ln,gp,wp,Dn,Ip,qp,On,Sp,_p,Tl,is,Ul,xs,Pn,Bp,bl,us,El,P,Rp,Kn,kp,Gp,ps,xp,Vp,jl,oe,Te,ea,ds,Cp,sa,Wp,Jl,Vs,Np,gl,cs,wl,Cs,ta,$p,Il,ms,ql,Ws,Fp,Sl,Ue,na,Zp,Ap,re,Yp,aa,Qp,Xp,la,Hp,zp,_l,hs,Ns,Gd,Bl,b,Lp,Rl,Oh='<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex"> i </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>',kl,Gl,Ph='<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex"> i + 1 </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7429em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>',xl,oa,Dp,Op,Vl,Kh='<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex"> i + 1 </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7429em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>',Cl,Wl,eM='<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex"> i </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>',Nl,ra,Pp,Kp,ia,ed,sd,Ms,td,nd,ua,ad,ld,pa,od,rd,$l,fs,Fl,$s,da,id,Zl,ys,Al,K,ud,ca,pd,dd,ma,cd,md,Yl,vs,Ql,Fs,ha,hd,Xl,Ts,Hl,Zs,Md,zl,ie,be,Ma,Us,fd,fa,yd,Ll,w,vd,ya,Td,Ud,va,bd,Ed,Ta,jd,Jd,bs,gd,wd,Ua,ba,Id,qd,Ea,Sd,_d,Dl;return Je=new Ja({}),we=new Ja({}),Ie=new E({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBZGF0YXNldCUyMCUzRCUyMGxvYWRfZGF0YXNldCglMEElMjAlMjAlMjAlMjAlMjJoZi1pbnRlcm5hbC10ZXN0aW5nJTJGbGlicmlzcGVlY2hfYXNyX2R1bW15JTIyJTJDJTIwJTIyY2xlYW4lMjIlMkMlMjBzcGxpdCUzRCUyMnZhbGlkYXRpb24lMjIlMEEpJTBBZGF0YXNldA==",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset

dataset = load_dataset(
    <span class="hljs-string">&quot;hf-internal-testing/librispeech_asr_dummy&quot;</span>, <span class="hljs-string">&quot;clean&quot;</span>, split=<span class="hljs-string">&quot;validation&quot;</span>
)
dataset`}}),qe=new E({props:{code:"RGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidmaWxlJyUyQyUyMCdhdWRpbyclMkMlMjAndGV4dCclMkMlMjAnc3BlYWtlcl9pZCclMkMlMjAnY2hhcHRlcl9pZCclMkMlMjAnaWQnJTVEJTJDJTBBJTIwJTIwJTIwJTIwbnVtX3Jvd3MlM0ElMjA3MyUwQSU3RCk=",highlighted:`<span class="hljs-built_in">Dataset</span>({
    features: <span class="hljs-selector-attr">[<span class="hljs-string">&#x27;file&#x27;</span>, <span class="hljs-string">&#x27;audio&#x27;</span>, <span class="hljs-string">&#x27;text&#x27;</span>, <span class="hljs-string">&#x27;speaker_id&#x27;</span>, <span class="hljs-string">&#x27;chapter_id&#x27;</span>, <span class="hljs-string">&#x27;id&#x27;</span>]</span>,
    num_rows: <span class="hljs-number">73</span>
})`}}),Se=new E({props:{code:"ZnJvbSUyMElQeXRob24uZGlzcGxheSUyMGltcG9ydCUyMEF1ZGlvJTBBJTBBc2FtcGxlJTIwJTNEJTIwZGF0YXNldCU1QjIlNUQlMEElMEFwcmludChzYW1wbGUlNUIlMjJ0ZXh0JTIyJTVEKSUwQUF1ZGlvKHNhbXBsZSU1QiUyMmF1ZGlvJTIyJTVEJTVCJTIyYXJyYXklMjIlNUQlMkMlMjByYXRlJTNEc2FtcGxlJTVCJTIyYXVkaW8lMjIlNUQlNUIlMjJzYW1wbGluZ19yYXRlJTIyJTVEKQ==",highlighted:`<span class="hljs-keyword">from</span> IPython.display <span class="hljs-keyword">import</span> Audio

sample = dataset[<span class="hljs-number">2</span>]

<span class="hljs-built_in">print</span>(sample[<span class="hljs-string">&quot;text&quot;</span>])
Audio(sample[<span class="hljs-string">&quot;audio&quot;</span>][<span class="hljs-string">&quot;array&quot;</span>], rate=sample[<span class="hljs-string">&quot;audio&quot;</span>][<span class="hljs-string">&quot;sampling_rate&quot;</span>])`}}),_e=new E({props:{code:"SEUlMjBURUxMUyUyMFVTJTIwVEhBVCUyMEFUJTIwVEhJUyUyMEZFU1RJVkUlMjBTRUFTT04lMjBPRiUyMFRIRSUyMFlFQVIlMjBXSVRIJTIwQ0hSSVNUTUFTJTIwQU5EJTIwUk9BU1QlMjBCRUVGJTIwTE9PTUlORyUyMEJFRk9SRSUyMFVTJTIwU0lNSUxFUyUyMERSQVdOJTIwRlJPTSUyMEVBVElORyUyMEFORCUyMElUUyUyMFJFU1VMVFMlMjBPQ0NVUiUyME1PU1QlMjBSRUFESUxZJTIwVE8lMjBUSEUlMjBNSU5E",highlighted:'HE TELLS US THAT <span class="hljs-built_in">AT</span> THIS FESTIVE SEASON OF THE YEAR WITH CHRISTMAS <span class="hljs-keyword">AND </span>ROAST <span class="hljs-keyword">BEEF </span>LOOMING <span class="hljs-keyword">BEFORE </span>US SIMILES DRAWN FROM EATING <span class="hljs-keyword">AND </span>ITS RESULTS OCCUR MOST READILY TO THE MIND'}}),Be=new E({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBcGlwZSUyMCUzRCUyMHBpcGVsaW5lKCUyMmF1dG9tYXRpYy1zcGVlY2gtcmVjb2duaXRpb24lMjIlMkMlMjBtb2RlbCUzRCUyMmZhY2Vib29rJTJGd2F2MnZlYzItYmFzZS0xMDBoJTIyKQ==",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;facebook/wav2vec2-base-100h&quot;</span>)`}}),Re=new E({props:{code:"cGlwZShzYW1wbGUlNUIlMjJhdWRpbyUyMiU1RC5jb3B5KCkpJTBBJTdCJTBBJTIwJTIwJTIwJTIwJTIydGV4dCUyMiUzQSUyMCUyMkhFJTIwVEVMTFMlMjBVUyUyMFRIQVQlMjBBVCUyMFRISVMlMjBGRVNUSVZFJTIwU0VBU09OJTIwT0YlMjBUSEUlMjBZRUFSJTIwV0lUSCUyMENIUklTVE1BVVMlMjBBTkQlMjBST1NFJTIwQkVFRiUyMExPT01JTkclMjBCRUZPUkUlMjBVUyUyMFNJTUFMWUlTJTIwRFJBV04lMjBGUk9NJTIwRUFUSU5HJTIwQU5EJTIwSVRTJTIwUkVTVUxUUyUyME9DQ1VSJTIwTU9TVCUyMFJFQURJTFklMjBUTyUyMFRIRSUyME1JTkQlMjIlMEElN0Q=",highlighted:`pipe(sample[<span class="hljs-string">&quot;audio&quot;</span>].copy())
{
    <span class="hljs-string">&quot;text&quot;</span>: <span class="hljs-string">&quot;HE TELLS US THAT AT THIS FESTIVE SEASON OF THE YEAR WITH CHRISTMAUS AND ROSE BEEF LOOMING BEFORE US SIMALYIS DRAWN FROM EATING AND ITS RESULTS OCCUR MOST READILY TO THE MIND&quot;</span>
}`}}),ke=new E({props:{code:"VGFyZ2V0JTNBJTIwJTIwJTIwJTIwJTIwJTIwSEUlMjBURUxMUyUyMFVTJTIwVEhBVCUyMEFUJTIwVEhJUyUyMEZFU1RJVkUlMjBTRUFTT04lMjBPRiUyMFRIRSUyMFlFQVIlMjBXSVRIJTIwQ0hSSVNUTUFTJTIwQU5EJTIwUk9BU1QlMjBCRUVGJTIwTE9PTUlORyUyMEJFRk9SRSUyMFVTJTIwU0lNSUxFUyUyMERSQVdOJTIwRlJPTSUyMEVBVElORyUyMEFORCUyMElUUyUyMFJFU1VMVFMlMjBPQ0NVUiUyME1PU1QlMjBSRUFESUxZJTIwVE8lMjBUSEUlMjBNSU5EJTBBUHJlZGljdGlvbiUzQSUyMCUyMEhFJTIwVEVMTFMlMjBVUyUyMFRIQVQlMjBBVCUyMFRISVMlMjBGRVNUSVZFJTIwU0VBU09OJTIwT0YlMjBUSEUlMjBZRUFSJTIwV0lUSCUyMCoqQ0hSSVNUTUFVUyoqJTIwQU5EJTIwKipST1NFKiolMjBCRUVGJTIwTE9PTUlORyUyMEJFRk9SRSUyMFVTJTIwKipTSU1BTFlJUyoqJTIwRFJBV04lMjBGUk9NJTIwRUFUSU5HJTIwQU5EJTIwSVRTJTIwUkVTVUxUUyUyME9DQ1VSJTIwTU9TVCUyMFJFQURJTFklMjBUTyUyMFRIRSUyME1JTkQ=",highlighted:`<span class="hljs-symbol">Target:</span>      HE TELLS US THAT <span class="hljs-built_in">AT</span> THIS FESTIVE SEASON OF THE YEAR WITH CHRISTMAS <span class="hljs-keyword">AND </span>ROAST <span class="hljs-keyword">BEEF </span>LOOMING <span class="hljs-keyword">BEFORE </span>US SIMILES DRAWN FROM EATING <span class="hljs-keyword">AND </span>ITS RESULTS OCCUR MOST READILY TO THE MIND
<span class="hljs-symbol">Prediction:</span>  HE TELLS US THAT <span class="hljs-built_in">AT</span> THIS FESTIVE SEASON OF THE YEAR WITH **CHRISTMAUS** <span class="hljs-keyword">AND </span>**ROSE** <span class="hljs-keyword">BEEF </span>LOOMING <span class="hljs-keyword">BEFORE </span>US **SIMALYIS** DRAWN FROM EATING <span class="hljs-keyword">AND </span>ITS RESULTS OCCUR MOST READILY TO THE MIND`}}),Ce=new Ja({}),Pe=new E({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwcGlwZWxpbmUlMEElMEFkZXZpY2UlMjAlM0QlMjAlMjJjdWRhJTNBMCUyMiUyMGlmJTIwdG9yY2guY3VkYS5pc19hdmFpbGFibGUoKSUyMGVsc2UlMjAlMjJjcHUlMjIlMEFwaXBlJTIwJTNEJTIwcGlwZWxpbmUoJTBBJTIwJTIwJTIwJTIwJTIyYXV0b21hdGljLXNwZWVjaC1yZWNvZ25pdGlvbiUyMiUyQyUyMG1vZGVsJTNEJTIyb3BlbmFpJTJGd2hpc3Blci1iYXNlJTIyJTJDJTIwZGV2aWNlJTNEZGV2aWNlJTBBKQ==",highlighted:`<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline

device = <span class="hljs-string">&quot;cuda:0&quot;</span> <span class="hljs-keyword">if</span> torch.cuda.is_available() <span class="hljs-keyword">else</span> <span class="hljs-string">&quot;cpu&quot;</span>
pipe = pipeline(
    <span class="hljs-string">&quot;automatic-speech-recognition&quot;</span>, model=<span class="hljs-string">&quot;openai/whisper-base&quot;</span>, device=device
)`}}),Ke=new E({props:{code:"cGlwZShzYW1wbGUlNUIlMjJhdWRpbyUyMiU1RCUyQyUyMG1heF9uZXdfdG9rZW5zJTNEMjU2KQ==",highlighted:'pipe(sample[<span class="hljs-string">&quot;audio&quot;</span>], max_new_tokens=<span class="hljs-number">256</span>)'}}),es=new E({props:{code:"JTdCJ3RleHQnJTNBJTIwJyUyMEhlJTIwdGVsbHMlMjB1cyUyMHRoYXQlMjBhdCUyMHRoaXMlMjBmZXN0aXZlJTIwc2Vhc29uJTIwb2YlMjB0aGUlMjB5ZWFyJTJDJTIwd2l0aCUyMENocmlzdG1hcyUyMGFuZCUyMHJvYXN0JTIwYmVlZiUyMGxvb21pbmclMjBiZWZvcmUlMjB1cyUyQyUyMHNpbWlsYXJseSUyMGlzJTIwZHJhd24lMjBmcm9tJTIwZWF0aW5nJTIwYW5kJTIwaXRzJTIwcmVzdWx0cyUyMG9jY3VyJTIwbW9zdCUyMHJlYWRpbHklMjB0byUyMHRoZSUyMG1pbmQuJyU3RA==",highlighted:'{&#x27;<span class="hljs-built_in">text</span>&#x27;: &#x27; He tells us <span class="hljs-keyword">that</span> <span class="hljs-keyword">at</span> this festive season <span class="hljs-keyword">of</span> <span class="hljs-keyword">the</span> <span class="hljs-built_in">year</span>, <span class="hljs-keyword">with</span> Christmas <span class="hljs-keyword">and</span> roast beef looming <span class="hljs-keyword">before</span> us, similarly <span class="hljs-keyword">is</span> drawn <span class="hljs-keyword">from</span> eating <span class="hljs-keyword">and</span> <span class="hljs-keyword">its</span> results occur most readily <span class="hljs-keyword">to</span> <span class="hljs-keyword">the</span> mind.&#x27;}'}}),ss=new E({props:{code:"VGFyZ2V0JTNBJTIwJTIwJTIwJTIwJTIwSEUlMjBURUxMUyUyMFVTJTIwVEhBVCUyMEFUJTIwVEhJUyUyMEZFU1RJVkUlMjBTRUFTT04lMjBPRiUyMFRIRSUyMFlFQVIlMjBXSVRIJTIwQ0hSSVNUTUFTJTIwQU5EJTIwUk9BU1QlMjBCRUVGJTIwTE9PTUlORyUyMEJFRk9SRSUyMFVTJTIwU0lNSUxFUyUyMERSQVdOJTIwRlJPTSUyMEVBVElORyUyMEFORCUyMElUUyUyMFJFU1VMVFMlMjBPQ0NVUiUyME1PU1QlMjBSRUFESUxZJTIwVE8lMjBUSEUlMjBNSU5EJTBBUHJlZGljdGlvbiUzQSUyMEhlJTIwdGVsbHMlMjB1cyUyMHRoYXQlMjBhdCUyMHRoaXMlMjBmZXN0aXZlJTIwc2Vhc29uJTIwb2YlMjB0aGUlMjB5ZWFyJTJDJTIwd2l0aCUyMCoqQ2hyaXN0bWFzKiolMjBhbmQlMjAqKnJvYXN0KiolMjBiZWVmJTIwbG9vbWluZyUyMGJlZm9yZSUyMHVzJTJDJTIwKipzaW1pbGFybHkqKiUyMGlzJTIwZHJhd24lMjBmcm9tJTIwZWF0aW5nJTIwYW5kJTIwaXRzJTIwcmVzdWx0cyUyMG9jY3VyJTIwbW9zdCUyMHJlYWRpbHklMjB0byUyMHRoZSUyMG1pbmQu",highlighted:`<span class="hljs-symbol">Target:</span>     HE TELLS US THAT <span class="hljs-built_in">AT</span> THIS FESTIVE SEASON OF THE YEAR WITH CHRISTMAS <span class="hljs-keyword">AND </span>ROAST <span class="hljs-keyword">BEEF </span>LOOMING <span class="hljs-keyword">BEFORE </span>US SIMILES DRAWN FROM EATING <span class="hljs-keyword">AND </span>ITS RESULTS OCCUR MOST READILY TO THE MIND
<span class="hljs-symbol">Prediction:</span> He tells us that <span class="hljs-built_in">at</span> this festive season of the year, with **Christmas** <span class="hljs-keyword">and </span>**roast** <span class="hljs-keyword">beef </span>looming <span class="hljs-keyword">before </span>us, **similarly** is drawn from eating <span class="hljs-keyword">and </span>its results occur most readily to the mind.`}}),ns=new E({props:{code:"ZGF0YXNldCUyMCUzRCUyMGxvYWRfZGF0YXNldCglMEElMjAlMjAlMjAlMjAlMjJmYWNlYm9vayUyRm11bHRpbGluZ3VhbF9saWJyaXNwZWVjaCUyMiUyQyUyMCUyMnNwYW5pc2glMjIlMkMlMjBzcGxpdCUzRCUyMnZhbGlkYXRpb24lMjIlMkMlMjBzdHJlYW1pbmclM0RUcnVlJTBBKSUwQXNhbXBsZSUyMCUzRCUyMG5leHQoaXRlcihkYXRhc2V0KSk=",highlighted:`dataset = load_dataset(
    <span class="hljs-string">&quot;facebook/multilingual_librispeech&quot;</span>, <span class="hljs-string">&quot;spanish&quot;</span>, split=<span class="hljs-string">&quot;validation&quot;</span>, streaming=<span class="hljs-literal">True</span>
)
sample = <span class="hljs-built_in">next</span>(<span class="hljs-built_in">iter</span>(dataset))`}}),as=new E({props:{code:"cHJpbnQoc2FtcGxlJTVCJTIydGV4dCUyMiU1RCklMEFBdWRpbyhzYW1wbGUlNUIlMjJhdWRpbyUyMiU1RCU1QiUyMmFycmF5JTIyJTVEJTJDJTIwcmF0ZSUzRHNhbXBsZSU1QiUyMmF1ZGlvJTIyJTVEJTVCJTIyc2FtcGxpbmdfcmF0ZSUyMiU1RCk=",highlighted:`<span class="hljs-built_in">print</span>(sample[<span class="hljs-string">&quot;text&quot;</span>])
Audio(sample[<span class="hljs-string">&quot;audio&quot;</span>][<span class="hljs-string">&quot;array&quot;</span>], rate=sample[<span class="hljs-string">&quot;audio&quot;</span>][<span class="hljs-string">&quot;sampling_rate&quot;</span>])`}}),ls=new E({props:{code:"ZW50b25jZXMlMjB0ZSUyMGRlbGVsaXRhciVDMyVBMXMlMjBlbiUyMGplaG92JUMzJUExJTIweSUyMHlvJTIwdGUlMjBoYXIlQzMlQTklMjBzdWJpciUyMHNvYnJlJTIwbGFzJTIwYWx0dXJhcyUyMGRlJTIwbGElMjB0aWVycmElMjB5JTIwdGUlMjBkYXIlQzMlQTklMjAlQzMlQTElMjBjb21lciUyMGxhJTIwaGVyZWRhZCUyMGRlJTIwamFjb2IlMjB0dSUyMHBhZHJlJTIwcG9ycXVlJTIwbGElMjBib2NhJTIwZGUlMjBqZWhvdiVDMyVBMSUyMGxvJTIwaGElMjBoYWJsYWRv",highlighted:'entonces <span class="hljs-keyword">te</span> delelitar\xE1s <span class="hljs-keyword">en</span> jehov\xE1 y yo <span class="hljs-keyword">te</span> har\xE9 subir sobre las alturas <span class="hljs-keyword">de</span> <span class="hljs-keyword">la</span> tierra y <span class="hljs-keyword">te</span> dar\xE9 \xE1 comer <span class="hljs-keyword">la</span> heredad <span class="hljs-keyword">de</span> jacob tu padre porque <span class="hljs-keyword">la</span> boca <span class="hljs-keyword">de</span> jehov\xE1 lo ha hablado'}}),os=new E({props:{code:"cGlwZShzYW1wbGUlNUIlMjJhdWRpbyUyMiU1RC5jb3B5KCklMkMlMjBtYXhfbmV3X3Rva2VucyUzRDI1NiUyQyUyMGdlbmVyYXRlX2t3YXJncyUzRCU3QiUyMnRhc2slMjIlM0ElMjAlMjJ0cmFuc2NyaWJlJTIyJTdEKQ==",highlighted:'pipe(sample[<span class="hljs-string">&quot;audio&quot;</span>].copy(), max_new_tokens=<span class="hljs-number">256</span>, generate_kwargs={<span class="hljs-string">&quot;task&quot;</span>: <span class="hljs-string">&quot;transcribe&quot;</span>})'}}),rs=new E({props:{code:"JTdCJ3RleHQnJTNBJTIwJyUyMEVudG9uY2VzJTIwdGUlMjBkZWxlaXRhciVDMyVBMXMlMjBlbiUyMEplaG92JUMzJUExJTIweSUyMHlvJTIwdGUlMjBoYXIlQzMlQTklMjBzdWJpciUyMHNvYnJlJTIwbGFzJTIwYWx0dXJhcyUyMGRlJTIwbGElMjB0aWVycmElMjB5JTIwdGUlMjBkYXIlQzMlQTklMjBhJTIwY29tZXIlMjBsYSUyMGhlcmVkYWQlMjBkZSUyMEphY29iJTIwdHUlMjBwYWRyZSUyMHBvcnF1ZSUyMGxhJTIwYm9jYSUyMGRlJTIwSmVob3YlQzMlQTElMjBsbyUyMGhhJTIwaGFibGFkby4nJTdE",highlighted:'{&#x27;text&#x27;: &#x27; Entonces <span class="hljs-keyword">te</span> deleitar\xE1s <span class="hljs-keyword">en</span> Jehov\xE1 y yo <span class="hljs-keyword">te</span> har\xE9 subir sobre las alturas <span class="hljs-keyword">de</span> <span class="hljs-keyword">la</span> tierra y <span class="hljs-keyword">te</span> dar\xE9 a comer <span class="hljs-keyword">la</span> heredad <span class="hljs-keyword">de</span> Jacob tu padre porque <span class="hljs-keyword">la</span> boca <span class="hljs-keyword">de</span> Jehov\xE1 lo ha hablado.&#x27;}'}}),is=new E({props:{code:"cGlwZShzYW1wbGUlNUIlMjJhdWRpbyUyMiU1RCUyQyUyMG1heF9uZXdfdG9rZW5zJTNEMjU2JTJDJTIwZ2VuZXJhdGVfa3dhcmdzJTNEJTdCJTIydGFzayUyMiUzQSUyMCUyMnRyYW5zbGF0ZSUyMiU3RCk=",highlighted:'pipe(sample[<span class="hljs-string">&quot;audio&quot;</span>], max_new_tokens=<span class="hljs-number">256</span>, generate_kwargs={<span class="hljs-string">&quot;task&quot;</span>: <span class="hljs-string">&quot;translate&quot;</span>})'}}),us=new E({props:{code:"JTdCJ3RleHQnJTNBJTIwJyUyMFNvJTIweW91JTIwd2lsbCUyMGNob29zZSUyMGluJTIwSmVob3ZhaCUyMGFuZCUyMEklMjB3aWxsJTIwcmFpc2UlMjB5b3UlMjBvbiUyMHRoZSUyMGhlaWdodHMlMjBvZiUyMHRoZSUyMGVhcnRoJTIwYW5kJTIwSSUyMHdpbGwlMjBnaXZlJTIweW91JTIwdGhlJTIwaG9ub3IlMjBvZiUyMEphY29iJTIwdG8lMjB5b3VyJTIwZmF0aGVyJTIwYmVjYXVzZSUyMHRoZSUyMHZvaWNlJTIwb2YlMjBKZWhvdmFoJTIwaGFzJTIwc3Bva2VuJTIwdG8lMjB5b3UuJyU3RA==",highlighted:'<span class="hljs-comment">{&#x27;text&#x27;:</span> <span class="hljs-comment">&#x27;</span> <span class="hljs-comment">So you will choose in Jehovah and I will raise you on the</span> <span class="hljs-comment">heights</span> <span class="hljs-comment">of the earth and I will give you the</span> <span class="hljs-comment">honor</span> <span class="hljs-comment">of Jacob to your father because the voice of Jehovah has spoken to</span> <span class="hljs-comment">you</span><span class="hljs-string">.</span><span class="hljs-comment">&#x27;}</span>'}}),ds=new Ja({}),cs=new E({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBdGFyZ2V0X2xlbmd0aF9pbl9tJTIwJTNEJTIwNSUwQSUwQSUyMyUyMGNvbnZlcnRpciUyMGxlcyUyMG1pbnV0ZXMlMjBlbiUyMHNlY29uZGVzJTIwKColMjA2MCklMjBlbiUyMG5vbWJyZSUyMGQnJUMzJUE5Y2hhbnRpbGxvbnMlMjAoKiUyMHRhdXglMjBkJyVDMyVBOWNoYW50aWxsb25uYWdlKSUwQXNhbXBsaW5nX3JhdGUlMjAlM0QlMjBwaXBlLmZlYXR1cmVfZXh0cmFjdG9yLnNhbXBsaW5nX3JhdGUlMEF0YXJnZXRfbGVuZ3RoX2luX3NhbXBsZXMlMjAlM0QlMjB0YXJnZXRfbGVuZ3RoX2luX20lMjAqJTIwNjAlMjAqJTIwc2FtcGxpbmdfcmF0ZSUwQSUwQSUyMyUyMGl0JUMzJUE5cmVyJTIwc3VyJTIwbm90cmUlMjBqZXUlMjBkZSUyMGRvbm4lQzMlQTllcyUyMGVuJTIwc3RyZWFtaW5nJTJDJTIwZW4lMjBjb25jYXQlQzMlQTluYW50JTIwbGVzJTIwJUMzJUE5Y2hhbnRpbGxvbnMlMjBqdXNxdSclQzMlQTAlMjBjZSUyMHF1ZSUyMG5vdXMlMjBhdHRlaWduaW9ucyUyMG5vdHJlJTIwY2libGUlMEFsb25nX2F1ZGlvJTIwJTNEJTIwJTVCJTVEJTBBZm9yJTIwc2FtcGxlJTIwaW4lMjBkYXRhc2V0JTNBJTBBJTIwJTIwJTIwJTIwbG9uZ19hdWRpby5leHRlbmQoc2FtcGxlJTVCJTIyYXVkaW8lMjIlNUQlNUIlMjJhcnJheSUyMiU1RCklMEElMjAlMjAlMjAlMjBpZiUyMGxlbihsb25nX2F1ZGlvKSUyMCUzRSUyMHRhcmdldF9sZW5ndGhfaW5fc2FtcGxlcyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJyZWFrJTBBJTBBbG9uZ19hdWRpbyUyMCUzRCUyMG5wLmFzYXJyYXkobG9uZ19hdWRpbyklMEElMEElMjMlMjBSJUMzJUE5c3VsdGF0JTBBc2Vjb25kcyUyMCUzRCUyMGxlbihsb25nX2F1ZGlvKSUyMCUyRiUyMDE2MDAwJTBBbWludXRlcyUyQyUyMHNlY29uZHMlMjAlM0QlMjBkaXZtb2Qoc2Vjb25kcyUyQyUyMDYwKSUwQXByaW50KGYlMjJMZW5ndGglMjBvZiUyMGF1ZGlvJTIwc2FtcGxlJTIwaXMlMjAlN0JtaW51dGVzJTdEJTIwbWludXRlcyUyMCU3QnNlY29uZHMlM0EuMmYlN0QlMjBzZWNvbmRzJTIyKQ==",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np

target_length_in_m = <span class="hljs-number">5</span>

<span class="hljs-comment"># convertir les minutes en secondes (* 60) en nombre d&#x27;\xE9chantillons (* taux d&#x27;\xE9chantillonnage)</span>
sampling_rate = pipe.feature_extractor.sampling_rate
target_length_in_samples = target_length_in_m * <span class="hljs-number">60</span> * sampling_rate

<span class="hljs-comment"># it\xE9rer sur notre jeu de donn\xE9es en streaming, en concat\xE9nant les \xE9chantillons jusqu&#x27;\xE0 ce que nous atteignions notre cible</span>
long_audio = []
<span class="hljs-keyword">for</span> sample <span class="hljs-keyword">in</span> dataset:
    long_audio.extend(sample[<span class="hljs-string">&quot;audio&quot;</span>][<span class="hljs-string">&quot;array&quot;</span>])
    <span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(long_audio) &gt; target_length_in_samples:
        <span class="hljs-keyword">break</span>

long_audio = np.asarray(long_audio)

<span class="hljs-comment"># R\xE9sultat</span>
seconds = <span class="hljs-built_in">len</span>(long_audio) / <span class="hljs-number">16000</span>
minutes, seconds = <span class="hljs-built_in">divmod</span>(seconds, <span class="hljs-number">60</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Length of audio sample is <span class="hljs-subst">{minutes}</span> minutes <span class="hljs-subst">{seconds:<span class="hljs-number">.2</span>f}</span> seconds&quot;</span>)`}}),ms=new E({props:{code:"TGVuZ3RoJTIwb2YlMjBhdWRpbyUyMHNhbXBsZSUyMGlzJTIwNS4wJTIwbWludXRlcyUyMDE3LjIyJTIwc2Vjb25kcw==",highlighted:'<span class="hljs-attribute">Length</span> of audio sample is <span class="hljs-number">5</span>.<span class="hljs-number">0</span> minutes <span class="hljs-number">17</span>.<span class="hljs-number">22</span> seconds'}}),fs=new E({props:{code:"cGlwZSglMEElMjAlMjAlMjAlMjBsb25nX2F1ZGlvJTJDJTBBJTIwJTIwJTIwJTIwbWF4X25ld190b2tlbnMlM0QyNTYlMkMlMEElMjAlMjAlMjAlMjBnZW5lcmF0ZV9rd2FyZ3MlM0QlN0IlMjJ0YXNrJTIyJTNBJTIwJTIydHJhbnNjcmliZSUyMiU3RCUyQyUwQSUyMCUyMCUyMCUyMGNodW5rX2xlbmd0aF9zJTNEMzAlMkMlMEElMjAlMjAlMjAlMjBiYXRjaF9zaXplJTNEOCUyQyUwQSk=",highlighted:`pipe(
    long_audio,
    max_new_tokens=<span class="hljs-number">256</span>,
    generate_kwargs={<span class="hljs-string">&quot;task&quot;</span>: <span class="hljs-string">&quot;transcribe&quot;</span>},
    chunk_length_s=<span class="hljs-number">30</span>,
    batch_size=<span class="hljs-number">8</span>,
)`}}),ys=new E({props:{code:"JTdCJ3RleHQnJTNBJTIwJyUyMEVudG9uY2VzJTIwdGUlMjBkZWxlaXRhciVDMyVBMXMlMjBlbiUyMEplaG92JUMzJUExJTJDJTIweSUyMHlvJTIwdGUlMjBoYXIlQzMlQTklMjBzdWJpciUyMHNvYnJlJTIwbGFzJTIwYWx0dXJhcyUyMGRlJTIwbGElMjB0aWVycmElMkMlMjB5JTIwdGUlMjBkYXIlQzMlQTklMjBhJTIwY29tZXIlMjBsYSUwQWhlcmVkYWQlMjBkZSUyMEphY29iJTIwdHUlMjBwYWRyZSUyQyUyMHBvcnF1ZSUyMGxhJTIwYm9jYSUyMGRlJTIwSmVob3YlQzMlQTElMjBsbyUyMGhhJTIwaGFibGFkby4lMjBub3NvdHJvcyUyMGN1cmFkb3MuJTIwVG9kb3MlMjBub3NvdHJvcyUyMG5vcyUyMGRlc2NhcnJpYW1vcyUwQWNvbW8lMjBiZWphcyUyQyUyMGNhZGElMjBjdWFsJTIwc2UlMjBhcGFydCVDMyVCMyUyMHBvciUyMHN1JTIwY2FtaW5vJTJDJTIwbWFzJTIwSmVob3YlQzMlQTElMjBjYXJnJUMzJUIzJTIwZW4lMjAlQzMlQTlsJTIwZWwlMjBwZWNhZG8lMjBkZSUyMHRvZG9zJTIwbm9zb3Ryb3MuLi4=",highlighted:`{&#x27;text&#x27;: &#x27; Entonces <span class="hljs-keyword">te</span> deleitar\xE1s <span class="hljs-keyword">en</span> Jehov\xE1, y yo <span class="hljs-keyword">te</span> har\xE9 subir sobre las alturas <span class="hljs-keyword">de</span> <span class="hljs-keyword">la</span> tierra, y <span class="hljs-keyword">te</span> dar\xE9 a comer <span class="hljs-keyword">la</span>
heredad <span class="hljs-keyword">de</span> Jacob tu padre, porque <span class="hljs-keyword">la</span> boca <span class="hljs-keyword">de</span> Jehov\xE1 lo ha hablado. nosotros curados. Todos nosotros nos descarriamos
como bejas, cada cual <span class="hljs-keyword">se</span> apart\xF3 por <span class="hljs-keyword">su</span> camino, mas Jehov\xE1 carg\xF3 <span class="hljs-keyword">en</span> \xE9<span class="hljs-keyword">l</span> el pecado <span class="hljs-keyword">de</span> todos nosotros...`}}),vs=new E({props:{code:"cGlwZSglMEElMjAlMjAlMjAlMjBsb25nX2F1ZGlvJTJDJTBBJTIwJTIwJTIwJTIwbWF4X25ld190b2tlbnMlM0QyNTYlMkMlMEElMjAlMjAlMjAlMjBnZW5lcmF0ZV9rd2FyZ3MlM0QlN0IlMjJ0YXNrJTIyJTNBJTIwJTIydHJhbnNjcmliZSUyMiU3RCUyQyUwQSUyMCUyMCUyMCUyMGNodW5rX2xlbmd0aF9zJTNEMzAlMkMlMEElMjAlMjAlMjAlMjBiYXRjaF9zaXplJTNEOCUyQyUwQSUyMCUyMCUyMCUyMHJldHVybl90aW1lc3RhbXBzJTNEVHJ1ZSUyQyUwQSklNUIlMjJjaHVua3MlMjIlNUQ=",highlighted:`pipe(
    long_audio,
    max_new_tokens=<span class="hljs-number">256</span>,
    generate_kwargs={<span class="hljs-string">&quot;task&quot;</span>: <span class="hljs-string">&quot;transcribe&quot;</span>},
    chunk_length_s=<span class="hljs-number">30</span>,
    batch_size=<span class="hljs-number">8</span>,
    return_timestamps=<span class="hljs-literal">True</span>,
)[<span class="hljs-string">&quot;chunks&quot;</span>]`}}),Ts=new E({props:{code:"JTVCJTdCJ3RpbWVzdGFtcCclM0ElMjAoMC4wJTJDJTIwMjYuNCklMkMlMEElMjAlMjAndGV4dCclM0ElMjAnJTIwRW50b25jZXMlMjB0ZSUyMGRlbGVpdGFyJUMzJUExcyUyMGVuJTIwSmVob3YlQzMlQTElMkMlMjB5JTIweW8lMjB0ZSUyMGhhciVDMyVBOSUyMHN1YmlyJTIwc29icmUlMjBsYXMlMjBhbHR1cmFzJTIwZGUlMjBsYSUyMHRpZXJyYSUyQyUyMHklMjB0ZSUyMGRhciVDMyVBOSUyMGElMjBjb21lciUyMGxhJTIwaGVyZWRhZCUyMGRlJTIwSmFjb2IlMjB0dSUyMHBhZHJlJTJDJTIwcG9ycXVlJTIwbGElMjBib2NhJTIwZGUlMjBKZWhvdiVDMyVBMSUyMGxvJTIwaGElMjBoYWJsYWRvLiUyMG5vc290cm9zJTIwY3VyYWRvcy4lMjBUb2RvcyUyMG5vc290cm9zJTIwbm9zJTIwZGVzY2FycmlhbW9zJTIwY29tbyUyMGJlamFzJTJDJTIwY2FkYSUyMGN1YWwlMjBzZSUyMGFwYXJ0JUMzJUIzJTIwcG9yJTIwc3UlMjBjYW1pbm8lMkMnJTdEJTJDJTBBJTIwJTdCJ3RpbWVzdGFtcCclM0ElMjAoMjYuNCUyQyUyMDMyLjQ4KSUyQyUwQSUyMCUyMCd0ZXh0JyUzQSUyMCclMjBtYXMlMjBKZWhvdiVDMyVBMSUyMGNhcmclQzMlQjMlMjBlbiUyMCVDMyVBOWwlMjBlbCUyMHBlY2FkbyUyMGRlJTIwdG9kb3MlMjBub3NvdHJvcy4lMjBObyUyMGVzJTIwcXVlJTIwcGFydGFzJTIwdHUlMjBwYW4lMjBjb24lMjBlbCclN0QlMkMlMEElMjAlN0IndGltZXN0YW1wJyUzQSUyMCgzMi40OCUyQyUyMDM4LjQpJTJDJTBBJTIwJTIwJ3RleHQnJTNBJTIwJyUyMGhhbWJyaWVudG8lMjB5JTIwYSUyMGxvcyUyMGhvbWJyZXMlMjBoZXJyYW50ZXMlMjBtZXRhcyUyMGVuJTIwY2FzYSUyQyUyMHF1ZSUyMGN1YW5kbyUyMHZpZXJlcyUyMGFsJTIwZGVzbnVkbyUyMGxvJTIwY3VicmFzJTIweSUyMG5vJyU3RCUyQyUwQSUyMC4uLg==",highlighted:`[{<span class="hljs-symbol">&#x27;timestamp</span><span class="hljs-symbol">&#x27;:</span> (<span class="hljs-name">0.0</span>, <span class="hljs-number">26.4</span>),
  <span class="hljs-symbol">&#x27;text</span><span class="hljs-symbol">&#x27;:</span> &#x27; Entonces te deleitar\xE1s en Jehov\xE1, y yo te har\xE9 subir sobre las alturas de la tierra, y te dar\xE9 a comer la heredad de Jacob tu padre, porque la boca de Jehov\xE1 lo ha hablado. nosotros curados. Todos nosotros nos descarriamos como bejas, cada cual se apart\xF3 por su camino,&#x27;},
 {<span class="hljs-symbol">&#x27;timestamp</span><span class="hljs-symbol">&#x27;:</span> (<span class="hljs-name">26.4</span>, <span class="hljs-number">32.48</span>),
  <span class="hljs-symbol">&#x27;text</span><span class="hljs-symbol">&#x27;:</span> &#x27; mas Jehov\xE1 carg\xF3 en \xE9l el pecado de todos nosotros. No es que partas tu pan con el&#x27;},
 {<span class="hljs-symbol">&#x27;timestamp</span><span class="hljs-symbol">&#x27;:</span> (<span class="hljs-name">32.48</span>, <span class="hljs-number">38.4</span>),
  <span class="hljs-symbol">&#x27;text</span><span class="hljs-symbol">&#x27;:</span> &#x27; hambriento y a los hombres herrantes metas en casa, que cuando vieres al desnudo lo cubras y no&#x27;},
 ...`}}),Us=new Ja({}),{c(){te=l("meta"),ga=p(),ne=l("h1"),ue=l("a"),Ds=l("span"),M(Je.$$.fragment),Mo=p(),Os=l("span"),fo=n("Mod\xE8les pr\xE9-entra\xEEn\xE9s pour la reconnaissance automatique de la parole"),wa=p(),G=l("p"),yo=n("Dans cette section, nous verrons comment utiliser le "),Ps=l("code"),vo=n("pipeline()"),To=n(" pour tirer parti des mod\xE8les pr\xE9-entra\xEEn\xE9s pour la reconnaissance automatique de la parole. Dans l\u2019[unit\xE9 2](.. /chapter2/asr_pipeline), nous avons introduit le "),Ks=l("code"),Uo=n("pipeline()"),bo=n(" comme un moyen facile d\u2019ex\xE9cuter des t\xE2ches de reconnaissance de la parole, avec tout le pr\xE9traitement et le post-traitement g\xE9r\xE9s sous le capot et la flexibilit\xE9 d\u2019exp\xE9rimenter rapidement avec n\u2019importe quel "),et=l("em"),Eo=n("checkpoint"),jo=n(" pr\xE9-entra\xEEn\xE9 disponible sur le "),st=l("em"),Jo=n("Hub"),go=n(`.
Dans cette unit\xE9, nous irons plus loin et explorerons les diff\xE9rents attributs des mod\xE8les de reconnaissance automatique de la parole et comment nous pouvons les utiliser pour aborder une gamme de t\xE2ches diff\xE9rentes.`),Ia=p(),Es=l("p"),wo=n("Comme d\xE9taill\xE9 dans l\u2019unit\xE9 3, le mod\xE8le de reconnaissance automatique de la parole se divise g\xE9n\xE9ralement dans l\u2019une des deux cat\xE9gories suivantes :"),qa=p(),pe=l("ol"),ge=l("li"),Io=n("Mod\xE8le avec Classification temporelle connexionniste (CTC) : mod\xE8les avec que l\u2019encodeur du "),tt=l("em"),qo=n("transformer"),So=n(" avec une t\xEAte de classification lin\xE9aire sur le dessus"),_o=p(),nt=l("li"),Bo=n("Mod\xE8le de s\xE9quence \xE0 s\xE9quence (Seq2Seq) : mod\xE8les encodeur-d\xE9codeur, avec un m\xE9canisme d\u2019attention crois\xE9e entre l\u2019encodeur et le d\xE9codeur"),Sa=p(),N=l("p"),Ro=n("Avant 2022, la variante avec CTC \xE9tait la plus populaire des deux architectures, avec des mod\xE8les tels que Wav2Vec2, HuBERT et XLSR r\xE9alisant des perc\xE9es dans le paradigme de pr\xE9-entra\xEEnement / "),at=l("em"),ko=n("finetuning"),Go=n(` de la parole.
De grandes entreprises, telles que Meta et Microsoft, ont pr\xE9-entra\xEEn\xE9 l\u2019encodeur sur de grandes quantit\xE9s de donn\xE9es audio non \xE9tiquet\xE9es pendant plusieurs jours ou semaines.
Les utilisateurs pouvent ensuite prendre un `),lt=l("em"),xo=n("checkpoint"),Vo=n(" pr\xE9-entra\xEEn\xE9 et le finetuner avec une t\xEAte CTC sur \xE0 peine "),ot=l("strong"),Co=n("10 minutes"),Wo=n(` de donn\xE9es audio \xE9tiquet\xE9es pour obtenir de solides performances sur une t\xE2che en aval de reconnaissance automatique de la parole.
Cependant, les mod\xE8les CTC ont des lacunes. L\u2019ajout d\u2019une simple couche lin\xE9aire \xE0 un encodeur donne un petit mod\xE8le global rapide, mais peut \xEAtre sujet \xE0 des fautes d\u2019orthographe phon\xE9tiques. Nous allons le d\xE9montrer ci-dessous pour le mod\xE8le Wav2Vec2.`),_a=p(),ae=l("h2"),de=l("a"),rt=l("span"),M(we.$$.fragment),No=p(),it=l("span"),$o=n("Sonder les mod\xE8les CTC"),Ba=p(),ce=l("p"),Fo=n("Chargeons un petit extrait du jeu de donn\xE9es "),js=l("a"),Zo=n("LibriSpeech ASR"),Ao=n(" pour d\xE9montrer les capacit\xE9s de transcription de Wav2Vec2 :"),Ra=p(),M(Ie.$$.fragment),ka=p(),Js=l("p"),ut=l("strong"),Yo=n("Sortie :"),Ga=p(),M(qe.$$.fragment),xa=p(),gs=l("p"),Qo=n("Nous pouvons choisir l\u2019un des 73 \xE9chantillons audio et en inspecter l\u2019audio ainsi que la transcription :"),Va=p(),M(Se.$$.fragment),Ca=p(),ws=l("p"),pt=l("strong"),Xo=n("Sortie :"),Wa=p(),M(_e.$$.fragment),Na=p(),I=l("p"),Ho=n("No\xEBl et r\xF4ti de b\u0153uf, \xE7a sonne bien! \u{1F384} Apr\xE8s avoir choisi un \xE9chantillon de donn\xE9es, nous chargeons maintenant un "),dt=l("em"),zo=n("checkpoint"),Lo=p(),ct=l("em"),Do=n("finetun\xE9"),Oo=n(" dans le "),mt=l("code"),Po=n("pipeline()"),Ko=n(`.
Pour cela, nous utiliserons le `),ht=l("em"),er=n("checkpoint"),sr=n(" officiel [base Wav2Vec2] (facebook/wav2vec2-base-100h) "),Mt=l("em"),tr=n("finetun\xE9"),nr=n(" sur 100 heures de donn\xE9es LibriSpeech :"),$a=p(),M(Be.$$.fragment),Fa=p(),me=l("p"),ar=n(`Ensuite, nous allons prendre un exemple du jeu de donn\xE9es et transmettre ses donn\xE9es brutes au pipeline.
Puisque le pipeline `),ft=l("em"),lr=n("consomme"),or=n(" n\u2019importe quel dictionnaire que nous lui passons (ce qui signifie qu\u2019il ne peut pas \xEAtre r\xE9utilis\xE9), nous transmettrons une copie des donn\xE9es. De cette fa\xE7on, nous pouvons r\xE9utiliser en toute s\xE9curit\xE9 le m\xEAme \xE9chantillon audio dans les exemples suivants:"),Za=p(),M(Re.$$.fragment),Aa=p(),Is=l("p"),rr=n(`Nous pouvons voir que le mod\xE8le Wav2Vec2 fait un assez bon travail pour transcrire cet \xE9chantillon. A premi\xE8re vue, il semble g\xE9n\xE9ralement correct.
Mettons la cible et la pr\xE9diction c\xF4te \xE0 c\xF4te et mettons en \xE9vidence les diff\xE9rences:`),Ya=p(),M(ke.$$.fragment),Qa=p(),he=l("p"),ir=n("En comparant le texte cible \xE0 la transcription pr\xE9vue, nous pouvons voir que tous les mots "),yt=l("em"),ur=n("sonnent"),pr=n(" correctement mais que certains ne sont pas orthographi\xE9s avec pr\xE9cision. Par exemple :"),Xa=p(),z=l("ul"),Ge=l("li"),vt=l("em"),dr=n("CHRISTMAUS"),cr=n(" vs. "),Tt=l("em"),mr=n("CHRISTMAS"),hr=p(),xe=l("li"),Ut=l("em"),Mr=n("ROSE"),fr=n(" vs. "),bt=l("em"),yr=n("ROAST"),vr=p(),Me=l("li"),Et=l("em"),Tr=n("SIMALYIS"),Ur=n(" vs. "),jt=l("em"),br=n("SIMILES"),Er=n(`
Cela met en \xE9vidence les lacunes d\u2019un mod\xE8le CTC. Un mod\xE8le CTC est essentiellement uniquement un mod\xE8le \xAB acoustique\xBB : il se compose d\u2019un encodeur qui forme des repr\xE9sentations d\u2019\xE9tats cach\xE9s \xE0 partir des entr\xE9es audio, et d\u2019une couche lin\xE9aire qui associe les \xE9tats cach\xE9s aux caract\xE8res :`),Ha=p(),Ve=l("div"),qs=l("img"),za=p(),L=l("p"),jr=n(`Cela signifie que le syst\xE8me base presque enti\xE8rement sa pr\xE9diction sur l\u2019entr\xE9e acoustique qui lui a \xE9t\xE9 donn\xE9e (les sons phon\xE9tiques de l\u2019audio), et a donc tendance \xE0 transcrire l\u2019audio de mani\xE8re phon\xE9tique.
Il donne moins d\u2019importance au contexte de mod\xE9lisation linguistique des lettres pr\xE9c\xE9dentes et successives, et est donc sujet aux fautes d\u2019orthographe phon\xE9tique.
Un mod\xE8le plus intelligent identifierait que `),Jt=l("em"),Jr=n("CHRISTMAUS"),gr=n(" n\u2019est pas un mot valide dans le vocabulaire anglais, et le corrigerait en "),gt=l("em"),wr=n("CHRISTMAS"),Ir=n(" lors de ses pr\xE9dictions. Il nous manque \xE9galement deux grandes fonctionnalit\xE9s dans notre pr\xE9diction, la casse et la ponctuation, ce qui limite l\u2019utilit\xE9 des transcriptions du mod\xE8le aux applications r\xE9elles."),La=p(),le=l("h2"),fe=l("a"),wt=l("span"),M(Ce.$$.fragment),qr=p(),It=l("span"),Sr=n("Passage \xE0 Seq2Seq"),Da=p(),ye=l("p"),_r=n("Comme indiqu\xE9 dans l\u2019unit\xE9 3, les mod\xE8les Seq2Seq sont form\xE9s d\u2019un codeur et d\u2019un d\xE9codeur reli\xE9s par un m\xE9canisme d\u2019attention crois\xE9e. L\u2019encodeur joue le m\xEAme r\xF4le qu\u2019auparavant, calculant des repr\xE9sentations d\u2019\xE9tats cach\xE9s des entr\xE9es audio, tandis que le d\xE9codeur joue le r\xF4le d\u2019un "),qt=l("strong"),Br=n("mod\xE8le de langage"),Rr=n(`. Le d\xE9codeur traite toute la s\xE9quence de repr\xE9sentations d\u2019\xE9tats cach\xE9s de l\u2019encodeur et g\xE9n\xE8re les transcriptions de texte correspondantes. Avec le contexte global de l\u2019entr\xE9e audio, le d\xE9codeur est capable d\u2019utiliser le contexte du mod\xE8le de langage lorsqu\u2019il fait ses pr\xE9dictions, corrigeant les fautes d\u2019orthographe \xE0 la vol\xE9e et contournant ainsi le probl\xE8me des pr\xE9dictions phon\xE9tiques.
Les mod\xE8les Seq2Seq pr\xE9sentent deux inconv\xE9nients :`),Oa=p(),Ss=l("ol"),St=l("li"),kr=n("Ils sont intrins\xE8quement plus lents lors du d\xE9codage puisqu\u2019il se produit une \xE9tape \xE0 la fois, plut\xF4t que tout \xE0 la fois 2. Ils n\xE9cessitent beaucoup plus de donn\xE9es d\u2019entra\xEEnement pour converger"),Pa=p(),m=l("p"),Gr=n("Le besoin de grandes quantit\xE9s de donn\xE9es d\u2019apprentissage a \xE9t\xE9 un goulot d\u2019\xE9tranglement dans l\u2019avancement des architectures Seq2Seq pour la parole. Les donn\xE9es audios \xE9tiquet\xE9es sont difficiles \xE0 obtenir, les plus grands jeux de donn\xE9es annot\xE9es \xE0 l\u2019\xE9poque ne totalisant que 10 000 heures. Tout cela a chang\xE9 en 2022 avec la sortie de "),_t=l("strong"),xr=n("Whisper"),Vr=n(". Whisper est un mod\xE8le pr\xE9-entra\xEEn\xE9 pour la reconnaissance automatique de la parole publi\xE9 en "),We=l("a"),Cr=n("septembre 2022"),Wr=n(" par Alec Radford et al. d\u2019OpenAI. Contrairement \xE0 ses pr\xE9d\xE9cesseurs CTC, qui \xE9taient enti\xE8rement pr\xE9-entra\xEEn\xE9s sur des donn\xE9es audio "),Bt=l("strong"),Nr=n("non \xE9tiquet\xE9es"),$r=n(", Whisper est pr\xE9-entra\xEEn\xE9 sur une grande quantit\xE9 de donn\xE9es de transcription audio "),Rt=l("strong"),Fr=n("\xE9tiquet\xE9es"),Zr=n(`, 680 000 heures pour \xEAtre pr\xE9cis.
Il s\u2019agit d\u2019un ordre de grandeur de donn\xE9es plus grand que les donn\xE9es audio non \xE9tiquet\xE9es utilis\xE9es pour entra\xEEner Wav2Vec 2.0 (60 000 heures). De plus, 117 000 heures de ces donn\xE9es de pr\xE9-entra\xEEnement sont des donn\xE9es multilingues. Il en r\xE9sulte des `),kt=l("em"),Ar=n("checkpoints"),Yr=n(" qui peuvent \xEAtre appliqu\xE9s \xE0 plus de 96 langues, dont beaucoup sont consid\xE9r\xE9es comme "),Gt=l("em"),Qr=n("\xE0 faible ressource"),Xr=n(`.
Lorsqu\u2019ils sont pass\xE9s \xE0 l\u2019\xE9chelle, les mod\xE8les Whisper d\xE9montrent une forte capacit\xE9 \xE0 g\xE9n\xE9raliser sur de nombreux jeux de donn\xE9es et domaines. Obtenant des r\xE9sultats comp\xE9titifs de pointe, avec un taux d\u2019erreur de mots (WER) de pr\xE8s de 3% sur le sous-ensemble de test LibriSpeech et de 4,7% WER  sur le sous-ensemble de test TED-LIUM (`),xt=l("em"),Hr=n("cf."),zr=n(" Tableau 8 du "),Ne=l("a"),Lr=n("papier de Whisper"),Dr=n(`).
La capacit\xE9 de Whisper \xE0 g\xE9rer de longs \xE9chantillons audio, sa robustesse au bruit et sa capacit\xE9 \xE0 pr\xE9dire les transcriptions en casse et ponctu\xE9es rev\xEAtent une importance particuli\xE8re. Cela en fait un candidat viable pour les syst\xE8mes de reconnaissance automatique de la parole du monde r\xE9el.
Le reste de cette section vous montrera comment utiliser les mod\xE8les Whisper pr\xE9-entra\xEEn\xE9s pour la reconnaissance automatique de la parole \xE0 l\u2019aide de \u{1F917} `),Vt=l("em"),Or=n("Transformers"),Pr=n(". Dans de nombreuses situations, les "),Ct=l("em"),Kr=n("checkpoints"),ei=n(` pr\xE9-entra\xEEn\xE9s sont extr\xEAmement performants et donnent d\u2019excellents r\xE9sultats, nous vous encourageons donc \xE0 essayer de les utiliser comme premi\xE8re \xE9tape pour r\xE9soudre tout probl\xE8me de reconnaissance automatique de la parole.
Gr\xE2ce \xE0 un `),Wt=l("em"),si=n("finetuning"),ti=n(", les "),Nt=l("em"),ni=n("checkpoints"),ai=n(" peuvent \xEAtre adapt\xE9s \xE0 des jeux de donn\xE9es et \xE0 des langues sp\xE9cifiques afin d\u2019am\xE9liorer encore ces r\xE9sultats. Nous montrerons comment faire cela dans la section sur "),$e=l("a"),li=n("le "),$t=l("em"),oi=n("finetuning"),ri=n(`.
Whisper est disponible en cinq tailles diff\xE9rentes de mod\xE8les. Les quatre plus petits sont entra\xEEn\xE9s soit sur des donn\xE9es en anglais soit sur des donn\xE9es multilingues. Le `),Ft=l("em"),ii=n("checkpoint"),ui=n(" le plus grand est uniquement multilingue. Les neuf "),Zt=l("em"),pi=n("checkpoints"),di=n(" pr\xE9-entra\xEEn\xE9s sont disponibles sur le "),Fe=l("a"),At=l("em"),ci=n("Hub"),mi=n(". Ils sont r\xE9sum\xE9s dans le tableau suivant. \xAB VRAM \xBB indique la m\xE9moire GPU requise pour ex\xE9cuter le mod\xE8le avec une taille de batch minimale de 1. \xAB "),Yt=l("em"),hi=n("Rel Speed"),Mi=n(" \xBB est la vitesse relative d\u2019un "),Qt=l("em"),fi=n("checkpoint"),yi=n(` par rapport au plus grand mod\xE8le.
Sur la base de ces informations, vous pouvez s\xE9lectionner le `),Xt=l("em"),vi=n("checkpoint"),Ti=n(" le plus adapt\xE9 \xE0 votre mat\xE9riel."),Ka=p(),ve=l("table"),Ht=l("thead"),q=l("tr"),zt=l("th"),Ui=n("Taille"),bi=p(),Lt=l("th"),Ei=n("Param\xE8tres"),ji=p(),Dt=l("th"),Ji=n("VRAM / Go"),gi=p(),Ot=l("th"),Pt=l("em"),wi=n("Rel Speed"),Ii=p(),Kt=l("th"),qi=n("Anglais"),Si=p(),en=l("th"),_i=n("Multilingue"),Bi=p(),W=l("tbody"),S=l("tr"),sn=l("td"),Ri=n("tiny"),ki=p(),tn=l("td"),Gi=n("39 M"),xi=p(),nn=l("td"),Vi=n("1.4"),Ci=p(),an=l("td"),Wi=n("32"),Ni=p(),ln=l("td"),Ze=l("a"),$i=n("\u2713"),Fi=p(),on=l("td"),Ae=l("a"),Zi=n("\u2713"),Ai=p(),_=l("tr"),rn=l("td"),Yi=n("base"),Qi=p(),un=l("td"),Xi=n("74 M"),Hi=p(),pn=l("td"),zi=n("1.5"),Li=p(),dn=l("td"),Di=n("16"),Oi=p(),cn=l("td"),Ye=l("a"),Pi=n("\u2713"),Ki=p(),mn=l("td"),Qe=l("a"),eu=n("\u2713"),su=p(),B=l("tr"),hn=l("td"),tu=n("small"),nu=p(),Mn=l("td"),au=n("244 M"),lu=p(),fn=l("td"),ou=n("2.3"),ru=p(),yn=l("td"),iu=n("6"),uu=p(),vn=l("td"),Xe=l("a"),pu=n("\u2713"),du=p(),Tn=l("td"),He=l("a"),cu=n("\u2713"),mu=p(),R=l("tr"),Un=l("td"),hu=n("medium"),Mu=p(),bn=l("td"),fu=n("769 M"),yu=p(),En=l("td"),vu=n("4.2"),Tu=p(),jn=l("td"),Uu=n("2"),bu=p(),Jn=l("td"),ze=l("a"),Eu=n("\u2713"),ju=p(),gn=l("td"),Le=l("a"),Ju=n("\u2713"),gu=p(),k=l("tr"),wn=l("td"),wu=n("large"),Iu=p(),In=l("td"),qu=n("1550 M"),Su=p(),qn=l("td"),_u=n("7.5"),Bu=p(),Sn=l("td"),Ru=n("1"),ku=p(),_n=l("td"),Gu=n("x"),xu=p(),Bn=l("td"),De=l("a"),Vu=n("\u2713"),el=p(),$=l("p"),Cu=n("Chargeons le "),Oe=l("a"),Wu=n("Whisper Base"),Nu=n(", qui est de taille comparable au Wav2Vec2 que nous avons utilis\xE9 pr\xE9c\xE9demment. Anticipant notre passage \xE0 la reconnaissance automatique de la parole multilingue, nous allons charger la variante multilingue du "),Rn=l("em"),$u=n("checkpoint"),Fu=n(" de base. Nous chargons \xE9galement le mod\xE8le sur le GPU s\u2019il est disponible, ou sur le CPU dans le cas contraire. Le "),kn=l("code"),Zu=n("pipeline()"),Au=n(" se chargera ensuite de d\xE9placer toutes les entr\xE9es / sorties du CPU vers le GPU selon les besoins:"),sl=p(),M(Pe.$$.fragment),tl=p(),D=l("p"),Yu=n("Bien, maintenant, transcrivons l\u2019audio comme avant. Le seul changement que nous apportons est de passer un argument suppl\xE9mentaire, "),Gn=l("code"),Qu=n("max_new_tokens"),Xu=n(", qui indique au mod\xE8le le nombre maximum de "),xn=l("em"),Hu=n("tokens"),zu=n(" \xE0 g\xE9n\xE9rer lors de sa pr\xE9diction :"),nl=p(),M(Ke.$$.fragment),al=p(),_s=l("p"),Vn=l("strong"),Lu=n("Sortie :"),ll=p(),M(es.$$.fragment),ol=p(),Bs=l("p"),Du=n("La premi\xE8re chose que vous remarquerez est la pr\xE9sence de la casse et de la ponctuation. Cela rend imm\xE9diatement la transcription plus facile \xE0 lire par rapport \xE0 la transcription non cas\xE9e et non ponctu\xE9e de Wav2Vec2. Mettons la transcription c\xF4te \xE0 c\xF4te avec la cible :"),rl=p(),M(ss.$$.fragment),il=p(),J=l("p"),Ou=n("Whisper a fait un excellent travail pour corriger les erreurs phon\xE9tiques que nous avons vues avec Wav2Vec2 : "),Cn=l("em"),Pu=n("Christmas"),Ku=n(" et "),Wn=l("em"),ep=n("roast"),sp=n(" sont orthographi\xE9s correctement. Nous voyons que le mod\xE8le a encore du mal avec "),Nn=l("em"),tp=n("SIMILES"),np=n(", \xE9tant incorrectement transcrit comme "),$n=l("em"),ap=n("similarly"),lp=n(`, mais cette fois la pr\xE9diction est un mot valide du vocabulaire anglais. L\u2019utilisation d\u2019un Whisper plus grand peut aider \xE0 r\xE9duire davantage les erreurs de transcription, au d\xE9triment d\u2019un calcul plus important et d\u2019un temps de transcription plus long.
On nous a promis un mod\xE8le capable de g\xE9rer 96 langues, alors passons \xE0 de la reconnaissance automatique multilingue \u{1F30E} !
Le jeu de donn\xE9es `),ts=l("a"),op=n("Multilingual LibriSpeech"),rp=n(" (MLS) est l\u2019\xE9quivalent multilingue du jeu de donn\xE9es LibriSpeech, avec des donn\xE9es audio \xE9tiquet\xE9es en six langues. Nous allons charger un \xE9chantillon de l\u2019\xE9chantillon espagnol de MLS, en utilisant le mode "),Fn=l("em"),ip=n("streaming"),up=n(" afin de ne pas avoir \xE0 t\xE9l\xE9charger l\u2019ensemble de donn\xE9es :"),ul=p(),M(ns.$$.fragment),pl=p(),Rs=l("p"),pp=n("Encore une fois, nous allons inspecter la transcription du texte et \xE9couter le segment audio:"),dl=p(),M(as.$$.fragment),cl=p(),ks=l("p"),Zn=l("strong"),dp=n("Sortie :"),ml=p(),M(ls.$$.fragment),hl=p(),O=l("p"),cp=n("C\u2019est le texte cible que nous visons avec notre transcription Whisper. Bien que nous sachions maintenant que nous pouvons probablement faire mieux, puisque notre mod\xE8le va aussi pr\xE9dire la ponctuation et la casse, qui ne sont pas pr\xE9sents dans la r\xE9f\xE9rence. Transmettons l\u2019\xE9chantillon audio au pipeline pour obtenir notre pr\xE9diction de texte. Une chose \xE0 noter est que le pipeline "),An=l("em"),mp=n("consomme"),hp=n(" le dictionnaire des entr\xE9es audio que nous entrons, ce qui signifie que le dictionnaire ne peut pas \xEAtre r\xE9utilis\xE9. Pour contourner ce probl\xE8me, nous allons passer une "),Yn=l("em"),Mp=n("copie"),fp=n(" de l\u2019\xE9chantillon audio, afin de pouvoir r\xE9utiliser le m\xEAme \xE9chantillon audio dans les exemples de code suivants :"),Ml=p(),M(os.$$.fragment),fl=p(),Gs=l("p"),Qn=l("strong"),yp=n("Sortie :"),yl=p(),M(rs.$$.fragment),vl=p(),g=l("p"),vp=n("Super, cela ressemble \xE9norm\xE9ment \xE0 notre texte de r\xE9f\xE9rence (sans doute mieux car il a une ponctuation et une casse !). Vous remarquerez que nous avons transf\xE9r\xE9 "),Xn=l("code"),Tp=n('"task"'),Up=n(" en tant que "),Hn=l("em"),bp=n("generate kwarg"),Ep=n(". D\xE9finir la "),zn=l("code"),jp=n('"task"'),Jp=n(" \xE0 "),Ln=l("code"),gp=n('"transcribe"'),wp=n(" oblige Whisper \xE0 effectuer la t\xE2che de reconnaissance de la parole, o\xF9 l\u2019audio est transcrit dans la m\xEAme langue que le discours a \xE9t\xE9 prononc\xE9. Whisper est \xE9galement capable d\u2019effectuer la t\xE2che \xE9troitement li\xE9e de traduction de la parole, o\xF9 l\u2019audio en espagnol peut \xEAtre traduit en texte en anglais. Pour y parvenir, nous d\xE9finissons la "),Dn=l("code"),Ip=n('"task"'),qp=n(" sur "),On=l("code"),Sp=n('"translate"'),_p=n(" :"),Tl=p(),M(is.$$.fragment),Ul=p(),xs=l("p"),Pn=l("strong"),Bp=n("Sortie :"),bl=p(),M(us.$$.fragment),El=p(),P=l("p"),Rp=n(`Maintenant que nous savons que nous pouvons basculer entre la reconnaissance automatique de la parole et la traduction de la parole, nous pouvons choisir notre t\xE2che en fonction de nos besoins. Soit nous reconnaissons l\u2019audio dans la langue X vers le texte dans la m\xEAme langue X (par exemple, l\u2019audio espagnol vers le texte espagnol), soit nous traduisons de l\u2019audio dans n\u2019importe quelle langue X vers du texte en anglais (par exemple, l\u2019audio espagnol vers le texte anglais).
Pour en savoir plus sur la fa\xE7on dont l\u2019argument `),Kn=l("code"),kp=n('"task"'),Gp=n(" est utilis\xE9 pour contr\xF4ler les propri\xE9t\xE9s du texte g\xE9n\xE9r\xE9, reportez-vous \xE0 la "),ps=l("a"),xp=n("carte de mod\xE8le"),Vp=n(" pour le mod\xE8le Whisper base."),jl=p(),oe=l("h2"),Te=l("a"),ea=l("span"),M(ds.$$.fragment),Cp=p(),sa=l("span"),Wp=n("Longue transcription et horodatage"),Jl=p(),Vs=l("p"),Np=n(`Jusqu\u2019\xE0 pr\xE9sent, nous nous sommes concentr\xE9s sur la transcription de courts \xE9chantillons audio de moins de 30 secondes. Nous avons mentionn\xE9 que l\u2019un des attraits de Whisper \xE9tait sa capacit\xE9 \xE0 travailler sur de longs \xE9chantillons audio. Nous allons nous attaquer \xE0 cette t\xE2che ici !
Cr\xE9ons un long fichier audio en concat\xE9nant des \xE9chantillons successifs \xE0 partir du jeu de donn\xE9es MLS. \xC9tant donn\xE9 que MLS est organis\xE9 en divisant de longs enregistrements de livres audio en segments plus courts, la concat\xE9nation d\u2019\xE9chantillons est un moyen de reconstruire des passages de livres audio plus longs. Par cons\xE9quent, l\u2019audio r\xE9sultant doit \xEAtre coh\xE9rent sur l\u2019ensemble de l\u2019\xE9chantillon. Nous allons d\xE9finir notre dur\xE9e audio cible sur 5 minutes et arr\xEAter de concat\xE9ner des \xE9chantillons une fois que nous aurons atteint cette valeur :`),gl=p(),M(cs.$$.fragment),wl=p(),Cs=l("p"),ta=l("strong"),$p=n("Sortie :"),Il=p(),M(ms.$$.fragment),ql=p(),Ws=l("p"),Fp=n("5 minutes et 17 secondes d\u2019audio \xE0 transcrire. Le transfert de ce long \xE9chantillon audio directement vers le mod\xE8le pose deux probl\xE8mes :"),Sl=p(),Ue=l("ol"),na=l("li"),Zp=n("Whisper est intrins\xE8quement con\xE7u pour fonctionner avec des \xE9chantillons de 30 secondes. Tout ce qui est inf\xE9rieur \xE0 30s est rembourr\xE9 \xE0 30s avec du silence, et tout ce qui d\xE9passe 30s est tronqu\xE9 \xE0 30s en coupant l\u2019audio exc\xE9dentaire. Donc si nous passons notre audio directement, nous n\u2019obtiendrons la transcription que pour les 30 premi\xE8res secondes"),Ap=p(),re=l("li"),Yp=n("La m\xE9moire dans un "),aa=l("em"),Qp=n("transformer"),Xp=n(` \xE9volue quadratiquement avec la longueur de s\xE9quence a : doubler la longueur d\u2019entr\xE9e quadruple le besoin en m\xE9moire, de sorte que le passage de fichiers audio tr\xE8s longs entra\xEEnera in\xE9vitablement une erreur de m\xE9moire insuffisante (OOM : out-of-memory)
La transcription de longs audio fonctionne dans \u{1F917} `),la=l("em"),Hp=n("Transformers"),zp=n(` en segmentant l\u2019audio d\u2019entr\xE9e en segments plus petits et plus faciles \xE0 g\xE9rer.
Chaque segment a un petit chevauchement avec le pr\xE9c\xE9dent. Cela nous permet de recoudre avec pr\xE9cision les segments aux bornes, car nous pouvons trouver le chevauchement entre les segments et fusionner les transcriptions en cons\xE9quence :`),_l=p(),hs=l("div"),Ns=l("img"),Bl=p(),b=l("p"),Lp=n("L\u2019avantage de segmenter les \xE9chantillons est que nous n\u2019avons pas besoin du r\xE9sultat du bloc "),Rl=new mo,kl=n(" pour transcrire le morceau suivant "),Gl=new mo,xl=n(". La couture est effectu\xE9e apr\xE8s que nous ayons transcrit tous les morceaux aux bornes des morceaux. Donc peu importe l\u2019ordre dans lequel nous transcrivons les morceaux. L\u2019algorithme est enti\xE8rement "),oa=l("strong"),Dp=n("sans \xE9tats"),Op=n(", donc nous pouvons m\xEAme faire du d\xE9coupage sur "),Vl=new mo,Cl=n(" en m\xEAme temps que du d\xE9coupage sur "),Wl=new mo,Nl=n(" ! Cela nous permet de former des "),ra=l("em"),Pp=n("batch"),Kp=n(" de morceaux et de les ex\xE9cuter dans le mod\xE8le en parall\xE8le, offrant une grande acc\xE9l\xE9ration de calcul par rapport \xE0 leur transcription s\xE9quentielle. Pour en savoir plus sur la segmentation d\u2019audio dans \u{1F917} "),ia=l("em"),ed=n("Transformers"),sd=n(", vous pouvez vous r\xE9f\xE9rer \xE0 cet [article de blog] ("),Ms=l("a"),td=n("https://huggingface.co/blog/asr-chunking"),nd=n(`) (en anglais).
Pour activer les longues transcriptions, nous devons ajouter un argument suppl\xE9mentaire lorsque nous appelons le pipeline. Cet argument, `),ua=l("code"),ad=n("chunk_length_s"),ld=n(`, contr\xF4le la longueur des segments divis\xE9s en secondes. Pour Whisper, des morceaux de 30 secondes sont optimaux, car cela correspond \xE0 la longueur d\u2019entr\xE9e attendue par Whisper.
Pour activer le traitement par batch, nous devons passer l\u2019argument `),pa=l("code"),od=n("batch_size"),rd=n(" au pipeline. En mettant tout cela ensemble, nous pouvons transcrire le long \xE9chantillon audio comme suit:"),$l=p(),M(fs.$$.fragment),Fl=p(),$s=l("p"),da=l("strong"),id=n("Sortie :"),Zl=p(),M(ys.$$.fragment),Al=p(),K=l("p"),ud=n(`Nous n\u2019affichons pas toute la sortie ici car elle est assez longue (312 mots au total). Sur un GPU V100 de 16 Go, vous pouvez vous attendre \xE0 ce que la ligne ci-dessus prenne environ 3,45 secondes \xE0 s\u2019\xE9x\xE9cuter, ce qui est assez bon pour un \xE9chantillon audio de 317 secondes. Sur un CPU, attendez-vous \xE0 plus de 30 secondes.
Whisper est \xE9galement capable de pr\xE9dire les `),ca=l("em"),pd=n("horodatages"),dd=n(` au niveau du segment pour les donn\xE9es audio. Ces horodatages indiquent l\u2019heure de d\xE9but et de fin d\u2019un court passage audio et sont particuli\xE8rement utiles pour aligner une transcription avec l\u2019audio d\u2019entr\xE9e. Supposons que nous voulions fournir des sous-titres pour une vid\xE9o. Nous avons besoin de ces horodatages pour savoir quelle partie de la transcription correspond \xE0 un certain segment de vid\xE9o, afin d\u2019afficher la transcription correcte pour cette heure.
L\u2019activation de la pr\xE9diction d\u2019horodatage est simple, il suffit de d\xE9finir l\u2019argument `),ma=l("code"),cd=n("return_timestamps=True"),md=n(". Les horodatages sont compatibles avec les m\xE9thodes de segmentation et de traitement par batchs que nous avons utilis\xE9es pr\xE9c\xE9demment. Nous pouvons donc simplement ajouter l\u2019argument timestamp \xE0 notre code pr\xE9c\xE9dent :"),Yl=p(),M(vs.$$.fragment),Ql=p(),Fs=l("p"),ha=l("strong"),hd=n("Sortie :"),Xl=p(),M(Ts.$$.fragment),Hl=p(),Zs=l("p"),Md=n("Et le tour est jou\xE9 ! Nous avons notre texte pr\xE9dit ainsi que les horodatages correspondants."),zl=p(),ie=l("h2"),be=l("a"),Ma=l("span"),M(Us.$$.fragment),fd=p(),fa=l("span"),yd=n("R\xE9sum\xE9"),Ll=p(),w=l("p"),vd=n("Whisper est un mod\xE8le pr\xE9-entra\xEEn\xE9 solide pour la reconnaissance automatique de la parole et la traduction. Par rapport \xE0 Wav2Vec2, il a une plus grande pr\xE9cision de transcription, avec des sorties qui contiennent la ponctuation et la casse. Il peut \xEAtre utilis\xE9 pour transcrire la parole en anglais ainsi que dans 96 autres langues, \xE0 la fois sur des segments audio courts et des segments plus longs par le biais de  la segmentation. Ces attributs en font un mod\xE8le viable pour de nombreuses t\xE2ches de reconnaissance automatique de la parole et de traduction sans avoir besoin d\u2019\xEAtre "),ya=l("em"),Td=n("finetun\xE9"),Ud=n(". La m\xE9thode "),va=l("code"),bd=n("pipeline()"),Ed=n(` fournit un moyen facile d\u2019inf\xE9rer en une ligne de code avec un contr\xF4le sur les pr\xE9dictions g\xE9n\xE9r\xE9es.
Bien que le mod\xE8le Whisper fonctionne extr\xEAmement bien sur de nombreuses langues \xE0 ressources \xE9lev\xE9es, il a une pr\xE9cision de transcription et de traduction plus faible sur les langues \xE0 faibles ressources, c\u2019est-\xE0-dire celles pour lesquelles les donn\xE9es d\u2019apprentissage sont moins facilement disponibles. Les performances varient \xE9galement selon les accents et dialectes de certaines langues, y compris une pr\xE9cision moindre pour les locuteurs de diff\xE9rents sexes, races, \xE2ges ou autres crit\xE8res d\xE9mographiques (`),Ta=l("em"),jd=n("cf."),Jd=n(" le papier de "),bs=l("a"),gd=n("Whisper"),wd=n(`).
Pour am\xE9liorer les performances sur les langues, les accents ou les dialectes \xE0 faibles ressources, nous pouvons prendre le mod\xE8le Whisper pr\xE9-entra\xEEn\xE9 et l\u2019entra\xEEner sur un petit corpus de donn\xE9es s\xE9lectionn\xE9es de mani\xE8re appropri\xE9e, dans un processus appel\xE9 `),Ua=l("em"),ba=l("em"),Id=n("finetuning"),qd=n(". Nous montrerons qu\u2019avec seulement dix heures de donn\xE9es suppl\xE9mentaires, nous pouvons am\xE9liorer les performances du mod\xE8le Whisper de plus de 100% sur une langue \xE0 faibles ressources. Dans la section suivante, nous aborderons le processus de s\xE9lection d\u2019un jeu de donn\xE9es \xE0 "),Ea=l("em"),Sd=n("finetuner"),_d=n("."),this.h()},l(e){const i=aM('[data-svelte="svelte-1phssyn"]',document.head);te=o(i,"META",{name:!0,content:!0}),i.forEach(t),ga=d(e),ne=o(e,"H1",{class:!0});var Ol=r(ne);ue=o(Ol,"A",{id:!0,class:!0,href:!0});var xd=r(ue);Ds=o(xd,"SPAN",{});var Vd=r(Ds);f(Je.$$.fragment,Vd),Vd.forEach(t),xd.forEach(t),Mo=d(Ol),Os=o(Ol,"SPAN",{});var Cd=r(Os);fo=a(Cd,"Mod\xE8les pr\xE9-entra\xEEn\xE9s pour la reconnaissance automatique de la parole"),Cd.forEach(t),Ol.forEach(t),wa=d(e),G=o(e,"P",{});var ee=r(G);yo=a(ee,"Dans cette section, nous verrons comment utiliser le "),Ps=o(ee,"CODE",{});var Wd=r(Ps);vo=a(Wd,"pipeline()"),Wd.forEach(t),To=a(ee," pour tirer parti des mod\xE8les pr\xE9-entra\xEEn\xE9s pour la reconnaissance automatique de la parole. Dans l\u2019[unit\xE9 2](.. /chapter2/asr_pipeline), nous avons introduit le "),Ks=o(ee,"CODE",{});var Nd=r(Ks);Uo=a(Nd,"pipeline()"),Nd.forEach(t),bo=a(ee," comme un moyen facile d\u2019ex\xE9cuter des t\xE2ches de reconnaissance de la parole, avec tout le pr\xE9traitement et le post-traitement g\xE9r\xE9s sous le capot et la flexibilit\xE9 d\u2019exp\xE9rimenter rapidement avec n\u2019importe quel "),et=o(ee,"EM",{});var $d=r(et);Eo=a($d,"checkpoint"),$d.forEach(t),jo=a(ee," pr\xE9-entra\xEEn\xE9 disponible sur le "),st=o(ee,"EM",{});var Fd=r(st);Jo=a(Fd,"Hub"),Fd.forEach(t),go=a(ee,`.
Dans cette unit\xE9, nous irons plus loin et explorerons les diff\xE9rents attributs des mod\xE8les de reconnaissance automatique de la parole et comment nous pouvons les utiliser pour aborder une gamme de t\xE2ches diff\xE9rentes.`),ee.forEach(t),Ia=d(e),Es=o(e,"P",{});var Zd=r(Es);wo=a(Zd,"Comme d\xE9taill\xE9 dans l\u2019unit\xE9 3, le mod\xE8le de reconnaissance automatique de la parole se divise g\xE9n\xE9ralement dans l\u2019une des deux cat\xE9gories suivantes :"),Zd.forEach(t),qa=d(e),pe=o(e,"OL",{});var Pl=r(pe);ge=o(Pl,"LI",{});var Kl=r(ge);Io=a(Kl,"Mod\xE8le avec Classification temporelle connexionniste (CTC) : mod\xE8les avec que l\u2019encodeur du "),tt=o(Kl,"EM",{});var Ad=r(tt);qo=a(Ad,"transformer"),Ad.forEach(t),So=a(Kl," avec une t\xEAte de classification lin\xE9aire sur le dessus"),Kl.forEach(t),_o=d(Pl),nt=o(Pl,"LI",{});var Yd=r(nt);Bo=a(Yd,"Mod\xE8le de s\xE9quence \xE0 s\xE9quence (Seq2Seq) : mod\xE8les encodeur-d\xE9codeur, avec un m\xE9canisme d\u2019attention crois\xE9e entre l\u2019encodeur et le d\xE9codeur"),Yd.forEach(t),Pl.forEach(t),Sa=d(e),N=o(e,"P",{});var Ee=r(N);Ro=a(Ee,"Avant 2022, la variante avec CTC \xE9tait la plus populaire des deux architectures, avec des mod\xE8les tels que Wav2Vec2, HuBERT et XLSR r\xE9alisant des perc\xE9es dans le paradigme de pr\xE9-entra\xEEnement / "),at=o(Ee,"EM",{});var Qd=r(at);ko=a(Qd,"finetuning"),Qd.forEach(t),Go=a(Ee,` de la parole.
De grandes entreprises, telles que Meta et Microsoft, ont pr\xE9-entra\xEEn\xE9 l\u2019encodeur sur de grandes quantit\xE9s de donn\xE9es audio non \xE9tiquet\xE9es pendant plusieurs jours ou semaines.
Les utilisateurs pouvent ensuite prendre un `),lt=o(Ee,"EM",{});var Xd=r(lt);xo=a(Xd,"checkpoint"),Xd.forEach(t),Vo=a(Ee," pr\xE9-entra\xEEn\xE9 et le finetuner avec une t\xEAte CTC sur \xE0 peine "),ot=o(Ee,"STRONG",{});var Hd=r(ot);Co=a(Hd,"10 minutes"),Hd.forEach(t),Wo=a(Ee,` de donn\xE9es audio \xE9tiquet\xE9es pour obtenir de solides performances sur une t\xE2che en aval de reconnaissance automatique de la parole.
Cependant, les mod\xE8les CTC ont des lacunes. L\u2019ajout d\u2019une simple couche lin\xE9aire \xE0 un encodeur donne un petit mod\xE8le global rapide, mais peut \xEAtre sujet \xE0 des fautes d\u2019orthographe phon\xE9tiques. Nous allons le d\xE9montrer ci-dessous pour le mod\xE8le Wav2Vec2.`),Ee.forEach(t),_a=d(e),ae=o(e,"H2",{class:!0});var eo=r(ae);de=o(eo,"A",{id:!0,class:!0,href:!0});var zd=r(de);rt=o(zd,"SPAN",{});var Ld=r(rt);f(we.$$.fragment,Ld),Ld.forEach(t),zd.forEach(t),No=d(eo),it=o(eo,"SPAN",{});var Dd=r(it);$o=a(Dd,"Sonder les mod\xE8les CTC"),Dd.forEach(t),eo.forEach(t),Ba=d(e),ce=o(e,"P",{});var so=r(ce);Fo=a(so,"Chargeons un petit extrait du jeu de donn\xE9es "),js=o(so,"A",{href:!0});var Od=r(js);Zo=a(Od,"LibriSpeech ASR"),Od.forEach(t),Ao=a(so," pour d\xE9montrer les capacit\xE9s de transcription de Wav2Vec2 :"),so.forEach(t),Ra=d(e),f(Ie.$$.fragment,e),ka=d(e),Js=o(e,"P",{});var Pd=r(Js);ut=o(Pd,"STRONG",{});var Kd=r(ut);Yo=a(Kd,"Sortie :"),Kd.forEach(t),Pd.forEach(t),Ga=d(e),f(qe.$$.fragment,e),xa=d(e),gs=o(e,"P",{});var ec=r(gs);Qo=a(ec,"Nous pouvons choisir l\u2019un des 73 \xE9chantillons audio et en inspecter l\u2019audio ainsi que la transcription :"),ec.forEach(t),Va=d(e),f(Se.$$.fragment,e),Ca=d(e),ws=o(e,"P",{});var sc=r(ws);pt=o(sc,"STRONG",{});var tc=r(pt);Xo=a(tc,"Sortie :"),tc.forEach(t),sc.forEach(t),Wa=d(e),f(_e.$$.fragment,e),Na=d(e),I=o(e,"P",{});var F=r(I);Ho=a(F,"No\xEBl et r\xF4ti de b\u0153uf, \xE7a sonne bien! \u{1F384} Apr\xE8s avoir choisi un \xE9chantillon de donn\xE9es, nous chargeons maintenant un "),dt=o(F,"EM",{});var nc=r(dt);zo=a(nc,"checkpoint"),nc.forEach(t),Lo=d(F),ct=o(F,"EM",{});var ac=r(ct);Do=a(ac,"finetun\xE9"),ac.forEach(t),Oo=a(F," dans le "),mt=o(F,"CODE",{});var lc=r(mt);Po=a(lc,"pipeline()"),lc.forEach(t),Ko=a(F,`.
Pour cela, nous utiliserons le `),ht=o(F,"EM",{});var oc=r(ht);er=a(oc,"checkpoint"),oc.forEach(t),sr=a(F," officiel [base Wav2Vec2] (facebook/wav2vec2-base-100h) "),Mt=o(F,"EM",{});var rc=r(Mt);tr=a(rc,"finetun\xE9"),rc.forEach(t),nr=a(F," sur 100 heures de donn\xE9es LibriSpeech :"),F.forEach(t),$a=d(e),f(Be.$$.fragment,e),Fa=d(e),me=o(e,"P",{});var to=r(me);ar=a(to,`Ensuite, nous allons prendre un exemple du jeu de donn\xE9es et transmettre ses donn\xE9es brutes au pipeline.
Puisque le pipeline `),ft=o(to,"EM",{});var ic=r(ft);lr=a(ic,"consomme"),ic.forEach(t),or=a(to," n\u2019importe quel dictionnaire que nous lui passons (ce qui signifie qu\u2019il ne peut pas \xEAtre r\xE9utilis\xE9), nous transmettrons une copie des donn\xE9es. De cette fa\xE7on, nous pouvons r\xE9utiliser en toute s\xE9curit\xE9 le m\xEAme \xE9chantillon audio dans les exemples suivants:"),to.forEach(t),Za=d(e),f(Re.$$.fragment,e),Aa=d(e),Is=o(e,"P",{});var uc=r(Is);rr=a(uc,`Nous pouvons voir que le mod\xE8le Wav2Vec2 fait un assez bon travail pour transcrire cet \xE9chantillon. A premi\xE8re vue, il semble g\xE9n\xE9ralement correct.
Mettons la cible et la pr\xE9diction c\xF4te \xE0 c\xF4te et mettons en \xE9vidence les diff\xE9rences:`),uc.forEach(t),Ya=d(e),f(ke.$$.fragment,e),Qa=d(e),he=o(e,"P",{});var no=r(he);ir=a(no,"En comparant le texte cible \xE0 la transcription pr\xE9vue, nous pouvons voir que tous les mots "),yt=o(no,"EM",{});var pc=r(yt);ur=a(pc,"sonnent"),pc.forEach(t),pr=a(no," correctement mais que certains ne sont pas orthographi\xE9s avec pr\xE9cision. Par exemple :"),no.forEach(t),Xa=d(e),z=o(e,"UL",{});var As=r(z);Ge=o(As,"LI",{});var ao=r(Ge);vt=o(ao,"EM",{});var dc=r(vt);dr=a(dc,"CHRISTMAUS"),dc.forEach(t),cr=a(ao," vs. "),Tt=o(ao,"EM",{});var cc=r(Tt);mr=a(cc,"CHRISTMAS"),cc.forEach(t),ao.forEach(t),hr=d(As),xe=o(As,"LI",{});var lo=r(xe);Ut=o(lo,"EM",{});var mc=r(Ut);Mr=a(mc,"ROSE"),mc.forEach(t),fr=a(lo," vs. "),bt=o(lo,"EM",{});var hc=r(bt);yr=a(hc,"ROAST"),hc.forEach(t),lo.forEach(t),vr=d(As),Me=o(As,"LI",{});var ja=r(Me);Et=o(ja,"EM",{});var Mc=r(Et);Tr=a(Mc,"SIMALYIS"),Mc.forEach(t),Ur=a(ja," vs. "),jt=o(ja,"EM",{});var fc=r(jt);br=a(fc,"SIMILES"),fc.forEach(t),Er=a(ja,`
Cela met en \xE9vidence les lacunes d\u2019un mod\xE8le CTC. Un mod\xE8le CTC est essentiellement uniquement un mod\xE8le \xAB acoustique\xBB : il se compose d\u2019un encodeur qui forme des repr\xE9sentations d\u2019\xE9tats cach\xE9s \xE0 partir des entr\xE9es audio, et d\u2019une couche lin\xE9aire qui associe les \xE9tats cach\xE9s aux caract\xE8res :`),ja.forEach(t),As.forEach(t),Ha=d(e),Ve=o(e,"DIV",{class:!0});var yc=r(Ve);qs=o(yc,"IMG",{src:!0,alt:!0}),yc.forEach(t),za=d(e),L=o(e,"P",{});var Ys=r(L);jr=a(Ys,`Cela signifie que le syst\xE8me base presque enti\xE8rement sa pr\xE9diction sur l\u2019entr\xE9e acoustique qui lui a \xE9t\xE9 donn\xE9e (les sons phon\xE9tiques de l\u2019audio), et a donc tendance \xE0 transcrire l\u2019audio de mani\xE8re phon\xE9tique.
Il donne moins d\u2019importance au contexte de mod\xE9lisation linguistique des lettres pr\xE9c\xE9dentes et successives, et est donc sujet aux fautes d\u2019orthographe phon\xE9tique.
Un mod\xE8le plus intelligent identifierait que `),Jt=o(Ys,"EM",{});var vc=r(Jt);Jr=a(vc,"CHRISTMAUS"),vc.forEach(t),gr=a(Ys," n\u2019est pas un mot valide dans le vocabulaire anglais, et le corrigerait en "),gt=o(Ys,"EM",{});var Tc=r(gt);wr=a(Tc,"CHRISTMAS"),Tc.forEach(t),Ir=a(Ys," lors de ses pr\xE9dictions. Il nous manque \xE9galement deux grandes fonctionnalit\xE9s dans notre pr\xE9diction, la casse et la ponctuation, ce qui limite l\u2019utilit\xE9 des transcriptions du mod\xE8le aux applications r\xE9elles."),Ys.forEach(t),La=d(e),le=o(e,"H2",{class:!0});var oo=r(le);fe=o(oo,"A",{id:!0,class:!0,href:!0});var Uc=r(fe);wt=o(Uc,"SPAN",{});var bc=r(wt);f(Ce.$$.fragment,bc),bc.forEach(t),Uc.forEach(t),qr=d(oo),It=o(oo,"SPAN",{});var Ec=r(It);Sr=a(Ec,"Passage \xE0 Seq2Seq"),Ec.forEach(t),oo.forEach(t),Da=d(e),ye=o(e,"P",{});var ro=r(ye);_r=a(ro,"Comme indiqu\xE9 dans l\u2019unit\xE9 3, les mod\xE8les Seq2Seq sont form\xE9s d\u2019un codeur et d\u2019un d\xE9codeur reli\xE9s par un m\xE9canisme d\u2019attention crois\xE9e. L\u2019encodeur joue le m\xEAme r\xF4le qu\u2019auparavant, calculant des repr\xE9sentations d\u2019\xE9tats cach\xE9s des entr\xE9es audio, tandis que le d\xE9codeur joue le r\xF4le d\u2019un "),qt=o(ro,"STRONG",{});var jc=r(qt);Br=a(jc,"mod\xE8le de langage"),jc.forEach(t),Rr=a(ro,`. Le d\xE9codeur traite toute la s\xE9quence de repr\xE9sentations d\u2019\xE9tats cach\xE9s de l\u2019encodeur et g\xE9n\xE8re les transcriptions de texte correspondantes. Avec le contexte global de l\u2019entr\xE9e audio, le d\xE9codeur est capable d\u2019utiliser le contexte du mod\xE8le de langage lorsqu\u2019il fait ses pr\xE9dictions, corrigeant les fautes d\u2019orthographe \xE0 la vol\xE9e et contournant ainsi le probl\xE8me des pr\xE9dictions phon\xE9tiques.
Les mod\xE8les Seq2Seq pr\xE9sentent deux inconv\xE9nients :`),ro.forEach(t),Oa=d(e),Ss=o(e,"OL",{});var Jc=r(Ss);St=o(Jc,"LI",{});var gc=r(St);kr=a(gc,"Ils sont intrins\xE8quement plus lents lors du d\xE9codage puisqu\u2019il se produit une \xE9tape \xE0 la fois, plut\xF4t que tout \xE0 la fois 2. Ils n\xE9cessitent beaucoup plus de donn\xE9es d\u2019entra\xEEnement pour converger"),gc.forEach(t),Jc.forEach(t),Pa=d(e),m=o(e,"P",{});var h=r(m);Gr=a(h,"Le besoin de grandes quantit\xE9s de donn\xE9es d\u2019apprentissage a \xE9t\xE9 un goulot d\u2019\xE9tranglement dans l\u2019avancement des architectures Seq2Seq pour la parole. Les donn\xE9es audios \xE9tiquet\xE9es sont difficiles \xE0 obtenir, les plus grands jeux de donn\xE9es annot\xE9es \xE0 l\u2019\xE9poque ne totalisant que 10 000 heures. Tout cela a chang\xE9 en 2022 avec la sortie de "),_t=o(h,"STRONG",{});var wc=r(_t);xr=a(wc,"Whisper"),wc.forEach(t),Vr=a(h,". Whisper est un mod\xE8le pr\xE9-entra\xEEn\xE9 pour la reconnaissance automatique de la parole publi\xE9 en "),We=o(h,"A",{href:!0,rel:!0});var Ic=r(We);Cr=a(Ic,"septembre 2022"),Ic.forEach(t),Wr=a(h," par Alec Radford et al. d\u2019OpenAI. Contrairement \xE0 ses pr\xE9d\xE9cesseurs CTC, qui \xE9taient enti\xE8rement pr\xE9-entra\xEEn\xE9s sur des donn\xE9es audio "),Bt=o(h,"STRONG",{});var qc=r(Bt);Nr=a(qc,"non \xE9tiquet\xE9es"),qc.forEach(t),$r=a(h,", Whisper est pr\xE9-entra\xEEn\xE9 sur une grande quantit\xE9 de donn\xE9es de transcription audio "),Rt=o(h,"STRONG",{});var Sc=r(Rt);Fr=a(Sc,"\xE9tiquet\xE9es"),Sc.forEach(t),Zr=a(h,`, 680 000 heures pour \xEAtre pr\xE9cis.
Il s\u2019agit d\u2019un ordre de grandeur de donn\xE9es plus grand que les donn\xE9es audio non \xE9tiquet\xE9es utilis\xE9es pour entra\xEEner Wav2Vec 2.0 (60 000 heures). De plus, 117 000 heures de ces donn\xE9es de pr\xE9-entra\xEEnement sont des donn\xE9es multilingues. Il en r\xE9sulte des `),kt=o(h,"EM",{});var _c=r(kt);Ar=a(_c,"checkpoints"),_c.forEach(t),Yr=a(h," qui peuvent \xEAtre appliqu\xE9s \xE0 plus de 96 langues, dont beaucoup sont consid\xE9r\xE9es comme "),Gt=o(h,"EM",{});var Bc=r(Gt);Qr=a(Bc,"\xE0 faible ressource"),Bc.forEach(t),Xr=a(h,`.
Lorsqu\u2019ils sont pass\xE9s \xE0 l\u2019\xE9chelle, les mod\xE8les Whisper d\xE9montrent une forte capacit\xE9 \xE0 g\xE9n\xE9raliser sur de nombreux jeux de donn\xE9es et domaines. Obtenant des r\xE9sultats comp\xE9titifs de pointe, avec un taux d\u2019erreur de mots (WER) de pr\xE8s de 3% sur le sous-ensemble de test LibriSpeech et de 4,7% WER  sur le sous-ensemble de test TED-LIUM (`),xt=o(h,"EM",{});var Rc=r(xt);Hr=a(Rc,"cf."),Rc.forEach(t),zr=a(h," Tableau 8 du "),Ne=o(h,"A",{href:!0,rel:!0});var kc=r(Ne);Lr=a(kc,"papier de Whisper"),kc.forEach(t),Dr=a(h,`).
La capacit\xE9 de Whisper \xE0 g\xE9rer de longs \xE9chantillons audio, sa robustesse au bruit et sa capacit\xE9 \xE0 pr\xE9dire les transcriptions en casse et ponctu\xE9es rev\xEAtent une importance particuli\xE8re. Cela en fait un candidat viable pour les syst\xE8mes de reconnaissance automatique de la parole du monde r\xE9el.
Le reste de cette section vous montrera comment utiliser les mod\xE8les Whisper pr\xE9-entra\xEEn\xE9s pour la reconnaissance automatique de la parole \xE0 l\u2019aide de \u{1F917} `),Vt=o(h,"EM",{});var Gc=r(Vt);Or=a(Gc,"Transformers"),Gc.forEach(t),Pr=a(h,". Dans de nombreuses situations, les "),Ct=o(h,"EM",{});var xc=r(Ct);Kr=a(xc,"checkpoints"),xc.forEach(t),ei=a(h,` pr\xE9-entra\xEEn\xE9s sont extr\xEAmement performants et donnent d\u2019excellents r\xE9sultats, nous vous encourageons donc \xE0 essayer de les utiliser comme premi\xE8re \xE9tape pour r\xE9soudre tout probl\xE8me de reconnaissance automatique de la parole.
Gr\xE2ce \xE0 un `),Wt=o(h,"EM",{});var Vc=r(Wt);si=a(Vc,"finetuning"),Vc.forEach(t),ti=a(h,", les "),Nt=o(h,"EM",{});var Cc=r(Nt);ni=a(Cc,"checkpoints"),Cc.forEach(t),ai=a(h," peuvent \xEAtre adapt\xE9s \xE0 des jeux de donn\xE9es et \xE0 des langues sp\xE9cifiques afin d\u2019am\xE9liorer encore ces r\xE9sultats. Nous montrerons comment faire cela dans la section sur "),$e=o(h,"A",{href:!0});var Bd=r($e);li=a(Bd,"le "),$t=o(Bd,"EM",{});var Wc=r($t);oi=a(Wc,"finetuning"),Wc.forEach(t),Bd.forEach(t),ri=a(h,`.
Whisper est disponible en cinq tailles diff\xE9rentes de mod\xE8les. Les quatre plus petits sont entra\xEEn\xE9s soit sur des donn\xE9es en anglais soit sur des donn\xE9es multilingues. Le `),Ft=o(h,"EM",{});var Nc=r(Ft);ii=a(Nc,"checkpoint"),Nc.forEach(t),ui=a(h," le plus grand est uniquement multilingue. Les neuf "),Zt=o(h,"EM",{});var $c=r(Zt);pi=a($c,"checkpoints"),$c.forEach(t),di=a(h," pr\xE9-entra\xEEn\xE9s sont disponibles sur le "),Fe=o(h,"A",{href:!0,rel:!0});var Fc=r(Fe);At=o(Fc,"EM",{});var Zc=r(At);ci=a(Zc,"Hub"),Zc.forEach(t),Fc.forEach(t),mi=a(h,". Ils sont r\xE9sum\xE9s dans le tableau suivant. \xAB VRAM \xBB indique la m\xE9moire GPU requise pour ex\xE9cuter le mod\xE8le avec une taille de batch minimale de 1. \xAB "),Yt=o(h,"EM",{});var Ac=r(Yt);hi=a(Ac,"Rel Speed"),Ac.forEach(t),Mi=a(h," \xBB est la vitesse relative d\u2019un "),Qt=o(h,"EM",{});var Yc=r(Qt);fi=a(Yc,"checkpoint"),Yc.forEach(t),yi=a(h,` par rapport au plus grand mod\xE8le.
Sur la base de ces informations, vous pouvez s\xE9lectionner le `),Xt=o(h,"EM",{});var Qc=r(Xt);vi=a(Qc,"checkpoint"),Qc.forEach(t),Ti=a(h," le plus adapt\xE9 \xE0 votre mat\xE9riel."),h.forEach(t),Ka=d(e),ve=o(e,"TABLE",{});var io=r(ve);Ht=o(io,"THEAD",{});var Xc=r(Ht);q=o(Xc,"TR",{});var Z=r(q);zt=o(Z,"TH",{});var Hc=r(zt);Ui=a(Hc,"Taille"),Hc.forEach(t),bi=d(Z),Lt=o(Z,"TH",{});var zc=r(Lt);Ei=a(zc,"Param\xE8tres"),zc.forEach(t),ji=d(Z),Dt=o(Z,"TH",{});var Lc=r(Dt);Ji=a(Lc,"VRAM / Go"),Lc.forEach(t),gi=d(Z),Ot=o(Z,"TH",{});var Dc=r(Ot);Pt=o(Dc,"EM",{});var Oc=r(Pt);wi=a(Oc,"Rel Speed"),Oc.forEach(t),Dc.forEach(t),Ii=d(Z),Kt=o(Z,"TH",{});var Pc=r(Kt);qi=a(Pc,"Anglais"),Pc.forEach(t),Si=d(Z),en=o(Z,"TH",{});var Kc=r(en);_i=a(Kc,"Multilingue"),Kc.forEach(t),Z.forEach(t),Xc.forEach(t),Bi=d(io),W=o(io,"TBODY",{});var se=r(W);S=o(se,"TR",{});var A=r(S);sn=o(A,"TD",{});var em=r(sn);Ri=a(em,"tiny"),em.forEach(t),ki=d(A),tn=o(A,"TD",{});var sm=r(tn);Gi=a(sm,"39 M"),sm.forEach(t),xi=d(A),nn=o(A,"TD",{});var tm=r(nn);Vi=a(tm,"1.4"),tm.forEach(t),Ci=d(A),an=o(A,"TD",{});var nm=r(an);Wi=a(nm,"32"),nm.forEach(t),Ni=d(A),ln=o(A,"TD",{});var am=r(ln);Ze=o(am,"A",{href:!0,rel:!0});var lm=r(Ze);$i=a(lm,"\u2713"),lm.forEach(t),am.forEach(t),Fi=d(A),on=o(A,"TD",{});var om=r(on);Ae=o(om,"A",{href:!0,rel:!0});var rm=r(Ae);Zi=a(rm,"\u2713"),rm.forEach(t),om.forEach(t),A.forEach(t),Ai=d(se),_=o(se,"TR",{});var Y=r(_);rn=o(Y,"TD",{});var im=r(rn);Yi=a(im,"base"),im.forEach(t),Qi=d(Y),un=o(Y,"TD",{});var um=r(un);Xi=a(um,"74 M"),um.forEach(t),Hi=d(Y),pn=o(Y,"TD",{});var pm=r(pn);zi=a(pm,"1.5"),pm.forEach(t),Li=d(Y),dn=o(Y,"TD",{});var dm=r(dn);Di=a(dm,"16"),dm.forEach(t),Oi=d(Y),cn=o(Y,"TD",{});var cm=r(cn);Ye=o(cm,"A",{href:!0,rel:!0});var mm=r(Ye);Pi=a(mm,"\u2713"),mm.forEach(t),cm.forEach(t),Ki=d(Y),mn=o(Y,"TD",{});var hm=r(mn);Qe=o(hm,"A",{href:!0,rel:!0});var Mm=r(Qe);eu=a(Mm,"\u2713"),Mm.forEach(t),hm.forEach(t),Y.forEach(t),su=d(se),B=o(se,"TR",{});var Q=r(B);hn=o(Q,"TD",{});var fm=r(hn);tu=a(fm,"small"),fm.forEach(t),nu=d(Q),Mn=o(Q,"TD",{});var ym=r(Mn);au=a(ym,"244 M"),ym.forEach(t),lu=d(Q),fn=o(Q,"TD",{});var vm=r(fn);ou=a(vm,"2.3"),vm.forEach(t),ru=d(Q),yn=o(Q,"TD",{});var Tm=r(yn);iu=a(Tm,"6"),Tm.forEach(t),uu=d(Q),vn=o(Q,"TD",{});var Um=r(vn);Xe=o(Um,"A",{href:!0,rel:!0});var bm=r(Xe);pu=a(bm,"\u2713"),bm.forEach(t),Um.forEach(t),du=d(Q),Tn=o(Q,"TD",{});var Em=r(Tn);He=o(Em,"A",{href:!0,rel:!0});var jm=r(He);cu=a(jm,"\u2713"),jm.forEach(t),Em.forEach(t),Q.forEach(t),mu=d(se),R=o(se,"TR",{});var X=r(R);Un=o(X,"TD",{});var Jm=r(Un);hu=a(Jm,"medium"),Jm.forEach(t),Mu=d(X),bn=o(X,"TD",{});var gm=r(bn);fu=a(gm,"769 M"),gm.forEach(t),yu=d(X),En=o(X,"TD",{});var wm=r(En);vu=a(wm,"4.2"),wm.forEach(t),Tu=d(X),jn=o(X,"TD",{});var Im=r(jn);Uu=a(Im,"2"),Im.forEach(t),bu=d(X),Jn=o(X,"TD",{});var qm=r(Jn);ze=o(qm,"A",{href:!0,rel:!0});var Sm=r(ze);Eu=a(Sm,"\u2713"),Sm.forEach(t),qm.forEach(t),ju=d(X),gn=o(X,"TD",{});var _m=r(gn);Le=o(_m,"A",{href:!0,rel:!0});var Bm=r(Le);Ju=a(Bm,"\u2713"),Bm.forEach(t),_m.forEach(t),X.forEach(t),gu=d(se),k=o(se,"TR",{});var H=r(k);wn=o(H,"TD",{});var Rm=r(wn);wu=a(Rm,"large"),Rm.forEach(t),Iu=d(H),In=o(H,"TD",{});var km=r(In);qu=a(km,"1550 M"),km.forEach(t),Su=d(H),qn=o(H,"TD",{});var Gm=r(qn);_u=a(Gm,"7.5"),Gm.forEach(t),Bu=d(H),Sn=o(H,"TD",{});var xm=r(Sn);Ru=a(xm,"1"),xm.forEach(t),ku=d(H),_n=o(H,"TD",{});var Vm=r(_n);Gu=a(Vm,"x"),Vm.forEach(t),xu=d(H),Bn=o(H,"TD",{});var Cm=r(Bn);De=o(Cm,"A",{href:!0,rel:!0});var Wm=r(De);Vu=a(Wm,"\u2713"),Wm.forEach(t),Cm.forEach(t),H.forEach(t),se.forEach(t),io.forEach(t),el=d(e),$=o(e,"P",{});var je=r($);Cu=a(je,"Chargeons le "),Oe=o(je,"A",{href:!0,rel:!0});var Nm=r(Oe);Wu=a(Nm,"Whisper Base"),Nm.forEach(t),Nu=a(je,", qui est de taille comparable au Wav2Vec2 que nous avons utilis\xE9 pr\xE9c\xE9demment. Anticipant notre passage \xE0 la reconnaissance automatique de la parole multilingue, nous allons charger la variante multilingue du "),Rn=o(je,"EM",{});var $m=r(Rn);$u=a($m,"checkpoint"),$m.forEach(t),Fu=a(je," de base. Nous chargons \xE9galement le mod\xE8le sur le GPU s\u2019il est disponible, ou sur le CPU dans le cas contraire. Le "),kn=o(je,"CODE",{});var Fm=r(kn);Zu=a(Fm,"pipeline()"),Fm.forEach(t),Au=a(je," se chargera ensuite de d\xE9placer toutes les entr\xE9es / sorties du CPU vers le GPU selon les besoins:"),je.forEach(t),sl=d(e),f(Pe.$$.fragment,e),tl=d(e),D=o(e,"P",{});var Qs=r(D);Yu=a(Qs,"Bien, maintenant, transcrivons l\u2019audio comme avant. Le seul changement que nous apportons est de passer un argument suppl\xE9mentaire, "),Gn=o(Qs,"CODE",{});var Zm=r(Gn);Qu=a(Zm,"max_new_tokens"),Zm.forEach(t),Xu=a(Qs,", qui indique au mod\xE8le le nombre maximum de "),xn=o(Qs,"EM",{});var Am=r(xn);Hu=a(Am,"tokens"),Am.forEach(t),zu=a(Qs," \xE0 g\xE9n\xE9rer lors de sa pr\xE9diction :"),Qs.forEach(t),nl=d(e),f(Ke.$$.fragment,e),al=d(e),_s=o(e,"P",{});var Ym=r(_s);Vn=o(Ym,"STRONG",{});var Qm=r(Vn);Lu=a(Qm,"Sortie :"),Qm.forEach(t),Ym.forEach(t),ll=d(e),f(es.$$.fragment,e),ol=d(e),Bs=o(e,"P",{});var Xm=r(Bs);Du=a(Xm,"La premi\xE8re chose que vous remarquerez est la pr\xE9sence de la casse et de la ponctuation. Cela rend imm\xE9diatement la transcription plus facile \xE0 lire par rapport \xE0 la transcription non cas\xE9e et non ponctu\xE9e de Wav2Vec2. Mettons la transcription c\xF4te \xE0 c\xF4te avec la cible :"),Xm.forEach(t),rl=d(e),f(ss.$$.fragment,e),il=d(e),J=o(e,"P",{});var x=r(J);Ou=a(x,"Whisper a fait un excellent travail pour corriger les erreurs phon\xE9tiques que nous avons vues avec Wav2Vec2 : "),Cn=o(x,"EM",{});var Hm=r(Cn);Pu=a(Hm,"Christmas"),Hm.forEach(t),Ku=a(x," et "),Wn=o(x,"EM",{});var zm=r(Wn);ep=a(zm,"roast"),zm.forEach(t),sp=a(x," sont orthographi\xE9s correctement. Nous voyons que le mod\xE8le a encore du mal avec "),Nn=o(x,"EM",{});var Lm=r(Nn);tp=a(Lm,"SIMILES"),Lm.forEach(t),np=a(x,", \xE9tant incorrectement transcrit comme "),$n=o(x,"EM",{});var Dm=r($n);ap=a(Dm,"similarly"),Dm.forEach(t),lp=a(x,`, mais cette fois la pr\xE9diction est un mot valide du vocabulaire anglais. L\u2019utilisation d\u2019un Whisper plus grand peut aider \xE0 r\xE9duire davantage les erreurs de transcription, au d\xE9triment d\u2019un calcul plus important et d\u2019un temps de transcription plus long.
On nous a promis un mod\xE8le capable de g\xE9rer 96 langues, alors passons \xE0 de la reconnaissance automatique multilingue \u{1F30E} !
Le jeu de donn\xE9es `),ts=o(x,"A",{href:!0,rel:!0});var Om=r(ts);op=a(Om,"Multilingual LibriSpeech"),Om.forEach(t),rp=a(x," (MLS) est l\u2019\xE9quivalent multilingue du jeu de donn\xE9es LibriSpeech, avec des donn\xE9es audio \xE9tiquet\xE9es en six langues. Nous allons charger un \xE9chantillon de l\u2019\xE9chantillon espagnol de MLS, en utilisant le mode "),Fn=o(x,"EM",{});var Pm=r(Fn);ip=a(Pm,"streaming"),Pm.forEach(t),up=a(x," afin de ne pas avoir \xE0 t\xE9l\xE9charger l\u2019ensemble de donn\xE9es :"),x.forEach(t),ul=d(e),f(ns.$$.fragment,e),pl=d(e),Rs=o(e,"P",{});var Km=r(Rs);pp=a(Km,"Encore une fois, nous allons inspecter la transcription du texte et \xE9couter le segment audio:"),Km.forEach(t),dl=d(e),f(as.$$.fragment,e),cl=d(e),ks=o(e,"P",{});var eh=r(ks);Zn=o(eh,"STRONG",{});var sh=r(Zn);dp=a(sh,"Sortie :"),sh.forEach(t),eh.forEach(t),ml=d(e),f(ls.$$.fragment,e),hl=d(e),O=o(e,"P",{});var Xs=r(O);cp=a(Xs,"C\u2019est le texte cible que nous visons avec notre transcription Whisper. Bien que nous sachions maintenant que nous pouvons probablement faire mieux, puisque notre mod\xE8le va aussi pr\xE9dire la ponctuation et la casse, qui ne sont pas pr\xE9sents dans la r\xE9f\xE9rence. Transmettons l\u2019\xE9chantillon audio au pipeline pour obtenir notre pr\xE9diction de texte. Une chose \xE0 noter est que le pipeline "),An=o(Xs,"EM",{});var th=r(An);mp=a(th,"consomme"),th.forEach(t),hp=a(Xs," le dictionnaire des entr\xE9es audio que nous entrons, ce qui signifie que le dictionnaire ne peut pas \xEAtre r\xE9utilis\xE9. Pour contourner ce probl\xE8me, nous allons passer une "),Yn=o(Xs,"EM",{});var nh=r(Yn);Mp=a(nh,"copie"),nh.forEach(t),fp=a(Xs," de l\u2019\xE9chantillon audio, afin de pouvoir r\xE9utiliser le m\xEAme \xE9chantillon audio dans les exemples de code suivants :"),Xs.forEach(t),Ml=d(e),f(os.$$.fragment,e),fl=d(e),Gs=o(e,"P",{});var ah=r(Gs);Qn=o(ah,"STRONG",{});var lh=r(Qn);yp=a(lh,"Sortie :"),lh.forEach(t),ah.forEach(t),yl=d(e),f(rs.$$.fragment,e),vl=d(e),g=o(e,"P",{});var V=r(g);vp=a(V,"Super, cela ressemble \xE9norm\xE9ment \xE0 notre texte de r\xE9f\xE9rence (sans doute mieux car il a une ponctuation et une casse !). Vous remarquerez que nous avons transf\xE9r\xE9 "),Xn=o(V,"CODE",{});var oh=r(Xn);Tp=a(oh,'"task"'),oh.forEach(t),Up=a(V," en tant que "),Hn=o(V,"EM",{});var rh=r(Hn);bp=a(rh,"generate kwarg"),rh.forEach(t),Ep=a(V,". D\xE9finir la "),zn=o(V,"CODE",{});var ih=r(zn);jp=a(ih,'"task"'),ih.forEach(t),Jp=a(V," \xE0 "),Ln=o(V,"CODE",{});var uh=r(Ln);gp=a(uh,'"transcribe"'),uh.forEach(t),wp=a(V," oblige Whisper \xE0 effectuer la t\xE2che de reconnaissance de la parole, o\xF9 l\u2019audio est transcrit dans la m\xEAme langue que le discours a \xE9t\xE9 prononc\xE9. Whisper est \xE9galement capable d\u2019effectuer la t\xE2che \xE9troitement li\xE9e de traduction de la parole, o\xF9 l\u2019audio en espagnol peut \xEAtre traduit en texte en anglais. Pour y parvenir, nous d\xE9finissons la "),Dn=o(V,"CODE",{});var ph=r(Dn);Ip=a(ph,'"task"'),ph.forEach(t),qp=a(V," sur "),On=o(V,"CODE",{});var dh=r(On);Sp=a(dh,'"translate"'),dh.forEach(t),_p=a(V," :"),V.forEach(t),Tl=d(e),f(is.$$.fragment,e),Ul=d(e),xs=o(e,"P",{});var ch=r(xs);Pn=o(ch,"STRONG",{});var mh=r(Pn);Bp=a(mh,"Sortie :"),mh.forEach(t),ch.forEach(t),bl=d(e),f(us.$$.fragment,e),El=d(e),P=o(e,"P",{});var Hs=r(P);Rp=a(Hs,`Maintenant que nous savons que nous pouvons basculer entre la reconnaissance automatique de la parole et la traduction de la parole, nous pouvons choisir notre t\xE2che en fonction de nos besoins. Soit nous reconnaissons l\u2019audio dans la langue X vers le texte dans la m\xEAme langue X (par exemple, l\u2019audio espagnol vers le texte espagnol), soit nous traduisons de l\u2019audio dans n\u2019importe quelle langue X vers du texte en anglais (par exemple, l\u2019audio espagnol vers le texte anglais).
Pour en savoir plus sur la fa\xE7on dont l\u2019argument `),Kn=o(Hs,"CODE",{});var hh=r(Kn);kp=a(hh,'"task"'),hh.forEach(t),Gp=a(Hs," est utilis\xE9 pour contr\xF4ler les propri\xE9t\xE9s du texte g\xE9n\xE9r\xE9, reportez-vous \xE0 la "),ps=o(Hs,"A",{href:!0,rel:!0});var Mh=r(ps);xp=a(Mh,"carte de mod\xE8le"),Mh.forEach(t),Vp=a(Hs," pour le mod\xE8le Whisper base."),Hs.forEach(t),jl=d(e),oe=o(e,"H2",{class:!0});var uo=r(oe);Te=o(uo,"A",{id:!0,class:!0,href:!0});var fh=r(Te);ea=o(fh,"SPAN",{});var yh=r(ea);f(ds.$$.fragment,yh),yh.forEach(t),fh.forEach(t),Cp=d(uo),sa=o(uo,"SPAN",{});var vh=r(sa);Wp=a(vh,"Longue transcription et horodatage"),vh.forEach(t),uo.forEach(t),Jl=d(e),Vs=o(e,"P",{});var Th=r(Vs);Np=a(Th,`Jusqu\u2019\xE0 pr\xE9sent, nous nous sommes concentr\xE9s sur la transcription de courts \xE9chantillons audio de moins de 30 secondes. Nous avons mentionn\xE9 que l\u2019un des attraits de Whisper \xE9tait sa capacit\xE9 \xE0 travailler sur de longs \xE9chantillons audio. Nous allons nous attaquer \xE0 cette t\xE2che ici !
Cr\xE9ons un long fichier audio en concat\xE9nant des \xE9chantillons successifs \xE0 partir du jeu de donn\xE9es MLS. \xC9tant donn\xE9 que MLS est organis\xE9 en divisant de longs enregistrements de livres audio en segments plus courts, la concat\xE9nation d\u2019\xE9chantillons est un moyen de reconstruire des passages de livres audio plus longs. Par cons\xE9quent, l\u2019audio r\xE9sultant doit \xEAtre coh\xE9rent sur l\u2019ensemble de l\u2019\xE9chantillon. Nous allons d\xE9finir notre dur\xE9e audio cible sur 5 minutes et arr\xEAter de concat\xE9ner des \xE9chantillons une fois que nous aurons atteint cette valeur :`),Th.forEach(t),gl=d(e),f(cs.$$.fragment,e),wl=d(e),Cs=o(e,"P",{});var Uh=r(Cs);ta=o(Uh,"STRONG",{});var bh=r(ta);$p=a(bh,"Sortie :"),bh.forEach(t),Uh.forEach(t),Il=d(e),f(ms.$$.fragment,e),ql=d(e),Ws=o(e,"P",{});var Eh=r(Ws);Fp=a(Eh,"5 minutes et 17 secondes d\u2019audio \xE0 transcrire. Le transfert de ce long \xE9chantillon audio directement vers le mod\xE8le pose deux probl\xE8mes :"),Eh.forEach(t),Sl=d(e),Ue=o(e,"OL",{});var po=r(Ue);na=o(po,"LI",{});var jh=r(na);Zp=a(jh,"Whisper est intrins\xE8quement con\xE7u pour fonctionner avec des \xE9chantillons de 30 secondes. Tout ce qui est inf\xE9rieur \xE0 30s est rembourr\xE9 \xE0 30s avec du silence, et tout ce qui d\xE9passe 30s est tronqu\xE9 \xE0 30s en coupant l\u2019audio exc\xE9dentaire. Donc si nous passons notre audio directement, nous n\u2019obtiendrons la transcription que pour les 30 premi\xE8res secondes"),jh.forEach(t),Ap=d(po),re=o(po,"LI",{});var zs=r(re);Yp=a(zs,"La m\xE9moire dans un "),aa=o(zs,"EM",{});var Jh=r(aa);Qp=a(Jh,"transformer"),Jh.forEach(t),Xp=a(zs,` \xE9volue quadratiquement avec la longueur de s\xE9quence a : doubler la longueur d\u2019entr\xE9e quadruple le besoin en m\xE9moire, de sorte que le passage de fichiers audio tr\xE8s longs entra\xEEnera in\xE9vitablement une erreur de m\xE9moire insuffisante (OOM : out-of-memory)
La transcription de longs audio fonctionne dans \u{1F917} `),la=o(zs,"EM",{});var gh=r(la);Hp=a(gh,"Transformers"),gh.forEach(t),zp=a(zs,` en segmentant l\u2019audio d\u2019entr\xE9e en segments plus petits et plus faciles \xE0 g\xE9rer.
Chaque segment a un petit chevauchement avec le pr\xE9c\xE9dent. Cela nous permet de recoudre avec pr\xE9cision les segments aux bornes, car nous pouvons trouver le chevauchement entre les segments et fusionner les transcriptions en cons\xE9quence :`),zs.forEach(t),po.forEach(t),_l=d(e),hs=o(e,"DIV",{class:!0});var wh=r(hs);Ns=o(wh,"IMG",{src:!0,alt:!0}),wh.forEach(t),Bl=d(e),b=o(e,"P",{});var j=r(b);Lp=a(j,"L\u2019avantage de segmenter les \xE9chantillons est que nous n\u2019avons pas besoin du r\xE9sultat du bloc "),Rl=ho(j),kl=a(j," pour transcrire le morceau suivant "),Gl=ho(j),xl=a(j,". La couture est effectu\xE9e apr\xE8s que nous ayons transcrit tous les morceaux aux bornes des morceaux. Donc peu importe l\u2019ordre dans lequel nous transcrivons les morceaux. L\u2019algorithme est enti\xE8rement "),oa=o(j,"STRONG",{});var Ih=r(oa);Dp=a(Ih,"sans \xE9tats"),Ih.forEach(t),Op=a(j,", donc nous pouvons m\xEAme faire du d\xE9coupage sur "),Vl=ho(j),Cl=a(j," en m\xEAme temps que du d\xE9coupage sur "),Wl=ho(j),Nl=a(j," ! Cela nous permet de former des "),ra=o(j,"EM",{});var qh=r(ra);Pp=a(qh,"batch"),qh.forEach(t),Kp=a(j," de morceaux et de les ex\xE9cuter dans le mod\xE8le en parall\xE8le, offrant une grande acc\xE9l\xE9ration de calcul par rapport \xE0 leur transcription s\xE9quentielle. Pour en savoir plus sur la segmentation d\u2019audio dans \u{1F917} "),ia=o(j,"EM",{});var Sh=r(ia);ed=a(Sh,"Transformers"),Sh.forEach(t),sd=a(j,", vous pouvez vous r\xE9f\xE9rer \xE0 cet [article de blog] ("),Ms=o(j,"A",{href:!0,rel:!0});var _h=r(Ms);td=a(_h,"https://huggingface.co/blog/asr-chunking"),_h.forEach(t),nd=a(j,`) (en anglais).
Pour activer les longues transcriptions, nous devons ajouter un argument suppl\xE9mentaire lorsque nous appelons le pipeline. Cet argument, `),ua=o(j,"CODE",{});var Bh=r(ua);ad=a(Bh,"chunk_length_s"),Bh.forEach(t),ld=a(j,`, contr\xF4le la longueur des segments divis\xE9s en secondes. Pour Whisper, des morceaux de 30 secondes sont optimaux, car cela correspond \xE0 la longueur d\u2019entr\xE9e attendue par Whisper.
Pour activer le traitement par batch, nous devons passer l\u2019argument `),pa=o(j,"CODE",{});var Rh=r(pa);od=a(Rh,"batch_size"),Rh.forEach(t),rd=a(j," au pipeline. En mettant tout cela ensemble, nous pouvons transcrire le long \xE9chantillon audio comme suit:"),j.forEach(t),$l=d(e),f(fs.$$.fragment,e),Fl=d(e),$s=o(e,"P",{});var kh=r($s);da=o(kh,"STRONG",{});var Gh=r(da);id=a(Gh,"Sortie :"),Gh.forEach(t),kh.forEach(t),Zl=d(e),f(ys.$$.fragment,e),Al=d(e),K=o(e,"P",{});var Ls=r(K);ud=a(Ls,`Nous n\u2019affichons pas toute la sortie ici car elle est assez longue (312 mots au total). Sur un GPU V100 de 16 Go, vous pouvez vous attendre \xE0 ce que la ligne ci-dessus prenne environ 3,45 secondes \xE0 s\u2019\xE9x\xE9cuter, ce qui est assez bon pour un \xE9chantillon audio de 317 secondes. Sur un CPU, attendez-vous \xE0 plus de 30 secondes.
Whisper est \xE9galement capable de pr\xE9dire les `),ca=o(Ls,"EM",{});var xh=r(ca);pd=a(xh,"horodatages"),xh.forEach(t),dd=a(Ls,` au niveau du segment pour les donn\xE9es audio. Ces horodatages indiquent l\u2019heure de d\xE9but et de fin d\u2019un court passage audio et sont particuli\xE8rement utiles pour aligner une transcription avec l\u2019audio d\u2019entr\xE9e. Supposons que nous voulions fournir des sous-titres pour une vid\xE9o. Nous avons besoin de ces horodatages pour savoir quelle partie de la transcription correspond \xE0 un certain segment de vid\xE9o, afin d\u2019afficher la transcription correcte pour cette heure.
L\u2019activation de la pr\xE9diction d\u2019horodatage est simple, il suffit de d\xE9finir l\u2019argument `),ma=o(Ls,"CODE",{});var Vh=r(ma);cd=a(Vh,"return_timestamps=True"),Vh.forEach(t),md=a(Ls,". Les horodatages sont compatibles avec les m\xE9thodes de segmentation et de traitement par batchs que nous avons utilis\xE9es pr\xE9c\xE9demment. Nous pouvons donc simplement ajouter l\u2019argument timestamp \xE0 notre code pr\xE9c\xE9dent :"),Ls.forEach(t),Yl=d(e),f(vs.$$.fragment,e),Ql=d(e),Fs=o(e,"P",{});var Ch=r(Fs);ha=o(Ch,"STRONG",{});var Wh=r(ha);hd=a(Wh,"Sortie :"),Wh.forEach(t),Ch.forEach(t),Xl=d(e),f(Ts.$$.fragment,e),Hl=d(e),Zs=o(e,"P",{});var Nh=r(Zs);Md=a(Nh,"Et le tour est jou\xE9 ! Nous avons notre texte pr\xE9dit ainsi que les horodatages correspondants."),Nh.forEach(t),zl=d(e),ie=o(e,"H2",{class:!0});var co=r(ie);be=o(co,"A",{id:!0,class:!0,href:!0});var $h=r(be);Ma=o($h,"SPAN",{});var Fh=r(Ma);f(Us.$$.fragment,Fh),Fh.forEach(t),$h.forEach(t),fd=d(co),fa=o(co,"SPAN",{});var Zh=r(fa);yd=a(Zh,"R\xE9sum\xE9"),Zh.forEach(t),co.forEach(t),Ll=d(e),w=o(e,"P",{});var C=r(w);vd=a(C,"Whisper est un mod\xE8le pr\xE9-entra\xEEn\xE9 solide pour la reconnaissance automatique de la parole et la traduction. Par rapport \xE0 Wav2Vec2, il a une plus grande pr\xE9cision de transcription, avec des sorties qui contiennent la ponctuation et la casse. Il peut \xEAtre utilis\xE9 pour transcrire la parole en anglais ainsi que dans 96 autres langues, \xE0 la fois sur des segments audio courts et des segments plus longs par le biais de  la segmentation. Ces attributs en font un mod\xE8le viable pour de nombreuses t\xE2ches de reconnaissance automatique de la parole et de traduction sans avoir besoin d\u2019\xEAtre "),ya=o(C,"EM",{});var Ah=r(ya);Td=a(Ah,"finetun\xE9"),Ah.forEach(t),Ud=a(C,". La m\xE9thode "),va=o(C,"CODE",{});var Yh=r(va);bd=a(Yh,"pipeline()"),Yh.forEach(t),Ed=a(C,` fournit un moyen facile d\u2019inf\xE9rer en une ligne de code avec un contr\xF4le sur les pr\xE9dictions g\xE9n\xE9r\xE9es.
Bien que le mod\xE8le Whisper fonctionne extr\xEAmement bien sur de nombreuses langues \xE0 ressources \xE9lev\xE9es, il a une pr\xE9cision de transcription et de traduction plus faible sur les langues \xE0 faibles ressources, c\u2019est-\xE0-dire celles pour lesquelles les donn\xE9es d\u2019apprentissage sont moins facilement disponibles. Les performances varient \xE9galement selon les accents et dialectes de certaines langues, y compris une pr\xE9cision moindre pour les locuteurs de diff\xE9rents sexes, races, \xE2ges ou autres crit\xE8res d\xE9mographiques (`),Ta=o(C,"EM",{});var Qh=r(Ta);jd=a(Qh,"cf."),Qh.forEach(t),Jd=a(C," le papier de "),bs=o(C,"A",{href:!0,rel:!0});var Xh=r(bs);gd=a(Xh,"Whisper"),Xh.forEach(t),wd=a(C,`).
Pour am\xE9liorer les performances sur les langues, les accents ou les dialectes \xE0 faibles ressources, nous pouvons prendre le mod\xE8le Whisper pr\xE9-entra\xEEn\xE9 et l\u2019entra\xEEner sur un petit corpus de donn\xE9es s\xE9lectionn\xE9es de mani\xE8re appropri\xE9e, dans un processus appel\xE9 `),Ua=o(C,"EM",{});var Hh=r(Ua);ba=o(Hh,"EM",{});var zh=r(ba);Id=a(zh,"finetuning"),zh.forEach(t),Hh.forEach(t),qd=a(C,". Nous montrerons qu\u2019avec seulement dix heures de donn\xE9es suppl\xE9mentaires, nous pouvons am\xE9liorer les performances du mod\xE8le Whisper de plus de 100% sur une langue \xE0 faibles ressources. Dans la section suivante, nous aborderons le processus de s\xE9lection d\u2019un jeu de donn\xE9es \xE0 "),Ea=o(C,"EM",{});var Lh=r(Ea);Sd=a(Lh,"finetuner"),Lh.forEach(t),_d=a(C,"."),C.forEach(t),this.h()},h(){c(te,"name","hf:doc:metadata"),c(te,"content",JSON.stringify(iM)),c(ue,"id","modles-prentrans-pour-la-reconnaissance-automatique-de-la-parole"),c(ue,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),c(ue,"href","#modles-prentrans-pour-la-reconnaissance-automatique-de-la-parole"),c(ne,"class","relative group"),c(de,"id","sonder-les-modles-ctc"),c(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"),c(de,"href","#sonder-les-modles-ctc"),c(ae,"class","relative group"),c(js,"href","hf-internal-testing/librispeech_asr_dummy"),Dh(qs.src,kd="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/wav2vec2-ctc.png")||c(qs,"src",kd),c(qs,"alt","Transformer encoder with a CTC head on top"),c(Ve,"class","flex justify-center"),c(fe,"id","passage-seq2seq"),c(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"),c(fe,"href","#passage-seq2seq"),c(le,"class","relative group"),c(We,"href","https://openai.com/blog/whisper/"),c(We,"rel","nofollow"),c(Ne,"href","https://cdn.openai.com/papers/whisper.pdf"),c(Ne,"rel","nofollow"),c($e,"href","fine-tuning"),c(Fe,"href","https://huggingface.co/models?search=openai/whisper"),c(Fe,"rel","nofollow"),c(Ze,"href","https://huggingface.co/openai/whisper-tiny.en"),c(Ze,"rel","nofollow"),c(Ae,"href","https://huggingface.co/openai/whisper-tiny"),c(Ae,"rel","nofollow"),c(Ye,"href","https://huggingface.co/openai/whisper-base.en"),c(Ye,"rel","nofollow"),c(Qe,"href","https://huggingface.co/openai/whisper-base"),c(Qe,"rel","nofollow"),c(Xe,"href","https://huggingface.co/openai/whisper-small.en"),c(Xe,"rel","nofollow"),c(He,"href","https://huggingface.co/openai/whisper-small"),c(He,"rel","nofollow"),c(ze,"href","https://huggingface.co/openai/whisper-medium.en"),c(ze,"rel","nofollow"),c(Le,"href","https://huggingface.co/openai/whisper-medium"),c(Le,"rel","nofollow"),c(De,"href","https://huggingface.co/openai/whisper-large-v2"),c(De,"rel","nofollow"),c(Oe,"href","https://huggingface.co/openai/whisper-base"),c(Oe,"rel","nofollow"),c(ts,"href","https://huggingface.co/datasets/facebook/multilingual_librispeech"),c(ts,"rel","nofollow"),c(ps,"href","https://huggingface.co/openai/whisper-base#usage"),c(ps,"rel","nofollow"),c(Te,"id","longue-transcription-et-horodatage"),c(Te,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),c(Te,"href","#longue-transcription-et-horodatage"),c(oe,"class","relative group"),Dh(Ns.src,Gd="https://huggingface.co/blog/assets/49_asr_chunking/Striding.png")||c(Ns,"src",Gd),c(Ns,"alt","\u{1F917} Transformers chunking algorithm. Source: https://huggingface.co/blog/asr-chunking."),c(hs,"class","flex justify-center"),Rl.a=kl,Gl.a=xl,Vl.a=Cl,Wl.a=Nl,c(Ms,"href","https://huggingface.co/blog/asr-chunking"),c(Ms,"rel","nofollow"),c(be,"id","rsum"),c(be,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),c(be,"href","#rsum"),c(ie,"class","relative group"),c(bs,"href","https://arxiv.org/pdf/2212.04356.pdf"),c(bs,"rel","nofollow")},m(e,i){s(document.head,te),u(e,ga,i),u(e,ne,i),s(ne,ue),s(ue,Ds),y(Je,Ds,null),s(ne,Mo),s(ne,Os),s(Os,fo),u(e,wa,i),u(e,G,i),s(G,yo),s(G,Ps),s(Ps,vo),s(G,To),s(G,Ks),s(Ks,Uo),s(G,bo),s(G,et),s(et,Eo),s(G,jo),s(G,st),s(st,Jo),s(G,go),u(e,Ia,i),u(e,Es,i),s(Es,wo),u(e,qa,i),u(e,pe,i),s(pe,ge),s(ge,Io),s(ge,tt),s(tt,qo),s(ge,So),s(pe,_o),s(pe,nt),s(nt,Bo),u(e,Sa,i),u(e,N,i),s(N,Ro),s(N,at),s(at,ko),s(N,Go),s(N,lt),s(lt,xo),s(N,Vo),s(N,ot),s(ot,Co),s(N,Wo),u(e,_a,i),u(e,ae,i),s(ae,de),s(de,rt),y(we,rt,null),s(ae,No),s(ae,it),s(it,$o),u(e,Ba,i),u(e,ce,i),s(ce,Fo),s(ce,js),s(js,Zo),s(ce,Ao),u(e,Ra,i),y(Ie,e,i),u(e,ka,i),u(e,Js,i),s(Js,ut),s(ut,Yo),u(e,Ga,i),y(qe,e,i),u(e,xa,i),u(e,gs,i),s(gs,Qo),u(e,Va,i),y(Se,e,i),u(e,Ca,i),u(e,ws,i),s(ws,pt),s(pt,Xo),u(e,Wa,i),y(_e,e,i),u(e,Na,i),u(e,I,i),s(I,Ho),s(I,dt),s(dt,zo),s(I,Lo),s(I,ct),s(ct,Do),s(I,Oo),s(I,mt),s(mt,Po),s(I,Ko),s(I,ht),s(ht,er),s(I,sr),s(I,Mt),s(Mt,tr),s(I,nr),u(e,$a,i),y(Be,e,i),u(e,Fa,i),u(e,me,i),s(me,ar),s(me,ft),s(ft,lr),s(me,or),u(e,Za,i),y(Re,e,i),u(e,Aa,i),u(e,Is,i),s(Is,rr),u(e,Ya,i),y(ke,e,i),u(e,Qa,i),u(e,he,i),s(he,ir),s(he,yt),s(yt,ur),s(he,pr),u(e,Xa,i),u(e,z,i),s(z,Ge),s(Ge,vt),s(vt,dr),s(Ge,cr),s(Ge,Tt),s(Tt,mr),s(z,hr),s(z,xe),s(xe,Ut),s(Ut,Mr),s(xe,fr),s(xe,bt),s(bt,yr),s(z,vr),s(z,Me),s(Me,Et),s(Et,Tr),s(Me,Ur),s(Me,jt),s(jt,br),s(Me,Er),u(e,Ha,i),u(e,Ve,i),s(Ve,qs),u(e,za,i),u(e,L,i),s(L,jr),s(L,Jt),s(Jt,Jr),s(L,gr),s(L,gt),s(gt,wr),s(L,Ir),u(e,La,i),u(e,le,i),s(le,fe),s(fe,wt),y(Ce,wt,null),s(le,qr),s(le,It),s(It,Sr),u(e,Da,i),u(e,ye,i),s(ye,_r),s(ye,qt),s(qt,Br),s(ye,Rr),u(e,Oa,i),u(e,Ss,i),s(Ss,St),s(St,kr),u(e,Pa,i),u(e,m,i),s(m,Gr),s(m,_t),s(_t,xr),s(m,Vr),s(m,We),s(We,Cr),s(m,Wr),s(m,Bt),s(Bt,Nr),s(m,$r),s(m,Rt),s(Rt,Fr),s(m,Zr),s(m,kt),s(kt,Ar),s(m,Yr),s(m,Gt),s(Gt,Qr),s(m,Xr),s(m,xt),s(xt,Hr),s(m,zr),s(m,Ne),s(Ne,Lr),s(m,Dr),s(m,Vt),s(Vt,Or),s(m,Pr),s(m,Ct),s(Ct,Kr),s(m,ei),s(m,Wt),s(Wt,si),s(m,ti),s(m,Nt),s(Nt,ni),s(m,ai),s(m,$e),s($e,li),s($e,$t),s($t,oi),s(m,ri),s(m,Ft),s(Ft,ii),s(m,ui),s(m,Zt),s(Zt,pi),s(m,di),s(m,Fe),s(Fe,At),s(At,ci),s(m,mi),s(m,Yt),s(Yt,hi),s(m,Mi),s(m,Qt),s(Qt,fi),s(m,yi),s(m,Xt),s(Xt,vi),s(m,Ti),u(e,Ka,i),u(e,ve,i),s(ve,Ht),s(Ht,q),s(q,zt),s(zt,Ui),s(q,bi),s(q,Lt),s(Lt,Ei),s(q,ji),s(q,Dt),s(Dt,Ji),s(q,gi),s(q,Ot),s(Ot,Pt),s(Pt,wi),s(q,Ii),s(q,Kt),s(Kt,qi),s(q,Si),s(q,en),s(en,_i),s(ve,Bi),s(ve,W),s(W,S),s(S,sn),s(sn,Ri),s(S,ki),s(S,tn),s(tn,Gi),s(S,xi),s(S,nn),s(nn,Vi),s(S,Ci),s(S,an),s(an,Wi),s(S,Ni),s(S,ln),s(ln,Ze),s(Ze,$i),s(S,Fi),s(S,on),s(on,Ae),s(Ae,Zi),s(W,Ai),s(W,_),s(_,rn),s(rn,Yi),s(_,Qi),s(_,un),s(un,Xi),s(_,Hi),s(_,pn),s(pn,zi),s(_,Li),s(_,dn),s(dn,Di),s(_,Oi),s(_,cn),s(cn,Ye),s(Ye,Pi),s(_,Ki),s(_,mn),s(mn,Qe),s(Qe,eu),s(W,su),s(W,B),s(B,hn),s(hn,tu),s(B,nu),s(B,Mn),s(Mn,au),s(B,lu),s(B,fn),s(fn,ou),s(B,ru),s(B,yn),s(yn,iu),s(B,uu),s(B,vn),s(vn,Xe),s(Xe,pu),s(B,du),s(B,Tn),s(Tn,He),s(He,cu),s(W,mu),s(W,R),s(R,Un),s(Un,hu),s(R,Mu),s(R,bn),s(bn,fu),s(R,yu),s(R,En),s(En,vu),s(R,Tu),s(R,jn),s(jn,Uu),s(R,bu),s(R,Jn),s(Jn,ze),s(ze,Eu),s(R,ju),s(R,gn),s(gn,Le),s(Le,Ju),s(W,gu),s(W,k),s(k,wn),s(wn,wu),s(k,Iu),s(k,In),s(In,qu),s(k,Su),s(k,qn),s(qn,_u),s(k,Bu),s(k,Sn),s(Sn,Ru),s(k,ku),s(k,_n),s(_n,Gu),s(k,xu),s(k,Bn),s(Bn,De),s(De,Vu),u(e,el,i),u(e,$,i),s($,Cu),s($,Oe),s(Oe,Wu),s($,Nu),s($,Rn),s(Rn,$u),s($,Fu),s($,kn),s(kn,Zu),s($,Au),u(e,sl,i),y(Pe,e,i),u(e,tl,i),u(e,D,i),s(D,Yu),s(D,Gn),s(Gn,Qu),s(D,Xu),s(D,xn),s(xn,Hu),s(D,zu),u(e,nl,i),y(Ke,e,i),u(e,al,i),u(e,_s,i),s(_s,Vn),s(Vn,Lu),u(e,ll,i),y(es,e,i),u(e,ol,i),u(e,Bs,i),s(Bs,Du),u(e,rl,i),y(ss,e,i),u(e,il,i),u(e,J,i),s(J,Ou),s(J,Cn),s(Cn,Pu),s(J,Ku),s(J,Wn),s(Wn,ep),s(J,sp),s(J,Nn),s(Nn,tp),s(J,np),s(J,$n),s($n,ap),s(J,lp),s(J,ts),s(ts,op),s(J,rp),s(J,Fn),s(Fn,ip),s(J,up),u(e,ul,i),y(ns,e,i),u(e,pl,i),u(e,Rs,i),s(Rs,pp),u(e,dl,i),y(as,e,i),u(e,cl,i),u(e,ks,i),s(ks,Zn),s(Zn,dp),u(e,ml,i),y(ls,e,i),u(e,hl,i),u(e,O,i),s(O,cp),s(O,An),s(An,mp),s(O,hp),s(O,Yn),s(Yn,Mp),s(O,fp),u(e,Ml,i),y(os,e,i),u(e,fl,i),u(e,Gs,i),s(Gs,Qn),s(Qn,yp),u(e,yl,i),y(rs,e,i),u(e,vl,i),u(e,g,i),s(g,vp),s(g,Xn),s(Xn,Tp),s(g,Up),s(g,Hn),s(Hn,bp),s(g,Ep),s(g,zn),s(zn,jp),s(g,Jp),s(g,Ln),s(Ln,gp),s(g,wp),s(g,Dn),s(Dn,Ip),s(g,qp),s(g,On),s(On,Sp),s(g,_p),u(e,Tl,i),y(is,e,i),u(e,Ul,i),u(e,xs,i),s(xs,Pn),s(Pn,Bp),u(e,bl,i),y(us,e,i),u(e,El,i),u(e,P,i),s(P,Rp),s(P,Kn),s(Kn,kp),s(P,Gp),s(P,ps),s(ps,xp),s(P,Vp),u(e,jl,i),u(e,oe,i),s(oe,Te),s(Te,ea),y(ds,ea,null),s(oe,Cp),s(oe,sa),s(sa,Wp),u(e,Jl,i),u(e,Vs,i),s(Vs,Np),u(e,gl,i),y(cs,e,i),u(e,wl,i),u(e,Cs,i),s(Cs,ta),s(ta,$p),u(e,Il,i),y(ms,e,i),u(e,ql,i),u(e,Ws,i),s(Ws,Fp),u(e,Sl,i),u(e,Ue,i),s(Ue,na),s(na,Zp),s(Ue,Ap),s(Ue,re),s(re,Yp),s(re,aa),s(aa,Qp),s(re,Xp),s(re,la),s(la,Hp),s(re,zp),u(e,_l,i),u(e,hs,i),s(hs,Ns),u(e,Bl,i),u(e,b,i),s(b,Lp),Rl.m(Oh,b),s(b,kl),Gl.m(Ph,b),s(b,xl),s(b,oa),s(oa,Dp),s(b,Op),Vl.m(Kh,b),s(b,Cl),Wl.m(eM,b),s(b,Nl),s(b,ra),s(ra,Pp),s(b,Kp),s(b,ia),s(ia,ed),s(b,sd),s(b,Ms),s(Ms,td),s(b,nd),s(b,ua),s(ua,ad),s(b,ld),s(b,pa),s(pa,od),s(b,rd),u(e,$l,i),y(fs,e,i),u(e,Fl,i),u(e,$s,i),s($s,da),s(da,id),u(e,Zl,i),y(ys,e,i),u(e,Al,i),u(e,K,i),s(K,ud),s(K,ca),s(ca,pd),s(K,dd),s(K,ma),s(ma,cd),s(K,md),u(e,Yl,i),y(vs,e,i),u(e,Ql,i),u(e,Fs,i),s(Fs,ha),s(ha,hd),u(e,Xl,i),y(Ts,e,i),u(e,Hl,i),u(e,Zs,i),s(Zs,Md),u(e,zl,i),u(e,ie,i),s(ie,be),s(be,Ma),y(Us,Ma,null),s(ie,fd),s(ie,fa),s(fa,yd),u(e,Ll,i),u(e,w,i),s(w,vd),s(w,ya),s(ya,Td),s(w,Ud),s(w,va),s(va,bd),s(w,Ed),s(w,Ta),s(Ta,jd),s(w,Jd),s(w,bs),s(bs,gd),s(w,wd),s(w,Ua),s(Ua,ba),s(ba,Id),s(w,qd),s(w,Ea),s(Ea,Sd),s(w,_d),Dl=!0},p:lM,i(e){Dl||(v(Je.$$.fragment,e),v(we.$$.fragment,e),v(Ie.$$.fragment,e),v(qe.$$.fragment,e),v(Se.$$.fragment,e),v(_e.$$.fragment,e),v(Be.$$.fragment,e),v(Re.$$.fragment,e),v(ke.$$.fragment,e),v(Ce.$$.fragment,e),v(Pe.$$.fragment,e),v(Ke.$$.fragment,e),v(es.$$.fragment,e),v(ss.$$.fragment,e),v(ns.$$.fragment,e),v(as.$$.fragment,e),v(ls.$$.fragment,e),v(os.$$.fragment,e),v(rs.$$.fragment,e),v(is.$$.fragment,e),v(us.$$.fragment,e),v(ds.$$.fragment,e),v(cs.$$.fragment,e),v(ms.$$.fragment,e),v(fs.$$.fragment,e),v(ys.$$.fragment,e),v(vs.$$.fragment,e),v(Ts.$$.fragment,e),v(Us.$$.fragment,e),Dl=!0)},o(e){T(Je.$$.fragment,e),T(we.$$.fragment,e),T(Ie.$$.fragment,e),T(qe.$$.fragment,e),T(Se.$$.fragment,e),T(_e.$$.fragment,e),T(Be.$$.fragment,e),T(Re.$$.fragment,e),T(ke.$$.fragment,e),T(Ce.$$.fragment,e),T(Pe.$$.fragment,e),T(Ke.$$.fragment,e),T(es.$$.fragment,e),T(ss.$$.fragment,e),T(ns.$$.fragment,e),T(as.$$.fragment,e),T(ls.$$.fragment,e),T(os.$$.fragment,e),T(rs.$$.fragment,e),T(is.$$.fragment,e),T(us.$$.fragment,e),T(ds.$$.fragment,e),T(cs.$$.fragment,e),T(ms.$$.fragment,e),T(fs.$$.fragment,e),T(ys.$$.fragment,e),T(vs.$$.fragment,e),T(Ts.$$.fragment,e),T(Us.$$.fragment,e),Dl=!1},d(e){t(te),e&&t(ga),e&&t(ne),U(Je),e&&t(wa),e&&t(G),e&&t(Ia),e&&t(Es),e&&t(qa),e&&t(pe),e&&t(Sa),e&&t(N),e&&t(_a),e&&t(ae),U(we),e&&t(Ba),e&&t(ce),e&&t(Ra),U(Ie,e),e&&t(ka),e&&t(Js),e&&t(Ga),U(qe,e),e&&t(xa),e&&t(gs),e&&t(Va),U(Se,e),e&&t(Ca),e&&t(ws),e&&t(Wa),U(_e,e),e&&t(Na),e&&t(I),e&&t($a),U(Be,e),e&&t(Fa),e&&t(me),e&&t(Za),U(Re,e),e&&t(Aa),e&&t(Is),e&&t(Ya),U(ke,e),e&&t(Qa),e&&t(he),e&&t(Xa),e&&t(z),e&&t(Ha),e&&t(Ve),e&&t(za),e&&t(L),e&&t(La),e&&t(le),U(Ce),e&&t(Da),e&&t(ye),e&&t(Oa),e&&t(Ss),e&&t(Pa),e&&t(m),e&&t(Ka),e&&t(ve),e&&t(el),e&&t($),e&&t(sl),U(Pe,e),e&&t(tl),e&&t(D),e&&t(nl),U(Ke,e),e&&t(al),e&&t(_s),e&&t(ll),U(es,e),e&&t(ol),e&&t(Bs),e&&t(rl),U(ss,e),e&&t(il),e&&t(J),e&&t(ul),U(ns,e),e&&t(pl),e&&t(Rs),e&&t(dl),U(as,e),e&&t(cl),e&&t(ks),e&&t(ml),U(ls,e),e&&t(hl),e&&t(O),e&&t(Ml),U(os,e),e&&t(fl),e&&t(Gs),e&&t(yl),U(rs,e),e&&t(vl),e&&t(g),e&&t(Tl),U(is,e),e&&t(Ul),e&&t(xs),e&&t(bl),U(us,e),e&&t(El),e&&t(P),e&&t(jl),e&&t(oe),U(ds),e&&t(Jl),e&&t(Vs),e&&t(gl),U(cs,e),e&&t(wl),e&&t(Cs),e&&t(Il),U(ms,e),e&&t(ql),e&&t(Ws),e&&t(Sl),e&&t(Ue),e&&t(_l),e&&t(hs),e&&t(Bl),e&&t(b),e&&t($l),U(fs,e),e&&t(Fl),e&&t($s),e&&t(Zl),U(ys,e),e&&t(Al),e&&t(K),e&&t(Yl),U(vs,e),e&&t(Ql),e&&t(Fs),e&&t(Xl),U(Ts,e),e&&t(Hl),e&&t(Zs),e&&t(zl),e&&t(ie),U(Us),e&&t(Ll),e&&t(w)}}}const iM={local:"modles-prentrans-pour-la-reconnaissance-automatique-de-la-parole",sections:[{local:"sonder-les-modles-ctc",title:"Sonder les mod\xE8les CTC"},{local:"passage-seq2seq",title:"Passage \xE0 Seq2Seq"},{local:"longue-transcription-et-horodatage",title:"Longue transcription et horodatage"},{local:"rsum",title:"R\xE9sum\xE9"}],title:"Mod\xE8les pr\xE9-entra\xEEn\xE9s pour la reconnaissance automatique de la parole"};function uM(Rd){return oM(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class mM extends sM{constructor(te){super();tM(this,te,uM,rM,nM,{})}}export{mM as default,iM as metadata};
