import{S as Nn,i as An,s as kn,e as a,k as p,w as m,t as n,M as Qn,c as r,d as t,m as d,a as u,x as M,h as o,b as c,N as Rn,G as s,g as i,y,q as J,o as h,B as f,v as Vn}from"../../chunks/vendor-hf-doc-builder.js";import{T as Xn}from"../../chunks/Tip-hf-doc-builder.js";import{I as us}from"../../chunks/IconCopyLink-hf-doc-builder.js";import{C as T}from"../../chunks/CodeBlock-hf-doc-builder.js";function zn(dt){let w;return{c(){w=n("Vous pouvez \xE9galement instancier le `ASRDiarizationPipeline` directement \xE0 partir d'un mod\xE8le pr\xE9-entra\xEEn\xE9 en sp\xE9cifiant l'identifiant d'un mod\xE8le ASR sur le *Hub* : `pipeline = ASRDiarizationPipeline.from_pretrained(\"openai/whisper-base\")`")},l(G){w=o(G,"Vous pouvez \xE9galement instancier le `ASRDiarizationPipeline` directement \xE0 partir d'un mod\xE8le pr\xE9-entra\xEEn\xE9 en sp\xE9cifiant l'identifiant d'un mod\xE8le ASR sur le *Hub* : `pipeline = ASRDiarizationPipeline.from_pretrained(\"openai/whisper-base\")`")},m(G,C){i(G,w,C)},d(G){G&&t(w)}}}function Fn(dt){let w,G,C,W,_e,H,ps,We,ds,ct,E,cs,xe,ms,Ms,D,ys,Js,mt,P,Ne,kl,Mt,q,x,Ae,L,hs,ke,fs,yt,N,Us,Qe,Ts,ws,Jt,U,bs,Re,Is,vs,Ve,js,Cs,Xe,Gs,Es,ze,Bs,gs,K,Zs,$s,ht,O,ft,b,qs,Fe,Ss,_s,Ye,Ws,xs,ee,Ns,As,te,ks,Qs,Ut,je,Rs,Tt,se,wt,A,Vs,le,Xs,zs,bt,ne,It,Ce,Fs,vt,oe,jt,k,Ys,He,Hs,Ds,Ct,ae,Gt,re,Et,Ge,Ps,Bt,S,Q,De,ie,Ls,Pe,Ks,gt,I,Os,Le,el,tl,ue,sl,ll,Ke,nl,ol,pe,Oe,al,rl,Zt,de,$t,R,il,et,ul,pl,qt,ce,St,me,_t,V,dl,tt,cl,ml,Wt,_,X,st,Me,Ml,lt,yl,xt,Ee,Jl,Nt,v,hl,nt,fl,Ul,ot,Tl,wl,at,bl,Il,At,ye,kt,B,vl,rt,jl,Cl,Je,it,Gl,El,Qt,he,Rt,z,Vt,Be,Bl,Xt,fe,zt,Ue,Ft,ge,gl,Yt,F,Zl,ut,$l,ql,Ht,Te,Dt,Ze,Sl,Pt,we,Lt,be,Kt,g,_l,pt,Wl,xl,Ie,Nl,Al,Ot;return H=new us({}),L=new us({}),O=new T({props:{code:"cGlwJTIwaW5zdGFsbCUyMC0tdXBncmFkZSUyMHB5YW5ub3RlLmF1ZGlv",highlighted:"pip install --upgrade pyannote.audio"}}),se=new T({props:{code:"ZnJvbSUyMHB5YW5ub3RlLmF1ZGlvJTIwaW1wb3J0JTIwUGlwZWxpbmUlMEElMEFkaWFyaXphdGlvbl9waXBlbGluZSUyMCUzRCUyMFBpcGVsaW5lLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjAlMjJweWFubm90ZSUyRnNwZWFrZXItZGlhcml6YXRpb24lNDAyLjElMjIlMkMlMjB1c2VfYXV0aF90b2tlbiUzRFRydWUlMEEp",highlighted:`<span class="hljs-keyword">from</span> pyannote.audio <span class="hljs-keyword">import</span> Pipeline

diarization_pipeline = Pipeline.from_pretrained(
    <span class="hljs-string">&quot;pyannote/speaker-diarization@2.1&quot;</span>, use_auth_token=<span class="hljs-literal">True</span>
)`}}),ne=new T({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBY29uY2F0ZW5hdGVkX2xpYnJpc3BlZWNoJTIwJTNEJTIwbG9hZF9kYXRhc2V0KCUwQSUyMCUyMCUyMCUyMCUyMnNhbmNoaXQtZ2FuZGhpJTJGY29uY2F0ZW5hdGVkX2xpYnJpc3BlZWNoJTIyJTJDJTIwc3BsaXQlM0QlMjJ0cmFpbiUyMiUyQyUyMHN0cmVhbWluZyUzRFRydWUlMEEpJTBBc2FtcGxlJTIwJTNEJTIwbmV4dChpdGVyKGNvbmNhdGVuYXRlZF9saWJyaXNwZWVjaCkp",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset

concatenated_librispeech = load_dataset(
    <span class="hljs-string">&quot;sanchit-gandhi/concatenated_librispeech&quot;</span>, split=<span class="hljs-string">&quot;train&quot;</span>, streaming=<span class="hljs-literal">True</span>
)
sample = <span class="hljs-built_in">next</span>(<span class="hljs-built_in">iter</span>(concatenated_librispeech))`}}),oe=new T({props:{code:"ZnJvbSUyMElQeXRob24uZGlzcGxheSUyMGltcG9ydCUyMEF1ZGlvJTBBJTBBQXVkaW8oc2FtcGxlJTVCJTIyYXVkaW8lMjIlNUQlNUIlMjJhcnJheSUyMiU1RCUyQyUyMHJhdGUlM0RzYW1wbGUlNUIlMjJhdWRpbyUyMiU1RCU1QiUyMnNhbXBsaW5nX3JhdGUlMjIlNUQp",highlighted:`<span class="hljs-keyword">from</span> IPython.display <span class="hljs-keyword">import</span> Audio

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>])`}}),ae=new T({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFpbnB1dF90ZW5zb3IlMjAlM0QlMjB0b3JjaC5mcm9tX251bXB5KHNhbXBsZSU1QiUyMmF1ZGlvJTIyJTVEJTVCJTIyYXJyYXklMjIlNUQlNUJOb25lJTJDJTIwJTNBJTVEKS5mbG9hdCgpJTBBb3V0cHV0cyUyMCUzRCUyMGRpYXJpemF0aW9uX3BpcGVsaW5lKCUwQSUyMCUyMCUyMCUyMCU3QiUyMndhdmVmb3JtJTIyJTNBJTIwaW5wdXRfdGVuc29yJTJDJTIwJTIyc2FtcGxlX3JhdGUlMjIlM0ElMjBzYW1wbGUlNUIlMjJhdWRpbyUyMiU1RCU1QiUyMnNhbXBsaW5nX3JhdGUlMjIlNUQlN0QlMEEpJTBBJTBBb3V0cHV0cy5mb3JfanNvbigpJTVCJTIyY29udGVudCUyMiU1RA==",highlighted:`<span class="hljs-keyword">import</span> torch

input_tensor = torch.from_numpy(sample[<span class="hljs-string">&quot;audio&quot;</span>][<span class="hljs-string">&quot;array&quot;</span>][<span class="hljs-literal">None</span>, :]).<span class="hljs-built_in">float</span>()
outputs = diarization_pipeline(
    {<span class="hljs-string">&quot;waveform&quot;</span>: input_tensor, <span class="hljs-string">&quot;sample_rate&quot;</span>: sample[<span class="hljs-string">&quot;audio&quot;</span>][<span class="hljs-string">&quot;sampling_rate&quot;</span>]}
)

outputs.for_json()[<span class="hljs-string">&quot;content&quot;</span>]`}}),re=new T({props:{code:"JTVCJTdCJ3NlZ21lbnQnJTNBJTIwJTdCJ3N0YXJ0JyUzQSUyMDAuNDk3ODEyNSUyQyUyMCdlbmQnJTNBJTIwMTQuNTIwOTM3NTAwMDAwMDAyJTdEJTJDJTBBJTIwJTIwJ3RyYWNrJyUzQSUyMCdCJyUyQyUwQSUyMCUyMCdsYWJlbCclM0ElMjAnU1BFQUtFUl8wMSclN0QlMkMlMEElMjAlN0Inc2VnbWVudCclM0ElMjAlN0Inc3RhcnQnJTNBJTIwMTUuMzY0Njg3NTAwMDAwMDAyJTJDJTIwJ2VuZCclM0ElMjAyMS4zNzIxODc1JTdEJTJDJTBBJTIwJTIwJ3RyYWNrJyUzQSUyMCdBJyUyQyUwQSUyMCUyMCdsYWJlbCclM0ElMjAnU1BFQUtFUl8wMCclN0QlNUQ=",highlighted:`[{&#x27;segment&#x27;: {&#x27;start&#x27;: 0.4978125, &#x27;end&#x27;: 14.520937500000002},
  &#x27;track&#x27;: &#x27;B&#x27;,
  &#x27;label&#x27;: &#x27;SPEAKER_01&#x27;},
 {&#x27;segment&#x27;: {&#x27;start&#x27;: 15.364687500000002, &#x27;end&#x27;: 21.3721875},
  &#x27;track&#x27;: &#x27;A&#x27;,
  &#x27;label&#x27;: &#x27;SPEAKER_00&#x27;}]`}}),ie=new us({}),de=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBYXNyX3BpcGVsaW5lJTIwJTNEJTIwcGlwZWxpbmUoJTBBJTIwJTIwJTIwJTIwJTIyYXV0b21hdGljLXNwZWVjaC1yZWNvZ25pdGlvbiUyMiUyQyUwQSUyMCUyMCUyMCUyMG1vZGVsJTNEJTIyb3BlbmFpJTJGd2hpc3Blci1iYXNlJTIyJTJDJTBBKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline

asr_pipeline = pipeline(
    <span class="hljs-string">&quot;automatic-speech-recognition&quot;</span>,
    model=<span class="hljs-string">&quot;openai/whisper-base&quot;</span>,
)`}}),ce=new T({props:{code:"YXNyX3BpcGVsaW5lKCUwQSUyMCUyMCUyMCUyMHNhbXBsZSU1QiUyMmF1ZGlvJTIyJTVELmNvcHkoKSUyQyUwQSUyMCUyMCUyMCUyMGdlbmVyYXRlX2t3YXJncyUzRCU3QiUyMm1heF9uZXdfdG9rZW5zJTIyJTNBJTIwMjU2JTdEJTJDJTBBJTIwJTIwJTIwJTIwcmV0dXJuX3RpbWVzdGFtcHMlM0RUcnVlJTJDJTBBKQ==",highlighted:`asr_pipeline(
    sample[<span class="hljs-string">&quot;audio&quot;</span>].copy(),
    generate_kwargs={<span class="hljs-string">&quot;max_new_tokens&quot;</span>: <span class="hljs-number">256</span>},
    return_timestamps=<span class="hljs-literal">True</span>,
)`}}),me=new T({props:{code:"JTdCJTBBJTIwJTIwJTIwJTIwJTIydGV4dCUyMiUzQSUyMCUyMiUyMFRoZSUyMHNlY29uZCUyMGFuZCUyMGltcG9ydGFuY2UlMjBpcyUyMGFzJTIwZm9sbG93cy4lMjBTb3ZlcmVpZ250eSUyMG1heSUyMGJlJTIwZGVmaW5lZCUyMHRvJTIwYmUlMjB0aGUlMjByaWdodCUyMG9mJTIwbWFraW5nJTIwbGF3cy4lMjBJbiUyMEZyYW5jZSUyQyUyMHRoZSUyMGtpbmclMjByZWFsbHklMjBleGVyY2lzZXMlMjBhJTIwcG9ydGlvbiUyMG9mJTIwdGhlJTIwc292ZXJlaWduJTIwcG93ZXIlMkMlMjBzaW5jZSUyMHRoZSUyMGxhd3MlMjBoYXZlJTIwbm8lMjB3ZWlnaHQuJTIwSGUlMjB3YXMlMjBpbiUyMGElMjBmYXZvcmVkJTIwc3RhdGUlMjBvZiUyMG1pbmQlMkMlMjBvd2luZyUyMHRvJTIwdGhlJTIwYmxpZ2h0JTIwaGlzJTIwd2lmZSdzJTIwYWN0aW9uJTIwdGhyZWF0ZW5lZCUyMHRvJTIwY2FzdCUyMHVwb24lMjBoaXMlMjBlbnRpcmUlMjBmdXR1cmUuJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyY2h1bmtzJTIyJTNBJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdCJTIydGltZXN0YW1wJTIyJTNBJTIwKDAuMCUyQyUyMDMuNTYpJTJDJTIwJTIydGV4dCUyMiUzQSUyMCUyMiUyMFRoZSUyMHNlY29uZCUyMGFuZCUyMGltcG9ydGFuY2UlMjBpcyUyMGFzJTIwZm9sbG93cy4lMjIlN0QlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJ0aW1lc3RhbXAlMjIlM0ElMjAoMy41NiUyQyUyMDcuODQpJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIydGV4dCUyMiUzQSUyMCUyMiUyMFNvdmVyZWlnbnR5JTIwbWF5JTIwYmUlMjBkZWZpbmVkJTIwdG8lMjBiZSUyMHRoZSUyMHJpZ2h0JTIwb2YlMjBtYWtpbmclMjBsYXdzLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMnRpbWVzdGFtcCUyMiUzQSUyMCg3Ljg0JTJDJTIwMTMuODgpJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIydGV4dCUyMiUzQSUyMCUyMiUyMEluJTIwRnJhbmNlJTJDJTIwdGhlJTIwa2luZyUyMHJlYWxseSUyMGV4ZXJjaXNlcyUyMGElMjBwb3J0aW9uJTIwb2YlMjB0aGUlMjBzb3ZlcmVpZ24lMjBwb3dlciUyQyUyMHNpbmNlJTIwdGhlJTIwbGF3cyUyMGhhdmUlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlN0QlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlN0IlMjJ0aW1lc3RhbXAlMjIlM0ElMjAoMTMuODglMkMlMjAxNS40OCklMkMlMjAlMjJ0ZXh0JTIyJTNBJTIwJTIyJTIwbm8lMjB3ZWlnaHQuJTIyJTdEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIydGltZXN0YW1wJTIyJTNBJTIwKDE1LjQ4JTJDJTIwMTkuNDQpJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIydGV4dCUyMiUzQSUyMCUyMiUyMEhlJTIwd2FzJTIwaW4lMjBhJTIwZmF2b3JlZCUyMHN0YXRlJTIwb2YlMjBtaW5kJTJDJTIwb3dpbmclMjB0byUyMHRoZSUyMGJsaWdodCUyMGhpcyUyMHdpZmUncyUyMGFjdGlvbiUyMHRocmVhdGVuZWQlMjB0byUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3QiUyMnRpbWVzdGFtcCUyMiUzQSUyMCgxOS40NCUyQyUyMDIxLjI4KSUyQyUyMCUyMnRleHQlMjIlM0ElMjAlMjIlMjBjYXN0JTIwdXBvbiUyMGhpcyUyMGVudGlyZSUyMGZ1dHVyZS4lMjIlN0QlMkMlMEElMjAlMjAlMjAlMjAlNUQlMkMlMEElN0Q=",highlighted:`{
    &quot;text&quot;: &quot; The second and importance is as follows. Sovereignty may be defined to be the right of making laws. In France, the king really exercises a portion of the sovereign power, since the laws have no weight. He was in a favored state of mind, owing to the blight his wife&#x27;s action threatened to cast upon his entire future.&quot;,
    &quot;chunks&quot;: [
        {&quot;timestamp&quot;: (0.0, 3.56), &quot;text&quot;: &quot; The second and importance is as follows.&quot;},
        {
            &quot;timestamp&quot;: (3.56, 7.84),
            &quot;text&quot;: &quot; Sovereignty may be defined to be the right of making laws.&quot;,
        },
        {
            &quot;timestamp&quot;: (7.84, 13.88),
            &quot;text&quot;: &quot; In France, the king really exercises a portion of the sovereign power, since the laws have&quot;,
        },
        {&quot;timestamp&quot;: (13.88, 15.48), &quot;text&quot;: &quot; no weight.&quot;},
        {
            &quot;timestamp&quot;: (15.48, 19.44),
            &quot;text&quot;: &quot; He was in a favored state of mind, owing to the blight his wife&#x27;s action threatened to&quot;,
        },
        {&quot;timestamp&quot;: (19.44, 21.28), &quot;text&quot;: &quot; cast upon his entire future.&quot;},
    ],
}`}}),Me=new us({}),ye=new T({props:{code:"cGlwJTIwaW5zdGFsbCUyMGdpdCUyQmh0dHBzJTNBJTJGJTJGZ2l0aHViLmNvbSUyRmh1Z2dpbmdmYWNlJTJGc3BlZWNoYm94",highlighted:"pip install git+https://github.com/huggingface/speechbox"}}),he=new T({props:{code:"ZnJvbSUyMHNwZWVjaGJveCUyMGltcG9ydCUyMEFTUkRpYXJpemF0aW9uUGlwZWxpbmUlMEElMEFwaXBlbGluZSUyMCUzRCUyMEFTUkRpYXJpemF0aW9uUGlwZWxpbmUoJTBBJTIwJTIwJTIwJTIwYXNyX3BpcGVsaW5lJTNEYXNyX3BpcGVsaW5lJTJDJTIwZGlhcml6YXRpb25fcGlwZWxpbmUlM0RkaWFyaXphdGlvbl9waXBlbGluZSUwQSk=",highlighted:`<span class="hljs-keyword">from</span> speechbox <span class="hljs-keyword">import</span> ASRDiarizationPipeline

pipeline = ASRDiarizationPipeline(
    asr_pipeline=asr_pipeline, diarization_pipeline=diarization_pipeline
)`}}),z=new Xn({props:{$$slots:{default:[zn]},$$scope:{ctx:dt}}}),fe=new T({props:{code:"cGlwZWxpbmUoc2FtcGxlJTVCJTIyYXVkaW8lMjIlNUQuY29weSgpKQ==",highlighted:'pipeline(sample[<span class="hljs-string">&quot;audio&quot;</span>].copy())'}}),Ue=new T({props:{code:"JTVCJTdCJ3NwZWFrZXInJTNBJTIwJ1NQRUFLRVJfMDEnJTJDJTBBJTIwJTIwJ3RleHQnJTNBJTIwJyUyMFRoZSUyMHNlY29uZCUyMGFuZCUyMGltcG9ydGFuY2UlMjBpcyUyMGFzJTIwZm9sbG93cy4lMjBTb3ZlcmVpZ250eSUyMG1heSUyMGJlJTIwZGVmaW5lZCUyMHRvJTIwYmUlMjB0aGUlMjByaWdodCUyMG9mJTIwbWFraW5nJTIwbGF3cy4lMjBJbiUyMEZyYW5jZSUyQyUyMHRoZSUyMGtpbmclMjByZWFsbHklMjBleGVyY2lzZXMlMjBhJTIwcG9ydGlvbiUyMG9mJTIwdGhlJTIwc292ZXJlaWduJTIwcG93ZXIlMkMlMjBzaW5jZSUyMHRoZSUyMGxhd3MlMjBoYXZlJTIwbm8lMjB3ZWlnaHQuJyUyQyUwQSUyMCUyMCd0aW1lc3RhbXAnJTNBJTIwKDAuMCUyQyUyMDE1LjQ4KSU3RCUyQyUwQSUyMCU3QidzcGVha2VyJyUzQSUyMCdTUEVBS0VSXzAwJyUyQyUwQSUyMCUyMCd0ZXh0JyUzQSUyMCUyMiUyMEhlJTIwd2FzJTIwaW4lMjBhJTIwZmF2b3JlZCUyMHN0YXRlJTIwb2YlMjBtaW5kJTJDJTIwb3dpbmclMjB0byUyMHRoZSUyMGJsaWdodCUyMGhpcyUyMHdpZmUncyUyMGFjdGlvbiUyMHRocmVhdGVuZWQlMjB0byUyMGNhc3QlMjB1cG9uJTIwaGlzJTIwZW50aXJlJTIwZnV0dXJlLiUyMiUyQyUwQSUyMCUyMCd0aW1lc3RhbXAnJTNBJTIwKDE1LjQ4JTJDJTIwMjEuMjgpJTdEJTVE",highlighted:`[{&#x27;speaker&#x27;: &#x27;SPEAKER_01&#x27;,
  &#x27;text&#x27;: &#x27; The second and importance is as follows. Sovereignty may be defined to be the right of making laws. In France, the king really exercises a portion of the sovereign power, since the laws have no weight.&#x27;,
  &#x27;timestamp&#x27;: (0.0, 15.48)},
 {&#x27;speaker&#x27;: &#x27;SPEAKER_00&#x27;,
  &#x27;text&#x27;: &quot; He was in a favored state of mind, owing to the blight his wife&#x27;s action threatened to cast upon his entire future.&quot;,
  &#x27;timestamp&#x27;: (15.48, 21.28)}]`}}),Te=new T({props:{code:"ZGVmJTIwdHVwbGVfdG9fc3RyaW5nKHN0YXJ0X2VuZF90dXBsZSUyQyUyMG5kaWdpdHMlM0QxKSUzQSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMHN0cigocm91bmQoc3RhcnRfZW5kX3R1cGxlJTVCMCU1RCUyQyUyMG5kaWdpdHMpJTJDJTIwcm91bmQoc3RhcnRfZW5kX3R1cGxlJTVCMSU1RCUyQyUyMG5kaWdpdHMpKSklMEElMEElMEFkZWYlMjBmb3JtYXRfYXNfdHJhbnNjcmlwdGlvbihyYXdfc2VnbWVudHMpJTNBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwJTIyJTVDbiU1Q24lMjIuam9pbiglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjaHVuayU1QiUyMnNwZWFrZXIlMjIlNUQlMjAlMkIlMjAlMjIlMjAlMjIlMjAlMkIlMjB0dXBsZV90b19zdHJpbmcoY2h1bmslNUIlMjJ0aW1lc3RhbXAlMjIlNUQpJTIwJTJCJTIwY2h1bmslNUIlMjJ0ZXh0JTIyJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZm9yJTIwY2h1bmslMjBpbiUyMHJhd19zZWdtZW50cyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU1RCUwQSUyMCUyMCUyMCUyMCk=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">tuple_to_string</span>(<span class="hljs-params">start_end_tuple, ndigits=<span class="hljs-number">1</span></span>):
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">str</span>((<span class="hljs-built_in">round</span>(start_end_tuple[<span class="hljs-number">0</span>], ndigits), <span class="hljs-built_in">round</span>(start_end_tuple[<span class="hljs-number">1</span>], ndigits)))


<span class="hljs-keyword">def</span> <span class="hljs-title function_">format_as_transcription</span>(<span class="hljs-params">raw_segments</span>):
    <span class="hljs-keyword">return</span> <span class="hljs-string">&quot;\\n\\n&quot;</span>.join(
        [
            chunk[<span class="hljs-string">&quot;speaker&quot;</span>] + <span class="hljs-string">&quot; &quot;</span> + tuple_to_string(chunk[<span class="hljs-string">&quot;timestamp&quot;</span>]) + chunk[<span class="hljs-string">&quot;text&quot;</span>]
            <span class="hljs-keyword">for</span> chunk <span class="hljs-keyword">in</span> raw_segments
        ]
    )`}}),we=new T({props:{code:"b3V0cHV0cyUyMCUzRCUyMHBpcGVsaW5lKHNhbXBsZSU1QiUyMmF1ZGlvJTIyJTVELmNvcHkoKSklMEElMEFmb3JtYXRfYXNfdHJhbnNjcmlwdGlvbihvdXRwdXRzKQ==",highlighted:`outputs = pipeline(sample[<span class="hljs-string">&quot;audio&quot;</span>].copy())

format_as_transcription(outputs)`}}),be=new T({props:{code:"U1BFQUtFUl8wMSUyMCgwLjAlMkMlMjAxNS41KSUyMFRoZSUyMHNlY29uZCUyMGFuZCUyMGltcG9ydGFuY2UlMjBpcyUyMGFzJTIwZm9sbG93cy4lMjBTb3ZlcmVpZ250eSUyMG1heSUyMGJlJTIwZGVmaW5lZCUyMHRvJTIwYmUlMjB0aGUlMjByaWdodCUyMG9mJTIwbWFraW5nJTIwbGF3cy4lMEFJbiUyMEZyYW5jZSUyQyUyMHRoZSUyMGtpbmclMjByZWFsbHklMjBleGVyY2lzZXMlMjBhJTIwcG9ydGlvbiUyMG9mJTIwdGhlJTIwc292ZXJlaWduJTIwcG93ZXIlMkMlMjBzaW5jZSUyMHRoZSUyMGxhd3MlMjBoYXZlJTIwbm8lMjB3ZWlnaHQuJTBBJTBBU1BFQUtFUl8wMCUyMCgxNS41JTJDJTIwMjEuMyklMjBIZSUyMHdhcyUyMGluJTIwYSUyMGZhdm9yZWQlMjBzdGF0ZSUyMG9mJTIwbWluZCUyQyUyMG93aW5nJTIwdG8lMjB0aGUlMjBibGlnaHQlMjBoaXMlMjB3aWZlJ3MlMjBhY3Rpb24lMjB0aHJlYXRlbmVkJTIwdG8lMjBjYXN0JTIwdXBvbiUwQWhpcyUyMGVudGlyZSUyMGZ1dHVyZS4=",highlighted:`SPEAKER_01 (0.0, 15.5) The second and importance is as follows. Sovereignty may be defined to be the right of making laws.
In France, the king really exercises a portion of the sovereign power, since the laws have no weight.

SPEAKER_00 (15.5, 21.3) He was in a favored state of mind, owing to the blight his wife&#x27;s action threatened to cast upon
his entire future.`}}),{c(){w=a("meta"),G=p(),C=a("h1"),W=a("a"),_e=a("span"),m(H.$$.fragment),ps=p(),We=a("span"),ds=n("Transcrire une r\xE9union"),ct=p(),E=a("p"),cs=n("Dans cette derni\xE8re section, nous utiliserons le mod\xE8le Whisper pour g\xE9n\xE9rer la transcription d\u2019une conversation ou d\u2019une r\xE9union entre deux ou plusieurs locuteurs. Nous l\u2019associerons ensuite \xE0 un mod\xE8le de "),xe=a("em"),ms=n("s\xE9paration des locuteurs"),Ms=n(" pour pr\xE9dire \u201Cqui a parl\xE9 quand\u201D. En faisant correspondre les horodatages des transcriptions Whisper avec les horodatages du mod\xE8le de s\xE9paration des locuteurs, nous pouvons pr\xE9dire une transcription de r\xE9union de bout en bout avec des heures de d\xE9but et de fin enti\xE8rement format\xE9es pour chaque locuteur. Il s\u2019agit d\u2019une version basique des services de transcription de r\xE9unions que vous avez pu voir en ligne sur "),D=a("a"),ys=n("Otter.ai"),Js=n(" et co :"),mt=p(),P=a("div"),Ne=a("img"),Mt=p(),q=a("h2"),x=a("a"),Ae=a("span"),m(L.$$.fragment),hs=p(),ke=a("span"),fs=n("S\xE9paration des locuteurs"),yt=p(),N=a("p"),Us=n("La s\xE9paration des locuteur (t\xE2che de "),Qe=a("em"),Ts=n("diarization"),ws=n(` en anglais) consiste \xE0 prendre une entr\xE9e audio non \xE9tiquet\xE9e et \xE0 pr\xE9dire \u201Cqui a parl\xE9 quand\u201D.
Ce faisant, nous pouvons pr\xE9dire les horodatages de d\xE9but / fin pour chaque tour de parole, correspondant au moment o\xF9 chaque locuteur commence \xE0 parler et au moment o\xF9 il termine.`),Jt=p(),U=a("p"),bs=n("\u{1F917} "),Re=a("em"),Is=n("Transformers"),vs=n(" n\u2019a actuellement pas de mod\xE8le de "),Ve=a("em"),js=n("diarization"),Cs=n(" inclus, mais il y a des "),Xe=a("em"),Gs=n("checkpoints"),Es=n(" sur le "),ze=a("em"),Bs=n("Hub"),gs=n(" qui peuvent \xEAtre utilis\xE9s avec une relative facilit\xE9. Dans cet exemple, nous utiliserons le mod\xE8le pr\xE9-entra\xEEn\xE9 de "),K=a("a"),Zs=n("pyannote.audio"),$s=n(". Commen\xE7ons par l\u2019installation du paquet avec pip :"),ht=p(),m(O.$$.fragment),ft=p(),b=a("p"),qs=n("Bien, les poids de ce mod\xE8le sont h\xE9berg\xE9s sur le "),Fe=a("em"),Ss=n("Hub"),_s=n(". Pour y acc\xE9der, nous devons d\u2019abord accepter les conditions d\u2019utilisation du mod\xE8le de "),Ye=a("em"),Ws=n("diarization"),xs=n(" : "),ee=a("a"),Ns=n("pyannote/speaker-diarization"),As=n(". Et ensuite les conditions d\u2019utilisation du mod\xE8le de segmentation : "),te=a("a"),ks=n("pyannote/segmentation"),Qs=n("."),Ut=p(),je=a("p"),Rs=n("Une fois termin\xE9, nous pouvons charger le pipeline de s\xE9paration des locuteurs localement sur notre appareil :"),Tt=p(),m(se.$$.fragment),wt=p(),A=a("p"),Vs=n("Essayons-le sur un \xE9chantillon de fichier audio ! Pour cela, nous allons charger un \xE9chantillon du jeu de donn\xE9es "),le=a("a"),Xs=n("LibriSpeech ASR"),zs=n(" qui consiste en deux locuteurs diff\xE9rents qui ont \xE9t\xE9 concat\xE9n\xE9s ensemble pour donner un seul fichier audio :"),bt=p(),m(ne.$$.fragment),It=p(),Ce=a("p"),Fs=n("Nous pouvons \xE9couter l\u2019audio pour voir \xE0 quoi cela ressemble :"),vt=p(),m(oe.$$.fragment),jt=p(),k=a("p"),Ys=n("Nous pouvons clairement entendre deux locuteurs diff\xE9rents, avec une transition d\u2019environ 15 secondes. Passons ce fichier audio au mod\xE8le de s\xE9paration pour obtenir les heures de d\xE9but et de fin du locuteur. Notez que pyannote.audio s\u2019attend \xE0 ce que l\u2019entr\xE9e audio soit un tenseur PyTorch de la forme "),He=a("code"),Hs=n("(channels, seq_len)"),Ds=n(", nous devons donc effectuer cette conversion avant d\u2019ex\xE9cuter le mod\xE8le :"),Ct=p(),m(ae.$$.fragment),Gt=p(),m(re.$$.fragment),Et=p(),Ge=a("p"),Ps=n("Cela semble plut\xF4t bien ! Nous pouvons voir que le premier locuteur est pr\xE9dit comme parlant jusqu\u2019\xE0 la marque de 14,5 secondes, et le second locuteur \xE0 partir de 15,4s. Il ne nous reste plus qu\u2019\xE0 obtenir notre transcription !"),Bt=p(),S=a("h2"),Q=a("a"),De=a("span"),m(ie.$$.fragment),Ls=p(),Pe=a("span"),Ks=n("Transcription de la parole"),gt=p(),I=a("p"),Os=n("Pour la troisi\xE8me fois dans cette unit\xE9, nous allons utiliser le mod\xE8le Whisper pour notre syst\xE8me de transcription de la parole. Plus pr\xE9cis\xE9ment, nous chargerons le "),Le=a("em"),el=n("checkpoint"),tl=p(),ue=a("a"),sl=n("Whisper Base"),ll=n(", car il est suffisamment petit pour donner une bonne vitesse d\u2019inf\xE9rence avec une pr\xE9cision de transcription raisonnable. Comme auparavant, vous pouvez utiliser n\u2019importe quel "),Ke=a("em"),nl=n("checkpoint "),ol=n("de reconnaissance vocale disponible sur le "),pe=a("a"),Oe=a("em"),al=n("Hub"),rl=n(", y compris Wav2Vec2, MMS ASR ou d\u2019autres tailles de Whisper :"),Zt=p(),m(de.$$.fragment),$t=p(),R=a("p"),il=n("Obtenons la transcription de notre \xE9chantillon audio, en retournant \xE9galement les horodatages au niveau du segment afin que nous connaissions les heures de d\xE9but et de fin de chaque segment. Vous vous souviendrez de l\u2019unit\xE9 5 que nous devons passer l\u2019argument "),et=a("code"),ul=n("return_timestamps=True"),pl=n(" pour activer la t\xE2che de pr\xE9diction de l\u2019horodatage de Whisper :"),qt=p(),m(ce.$$.fragment),St=p(),m(me.$$.fragment),_t=p(),V=a("p"),dl=n("Ok, nous constatons que chaque segment de la transcription a une heure de d\xE9but et une heure de fin, avec un changement de locuteur au bout de 15,48 secondes. Nous pouvons maintenant associer cette transcription aux horodatages des locuteurs que nous avons obtenus \xE0 partir de notre mod\xE8le de "),tt=a("em"),cl=n("diarization"),ml=n(" pour obtenir notre transcription finale."),Wt=p(),_=a("h2"),X=a("a"),st=a("span"),m(Me.$$.fragment),Ml=p(),lt=a("span"),yl=n("Speechbox"),xt=p(),Ee=a("p"),Jl=n(`Pour obtenir la transcription finale, nous allons aligner les timestamps du mod\xE8le de diarisation avec ceux du mod\xE8le Whisper.
Le mod\xE8le de s\xE9paration pr\xE9dit que le premier locuteur se termine \xE0 14,5 secondes et que le second locuteur commence \xE0 15,4 secondes, alors que Whisper pr\xE9dit les limites des segments \xE0 13,88, 15,48 et 19,44 secondes respectivement. Comme les timestamps de Whisper ne correspondent pas parfaitement \xE0 ceux du mod\xE8le de s\xE9paration, nous devons trouver lesquelles de ces limites sont les plus proches de 14,5 et 15,4 secondes, et segmenter la transcription par locuteur en cons\xE9quence. Plus pr\xE9cis\xE9ment, nous trouverons l\u2019alignement le plus proche entre les horodatages de la s\xE9paration et de la transcription en minimisant la distance absolue entre les deux.`),Nt=p(),v=a("p"),hl=n("Heureusement pour nous, nous pouvons utiliser \u{1F917} "),nt=a("em"),fl=n("Speechbox"),Ul=n(" pour effectuer cet alignement. Tout d\u2019abord, installons "),ot=a("code"),Tl=n("speechbox"),wl=n(" depuis "),at=a("em"),bl=n("main"),Il=n(" :"),At=p(),m(ye.$$.fragment),kt=p(),B=a("p"),vl=n("Nous pouvons maintenant instancier notre pipeline combin\xE9 de "),rt=a("em"),jl=n("diarization"),Cl=n(" et de transcription, en passant nos deux mod\xE8les \xE0 la classe "),Je=a("a"),it=a("code"),Gl=n("ASRDiarizationPipeline"),El=n(" :"),Qt=p(),m(he.$$.fragment),Rt=p(),m(z.$$.fragment),Vt=p(),Be=a("p"),Bl=n("Passons le fichier audio au pipeline et voyons ce que nous obtenons :"),Xt=p(),m(fe.$$.fragment),zt=p(),m(Ue.$$.fragment),Ft=p(),ge=a("p"),gl=n("Excellent ! Le premier locuteur est segment\xE9 comme parlant de 0 \xE0 15,48 secondes, et le second locuteur de 15,48 \xE0 21,28 secondes, avec les transcriptions correspondantes pour chacun."),Yt=p(),F=a("p"),Zl=n("Nous pouvons formater les horodatages de mani\xE8re un peu plus agr\xE9able en d\xE9finissant deux fonctions d\u2019aide. La premi\xE8re convertit un "),ut=a("em"),$l=n("tuple"),ql=n(" d\u2019horodatages en une cha\xEEne de caract\xE8res, arrondie \xE0 un nombre d\xE9fini de d\xE9cimales. La seconde combine l\u2019identifiant du locuteur, l\u2019horodatage et les informations textuelles sur une seule ligne, et s\xE9pare chaque locuteur sur sa propre ligne pour faciliter la lecture :"),Ht=p(),m(Te.$$.fragment),Dt=p(),Ze=a("p"),Sl=n("Ex\xE9cutons \xE0 nouveau le pipeline, en formatant cette fois la transcription selon la fonction que nous venons de d\xE9finir :"),Pt=p(),m(we.$$.fragment),Lt=p(),m(be.$$.fragment),Kt=p(),g=a("p"),_l=n(`Et voil\xE0 ! Nous avons ainsi s\xE9par\xE9 et transcrit notre audio et renvoy\xE9 des transcriptions segment\xE9es par locuteur.
Bien que l\u2019algorithme de distance minimale pour aligner les horodatages diaris\xE9s et les horodatages transcrits soit simple, il fonctionne bien dans la pratique. Si vous souhaitez explorer des m\xE9thodes plus avanc\xE9es pour combiner les horodatages, le code source de `),pt=a("code"),Wl=n("ASRDiarizationPipeline"),xl=n(" est un bon point de d\xE9part : "),Ie=a("a"),Nl=n("speechbox/diarize.py"),Al=n("."),this.h()},l(e){const l=Qn('[data-svelte="svelte-1phssyn"]',document.head);w=r(l,"META",{name:!0,content:!0}),l.forEach(t),G=d(e),C=r(e,"H1",{class:!0});var ve=u(C);W=r(ve,"A",{id:!0,class:!0,href:!0});var Ql=u(W);_e=r(Ql,"SPAN",{});var Rl=u(_e);M(H.$$.fragment,Rl),Rl.forEach(t),Ql.forEach(t),ps=d(ve),We=r(ve,"SPAN",{});var Vl=u(We);ds=o(Vl,"Transcrire une r\xE9union"),Vl.forEach(t),ve.forEach(t),ct=d(e),E=r(e,"P",{});var $e=u(E);cs=o($e,"Dans cette derni\xE8re section, nous utiliserons le mod\xE8le Whisper pour g\xE9n\xE9rer la transcription d\u2019une conversation ou d\u2019une r\xE9union entre deux ou plusieurs locuteurs. Nous l\u2019associerons ensuite \xE0 un mod\xE8le de "),xe=r($e,"EM",{});var Xl=u(xe);ms=o(Xl,"s\xE9paration des locuteurs"),Xl.forEach(t),Ms=o($e," pour pr\xE9dire \u201Cqui a parl\xE9 quand\u201D. En faisant correspondre les horodatages des transcriptions Whisper avec les horodatages du mod\xE8le de s\xE9paration des locuteurs, nous pouvons pr\xE9dire une transcription de r\xE9union de bout en bout avec des heures de d\xE9but et de fin enti\xE8rement format\xE9es pour chaque locuteur. Il s\u2019agit d\u2019une version basique des services de transcription de r\xE9unions que vous avez pu voir en ligne sur "),D=r($e,"A",{href:!0,rel:!0});var zl=u(D);ys=o(zl,"Otter.ai"),zl.forEach(t),Js=o($e," et co :"),$e.forEach(t),mt=d(e),P=r(e,"DIV",{class:!0});var Fl=u(P);Ne=r(Fl,"IMG",{src:!0}),Fl.forEach(t),Mt=d(e),q=r(e,"H2",{class:!0});var es=u(q);x=r(es,"A",{id:!0,class:!0,href:!0});var Yl=u(x);Ae=r(Yl,"SPAN",{});var Hl=u(Ae);M(L.$$.fragment,Hl),Hl.forEach(t),Yl.forEach(t),hs=d(es),ke=r(es,"SPAN",{});var Dl=u(ke);fs=o(Dl,"S\xE9paration des locuteurs"),Dl.forEach(t),es.forEach(t),yt=d(e),N=r(e,"P",{});var ts=u(N);Us=o(ts,"La s\xE9paration des locuteur (t\xE2che de "),Qe=r(ts,"EM",{});var Pl=u(Qe);Ts=o(Pl,"diarization"),Pl.forEach(t),ws=o(ts,` en anglais) consiste \xE0 prendre une entr\xE9e audio non \xE9tiquet\xE9e et \xE0 pr\xE9dire \u201Cqui a parl\xE9 quand\u201D.
Ce faisant, nous pouvons pr\xE9dire les horodatages de d\xE9but / fin pour chaque tour de parole, correspondant au moment o\xF9 chaque locuteur commence \xE0 parler et au moment o\xF9 il termine.`),ts.forEach(t),Jt=d(e),U=r(e,"P",{});var j=u(U);bs=o(j,"\u{1F917} "),Re=r(j,"EM",{});var Ll=u(Re);Is=o(Ll,"Transformers"),Ll.forEach(t),vs=o(j," n\u2019a actuellement pas de mod\xE8le de "),Ve=r(j,"EM",{});var Kl=u(Ve);js=o(Kl,"diarization"),Kl.forEach(t),Cs=o(j," inclus, mais il y a des "),Xe=r(j,"EM",{});var Ol=u(Xe);Gs=o(Ol,"checkpoints"),Ol.forEach(t),Es=o(j," sur le "),ze=r(j,"EM",{});var en=u(ze);Bs=o(en,"Hub"),en.forEach(t),gs=o(j," qui peuvent \xEAtre utilis\xE9s avec une relative facilit\xE9. Dans cet exemple, nous utiliserons le mod\xE8le pr\xE9-entra\xEEn\xE9 de "),K=r(j,"A",{href:!0,rel:!0});var tn=u(K);Zs=o(tn,"pyannote.audio"),tn.forEach(t),$s=o(j,". Commen\xE7ons par l\u2019installation du paquet avec pip :"),j.forEach(t),ht=d(e),M(O.$$.fragment,e),ft=d(e),b=r(e,"P",{});var Z=u(b);qs=o(Z,"Bien, les poids de ce mod\xE8le sont h\xE9berg\xE9s sur le "),Fe=r(Z,"EM",{});var sn=u(Fe);Ss=o(sn,"Hub"),sn.forEach(t),_s=o(Z,". Pour y acc\xE9der, nous devons d\u2019abord accepter les conditions d\u2019utilisation du mod\xE8le de "),Ye=r(Z,"EM",{});var ln=u(Ye);Ws=o(ln,"diarization"),ln.forEach(t),xs=o(Z," : "),ee=r(Z,"A",{href:!0,rel:!0});var nn=u(ee);Ns=o(nn,"pyannote/speaker-diarization"),nn.forEach(t),As=o(Z,". Et ensuite les conditions d\u2019utilisation du mod\xE8le de segmentation : "),te=r(Z,"A",{href:!0,rel:!0});var on=u(te);ks=o(on,"pyannote/segmentation"),on.forEach(t),Qs=o(Z,"."),Z.forEach(t),Ut=d(e),je=r(e,"P",{});var an=u(je);Rs=o(an,"Une fois termin\xE9, nous pouvons charger le pipeline de s\xE9paration des locuteurs localement sur notre appareil :"),an.forEach(t),Tt=d(e),M(se.$$.fragment,e),wt=d(e),A=r(e,"P",{});var ss=u(A);Vs=o(ss,"Essayons-le sur un \xE9chantillon de fichier audio ! Pour cela, nous allons charger un \xE9chantillon du jeu de donn\xE9es "),le=r(ss,"A",{href:!0,rel:!0});var rn=u(le);Xs=o(rn,"LibriSpeech ASR"),rn.forEach(t),zs=o(ss," qui consiste en deux locuteurs diff\xE9rents qui ont \xE9t\xE9 concat\xE9n\xE9s ensemble pour donner un seul fichier audio :"),ss.forEach(t),bt=d(e),M(ne.$$.fragment,e),It=d(e),Ce=r(e,"P",{});var un=u(Ce);Fs=o(un,"Nous pouvons \xE9couter l\u2019audio pour voir \xE0 quoi cela ressemble :"),un.forEach(t),vt=d(e),M(oe.$$.fragment,e),jt=d(e),k=r(e,"P",{});var ls=u(k);Ys=o(ls,"Nous pouvons clairement entendre deux locuteurs diff\xE9rents, avec une transition d\u2019environ 15 secondes. Passons ce fichier audio au mod\xE8le de s\xE9paration pour obtenir les heures de d\xE9but et de fin du locuteur. Notez que pyannote.audio s\u2019attend \xE0 ce que l\u2019entr\xE9e audio soit un tenseur PyTorch de la forme "),He=r(ls,"CODE",{});var pn=u(He);Hs=o(pn,"(channels, seq_len)"),pn.forEach(t),Ds=o(ls,", nous devons donc effectuer cette conversion avant d\u2019ex\xE9cuter le mod\xE8le :"),ls.forEach(t),Ct=d(e),M(ae.$$.fragment,e),Gt=d(e),M(re.$$.fragment,e),Et=d(e),Ge=r(e,"P",{});var dn=u(Ge);Ps=o(dn,"Cela semble plut\xF4t bien ! Nous pouvons voir que le premier locuteur est pr\xE9dit comme parlant jusqu\u2019\xE0 la marque de 14,5 secondes, et le second locuteur \xE0 partir de 15,4s. Il ne nous reste plus qu\u2019\xE0 obtenir notre transcription !"),dn.forEach(t),Bt=d(e),S=r(e,"H2",{class:!0});var ns=u(S);Q=r(ns,"A",{id:!0,class:!0,href:!0});var cn=u(Q);De=r(cn,"SPAN",{});var mn=u(De);M(ie.$$.fragment,mn),mn.forEach(t),cn.forEach(t),Ls=d(ns),Pe=r(ns,"SPAN",{});var Mn=u(Pe);Ks=o(Mn,"Transcription de la parole"),Mn.forEach(t),ns.forEach(t),gt=d(e),I=r(e,"P",{});var $=u(I);Os=o($,"Pour la troisi\xE8me fois dans cette unit\xE9, nous allons utiliser le mod\xE8le Whisper pour notre syst\xE8me de transcription de la parole. Plus pr\xE9cis\xE9ment, nous chargerons le "),Le=r($,"EM",{});var yn=u(Le);el=o(yn,"checkpoint"),yn.forEach(t),tl=d($),ue=r($,"A",{href:!0,rel:!0});var Jn=u(ue);sl=o(Jn,"Whisper Base"),Jn.forEach(t),ll=o($,", car il est suffisamment petit pour donner une bonne vitesse d\u2019inf\xE9rence avec une pr\xE9cision de transcription raisonnable. Comme auparavant, vous pouvez utiliser n\u2019importe quel "),Ke=r($,"EM",{});var hn=u(Ke);nl=o(hn,"checkpoint "),hn.forEach(t),ol=o($,"de reconnaissance vocale disponible sur le "),pe=r($,"A",{href:!0,rel:!0});var fn=u(pe);Oe=r(fn,"EM",{});var Un=u(Oe);al=o(Un,"Hub"),Un.forEach(t),fn.forEach(t),rl=o($,", y compris Wav2Vec2, MMS ASR ou d\u2019autres tailles de Whisper :"),$.forEach(t),Zt=d(e),M(de.$$.fragment,e),$t=d(e),R=r(e,"P",{});var os=u(R);il=o(os,"Obtenons la transcription de notre \xE9chantillon audio, en retournant \xE9galement les horodatages au niveau du segment afin que nous connaissions les heures de d\xE9but et de fin de chaque segment. Vous vous souviendrez de l\u2019unit\xE9 5 que nous devons passer l\u2019argument "),et=r(os,"CODE",{});var Tn=u(et);ul=o(Tn,"return_timestamps=True"),Tn.forEach(t),pl=o(os," pour activer la t\xE2che de pr\xE9diction de l\u2019horodatage de Whisper :"),os.forEach(t),qt=d(e),M(ce.$$.fragment,e),St=d(e),M(me.$$.fragment,e),_t=d(e),V=r(e,"P",{});var as=u(V);dl=o(as,"Ok, nous constatons que chaque segment de la transcription a une heure de d\xE9but et une heure de fin, avec un changement de locuteur au bout de 15,48 secondes. Nous pouvons maintenant associer cette transcription aux horodatages des locuteurs que nous avons obtenus \xE0 partir de notre mod\xE8le de "),tt=r(as,"EM",{});var wn=u(tt);cl=o(wn,"diarization"),wn.forEach(t),ml=o(as," pour obtenir notre transcription finale."),as.forEach(t),Wt=d(e),_=r(e,"H2",{class:!0});var rs=u(_);X=r(rs,"A",{id:!0,class:!0,href:!0});var bn=u(X);st=r(bn,"SPAN",{});var In=u(st);M(Me.$$.fragment,In),In.forEach(t),bn.forEach(t),Ml=d(rs),lt=r(rs,"SPAN",{});var vn=u(lt);yl=o(vn,"Speechbox"),vn.forEach(t),rs.forEach(t),xt=d(e),Ee=r(e,"P",{});var jn=u(Ee);Jl=o(jn,`Pour obtenir la transcription finale, nous allons aligner les timestamps du mod\xE8le de diarisation avec ceux du mod\xE8le Whisper.
Le mod\xE8le de s\xE9paration pr\xE9dit que le premier locuteur se termine \xE0 14,5 secondes et que le second locuteur commence \xE0 15,4 secondes, alors que Whisper pr\xE9dit les limites des segments \xE0 13,88, 15,48 et 19,44 secondes respectivement. Comme les timestamps de Whisper ne correspondent pas parfaitement \xE0 ceux du mod\xE8le de s\xE9paration, nous devons trouver lesquelles de ces limites sont les plus proches de 14,5 et 15,4 secondes, et segmenter la transcription par locuteur en cons\xE9quence. Plus pr\xE9cis\xE9ment, nous trouverons l\u2019alignement le plus proche entre les horodatages de la s\xE9paration et de la transcription en minimisant la distance absolue entre les deux.`),jn.forEach(t),Nt=d(e),v=r(e,"P",{});var Y=u(v);hl=o(Y,"Heureusement pour nous, nous pouvons utiliser \u{1F917} "),nt=r(Y,"EM",{});var Cn=u(nt);fl=o(Cn,"Speechbox"),Cn.forEach(t),Ul=o(Y," pour effectuer cet alignement. Tout d\u2019abord, installons "),ot=r(Y,"CODE",{});var Gn=u(ot);Tl=o(Gn,"speechbox"),Gn.forEach(t),wl=o(Y," depuis "),at=r(Y,"EM",{});var En=u(at);bl=o(En,"main"),En.forEach(t),Il=o(Y," :"),Y.forEach(t),At=d(e),M(ye.$$.fragment,e),kt=d(e),B=r(e,"P",{});var qe=u(B);vl=o(qe,"Nous pouvons maintenant instancier notre pipeline combin\xE9 de "),rt=r(qe,"EM",{});var Bn=u(rt);jl=o(Bn,"diarization"),Bn.forEach(t),Cl=o(qe," et de transcription, en passant nos deux mod\xE8les \xE0 la classe "),Je=r(qe,"A",{href:!0,rel:!0});var gn=u(Je);it=r(gn,"CODE",{});var Zn=u(it);Gl=o(Zn,"ASRDiarizationPipeline"),Zn.forEach(t),gn.forEach(t),El=o(qe," :"),qe.forEach(t),Qt=d(e),M(he.$$.fragment,e),Rt=d(e),M(z.$$.fragment,e),Vt=d(e),Be=r(e,"P",{});var $n=u(Be);Bl=o($n,"Passons le fichier audio au pipeline et voyons ce que nous obtenons :"),$n.forEach(t),Xt=d(e),M(fe.$$.fragment,e),zt=d(e),M(Ue.$$.fragment,e),Ft=d(e),ge=r(e,"P",{});var qn=u(ge);gl=o(qn,"Excellent ! Le premier locuteur est segment\xE9 comme parlant de 0 \xE0 15,48 secondes, et le second locuteur de 15,48 \xE0 21,28 secondes, avec les transcriptions correspondantes pour chacun."),qn.forEach(t),Yt=d(e),F=r(e,"P",{});var is=u(F);Zl=o(is,"Nous pouvons formater les horodatages de mani\xE8re un peu plus agr\xE9able en d\xE9finissant deux fonctions d\u2019aide. La premi\xE8re convertit un "),ut=r(is,"EM",{});var Sn=u(ut);$l=o(Sn,"tuple"),Sn.forEach(t),ql=o(is," d\u2019horodatages en une cha\xEEne de caract\xE8res, arrondie \xE0 un nombre d\xE9fini de d\xE9cimales. La seconde combine l\u2019identifiant du locuteur, l\u2019horodatage et les informations textuelles sur une seule ligne, et s\xE9pare chaque locuteur sur sa propre ligne pour faciliter la lecture :"),is.forEach(t),Ht=d(e),M(Te.$$.fragment,e),Dt=d(e),Ze=r(e,"P",{});var _n=u(Ze);Sl=o(_n,"Ex\xE9cutons \xE0 nouveau le pipeline, en formatant cette fois la transcription selon la fonction que nous venons de d\xE9finir :"),_n.forEach(t),Pt=d(e),M(we.$$.fragment,e),Lt=d(e),M(be.$$.fragment,e),Kt=d(e),g=r(e,"P",{});var Se=u(g);_l=o(Se,`Et voil\xE0 ! Nous avons ainsi s\xE9par\xE9 et transcrit notre audio et renvoy\xE9 des transcriptions segment\xE9es par locuteur.
Bien que l\u2019algorithme de distance minimale pour aligner les horodatages diaris\xE9s et les horodatages transcrits soit simple, il fonctionne bien dans la pratique. Si vous souhaitez explorer des m\xE9thodes plus avanc\xE9es pour combiner les horodatages, le code source de `),pt=r(Se,"CODE",{});var Wn=u(pt);Wl=o(Wn,"ASRDiarizationPipeline"),Wn.forEach(t),xl=o(Se," est un bon point de d\xE9part : "),Ie=r(Se,"A",{href:!0,rel:!0});var xn=u(Ie);Nl=o(xn,"speechbox/diarize.py"),xn.forEach(t),Al=o(Se,"."),Se.forEach(t),this.h()},h(){c(w,"name","hf:doc:metadata"),c(w,"content",JSON.stringify(Yn)),c(W,"id","transcrire-une-runion"),c(W,"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(W,"href","#transcrire-une-runion"),c(C,"class","relative group"),c(D,"href","https://otter.ai"),c(D,"rel","nofollow"),Rn(Ne.src,kl="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/diarization_transcription.png")||c(Ne,"src",kl),c(P,"class","flex justify-center"),c(x,"id","sparation-des-locuteurs"),c(x,"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(x,"href","#sparation-des-locuteurs"),c(q,"class","relative group"),c(K,"href","https://github.com/pyannote/pyannote-audio"),c(K,"rel","nofollow"),c(ee,"href","https://huggingface.co/pyannote/speaker-diarization"),c(ee,"rel","nofollow"),c(te,"href","https://huggingface.co/pyannote/segmentation"),c(te,"rel","nofollow"),c(le,"href","https://huggingface.co/datasets/librispeech_asr"),c(le,"rel","nofollow"),c(Q,"id","transcription-de-la-parole"),c(Q,"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(Q,"href","#transcription-de-la-parole"),c(S,"class","relative group"),c(ue,"href","https://huggingface.co/openai/whisper-base"),c(ue,"rel","nofollow"),c(pe,"href","https://huggingface.co/models?pipeline_tag=automatic-speech-recognition&library=transformers&sort=trending"),c(pe,"rel","nofollow"),c(X,"id","speechbox"),c(X,"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(X,"href","#speechbox"),c(_,"class","relative group"),c(Je,"href","https://github.com/huggingface/speechbox/tree/main#asr-with-speaker-diarization"),c(Je,"rel","nofollow"),c(Ie,"href","https://github.com/huggingface/speechbox/blob/96d2d1a180252d92263f862a1cd25a48860f1aed/src/speechbox/diarize.py#L12"),c(Ie,"rel","nofollow")},m(e,l){s(document.head,w),i(e,G,l),i(e,C,l),s(C,W),s(W,_e),y(H,_e,null),s(C,ps),s(C,We),s(We,ds),i(e,ct,l),i(e,E,l),s(E,cs),s(E,xe),s(xe,ms),s(E,Ms),s(E,D),s(D,ys),s(E,Js),i(e,mt,l),i(e,P,l),s(P,Ne),i(e,Mt,l),i(e,q,l),s(q,x),s(x,Ae),y(L,Ae,null),s(q,hs),s(q,ke),s(ke,fs),i(e,yt,l),i(e,N,l),s(N,Us),s(N,Qe),s(Qe,Ts),s(N,ws),i(e,Jt,l),i(e,U,l),s(U,bs),s(U,Re),s(Re,Is),s(U,vs),s(U,Ve),s(Ve,js),s(U,Cs),s(U,Xe),s(Xe,Gs),s(U,Es),s(U,ze),s(ze,Bs),s(U,gs),s(U,K),s(K,Zs),s(U,$s),i(e,ht,l),y(O,e,l),i(e,ft,l),i(e,b,l),s(b,qs),s(b,Fe),s(Fe,Ss),s(b,_s),s(b,Ye),s(Ye,Ws),s(b,xs),s(b,ee),s(ee,Ns),s(b,As),s(b,te),s(te,ks),s(b,Qs),i(e,Ut,l),i(e,je,l),s(je,Rs),i(e,Tt,l),y(se,e,l),i(e,wt,l),i(e,A,l),s(A,Vs),s(A,le),s(le,Xs),s(A,zs),i(e,bt,l),y(ne,e,l),i(e,It,l),i(e,Ce,l),s(Ce,Fs),i(e,vt,l),y(oe,e,l),i(e,jt,l),i(e,k,l),s(k,Ys),s(k,He),s(He,Hs),s(k,Ds),i(e,Ct,l),y(ae,e,l),i(e,Gt,l),y(re,e,l),i(e,Et,l),i(e,Ge,l),s(Ge,Ps),i(e,Bt,l),i(e,S,l),s(S,Q),s(Q,De),y(ie,De,null),s(S,Ls),s(S,Pe),s(Pe,Ks),i(e,gt,l),i(e,I,l),s(I,Os),s(I,Le),s(Le,el),s(I,tl),s(I,ue),s(ue,sl),s(I,ll),s(I,Ke),s(Ke,nl),s(I,ol),s(I,pe),s(pe,Oe),s(Oe,al),s(I,rl),i(e,Zt,l),y(de,e,l),i(e,$t,l),i(e,R,l),s(R,il),s(R,et),s(et,ul),s(R,pl),i(e,qt,l),y(ce,e,l),i(e,St,l),y(me,e,l),i(e,_t,l),i(e,V,l),s(V,dl),s(V,tt),s(tt,cl),s(V,ml),i(e,Wt,l),i(e,_,l),s(_,X),s(X,st),y(Me,st,null),s(_,Ml),s(_,lt),s(lt,yl),i(e,xt,l),i(e,Ee,l),s(Ee,Jl),i(e,Nt,l),i(e,v,l),s(v,hl),s(v,nt),s(nt,fl),s(v,Ul),s(v,ot),s(ot,Tl),s(v,wl),s(v,at),s(at,bl),s(v,Il),i(e,At,l),y(ye,e,l),i(e,kt,l),i(e,B,l),s(B,vl),s(B,rt),s(rt,jl),s(B,Cl),s(B,Je),s(Je,it),s(it,Gl),s(B,El),i(e,Qt,l),y(he,e,l),i(e,Rt,l),y(z,e,l),i(e,Vt,l),i(e,Be,l),s(Be,Bl),i(e,Xt,l),y(fe,e,l),i(e,zt,l),y(Ue,e,l),i(e,Ft,l),i(e,ge,l),s(ge,gl),i(e,Yt,l),i(e,F,l),s(F,Zl),s(F,ut),s(ut,$l),s(F,ql),i(e,Ht,l),y(Te,e,l),i(e,Dt,l),i(e,Ze,l),s(Ze,Sl),i(e,Pt,l),y(we,e,l),i(e,Lt,l),y(be,e,l),i(e,Kt,l),i(e,g,l),s(g,_l),s(g,pt),s(pt,Wl),s(g,xl),s(g,Ie),s(Ie,Nl),s(g,Al),Ot=!0},p(e,[l]){const ve={};l&2&&(ve.$$scope={dirty:l,ctx:e}),z.$set(ve)},i(e){Ot||(J(H.$$.fragment,e),J(L.$$.fragment,e),J(O.$$.fragment,e),J(se.$$.fragment,e),J(ne.$$.fragment,e),J(oe.$$.fragment,e),J(ae.$$.fragment,e),J(re.$$.fragment,e),J(ie.$$.fragment,e),J(de.$$.fragment,e),J(ce.$$.fragment,e),J(me.$$.fragment,e),J(Me.$$.fragment,e),J(ye.$$.fragment,e),J(he.$$.fragment,e),J(z.$$.fragment,e),J(fe.$$.fragment,e),J(Ue.$$.fragment,e),J(Te.$$.fragment,e),J(we.$$.fragment,e),J(be.$$.fragment,e),Ot=!0)},o(e){h(H.$$.fragment,e),h(L.$$.fragment,e),h(O.$$.fragment,e),h(se.$$.fragment,e),h(ne.$$.fragment,e),h(oe.$$.fragment,e),h(ae.$$.fragment,e),h(re.$$.fragment,e),h(ie.$$.fragment,e),h(de.$$.fragment,e),h(ce.$$.fragment,e),h(me.$$.fragment,e),h(Me.$$.fragment,e),h(ye.$$.fragment,e),h(he.$$.fragment,e),h(z.$$.fragment,e),h(fe.$$.fragment,e),h(Ue.$$.fragment,e),h(Te.$$.fragment,e),h(we.$$.fragment,e),h(be.$$.fragment,e),Ot=!1},d(e){t(w),e&&t(G),e&&t(C),f(H),e&&t(ct),e&&t(E),e&&t(mt),e&&t(P),e&&t(Mt),e&&t(q),f(L),e&&t(yt),e&&t(N),e&&t(Jt),e&&t(U),e&&t(ht),f(O,e),e&&t(ft),e&&t(b),e&&t(Ut),e&&t(je),e&&t(Tt),f(se,e),e&&t(wt),e&&t(A),e&&t(bt),f(ne,e),e&&t(It),e&&t(Ce),e&&t(vt),f(oe,e),e&&t(jt),e&&t(k),e&&t(Ct),f(ae,e),e&&t(Gt),f(re,e),e&&t(Et),e&&t(Ge),e&&t(Bt),e&&t(S),f(ie),e&&t(gt),e&&t(I),e&&t(Zt),f(de,e),e&&t($t),e&&t(R),e&&t(qt),f(ce,e),e&&t(St),f(me,e),e&&t(_t),e&&t(V),e&&t(Wt),e&&t(_),f(Me),e&&t(xt),e&&t(Ee),e&&t(Nt),e&&t(v),e&&t(At),f(ye,e),e&&t(kt),e&&t(B),e&&t(Qt),f(he,e),e&&t(Rt),f(z,e),e&&t(Vt),e&&t(Be),e&&t(Xt),f(fe,e),e&&t(zt),f(Ue,e),e&&t(Ft),e&&t(ge),e&&t(Yt),e&&t(F),e&&t(Ht),f(Te,e),e&&t(Dt),e&&t(Ze),e&&t(Pt),f(we,e),e&&t(Lt),f(be,e),e&&t(Kt),e&&t(g)}}}const Yn={local:"transcrire-une-runion",sections:[{local:"sparation-des-locuteurs",title:"S\xE9paration des locuteurs"},{local:"transcription-de-la-parole",title:"Transcription de la parole"},{local:"speechbox",title:"Speechbox"}],title:"Transcrire une r\xE9union"};function Hn(dt){return Vn(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class On extends Nn{constructor(w){super();An(this,w,Hn,Fn,kn,{})}}export{On as default,Yn as metadata};
