Buckets:

rtrm's picture
download
raw
79.3 kB
import{s as wn,o as In,n as Ks}from"../chunks/scheduler.37c15a92.js";import{S as Cn,i as xn,g as e,s as t,r as i,m as gn,H as dn,A as bn,h as y,f as a,c as p,j as $a,u as j,x as U,n as fn,E as qn,k as mn,y as un,a as n,v as J,d as c,t as r,w as o}from"../chunks/index.2bf4358c.js";import{T as Ps}from"../chunks/Tip.363c041f.js";import{Y as $n}from"../chunks/Youtube.1e50a667.js";import{C as m}from"../chunks/CodeBlock.4e987730.js";import{C as kn}from"../chunks/CourseFloatingBanner.9ff4c771.js";import{H as fa,E as An}from"../chunks/getInferenceSnippets.ebf8be91.js";function Qn(w){let M,u="💡 В этом разделе подробно рассматривается WordPiece, вплоть до демонстрации полной реализации. Вы можете пропустить его, если вам нужен только общий обзор алгоритма токенизации.";return{c(){M=e("p"),M.textContent=u},l(T){M=y(T,"P",{"data-svelte-h":!0}),U(M)!=="svelte-gp40a"&&(M.textContent=u)},m(T,h){n(T,M,h)},p:Ks,d(T){T&&a(M)}}}function zn(w){let M,u="⚠️ Google никогда не предоставлял открытый доступ к своей реализации алгоритма обучения WordPiece, поэтому все вышесказанное - это наши предположения, основанные на опубликованных материалах. Возможно, они точны не на 100 %.";return{c(){M=e("p"),M.textContent=u},l(T){M=y(T,"P",{"data-svelte-h":!0}),U(M)!=="svelte-1ggmdpx"&&(M.textContent=u)},m(T,h){n(T,M,h)},p:Ks,d(T){T&&a(M)}}}function Bn(w){let M,u="✏️ <strong>Теперь ваша очередь!</strong> Каким будет следующее правило слияния?";return{c(){M=e("p"),M.innerHTML=u},l(T){M=y(T,"P",{"data-svelte-h":!0}),U(M)!=="svelte-5usrp0"&&(M.innerHTML=u)},m(T,h){n(T,M,h)},p:Ks,d(T){T&&a(M)}}}function vn(w){let M,u="✏️ <strong>Теперь ваша очередь!</strong> Как будет токенизировано слово <code>&quot;pugs&quot;</code>?";return{c(){M=e("p"),M.innerHTML=u},l(T){M=y(T,"P",{"data-svelte-h":!0}),U(M)!=="svelte-1940vu6"&&(M.innerHTML=u)},m(T,h){n(T,M,h)},p:Ks,d(T){T&&a(M)}}}function Zn(w){let M,u="💡 Использование <code>train_new_from_iterator()</code> на одном и том же корпусе не приведет к точно такому же словарю. Это происходит потому, что библиотека 🤗 Tokenizers не реализует WordPiece для обучения (поскольку мы не полностью уверены в его внутреннем устройстве), а использует вместо него BPE.";return{c(){M=e("p"),M.innerHTML=u},l(T){M=y(T,"P",{"data-svelte-h":!0}),U(M)!=="svelte-5xoi5o"&&(M.innerHTML=u)},m(T,h){n(T,M,h)},p:Ks,d(T){T&&a(M)}}}function Nn(w){let M,u,T,h,b,Ls,f,Os,q,ka="WordPiece - это алгоритм токенизации, разработанный Google для предварительного обучения BERT. Впоследствии он был повторно использован во многих моделях трансформеров, основанных на BERT, таких как DistilBERT, MobileBERT, Funnel Transformers и MPNET. Он очень похож на BPE в плане обучения, но фактическая токенизация выполняется по-другому.",sl,$,ll,I,al,k,nl,C,tl,A,Aa="Как и BPE, WordPiece начинает работу с небольшого словаря, включающего специальные токены, используемые моделью, и начальный алфавит. Поскольку модель идентифицирует подслова путем добавления префикса (как <code>##</code> для BERT), каждое слово первоначально разбивается на части путем добавления этого префикса ко всем символам внутри слова. Так, например, <code>&quot;word&quot;</code> разбивается на части следующим образом:",pl,Q,Ml,z,Qa="Таким образом, начальный алфавит содержит все символы, присутствующие в начале слова, и символы, присутствующие внутри слова, которым предшествует префикс WordPiece.",el,B,qa,yl,hn='<span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mi mathvariant="normal">s</mi><mi mathvariant="normal">c</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">e</mi></mrow><mo>=</mo><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">f</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">q</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">f</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">p</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">r</mi></mrow><mo stretchy="false">)</mo><mi mathvariant="normal">/</mi><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">f</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">q</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">f</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">f</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">s</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">l</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">m</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">t</mi></mrow><mo>×</mo><mrow><mi mathvariant="normal">f</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">q</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">f</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">s</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">c</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">l</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">m</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">t</mi></mrow><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\\mathrm{score} = (\\mathrm{freq\\_of\\_pair}) / (\\mathrm{freq\\_of\\_first\\_element} \\times \\mathrm{freq\\_of\\_second\\_element})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord"><span class="mord mathrm">score</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.06em;vertical-align:-0.31em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathrm">freq_of_pair</span></span><span class="mclose">)</span><span class="mord">/</span><span class="mopen">(</span><span class="mord"><span class="mord mathrm">freq_of_first_element</span></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:1.06em;vertical-align:-0.31em;"></span><span class="mord"><span class="mord mathrm">freq_of_second_element</span></span><span class="mclose">)</span></span></span></span></span>',il,v,za="Деля частоту пары на произведение частот каждой из ее частей, алгоритм отдает предпочтение слиянию пар, отдельные части которых встречаются в словаре реже. Например, он не обязательно объединит <code>(&quot;un&quot;, &quot;##able&quot;)</code>, даже если эта пара встречается в словаре очень часто, потому что две пары <code>&quot;un&quot;</code> и <code>&quot;##able&quot;</code>, скорее всего, встречаются в большом количестве других слов и имеют высокую частоту. Напротив, такая пара, как <code>(&quot;hu&quot;, &quot;##gging&quot;)</code>, вероятно, будет объединена быстрее (при условии, что слово “hugging” часто встречается в словаре), поскольку <code>&quot;hu&quot;</code> и <code>&quot;##gging&quot;</code> по отдельности, скорее всего, встречаются реже.",jl,Z,Ba="Давайте рассмотрим тот же словарь, который мы использовали в учебном примере BPE:",Jl,N,cl,_,va="Рабиение здесь будет следующим:",rl,E,ol,S,Za="поэтому исходный словарь будет иметь вид <code>[&quot;b&quot;, &quot;h&quot;, &quot;p&quot;, &quot;##g&quot;, &quot;##n&quot;, &quot;##s&quot;, &quot;##u&quot;]</code> (если мы пока забудем о специальных токенах). Самая частая пара - <code>(&quot;##u&quot;, &quot;##g&quot;)</code> (встречается 20 раз), но индивидуальная частота <code>&quot;##u&quot;</code> очень высока, поэтому ее оценка не самая высокая (она составляет 1/36). Все пары с <code>&quot;##u&quot;</code> фактически имеют такую же оценку (1/36), поэтому лучшую оценку получает пара <code>(&quot;##g&quot;, &quot;##s&quot;)</code> - единственная, в которой нет <code>&quot;##u&quot;</code> - с оценкой 1/20, и первым выученным слиянием будет <code>(&quot;##g&quot;, &quot;##s&quot;) -&gt; (&quot;##gs&quot;)</code>.",Ul,G,Na="Обратите внимание, что при слиянии мы удаляем <code>##</code> между двумя токенами, поэтому мы добавляем <code>&quot;##gs&quot;</code> в словарь и применяем слияние в словах корпуса:",Tl,V,ml,X,_a="В этот момент <code>&quot;##u&quot;</code> находится во всех возможных парах, поэтому все они получают одинаковый балл. Допустим, в этом случае первая пара объединяется, так что <code>(&quot;h&quot;, &quot;##u&quot;) -&gt; &quot;hu&quot;</code>. Это приводит нас к:",ul,H,hl,W,Ea="Затем следующую лучшую оценку разделяют <code>(&quot;hu&quot;, &quot;##g&quot;)</code> и <code>(&quot;hu&quot;, &quot;##gs&quot;)</code> (1/15, по сравнению с 1/21 для всех остальных пар), поэтому первая пара с наибольшей оценкой объединяется:",wl,R,Il,Y,Sa="и мы продолжаем так до тех пор, пока не достигнем необходимого размера словаря.",Cl,x,xl,D,gl,F,Ga="Токенизация в WordPiece и BPE отличается тем, что WordPiece сохраняет только конечный словарь, а не выученные правила слияния. Начиная со слова, которое нужно токенизировать, WordPiece находит самое длинное подслово, которое есть в словаре, а затем разбивает его на части. Например, если мы используем словарь, изученный в примере выше, для слова <code>&quot; hugs&quot;</code> самым длинным подсловом, начиная с начала, которое находится в словаре, является <code>&quot;hug&quot;</code>, поэтому мы делим его на части и получаем <code>[&quot;hug&quot;, &quot;##s&quot;]</code>. Затем мы продолжаем с <code>&quot;##s&quot;</code>, которое находится в словаре, поэтому токенизация <code>&quot;hugs&quot;</code> будет <code>[&quot;hug&quot;, &quot;##s&quot;]</code>.",dl,P,Va="В BPE мы бы применили слияния, выученные по порядку, и токенизировали это как <code>[&quot;hu&quot;, &quot;##gs&quot;]</code>, поэтому кодировка отличается.",bl,K,Xa="В качестве другого примера посмотрим, как будет токенизировано слово <code>&quot;bugs&quot;</code>. <code>&quot;b&quot;</code> - самое длинное подслово, начинающееся с начала слова, которое есть в словаре, поэтому мы делим его на части и получаем <code>[&quot;b&quot;, &quot;##ugs&quot;]</code>. Затем <code>&quot;##u&quot;</code> - самое длинное подслово, начинающееся в начале <code>&quot;##ugs&quot;</code>, которое есть в словаре, поэтому мы делим его на части и получаем <code>[&quot;b&quot;, &quot;##u&quot;, &quot;##gs&quot;]</code>. Наконец, <code>&quot;##gs&quot;</code> находится в словаре, так что этот последний список является токеном <code>&quot;bugs&quot;</code>.",fl,L,Ha="Когда токенизация доходит до стадии, когда невозможно найти подслово в словаре, все слово токенизируется как неизвестное - так, например, <code>&quot;mug&quot;</code> будет токенизировано как <code>[&quot;[UNK]&quot;]</code>, как и <code>&quot;bum&quot;</code> (даже если мы можем начать с <code>&quot;b&quot;</code> и <code>&quot;##u&quot;</code>, <code>&quot;##m&quot;</code> не входит в словарь, и результирующий токен будет просто <code>[&quot;[UNK]&quot;]</code>, а не <code>[&quot;b&quot;, &quot;##u&quot;, &quot;[UNK]&quot;]</code>). Это еще одно отличие от BPE, который классифицирует как неизвестные только отдельные символы, отсутствующие в словаре.",ql,g,$l,O,kl,ss,Wa="Теперь давайте посмотрим на реализацию алгоритма WordPiece. Как и в случае с BPE, это всего лишь учебный пример, и вы не сможете использовать его на большом корпусе.",Al,ls,Ra="Мы будем использовать тот же корпус, что и в примере с BPE:",Ql,as,zl,ns,Ya="Во-первых, нам нужно предварительно токенизировать корпус в слова. Поскольку мы воспроизводим токенизатор WordPiece (например, BERT), для предварительной токенизации мы будем использовать токенизатор <code>bert-base-cased</code>:",Bl,ts,vl,ps,Da="Затем мы вычисляем частоту каждого слова в корпусе, как и при предварительной токенизации:",Zl,Ms,Nl,es,_l,ys,Fa="Как мы уже видели, алфавит - это уникальное множество, состоящее из всех первых букв слов и всех остальных букв, которые встречаются в словах с префиксом <code>##</code>:",El,is,Sl,js,Gl,Js,Pa="Мы также добавляем специальные токены, используемые моделью, в начало этого словаря. В случае BERT это список <code>[&quot;[PAD]&quot;, &quot;[UNK]&quot;, &quot;[CLS]&quot;, &quot;[SEP]&quot;, &quot;[MASK]&quot;]</code>:",Vl,cs,Xl,rs,Ka="Далее нам нужно разделить каждое слово на части, при этом все буквы, которые не являются первыми, должны иметь префикс <code>##</code>:",Hl,os,Wl,Us,La="Теперь, когда мы готовы к обучению, давайте напишем функцию, которая вычисляет оценку каждой пары. Нам нужно будет использовать ее на каждом шаге обучения:",Rl,Ts,Yl,ms,Oa="Давайте посмотрим на часть этого словаря после первых разделений:",Dl,us,Fl,hs,Pl,ws,sn="Теперь для того, чтобы найти пару с наилучшим результатом, нужно всего лишь сделать быстрый цикл:",Kl,Is,Ll,Cs,Ol,xs,ln="Итак, первое слияние, которое нужно выучить, это <code>(&#39;a&#39;, &#39;##b&#39;) -&gt; &#39;ab&#39;</code>, и мы добавляем <code>&#39;ab&#39;</code> в словарь:",sa,gs,la,ds,an="Чтобы продолжить, нам нужно применить это слияние в нашем словаре <code>splits</code>. Давайте напишем для этого еще одну функцию:",aa,bs,na,fs,nn="И мы можем посмотреть на результат первого слияния:",ta,qs,pa,$s,Ma,ks,tn="Теперь у нас есть все, что нужно, чтобы зацикливать процесс до тех пор, пока мы не выучим все слияния, которые нам нужны. Давайте нацелимся на размер словаря равный 70:",ea,As,ya,Qs,pn="Затем мы можем просмотреть созданный словарь:",ia,zs,ja,Bs,Ja,vs,Mn="Как мы видим, по сравнению с BPE этот токенизатор быстрее выучивает части слов как токены.",ca,d,ra,Zs,en="Чтобы токенизировать новый текст, мы предварительно токенизируем его, разбиваем на части, а затем применяем алгоритм токенизации к каждому слову. То есть начиная с первого слова мы ищем самое большое подслово и разбиваем его на части, затем мы повторяем процесс для второй части, и так далее для оставшейся части этого слова и следующих слов в тексте:",oa,Ns,Ua,_s,yn="Давайте проверим алгоритм на одном слове, которое есть в словаре, и на другом, которого нет:",Ta,Es,ma,Ss,ua,Gs,jn="Теперь давайте напишем функцию, которая токенизирует текст:",ha,Vs,wa,Xs,Jn="Мы можем попробовать его на любом тексте:",Ia,Hs,Ca,Ws,xa,Rs,cn="Вот и все об алгоритме WordPiece! Теперь давайте посмотрим на Unigram.",ga,Ys,da,Fs,ba;return b=new fa({props:{title:"Токенизация WordPiece",local:"wordpiece-tokenization",headingTag:"h1"}}),f=new kn({props:{chapter:6,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter6/section6.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter6/section6.ipynb"}]}}),$=new $n({props:{id:"qpv6ms_t_1A"}}),I=new Ps({props:{$$slots:{default:[Qn]},$$scope:{ctx:w}}}),k=new fa({props:{title:"Алгоритм обучения",local:"training-algorithm",headingTag:"h2"}}),C=new Ps({props:{warning:!0,$$slots:{default:[zn]},$$scope:{ctx:w}}}),Q=new m({props:{code:"dyUyMCUyMyUyM28lMjAlMjMlMjNyJTIwJTIzJTIzZA==",highlighted:"w ##o ##r ##d",wrap:!1}}),N=new m({props:{code:"KCUyMmh1ZyUyMiUyQyUyMDEwKSUyQyUyMCglMjJwdWclMjIlMkMlMjA1KSUyQyUyMCglMjJwdW4lMjIlMkMlMjAxMiklMkMlMjAoJTIyYnVuJTIyJTJDJTIwNCklMkMlMjAoJTIyaHVncyUyMiUyQyUyMDUp",highlighted:'(<span class="hljs-string">&quot;hug&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-number">10</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">&quot;pug&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-number">5</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">&quot;pun&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-number">12</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">&quot;bun&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-number">4</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">&quot;hugs&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-number">5</span>)',wrap:!1}}),E=new m({props:{code:"KCUyMmglMjIlMjAlMjIlMjMlMjN1JTIyJTIwJTIyJTIzJTIzZyUyMiUyQyUyMDEwKSUyQyUyMCglMjJwJTIyJTIwJTIyJTIzJTIzdSUyMiUyMCUyMiUyMyUyM2clMjIlMkMlMjA1KSUyQyUyMCglMjJwJTIyJTIwJTIyJTIzJTIzdSUyMiUyMCUyMiUyMyUyM24lMjIlMkMlMjAxMiklMkMlMjAoJTIyYiUyMiUyMCUyMiUyMyUyM3UlMjIlMjAlMjIlMjMlMjNuJTIyJTJDJTIwNCklMkMlMjAoJTIyaCUyMiUyMCUyMiUyMyUyM3UlMjIlMjAlMjIlMjMlMjNnJTIyJTIwJTIyJTIzJTIzcyUyMiUyQyUyMDUp",highlighted:'(<span class="hljs-string">&quot;h&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#u</span>&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#g</span>&quot;</span>, <span class="hljs-number">10</span>), (<span class="hljs-string">&quot;p&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#u</span>&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#g</span>&quot;</span>, <span class="hljs-number">5</span>), (<span class="hljs-string">&quot;p&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#u</span>&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#n</span>&quot;</span>, <span class="hljs-number">12</span>), (<span class="hljs-string">&quot;b&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#u</span>&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#n</span>&quot;</span>, <span class="hljs-number">4</span>), (<span class="hljs-string">&quot;h&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#u</span>&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#g</span>&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#s</span>&quot;</span>, <span class="hljs-number">5</span>)',wrap:!1}}),V=new m({props:{code:"Vm9jYWJ1bGFyeSUzQSUyMCU1QiUyMmIlMjIlMkMlMjAlMjJoJTIyJTJDJTIwJTIycCUyMiUyQyUyMCUyMiUyMyUyM2clMjIlMkMlMjAlMjIlMjMlMjNuJTIyJTJDJTIwJTIyJTIzJTIzcyUyMiUyQyUyMCUyMiUyMyUyM3UlMjIlMkMlMjAlMjIlMjMlMjNncyUyMiU1RCUwQUNvcnB1cyUzQSUyMCglMjJoJTIyJTIwJTIyJTIzJTIzdSUyMiUyMCUyMiUyMyUyM2clMjIlMkMlMjAxMCklMkMlMjAoJTIycCUyMiUyMCUyMiUyMyUyM3UlMjIlMjAlMjIlMjMlMjNnJTIyJTJDJTIwNSklMkMlMjAoJTIycCUyMiUyMCUyMiUyMyUyM3UlMjIlMjAlMjIlMjMlMjNuJTIyJTJDJTIwMTIpJTJDJTIwKCUyMmIlMjIlMjAlMjIlMjMlMjN1JTIyJTIwJTIyJTIzJTIzbiUyMiUyQyUyMDQpJTJDJTIwKCUyMmglMjIlMjAlMjIlMjMlMjN1JTIyJTIwJTIyJTIzJTIzZ3MlMjIlMkMlMjA1KQ==",highlighted:`Vocabulary: [<span class="hljs-string">&quot;b&quot;</span>, <span class="hljs-string">&quot;h&quot;</span>, <span class="hljs-string">&quot;p&quot;</span>, <span class="hljs-string">&quot;#<span class="hljs-subst">#g</span>&quot;</span>, <span class="hljs-string">&quot;#<span class="hljs-subst">#n</span>&quot;</span>, <span class="hljs-string">&quot;#<span class="hljs-subst">#s</span>&quot;</span>, <span class="hljs-string">&quot;#<span class="hljs-subst">#u</span>&quot;</span>, <span class="hljs-string">&quot;#<span class="hljs-subst">#gs</span>&quot;</span>]
Corpus: (<span class="hljs-string">&quot;h&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#u</span>&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#g</span>&quot;</span>, <span class="hljs-number">10</span>), (<span class="hljs-string">&quot;p&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#u</span>&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#g</span>&quot;</span>, <span class="hljs-number">5</span>), (<span class="hljs-string">&quot;p&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#u</span>&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#n</span>&quot;</span>, <span class="hljs-number">12</span>), (<span class="hljs-string">&quot;b&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#u</span>&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#n</span>&quot;</span>, <span class="hljs-number">4</span>), (<span class="hljs-string">&quot;h&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#u</span>&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#gs</span>&quot;</span>, <span class="hljs-number">5</span>)`,wrap:!1}}),H=new m({props:{code:"Vm9jYWJ1bGFyeSUzQSUyMCU1QiUyMmIlMjIlMkMlMjAlMjJoJTIyJTJDJTIwJTIycCUyMiUyQyUyMCUyMiUyMyUyM2clMjIlMkMlMjAlMjIlMjMlMjNuJTIyJTJDJTIwJTIyJTIzJTIzcyUyMiUyQyUyMCUyMiUyMyUyM3UlMjIlMkMlMjAlMjIlMjMlMjNncyUyMiUyQyUyMCUyMmh1JTIyJTVEJTBBQ29ycHVzJTNBJTIwKCUyMmh1JTIyJTIwJTIyJTIzJTIzZyUyMiUyQyUyMDEwKSUyQyUyMCglMjJwJTIyJTIwJTIyJTIzJTIzdSUyMiUyMCUyMiUyMyUyM2clMjIlMkMlMjA1KSUyQyUyMCglMjJwJTIyJTIwJTIyJTIzJTIzdSUyMiUyMCUyMiUyMyUyM24lMjIlMkMlMjAxMiklMkMlMjAoJTIyYiUyMiUyMCUyMiUyMyUyM3UlMjIlMjAlMjIlMjMlMjNuJTIyJTJDJTIwNCklMkMlMjAoJTIyaHUlMjIlMjAlMjIlMjMlMjNncyUyMiUyQyUyMDUp",highlighted:`Vocabulary: [<span class="hljs-string">&quot;b&quot;</span>, <span class="hljs-string">&quot;h&quot;</span>, <span class="hljs-string">&quot;p&quot;</span>, <span class="hljs-string">&quot;#<span class="hljs-subst">#g</span>&quot;</span>, <span class="hljs-string">&quot;#<span class="hljs-subst">#n</span>&quot;</span>, <span class="hljs-string">&quot;#<span class="hljs-subst">#s</span>&quot;</span>, <span class="hljs-string">&quot;#<span class="hljs-subst">#u</span>&quot;</span>, <span class="hljs-string">&quot;#<span class="hljs-subst">#gs</span>&quot;</span>, <span class="hljs-string">&quot;hu&quot;</span>]
Corpus: (<span class="hljs-string">&quot;hu&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#g</span>&quot;</span>, <span class="hljs-number">10</span>), (<span class="hljs-string">&quot;p&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#u</span>&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#g</span>&quot;</span>, <span class="hljs-number">5</span>), (<span class="hljs-string">&quot;p&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#u</span>&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#n</span>&quot;</span>, <span class="hljs-number">12</span>), (<span class="hljs-string">&quot;b&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#u</span>&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#n</span>&quot;</span>, <span class="hljs-number">4</span>), (<span class="hljs-string">&quot;hu&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#gs</span>&quot;</span>, <span class="hljs-number">5</span>)`,wrap:!1}}),R=new m({props:{code:"Vm9jYWJ1bGFyeSUzQSUyMCU1QiUyMmIlMjIlMkMlMjAlMjJoJTIyJTJDJTIwJTIycCUyMiUyQyUyMCUyMiUyMyUyM2clMjIlMkMlMjAlMjIlMjMlMjNuJTIyJTJDJTIwJTIyJTIzJTIzcyUyMiUyQyUyMCUyMiUyMyUyM3UlMjIlMkMlMjAlMjIlMjMlMjNncyUyMiUyQyUyMCUyMmh1JTIyJTJDJTIwJTIyaHVnJTIyJTVEJTBBQ29ycHVzJTNBJTIwKCUyMmh1ZyUyMiUyQyUyMDEwKSUyQyUyMCglMjJwJTIyJTIwJTIyJTIzJTIzdSUyMiUyMCUyMiUyMyUyM2clMjIlMkMlMjA1KSUyQyUyMCglMjJwJTIyJTIwJTIyJTIzJTIzdSUyMiUyMCUyMiUyMyUyM24lMjIlMkMlMjAxMiklMkMlMjAoJTIyYiUyMiUyMCUyMiUyMyUyM3UlMjIlMjAlMjIlMjMlMjNuJTIyJTJDJTIwNCklMkMlMjAoJTIyaHUlMjIlMjAlMjIlMjMlMjNncyUyMiUyQyUyMDUp",highlighted:`Vocabulary: [<span class="hljs-string">&quot;b&quot;</span>, <span class="hljs-string">&quot;h&quot;</span>, <span class="hljs-string">&quot;p&quot;</span>, <span class="hljs-string">&quot;#<span class="hljs-subst">#g</span>&quot;</span>, <span class="hljs-string">&quot;#<span class="hljs-subst">#n</span>&quot;</span>, <span class="hljs-string">&quot;#<span class="hljs-subst">#s</span>&quot;</span>, <span class="hljs-string">&quot;#<span class="hljs-subst">#u</span>&quot;</span>, <span class="hljs-string">&quot;#<span class="hljs-subst">#gs</span>&quot;</span>, <span class="hljs-string">&quot;hu&quot;</span>, <span class="hljs-string">&quot;hug&quot;</span>]
Corpus: (<span class="hljs-string">&quot;hug&quot;</span>, <span class="hljs-number">10</span>), (<span class="hljs-string">&quot;p&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#u</span>&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#g</span>&quot;</span>, <span class="hljs-number">5</span>), (<span class="hljs-string">&quot;p&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#u</span>&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#n</span>&quot;</span>, <span class="hljs-number">12</span>), (<span class="hljs-string">&quot;b&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#u</span>&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#n</span>&quot;</span>, <span class="hljs-number">4</span>), (<span class="hljs-string">&quot;hu&quot;</span> <span class="hljs-string">&quot;#<span class="hljs-subst">#gs</span>&quot;</span>, <span class="hljs-number">5</span>)`,wrap:!1}}),x=new Ps({props:{$$slots:{default:[Bn]},$$scope:{ctx:w}}}),D=new fa({props:{title:"Алгоритм токенизации",local:"tokenization-algorithm",headingTag:"h2"}}),g=new Ps({props:{$$slots:{default:[vn]},$$scope:{ctx:w}}}),O=new fa({props:{title:"Реализация WordPiece",local:"implementing-wordpiece",headingTag:"h2"}}),as=new m({props:{code:"Y29ycHVzJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIyVGhpcyUyMGlzJTIwdGhlJTIwSHVnZ2luZyUyMEZhY2UlMjBDb3Vyc2UuJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyVGhpcyUyMGNoYXB0ZXIlMjBpcyUyMGFib3V0JTIwdG9rZW5pemF0aW9uLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMlRoaXMlMjBzZWN0aW9uJTIwc2hvd3MlMjBzZXZlcmFsJTIwdG9rZW5pemVyJTIwYWxnb3JpdGhtcy4lMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJIb3BlZnVsbHklMkMlMjB5b3UlMjB3aWxsJTIwYmUlMjBhYmxlJTIwdG8lMjB1bmRlcnN0YW5kJTIwaG93JTIwdGhleSUyMGFyZSUyMHRyYWluZWQlMjBhbmQlMjBnZW5lcmF0ZSUyMHRva2Vucy4lMjIlMkMlMEElNUQ=",highlighted:`corpus = [
<span class="hljs-string">&quot;This is the Hugging Face Course.&quot;</span>,
<span class="hljs-string">&quot;This chapter is about tokenization.&quot;</span>,
<span class="hljs-string">&quot;This section shows several tokenizer algorithms.&quot;</span>,
<span class="hljs-string">&quot;Hopefully, you will be able to understand how they are trained and generate tokens.&quot;</span>,
]`,wrap:!1}}),ts=new m({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)`,wrap:!1}}),Ms=new m({props:{code:"ZnJvbSUyMGNvbGxlY3Rpb25zJTIwaW1wb3J0JTIwZGVmYXVsdGRpY3QlMEElMEF3b3JkX2ZyZXFzJTIwJTNEJTIwZGVmYXVsdGRpY3QoaW50KSUwQWZvciUyMHRleHQlMjBpbiUyMGNvcnB1cyUzQSUwQSUyMCUyMCUyMCUyMHdvcmRzX3dpdGhfb2Zmc2V0cyUyMCUzRCUyMHRva2VuaXplci5iYWNrZW5kX3Rva2VuaXplci5wcmVfdG9rZW5pemVyLnByZV90b2tlbml6ZV9zdHIodGV4dCklMEElMjAlMjAlMjAlMjBuZXdfd29yZHMlMjAlM0QlMjAlNUJ3b3JkJTIwZm9yJTIwd29yZCUyQyUyMG9mZnNldCUyMGluJTIwd29yZHNfd2l0aF9vZmZzZXRzJTVEJTBBJTIwJTIwJTIwJTIwZm9yJTIwd29yZCUyMGluJTIwbmV3X3dvcmRzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd29yZF9mcmVxcyU1QndvcmQlNUQlMjAlMkIlM0QlMjAxJTBBJTBBd29yZF9mcmVxcw==",highlighted:`<span class="hljs-keyword">from</span> collections <span class="hljs-keyword">import</span> defaultdict
word_freqs = defaultdict(<span class="hljs-built_in">int</span>)
<span class="hljs-keyword">for</span> text <span class="hljs-keyword">in</span> corpus:
words_with_offsets = tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str(text)
new_words = [word <span class="hljs-keyword">for</span> word, offset <span class="hljs-keyword">in</span> words_with_offsets]
<span class="hljs-keyword">for</span> word <span class="hljs-keyword">in</span> new_words:
word_freqs[word] += <span class="hljs-number">1</span>
word_freqs`,wrap:!1}}),es=new m({props:{code:"ZGVmYXVsdGRpY3QoJTBBJTIwJTIwJTIwJTIwaW50JTJDJTIwJTdCJ1RoaXMnJTNBJTIwMyUyQyUyMCdpcyclM0ElMjAyJTJDJTIwJ3RoZSclM0ElMjAxJTJDJTIwJ0h1Z2dpbmcnJTNBJTIwMSUyQyUyMCdGYWNlJyUzQSUyMDElMkMlMjAnQ291cnNlJyUzQSUyMDElMkMlMjAnLiclM0ElMjA0JTJDJTIwJ2NoYXB0ZXInJTNBJTIwMSUyQyUyMCdhYm91dCclM0ElMjAxJTJDJTBBJTIwJTIwJTIwJTIwJ3Rva2VuaXphdGlvbiclM0ElMjAxJTJDJTIwJ3NlY3Rpb24nJTNBJTIwMSUyQyUyMCdzaG93cyclM0ElMjAxJTJDJTIwJ3NldmVyYWwnJTNBJTIwMSUyQyUyMCd0b2tlbml6ZXInJTNBJTIwMSUyQyUyMCdhbGdvcml0aG1zJyUzQSUyMDElMkMlMjAnSG9wZWZ1bGx5JyUzQSUyMDElMkMlMEElMjAlMjAlMjAlMjAnJTJDJyUzQSUyMDElMkMlMjAneW91JyUzQSUyMDElMkMlMjAnd2lsbCclM0ElMjAxJTJDJTIwJ2JlJyUzQSUyMDElMkMlMjAnYWJsZSclM0ElMjAxJTJDJTIwJ3RvJyUzQSUyMDElMkMlMjAndW5kZXJzdGFuZCclM0ElMjAxJTJDJTIwJ2hvdyclM0ElMjAxJTJDJTIwJ3RoZXknJTNBJTIwMSUyQyUyMCdhcmUnJTNBJTIwMSUyQyUwQSUyMCUyMCUyMCUyMCd0cmFpbmVkJyUzQSUyMDElMkMlMjAnYW5kJyUzQSUyMDElMkMlMjAnZ2VuZXJhdGUnJTNBJTIwMSUyQyUyMCd0b2tlbnMnJTNBJTIwMSU3RCk=",highlighted:`defaultdict(
<span class="hljs-built_in">int</span>, {<span class="hljs-string">&#x27;This&#x27;</span>: <span class="hljs-number">3</span>, <span class="hljs-string">&#x27;is&#x27;</span>: <span class="hljs-number">2</span>, <span class="hljs-string">&#x27;the&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;Hugging&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;Face&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;Course&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;.&#x27;</span>: <span class="hljs-number">4</span>, <span class="hljs-string">&#x27;chapter&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;about&#x27;</span>: <span class="hljs-number">1</span>,
<span class="hljs-string">&#x27;tokenization&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;section&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;shows&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;several&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;tokenizer&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;algorithms&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;Hopefully&#x27;</span>: <span class="hljs-number">1</span>,
<span class="hljs-string">&#x27;,&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;you&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;will&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;be&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;able&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;to&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;understand&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;how&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;they&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;are&#x27;</span>: <span class="hljs-number">1</span>,
<span class="hljs-string">&#x27;trained&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;and&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;generate&#x27;</span>: <span class="hljs-number">1</span>, <span class="hljs-string">&#x27;tokens&#x27;</span>: <span class="hljs-number">1</span>})`,wrap:!1}}),is=new m({props:{code:"YWxwaGFiZXQlMjAlM0QlMjAlNUIlNUQlMEFmb3IlMjB3b3JkJTIwaW4lMjB3b3JkX2ZyZXFzLmtleXMoKSUzQSUwQSUyMCUyMCUyMCUyMGlmJTIwd29yZCU1QjAlNUQlMjBub3QlMjBpbiUyMGFscGhhYmV0JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWxwaGFiZXQuYXBwZW5kKHdvcmQlNUIwJTVEKSUwQSUyMCUyMCUyMCUyMGZvciUyMGxldHRlciUyMGluJTIwd29yZCU1QjElM0ElNUQlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGYlMjIlMjMlMjMlN0JsZXR0ZXIlN0QlMjIlMjBub3QlMjBpbiUyMGFscGhhYmV0JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWxwaGFiZXQuYXBwZW5kKGYlMjIlMjMlMjMlN0JsZXR0ZXIlN0QlMjIpJTBBJTBBYWxwaGFiZXQuc29ydCgpJTBBYWxwaGFiZXQlMEElMEFwcmludChhbHBoYWJldCk=",highlighted:`alphabet = []
<span class="hljs-keyword">for</span> word <span class="hljs-keyword">in</span> word_freqs.keys():
<span class="hljs-keyword">if</span> word[<span class="hljs-number">0</span>] <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> alphabet:
alphabet.append(word[<span class="hljs-number">0</span>])
<span class="hljs-keyword">for</span> letter <span class="hljs-keyword">in</span> word[<span class="hljs-number">1</span>:]:
<span class="hljs-keyword">if</span> <span class="hljs-string">f&quot;##<span class="hljs-subst">{letter}</span>&quot;</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> alphabet:
alphabet.append(<span class="hljs-string">f&quot;##<span class="hljs-subst">{letter}</span>&quot;</span>)
alphabet.sort()
alphabet
<span class="hljs-built_in">print</span>(alphabet)`,wrap:!1}}),js=new m({props:{code:"JTVCJyUyMyUyM2EnJTJDJTIwJyUyMyUyM2InJTJDJTIwJyUyMyUyM2MnJTJDJTIwJyUyMyUyM2QnJTJDJTIwJyUyMyUyM2UnJTJDJTIwJyUyMyUyM2YnJTJDJTIwJyUyMyUyM2cnJTJDJTIwJyUyMyUyM2gnJTJDJTIwJyUyMyUyM2knJTJDJTIwJyUyMyUyM2snJTJDJTIwJyUyMyUyM2wnJTJDJTIwJyUyMyUyM20nJTJDJTIwJyUyMyUyM24nJTJDJTIwJyUyMyUyM28nJTJDJTIwJyUyMyUyM3AnJTJDJTIwJyUyMyUyM3InJTJDJTIwJyUyMyUyM3MnJTJDJTBBJTIwJyUyMyUyM3QnJTJDJTIwJyUyMyUyM3UnJTJDJTIwJyUyMyUyM3YnJTJDJTIwJyUyMyUyM3cnJTJDJTIwJyUyMyUyM3knJTJDJTIwJyUyMyUyM3onJTJDJTIwJyUyQyclMkMlMjAnLiclMkMlMjAnQyclMkMlMjAnRiclMkMlMjAnSCclMkMlMjAnVCclMkMlMjAnYSclMkMlMjAnYiclMkMlMjAnYyclMkMlMjAnZyclMkMlMjAnaCclMkMlMjAnaSclMkMlMjAncyclMkMlMjAndCclMkMlMjAndSclMkMlMEElMjAndyclMkMlMjAneSclNUQ=",highlighted:`[<span class="hljs-string">&#x27;##a&#x27;</span>, <span class="hljs-string">&#x27;##b&#x27;</span>, <span class="hljs-string">&#x27;##c&#x27;</span>, <span class="hljs-string">&#x27;##d&#x27;</span>, <span class="hljs-string">&#x27;##e&#x27;</span>, <span class="hljs-string">&#x27;##f&#x27;</span>, <span class="hljs-string">&#x27;##g&#x27;</span>, <span class="hljs-string">&#x27;##h&#x27;</span>, <span class="hljs-string">&#x27;##i&#x27;</span>, <span class="hljs-string">&#x27;##k&#x27;</span>, <span class="hljs-string">&#x27;##l&#x27;</span>, <span class="hljs-string">&#x27;##m&#x27;</span>, <span class="hljs-string">&#x27;##n&#x27;</span>, <span class="hljs-string">&#x27;##o&#x27;</span>, <span class="hljs-string">&#x27;##p&#x27;</span>, <span class="hljs-string">&#x27;##r&#x27;</span>, <span class="hljs-string">&#x27;##s&#x27;</span>,
<span class="hljs-string">&#x27;##t&#x27;</span>, <span class="hljs-string">&#x27;##u&#x27;</span>, <span class="hljs-string">&#x27;##v&#x27;</span>, <span class="hljs-string">&#x27;##w&#x27;</span>, <span class="hljs-string">&#x27;##y&#x27;</span>, <span class="hljs-string">&#x27;##z&#x27;</span>, <span class="hljs-string">&#x27;,&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>, <span class="hljs-string">&#x27;C&#x27;</span>, <span class="hljs-string">&#x27;F&#x27;</span>, <span class="hljs-string">&#x27;H&#x27;</span>, <span class="hljs-string">&#x27;T&#x27;</span>, <span class="hljs-string">&#x27;a&#x27;</span>, <span class="hljs-string">&#x27;b&#x27;</span>, <span class="hljs-string">&#x27;c&#x27;</span>, <span class="hljs-string">&#x27;g&#x27;</span>, <span class="hljs-string">&#x27;h&#x27;</span>, <span class="hljs-string">&#x27;i&#x27;</span>, <span class="hljs-string">&#x27;s&#x27;</span>, <span class="hljs-string">&#x27;t&#x27;</span>, <span class="hljs-string">&#x27;u&#x27;</span>,
<span class="hljs-string">&#x27;w&#x27;</span>, <span class="hljs-string">&#x27;y&#x27;</span>]`,wrap:!1}}),cs=new m({props:{code:"dm9jYWIlMjAlM0QlMjAlNUIlMjIlNUJQQUQlNUQlMjIlMkMlMjAlMjIlNUJVTkslNUQlMjIlMkMlMjAlMjIlNUJDTFMlNUQlMjIlMkMlMjAlMjIlNUJTRVAlNUQlMjIlMkMlMjAlMjIlNUJNQVNLJTVEJTIyJTVEJTIwJTJCJTIwYWxwaGFiZXQuY29weSgp",highlighted:'vocab = [<span class="hljs-string">&quot;[PAD]&quot;</span>, <span class="hljs-string">&quot;[UNK]&quot;</span>, <span class="hljs-string">&quot;[CLS]&quot;</span>, <span class="hljs-string">&quot;[SEP]&quot;</span>, <span class="hljs-string">&quot;[MASK]&quot;</span>] + alphabet.copy()',wrap:!1}}),os=new m({props:{code:"c3BsaXRzJTIwJTNEJTIwJTdCJTBBJTIwJTIwJTIwJTIwd29yZCUzQSUyMCU1QmMlMjBpZiUyMGklMjAlM0QlM0QlMjAwJTIwZWxzZSUyMGYlMjIlMjMlMjMlN0JjJTdEJTIyJTIwZm9yJTIwaSUyQyUyMGMlMjBpbiUyMGVudW1lcmF0ZSh3b3JkKSU1RCUwQSUyMCUyMCUyMCUyMGZvciUyMHdvcmQlMjBpbiUyMHdvcmRfZnJlcXMua2V5cygpJTBBJTdE",highlighted:`splits = {
word: [c <span class="hljs-keyword">if</span> i == <span class="hljs-number">0</span> <span class="hljs-keyword">else</span> <span class="hljs-string">f&quot;##<span class="hljs-subst">{c}</span>&quot;</span> <span class="hljs-keyword">for</span> i, c <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(word)]
<span class="hljs-keyword">for</span> word <span class="hljs-keyword">in</span> word_freqs.keys()
}`,wrap:!1}}),Ts=new m({props:{code:"ZGVmJTIwY29tcHV0ZV9wYWlyX3Njb3JlcyhzcGxpdHMpJTNBJTBBJTIwJTIwJTIwJTIwbGV0dGVyX2ZyZXFzJTIwJTNEJTIwZGVmYXVsdGRpY3QoaW50KSUwQSUyMCUyMCUyMCUyMHBhaXJfZnJlcXMlMjAlM0QlMjBkZWZhdWx0ZGljdChpbnQpJTBBJTIwJTIwJTIwJTIwZm9yJTIwd29yZCUyQyUyMGZyZXElMjBpbiUyMHdvcmRfZnJlcXMuaXRlbXMoKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNwbGl0JTIwJTNEJTIwc3BsaXRzJTVCd29yZCU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwbGVuKHNwbGl0KSUyMCUzRCUzRCUyMDElM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsZXR0ZXJfZnJlcXMlNUJzcGxpdCU1QjAlNUQlNUQlMjAlMkIlM0QlMjBmcmVxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29udGludWUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBpJTIwaW4lMjByYW5nZShsZW4oc3BsaXQpJTIwLSUyMDEpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcGFpciUyMCUzRCUyMChzcGxpdCU1QmklNUQlMkMlMjBzcGxpdCU1QmklMjAlMkIlMjAxJTVEKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxldHRlcl9mcmVxcyU1QnNwbGl0JTVCaSU1RCU1RCUyMCUyQiUzRCUyMGZyZXElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwYWlyX2ZyZXFzJTVCcGFpciU1RCUyMCUyQiUzRCUyMGZyZXElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsZXR0ZXJfZnJlcXMlNUJzcGxpdCU1Qi0xJTVEJTVEJTIwJTJCJTNEJTIwZnJlcSUwQSUwQSUyMCUyMCUyMCUyMHNjb3JlcyUyMCUzRCUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHBhaXIlM0ElMjBmcmVxJTIwJTJGJTIwKGxldHRlcl9mcmVxcyU1QnBhaXIlNUIwJTVEJTVEJTIwKiUyMGxldHRlcl9mcmVxcyU1QnBhaXIlNUIxJTVEJTVEKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMHBhaXIlMkMlMjBmcmVxJTIwaW4lMjBwYWlyX2ZyZXFzLml0ZW1zKCklMEElMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlMjAlMjByZXR1cm4lMjBzY29yZXM=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">compute_pair_scores</span>(<span class="hljs-params">splits</span>):
letter_freqs = defaultdict(<span class="hljs-built_in">int</span>)
pair_freqs = defaultdict(<span class="hljs-built_in">int</span>)
<span class="hljs-keyword">for</span> word, freq <span class="hljs-keyword">in</span> word_freqs.items():
split = splits[word]
<span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(split) == <span class="hljs-number">1</span>:
letter_freqs[split[<span class="hljs-number">0</span>]] += freq
<span class="hljs-keyword">continue</span>
<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-built_in">len</span>(split) - <span class="hljs-number">1</span>):
pair = (split[i], split[i + <span class="hljs-number">1</span>])
letter_freqs[split[i]] += freq
pair_freqs[pair] += freq
letter_freqs[split[-<span class="hljs-number">1</span>]] += freq
scores = {
pair: freq / (letter_freqs[pair[<span class="hljs-number">0</span>]] * letter_freqs[pair[<span class="hljs-number">1</span>]])
<span class="hljs-keyword">for</span> pair, freq <span class="hljs-keyword">in</span> pair_freqs.items()
}
<span class="hljs-keyword">return</span> scores`,wrap:!1}}),us=new m({props:{code:"cGFpcl9zY29yZXMlMjAlM0QlMjBjb21wdXRlX3BhaXJfc2NvcmVzKHNwbGl0cyklMEFmb3IlMjBpJTJDJTIwa2V5JTIwaW4lMjBlbnVtZXJhdGUocGFpcl9zY29yZXMua2V5cygpKSUzQSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjIlN0JrZXklN0QlM0ElMjAlN0JwYWlyX3Njb3JlcyU1QmtleSU1RCU3RCUyMiklMEElMjAlMjAlMjAlMjBpZiUyMGklMjAlM0UlM0QlMjA1JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYnJlYWs=",highlighted:`pair_scores = compute_pair_scores(splits)
<span class="hljs-keyword">for</span> i, key <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(pair_scores.keys()):
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;<span class="hljs-subst">{key}</span>: <span class="hljs-subst">{pair_scores[key]}</span>&quot;</span>)
<span class="hljs-keyword">if</span> i &gt;= <span class="hljs-number">5</span>:
<span class="hljs-keyword">break</span>`,wrap:!1}}),hs=new m({props:{code:"KCdUJyUyQyUyMCclMjMlMjNoJyklM0ElMjAwLjEyNSUwQSgnJTIzJTIzaCclMkMlMjAnJTIzJTIzaScpJTNBJTIwMC4wMzQwOTA5MDkwOTA5MDkwOSUwQSgnJTIzJTIzaSclMkMlMjAnJTIzJTIzcycpJTNBJTIwMC4wMjcyNzI3MjcyNzI3MjcyNyUwQSgnaSclMkMlMjAnJTIzJTIzcycpJTNBJTIwMC4xJTBBKCd0JyUyQyUyMCclMjMlMjNoJyklM0ElMjAwLjAzNTcxNDI4NTcxNDI4NTcxJTBBKCclMjMlMjNoJyUyQyUyMCclMjMlMjNlJyklM0ElMjAwLjAxMTkwNDc2MTkwNDc2MTkwNA==",highlighted:`(<span class="hljs-string">&#x27;T&#x27;</span>, <span class="hljs-string">&#x27;##h&#x27;</span>): <span class="hljs-number">0.125</span>
(<span class="hljs-string">&#x27;##h&#x27;</span>, <span class="hljs-string">&#x27;##i&#x27;</span>): <span class="hljs-number">0.03409090909090909</span>
(<span class="hljs-string">&#x27;##i&#x27;</span>, <span class="hljs-string">&#x27;##s&#x27;</span>): <span class="hljs-number">0.02727272727272727</span>
(<span class="hljs-string">&#x27;i&#x27;</span>, <span class="hljs-string">&#x27;##s&#x27;</span>): <span class="hljs-number">0.1</span>
(<span class="hljs-string">&#x27;t&#x27;</span>, <span class="hljs-string">&#x27;##h&#x27;</span>): <span class="hljs-number">0.03571428571428571</span>
(<span class="hljs-string">&#x27;##h&#x27;</span>, <span class="hljs-string">&#x27;##e&#x27;</span>): <span class="hljs-number">0.011904761904761904</span>`,wrap:!1}}),Is=new m({props:{code:"YmVzdF9wYWlyJTIwJTNEJTIwJTIyJTIyJTBBbWF4X3Njb3JlJTIwJTNEJTIwTm9uZSUwQWZvciUyMHBhaXIlMkMlMjBzY29yZSUyMGluJTIwcGFpcl9zY29yZXMuaXRlbXMoKSUzQSUwQSUyMCUyMCUyMCUyMGlmJTIwbWF4X3Njb3JlJTIwaXMlMjBOb25lJTIwb3IlMjBtYXhfc2NvcmUlMjAlM0MlMjBzY29yZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJlc3RfcGFpciUyMCUzRCUyMHBhaXIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtYXhfc2NvcmUlMjAlM0QlMjBzY29yZSUwQSUwQXByaW50KGJlc3RfcGFpciUyQyUyMG1heF9zY29yZSk=",highlighted:`best_pair = <span class="hljs-string">&quot;&quot;</span>
max_score = <span class="hljs-literal">None</span>
<span class="hljs-keyword">for</span> pair, score <span class="hljs-keyword">in</span> pair_scores.items():
<span class="hljs-keyword">if</span> max_score <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span> <span class="hljs-keyword">or</span> max_score &lt; score:
best_pair = pair
max_score = score
<span class="hljs-built_in">print</span>(best_pair, max_score)`,wrap:!1}}),Cs=new m({props:{code:"KCdhJyUyQyUyMCclMjMlMjNiJyklMjAwLjI=",highlighted:'(<span class="hljs-string">&#x27;a&#x27;</span>, <span class="hljs-string">&#x27;##b&#x27;</span>) <span class="hljs-number">0.2</span>',wrap:!1}}),gs=new m({props:{code:"dm9jYWIuYXBwZW5kKCUyMmFiJTIyKQ==",highlighted:'vocab.append(<span class="hljs-string">&quot;ab&quot;</span>)',wrap:!1}}),bs=new m({props:{code:"ZGVmJTIwbWVyZ2VfcGFpcihhJTJDJTIwYiUyQyUyMHNwbGl0cyklM0ElMEElMjAlMjAlMjAlMjBmb3IlMjB3b3JkJTIwaW4lMjB3b3JkX2ZyZXFzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3BsaXQlMjAlM0QlMjBzcGxpdHMlNUJ3b3JkJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBsZW4oc3BsaXQpJTIwJTNEJTNEJTIwMSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbnRpbnVlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaSUyMCUzRCUyMDAlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB3aGlsZSUyMGklMjAlM0MlMjBsZW4oc3BsaXQpJTIwLSUyMDElM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMHNwbGl0JTVCaSU1RCUyMCUzRCUzRCUyMGElMjBhbmQlMjBzcGxpdCU1QmklMjAlMkIlMjAxJTVEJTIwJTNEJTNEJTIwYiUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1lcmdlJTIwJTNEJTIwYSUyMCUyQiUyMGIlNUIyJTNBJTVEJTIwaWYlMjBiLnN0YXJ0c3dpdGgoJTIyJTIzJTIzJTIyKSUyMGVsc2UlMjBhJTIwJTJCJTIwYiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNwbGl0JTIwJTNEJTIwc3BsaXQlNUIlM0FpJTVEJTIwJTJCJTIwJTVCbWVyZ2UlNUQlMjAlMkIlMjBzcGxpdCU1QmklMjAlMkIlMjAyJTIwJTNBJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZWxzZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGklMjAlMkIlM0QlMjAxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3BsaXRzJTVCd29yZCU1RCUyMCUzRCUyMHNwbGl0JTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwc3BsaXRz",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">merge_pair</span>(<span class="hljs-params">a, b, splits</span>):
<span class="hljs-keyword">for</span> word <span class="hljs-keyword">in</span> word_freqs:
split = splits[word]
<span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(split) == <span class="hljs-number">1</span>:
<span class="hljs-keyword">continue</span>
i = <span class="hljs-number">0</span>
<span class="hljs-keyword">while</span> i &lt; <span class="hljs-built_in">len</span>(split) - <span class="hljs-number">1</span>:
<span class="hljs-keyword">if</span> split[i] == a <span class="hljs-keyword">and</span> split[i + <span class="hljs-number">1</span>] == b:
merge = a + b[<span class="hljs-number">2</span>:] <span class="hljs-keyword">if</span> b.startswith(<span class="hljs-string">&quot;##&quot;</span>) <span class="hljs-keyword">else</span> a + b
split = split[:i] + [merge] + split[i + <span class="hljs-number">2</span> :]
<span class="hljs-keyword">else</span>:
i += <span class="hljs-number">1</span>
splits[word] = split
<span class="hljs-keyword">return</span> splits`,wrap:!1}}),qs=new m({props:{code:"c3BsaXRzJTIwJTNEJTIwbWVyZ2VfcGFpciglMjJhJTIyJTJDJTIwJTIyJTIzJTIzYiUyMiUyQyUyMHNwbGl0cyklMEFzcGxpdHMlNUIlMjJhYm91dCUyMiU1RA==",highlighted:`splits = merge_pair(<span class="hljs-string">&quot;a&quot;</span>, <span class="hljs-string">&quot;##b&quot;</span>, splits)
splits[<span class="hljs-string">&quot;about&quot;</span>]`,wrap:!1}}),$s=new m({props:{code:"JTVCJ2FiJyUyQyUyMCclMjMlMjNvJyUyQyUyMCclMjMlMjN1JyUyQyUyMCclMjMlMjN0JyU1RA==",highlighted:'[<span class="hljs-string">&#x27;ab&#x27;</span>, <span class="hljs-string">&#x27;##o&#x27;</span>, <span class="hljs-string">&#x27;##u&#x27;</span>, <span class="hljs-string">&#x27;##t&#x27;</span>]',wrap:!1}}),As=new m({props:{code:"dm9jYWJfc2l6ZSUyMCUzRCUyMDcwJTBBd2hpbGUlMjBsZW4odm9jYWIpJTIwJTNDJTIwdm9jYWJfc2l6ZSUzQSUwQSUyMCUyMCUyMCUyMHNjb3JlcyUyMCUzRCUyMGNvbXB1dGVfcGFpcl9zY29yZXMoc3BsaXRzKSUwQSUyMCUyMCUyMCUyMGJlc3RfcGFpciUyQyUyMG1heF9zY29yZSUyMCUzRCUyMCUyMiUyMiUyQyUyME5vbmUlMEElMjAlMjAlMjAlMjBmb3IlMjBwYWlyJTJDJTIwc2NvcmUlMjBpbiUyMHNjb3Jlcy5pdGVtcygpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBtYXhfc2NvcmUlMjBpcyUyME5vbmUlMjBvciUyMG1heF9zY29yZSUyMCUzQyUyMHNjb3JlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmVzdF9wYWlyJTIwJTNEJTIwcGFpciUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1heF9zY29yZSUyMCUzRCUyMHNjb3JlJTBBJTIwJTIwJTIwJTIwc3BsaXRzJTIwJTNEJTIwbWVyZ2VfcGFpcigqYmVzdF9wYWlyJTJDJTIwc3BsaXRzKSUwQSUyMCUyMCUyMCUyMG5ld190b2tlbiUyMCUzRCUyMCglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBiZXN0X3BhaXIlNUIwJTVEJTIwJTJCJTIwYmVzdF9wYWlyJTVCMSU1RCU1QjIlM0ElNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGJlc3RfcGFpciU1QjElNUQuc3RhcnRzd2l0aCglMjIlMjMlMjMlMjIpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZWxzZSUyMGJlc3RfcGFpciU1QjAlNUQlMjAlMkIlMjBiZXN0X3BhaXIlNUIxJTVEJTBBJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCUyMCUyMHZvY2FiLmFwcGVuZChuZXdfdG9rZW4p",highlighted:`vocab_size = <span class="hljs-number">70</span>
<span class="hljs-keyword">while</span> <span class="hljs-built_in">len</span>(vocab) &lt; vocab_size:
scores = compute_pair_scores(splits)
best_pair, max_score = <span class="hljs-string">&quot;&quot;</span>, <span class="hljs-literal">None</span>
<span class="hljs-keyword">for</span> pair, score <span class="hljs-keyword">in</span> scores.items():
<span class="hljs-keyword">if</span> max_score <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span> <span class="hljs-keyword">or</span> max_score &lt; score:
best_pair = pair
max_score = score
splits = merge_pair(*best_pair, splits)
new_token = (
best_pair[<span class="hljs-number">0</span>] + best_pair[<span class="hljs-number">1</span>][<span class="hljs-number">2</span>:]
<span class="hljs-keyword">if</span> best_pair[<span class="hljs-number">1</span>].startswith(<span class="hljs-string">&quot;##&quot;</span>)
<span class="hljs-keyword">else</span> best_pair[<span class="hljs-number">0</span>] + best_pair[<span class="hljs-number">1</span>]
)
vocab.append(new_token)`,wrap:!1}}),zs=new m({props:{code:"cHJpbnQodm9jYWIp",highlighted:'<span class="hljs-built_in">print</span>(vocab)',wrap:!1}}),Bs=new m({props:{code:"JTVCJyU1QlBBRCU1RCclMkMlMjAnJTVCVU5LJTVEJyUyQyUyMCclNUJDTFMlNUQnJTJDJTIwJyU1QlNFUCU1RCclMkMlMjAnJTVCTUFTSyU1RCclMkMlMjAnJTIzJTIzYSclMkMlMjAnJTIzJTIzYiclMkMlMjAnJTIzJTIzYyclMkMlMjAnJTIzJTIzZCclMkMlMjAnJTIzJTIzZSclMkMlMjAnJTIzJTIzZiclMkMlMjAnJTIzJTIzZyclMkMlMjAnJTIzJTIzaCclMkMlMjAnJTIzJTIzaSclMkMlMjAnJTIzJTIzayclMkMlMEElMjAnJTIzJTIzbCclMkMlMjAnJTIzJTIzbSclMkMlMjAnJTIzJTIzbiclMkMlMjAnJTIzJTIzbyclMkMlMjAnJTIzJTIzcCclMkMlMjAnJTIzJTIzciclMkMlMjAnJTIzJTIzcyclMkMlMjAnJTIzJTIzdCclMkMlMjAnJTIzJTIzdSclMkMlMjAnJTIzJTIzdiclMkMlMjAnJTIzJTIzdyclMkMlMjAnJTIzJTIzeSclMkMlMjAnJTIzJTIzeiclMkMlMjAnJTJDJyUyQyUyMCcuJyUyQyUyMCdDJyUyQyUyMCdGJyUyQyUyMCdIJyUyQyUwQSUyMCdUJyUyQyUyMCdhJyUyQyUyMCdiJyUyQyUyMCdjJyUyQyUyMCdnJyUyQyUyMCdoJyUyQyUyMCdpJyUyQyUyMCdzJyUyQyUyMCd0JyUyQyUyMCd1JyUyQyUyMCd3JyUyQyUyMCd5JyUyQyUyMCdhYiclMkMlMjAnJTIzJTIzZnUnJTJDJTIwJ0ZhJyUyQyUyMCdGYWMnJTJDJTIwJyUyMyUyM2N0JyUyQyUyMCclMjMlMjNmdWwnJTJDJTIwJyUyMyUyM2Z1bGwnJTJDJTIwJyUyMyUyM2Z1bGx5JyUyQyUwQSUyMCdUaCclMkMlMjAnY2gnJTJDJTIwJyUyMyUyM2htJyUyQyUyMCdjaGEnJTJDJTIwJ2NoYXAnJTJDJTIwJ2NoYXB0JyUyQyUyMCclMjMlMjN0aG0nJTJDJTIwJ0h1JyUyQyUyMCdIdWcnJTJDJTIwJ0h1Z2cnJTJDJTIwJ3NoJyUyQyUyMCd0aCclMkMlMjAnaXMnJTJDJTIwJyUyMyUyM3RobXMnJTJDJTIwJyUyMyUyM3phJyUyQyUyMCclMjMlMjN6YXQnJTJDJTBBJTIwJyUyMyUyM3V0JyU1RA==",highlighted:`[<span class="hljs-string">&#x27;[PAD]&#x27;</span>, <span class="hljs-string">&#x27;[UNK]&#x27;</span>, <span class="hljs-string">&#x27;[CLS]&#x27;</span>, <span class="hljs-string">&#x27;[SEP]&#x27;</span>, <span class="hljs-string">&#x27;[MASK]&#x27;</span>, <span class="hljs-string">&#x27;##a&#x27;</span>, <span class="hljs-string">&#x27;##b&#x27;</span>, <span class="hljs-string">&#x27;##c&#x27;</span>, <span class="hljs-string">&#x27;##d&#x27;</span>, <span class="hljs-string">&#x27;##e&#x27;</span>, <span class="hljs-string">&#x27;##f&#x27;</span>, <span class="hljs-string">&#x27;##g&#x27;</span>, <span class="hljs-string">&#x27;##h&#x27;</span>, <span class="hljs-string">&#x27;##i&#x27;</span>, <span class="hljs-string">&#x27;##k&#x27;</span>,
<span class="hljs-string">&#x27;##l&#x27;</span>, <span class="hljs-string">&#x27;##m&#x27;</span>, <span class="hljs-string">&#x27;##n&#x27;</span>, <span class="hljs-string">&#x27;##o&#x27;</span>, <span class="hljs-string">&#x27;##p&#x27;</span>, <span class="hljs-string">&#x27;##r&#x27;</span>, <span class="hljs-string">&#x27;##s&#x27;</span>, <span class="hljs-string">&#x27;##t&#x27;</span>, <span class="hljs-string">&#x27;##u&#x27;</span>, <span class="hljs-string">&#x27;##v&#x27;</span>, <span class="hljs-string">&#x27;##w&#x27;</span>, <span class="hljs-string">&#x27;##y&#x27;</span>, <span class="hljs-string">&#x27;##z&#x27;</span>, <span class="hljs-string">&#x27;,&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>, <span class="hljs-string">&#x27;C&#x27;</span>, <span class="hljs-string">&#x27;F&#x27;</span>, <span class="hljs-string">&#x27;H&#x27;</span>,
<span class="hljs-string">&#x27;T&#x27;</span>, <span class="hljs-string">&#x27;a&#x27;</span>, <span class="hljs-string">&#x27;b&#x27;</span>, <span class="hljs-string">&#x27;c&#x27;</span>, <span class="hljs-string">&#x27;g&#x27;</span>, <span class="hljs-string">&#x27;h&#x27;</span>, <span class="hljs-string">&#x27;i&#x27;</span>, <span class="hljs-string">&#x27;s&#x27;</span>, <span class="hljs-string">&#x27;t&#x27;</span>, <span class="hljs-string">&#x27;u&#x27;</span>, <span class="hljs-string">&#x27;w&#x27;</span>, <span class="hljs-string">&#x27;y&#x27;</span>, <span class="hljs-string">&#x27;ab&#x27;</span>, <span class="hljs-string">&#x27;##fu&#x27;</span>, <span class="hljs-string">&#x27;Fa&#x27;</span>, <span class="hljs-string">&#x27;Fac&#x27;</span>, <span class="hljs-string">&#x27;##ct&#x27;</span>, <span class="hljs-string">&#x27;##ful&#x27;</span>, <span class="hljs-string">&#x27;##full&#x27;</span>, <span class="hljs-string">&#x27;##fully&#x27;</span>,
<span class="hljs-string">&#x27;Th&#x27;</span>, <span class="hljs-string">&#x27;ch&#x27;</span>, <span class="hljs-string">&#x27;##hm&#x27;</span>, <span class="hljs-string">&#x27;cha&#x27;</span>, <span class="hljs-string">&#x27;chap&#x27;</span>, <span class="hljs-string">&#x27;chapt&#x27;</span>, <span class="hljs-string">&#x27;##thm&#x27;</span>, <span class="hljs-string">&#x27;Hu&#x27;</span>, <span class="hljs-string">&#x27;Hug&#x27;</span>, <span class="hljs-string">&#x27;Hugg&#x27;</span>, <span class="hljs-string">&#x27;sh&#x27;</span>, <span class="hljs-string">&#x27;th&#x27;</span>, <span class="hljs-string">&#x27;is&#x27;</span>, <span class="hljs-string">&#x27;##thms&#x27;</span>, <span class="hljs-string">&#x27;##za&#x27;</span>, <span class="hljs-string">&#x27;##zat&#x27;</span>,
<span class="hljs-string">&#x27;##ut&#x27;</span>]`,wrap:!1}}),d=new Ps({props:{$$slots:{default:[Zn]},$$scope:{ctx:w}}}),Ns=new m({props:{code:"ZGVmJTIwZW5jb2RlX3dvcmQod29yZCklM0ElMEElMjAlMjAlMjAlMjB0b2tlbnMlMjAlM0QlMjAlNUIlNUQlMEElMjAlMjAlMjAlMjB3aGlsZSUyMGxlbih3b3JkKSUyMCUzRSUyMDAlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpJTIwJTNEJTIwbGVuKHdvcmQpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd2hpbGUlMjBpJTIwJTNFJTIwMCUyMGFuZCUyMHdvcmQlNUIlM0FpJTVEJTIwbm90JTIwaW4lMjB2b2NhYiUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGklMjAtJTNEJTIwMSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwaSUyMCUzRCUzRCUyMDAlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm4lMjAlNUIlMjIlNUJVTkslNUQlMjIlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0b2tlbnMuYXBwZW5kKHdvcmQlNUIlM0FpJTVEKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdvcmQlMjAlM0QlMjB3b3JkJTVCaSUzQSU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwbGVuKHdvcmQpJTIwJTNFJTIwMCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdvcmQlMjAlM0QlMjBmJTIyJTIzJTIzJTdCd29yZCU3RCUyMiUwQSUyMCUyMCUyMCUyMHJldHVybiUyMHRva2Vucw==",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">encode_word</span>(<span class="hljs-params">word</span>):
tokens = []
<span class="hljs-keyword">while</span> <span class="hljs-built_in">len</span>(word) &gt; <span class="hljs-number">0</span>:
i = <span class="hljs-built_in">len</span>(word)
<span class="hljs-keyword">while</span> i &gt; <span class="hljs-number">0</span> <span class="hljs-keyword">and</span> word[:i] <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> vocab:
i -= <span class="hljs-number">1</span>
<span class="hljs-keyword">if</span> i == <span class="hljs-number">0</span>:
<span class="hljs-keyword">return</span> [<span class="hljs-string">&quot;[UNK]&quot;</span>]
tokens.append(word[:i])
word = word[i:]
<span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(word) &gt; <span class="hljs-number">0</span>:
word = <span class="hljs-string">f&quot;##<span class="hljs-subst">{word}</span>&quot;</span>
<span class="hljs-keyword">return</span> tokens`,wrap:!1}}),Es=new m({props:{code:"cHJpbnQoZW5jb2RlX3dvcmQoJTIySHVnZ2luZyUyMikpJTBBcHJpbnQoZW5jb2RlX3dvcmQoJTIySE9nZ2luZyUyMikp",highlighted:`<span class="hljs-built_in">print</span>(encode_word(<span class="hljs-string">&quot;Hugging&quot;</span>))
<span class="hljs-built_in">print</span>(encode_word(<span class="hljs-string">&quot;HOgging&quot;</span>))`,wrap:!1}}),Ss=new m({props:{code:"JTVCJ0h1Z2cnJTJDJTIwJyUyMyUyM2knJTJDJTIwJyUyMyUyM24nJTJDJTIwJyUyMyUyM2cnJTVEJTBBJTVCJyU1QlVOSyU1RCclNUQ=",highlighted:`[<span class="hljs-string">&#x27;Hugg&#x27;</span>, <span class="hljs-string">&#x27;##i&#x27;</span>, <span class="hljs-string">&#x27;##n&#x27;</span>, <span class="hljs-string">&#x27;##g&#x27;</span>]
[<span class="hljs-string">&#x27;[UNK]&#x27;</span>]`,wrap:!1}}),Vs=new m({props:{code:"ZGVmJTIwdG9rZW5pemUodGV4dCklM0ElMEElMjAlMjAlMjAlMjBwcmVfdG9rZW5pemVfcmVzdWx0JTIwJTNEJTIwdG9rZW5pemVyLl90b2tlbml6ZXIucHJlX3Rva2VuaXplci5wcmVfdG9rZW5pemVfc3RyKHRleHQpJTBBJTIwJTIwJTIwJTIwcHJlX3Rva2VuaXplZF90ZXh0JTIwJTNEJTIwJTVCd29yZCUyMGZvciUyMHdvcmQlMkMlMjBvZmZzZXQlMjBpbiUyMHByZV90b2tlbml6ZV9yZXN1bHQlNUQlMEElMjAlMjAlMjAlMjBlbmNvZGVkX3dvcmRzJTIwJTNEJTIwJTVCZW5jb2RlX3dvcmQod29yZCklMjBmb3IlMjB3b3JkJTIwaW4lMjBwcmVfdG9rZW5pemVkX3RleHQlNUQlMEElMjAlMjAlMjAlMjByZXR1cm4lMjBzdW0oZW5jb2RlZF93b3JkcyUyQyUyMCU1QiU1RCk=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">tokenize</span>(<span class="hljs-params">text</span>):
pre_tokenize_result = tokenizer._tokenizer.pre_tokenizer.pre_tokenize_str(text)
pre_tokenized_text = [word <span class="hljs-keyword">for</span> word, offset <span class="hljs-keyword">in</span> pre_tokenize_result]
encoded_words = [encode_word(word) <span class="hljs-keyword">for</span> word <span class="hljs-keyword">in</span> pre_tokenized_text]
<span class="hljs-keyword">return</span> <span class="hljs-built_in">sum</span>(encoded_words, [])`,wrap:!1}}),Hs=new m({props:{code:"dG9rZW5pemUoJTIyVGhpcyUyMGlzJTIwdGhlJTIwSHVnZ2luZyUyMEZhY2UlMjBjb3Vyc2UhJTIyKQ==",highlighted:'tokenize(<span class="hljs-string">&quot;This is the Hugging Face course!&quot;</span>)',wrap:!1}}),Ws=new m({props:{code:"JTVCJ1RoJyUyQyUyMCclMjMlMjNpJyUyQyUyMCclMjMlMjNzJyUyQyUyMCdpcyclMkMlMjAndGgnJTJDJTIwJyUyMyUyM2UnJTJDJTIwJ0h1Z2cnJTJDJTIwJyUyMyUyM2knJTJDJTIwJyUyMyUyM24nJTJDJTIwJyUyMyUyM2cnJTJDJTIwJ0ZhYyclMkMlMjAnJTIzJTIzZSclMkMlMjAnYyclMkMlMjAnJTIzJTIzbyclMkMlMjAnJTIzJTIzdSclMkMlMjAnJTIzJTIzciclMkMlMjAnJTIzJTIzcyclMkMlMEElMjAnJTIzJTIzZSclMkMlMjAnJTVCVU5LJTVEJyU1RA==",highlighted:`[<span class="hljs-string">&#x27;Th&#x27;</span>, <span class="hljs-string">&#x27;##i&#x27;</span>, <span class="hljs-string">&#x27;##s&#x27;</span>, <span class="hljs-string">&#x27;is&#x27;</span>, <span class="hljs-string">&#x27;th&#x27;</span>, <span class="hljs-string">&#x27;##e&#x27;</span>, <span class="hljs-string">&#x27;Hugg&#x27;</span>, <span class="hljs-string">&#x27;##i&#x27;</span>, <span class="hljs-string">&#x27;##n&#x27;</span>, <span class="hljs-string">&#x27;##g&#x27;</span>, <span class="hljs-string">&#x27;Fac&#x27;</span>, <span class="hljs-string">&#x27;##e&#x27;</span>, <span class="hljs-string">&#x27;c&#x27;</span>, <span class="hljs-string">&#x27;##o&#x27;</span>, <span class="hljs-string">&#x27;##u&#x27;</span>, <span class="hljs-string">&#x27;##r&#x27;</span>, <span class="hljs-string">&#x27;##s&#x27;</span>,
<span class="hljs-string">&#x27;##e&#x27;</span>, <span class="hljs-string">&#x27;[UNK]&#x27;</span>]`,wrap:!1}}),Ys=new An({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ru/chapter6/6.mdx"}}),{c(){M=e("meta"),u=t(),T=e("p"),h=t(),i(b.$$.fragment),Ls=t(),i(f.$$.fragment),Os=t(),q=e("p"),q.textContent=ka,sl=t(),i($.$$.fragment),ll=t(),i(I.$$.fragment),al=t(),i(k.$$.fragment),nl=t(),i(C.$$.fragment),tl=t(),A=e("p"),A.innerHTML=Aa,pl=t(),i(Q.$$.fragment),Ml=t(),z=e("p"),z.textContent=Qa,el=t(),B=e("p"),qa=gn(`Затем, как и в случае с BPE, WordPiece изучает правила слияния. Основное отличие заключается в способе выбора пары для слияния. Вместо того чтобы выбирать наиболее частую пару, WordPiece рассчитывает оценку для каждой пары по следующей формуле:
`),yl=new dn(!1),il=t(),v=e("p"),v.innerHTML=za,jl=t(),Z=e("p"),Z.textContent=Ba,Jl=t(),i(N.$$.fragment),cl=t(),_=e("p"),_.textContent=va,rl=t(),i(E.$$.fragment),ol=t(),S=e("p"),S.innerHTML=Za,Ul=t(),G=e("p"),G.innerHTML=Na,Tl=t(),i(V.$$.fragment),ml=t(),X=e("p"),X.innerHTML=_a,ul=t(),i(H.$$.fragment),hl=t(),W=e("p"),W.innerHTML=Ea,wl=t(),i(R.$$.fragment),Il=t(),Y=e("p"),Y.textContent=Sa,Cl=t(),i(x.$$.fragment),xl=t(),i(D.$$.fragment),gl=t(),F=e("p"),F.innerHTML=Ga,dl=t(),P=e("p"),P.innerHTML=Va,bl=t(),K=e("p"),K.innerHTML=Xa,fl=t(),L=e("p"),L.innerHTML=Ha,ql=t(),i(g.$$.fragment),$l=t(),i(O.$$.fragment),kl=t(),ss=e("p"),ss.textContent=Wa,Al=t(),ls=e("p"),ls.textContent=Ra,Ql=t(),i(as.$$.fragment),zl=t(),ns=e("p"),ns.innerHTML=Ya,Bl=t(),i(ts.$$.fragment),vl=t(),ps=e("p"),ps.textContent=Da,Zl=t(),i(Ms.$$.fragment),Nl=t(),i(es.$$.fragment),_l=t(),ys=e("p"),ys.innerHTML=Fa,El=t(),i(is.$$.fragment),Sl=t(),i(js.$$.fragment),Gl=t(),Js=e("p"),Js.innerHTML=Pa,Vl=t(),i(cs.$$.fragment),Xl=t(),rs=e("p"),rs.innerHTML=Ka,Hl=t(),i(os.$$.fragment),Wl=t(),Us=e("p"),Us.textContent=La,Rl=t(),i(Ts.$$.fragment),Yl=t(),ms=e("p"),ms.textContent=Oa,Dl=t(),i(us.$$.fragment),Fl=t(),i(hs.$$.fragment),Pl=t(),ws=e("p"),ws.textContent=sn,Kl=t(),i(Is.$$.fragment),Ll=t(),i(Cs.$$.fragment),Ol=t(),xs=e("p"),xs.innerHTML=ln,sa=t(),i(gs.$$.fragment),la=t(),ds=e("p"),ds.innerHTML=an,aa=t(),i(bs.$$.fragment),na=t(),fs=e("p"),fs.textContent=nn,ta=t(),i(qs.$$.fragment),pa=t(),i($s.$$.fragment),Ma=t(),ks=e("p"),ks.textContent=tn,ea=t(),i(As.$$.fragment),ya=t(),Qs=e("p"),Qs.textContent=pn,ia=t(),i(zs.$$.fragment),ja=t(),i(Bs.$$.fragment),Ja=t(),vs=e("p"),vs.textContent=Mn,ca=t(),i(d.$$.fragment),ra=t(),Zs=e("p"),Zs.textContent=en,oa=t(),i(Ns.$$.fragment),Ua=t(),_s=e("p"),_s.textContent=yn,Ta=t(),i(Es.$$.fragment),ma=t(),i(Ss.$$.fragment),ua=t(),Gs=e("p"),Gs.textContent=jn,ha=t(),i(Vs.$$.fragment),wa=t(),Xs=e("p"),Xs.textContent=Jn,Ia=t(),i(Hs.$$.fragment),Ca=t(),i(Ws.$$.fragment),xa=t(),Rs=e("p"),Rs.textContent=cn,ga=t(),i(Ys.$$.fragment),da=t(),Fs=e("p"),this.h()},l(s){const l=bn("svelte-u9bgzb",document.head);M=y(l,"META",{name:!0,content:!0}),l.forEach(a),u=p(s),T=y(s,"P",{}),$a(T).forEach(a),h=p(s),j(b.$$.fragment,s),Ls=p(s),j(f.$$.fragment,s),Os=p(s),q=y(s,"P",{"data-svelte-h":!0}),U(q)!=="svelte-lb7tav"&&(q.textContent=ka),sl=p(s),j($.$$.fragment,s),ll=p(s),j(I.$$.fragment,s),al=p(s),j(k.$$.fragment,s),nl=p(s),j(C.$$.fragment,s),tl=p(s),A=y(s,"P",{"data-svelte-h":!0}),U(A)!=="svelte-b3hybw"&&(A.innerHTML=Aa),pl=p(s),j(Q.$$.fragment,s),Ml=p(s),z=y(s,"P",{"data-svelte-h":!0}),U(z)!=="svelte-1g48bxl"&&(z.textContent=Qa),el=p(s),B=y(s,"P",{});var Ds=$a(B);qa=fn(Ds,`Затем, как и в случае с BPE, WordPiece изучает правила слияния. Основное отличие заключается в способе выбора пары для слияния. Вместо того чтобы выбирать наиболее частую пару, WordPiece рассчитывает оценку для каждой пары по следующей формуле:
`),yl=qn(Ds,!1),Ds.forEach(a),il=p(s),v=y(s,"P",{"data-svelte-h":!0}),U(v)!=="svelte-3qj6q9"&&(v.innerHTML=za),jl=p(s),Z=y(s,"P",{"data-svelte-h":!0}),U(Z)!=="svelte-rq393w"&&(Z.textContent=Ba),Jl=p(s),j(N.$$.fragment,s),cl=p(s),_=y(s,"P",{"data-svelte-h":!0}),U(_)!=="svelte-j781er"&&(_.textContent=va),rl=p(s),j(E.$$.fragment,s),ol=p(s),S=y(s,"P",{"data-svelte-h":!0}),U(S)!=="svelte-1adiqk2"&&(S.innerHTML=Za),Ul=p(s),G=y(s,"P",{"data-svelte-h":!0}),U(G)!=="svelte-1cqk9es"&&(G.innerHTML=Na),Tl=p(s),j(V.$$.fragment,s),ml=p(s),X=y(s,"P",{"data-svelte-h":!0}),U(X)!=="svelte-zcas38"&&(X.innerHTML=_a),ul=p(s),j(H.$$.fragment,s),hl=p(s),W=y(s,"P",{"data-svelte-h":!0}),U(W)!=="svelte-1jk17le"&&(W.innerHTML=Ea),wl=p(s),j(R.$$.fragment,s),Il=p(s),Y=y(s,"P",{"data-svelte-h":!0}),U(Y)!=="svelte-188ent6"&&(Y.textContent=Sa),Cl=p(s),j(x.$$.fragment,s),xl=p(s),j(D.$$.fragment,s),gl=p(s),F=y(s,"P",{"data-svelte-h":!0}),U(F)!=="svelte-11aa2wf"&&(F.innerHTML=Ga),dl=p(s),P=y(s,"P",{"data-svelte-h":!0}),U(P)!=="svelte-m4hae6"&&(P.innerHTML=Va),bl=p(s),K=y(s,"P",{"data-svelte-h":!0}),U(K)!=="svelte-1ki7bup"&&(K.innerHTML=Xa),fl=p(s),L=y(s,"P",{"data-svelte-h":!0}),U(L)!=="svelte-18s7iu4"&&(L.innerHTML=Ha),ql=p(s),j(g.$$.fragment,s),$l=p(s),j(O.$$.fragment,s),kl=p(s),ss=y(s,"P",{"data-svelte-h":!0}),U(ss)!=="svelte-1r6300x"&&(ss.textContent=Wa),Al=p(s),ls=y(s,"P",{"data-svelte-h":!0}),U(ls)!=="svelte-e3ofjy"&&(ls.textContent=Ra),Ql=p(s),j(as.$$.fragment,s),zl=p(s),ns=y(s,"P",{"data-svelte-h":!0}),U(ns)!=="svelte-1nv6f1r"&&(ns.innerHTML=Ya),Bl=p(s),j(ts.$$.fragment,s),vl=p(s),ps=y(s,"P",{"data-svelte-h":!0}),U(ps)!=="svelte-8r9jet"&&(ps.textContent=Da),Zl=p(s),j(Ms.$$.fragment,s),Nl=p(s),j(es.$$.fragment,s),_l=p(s),ys=y(s,"P",{"data-svelte-h":!0}),U(ys)!=="svelte-14ufjej"&&(ys.innerHTML=Fa),El=p(s),j(is.$$.fragment,s),Sl=p(s),j(js.$$.fragment,s),Gl=p(s),Js=y(s,"P",{"data-svelte-h":!0}),U(Js)!=="svelte-1j2ylfq"&&(Js.innerHTML=Pa),Vl=p(s),j(cs.$$.fragment,s),Xl=p(s),rs=y(s,"P",{"data-svelte-h":!0}),U(rs)!=="svelte-l5tcaj"&&(rs.innerHTML=Ka),Hl=p(s),j(os.$$.fragment,s),Wl=p(s),Us=y(s,"P",{"data-svelte-h":!0}),U(Us)!=="svelte-1wdlc1a"&&(Us.textContent=La),Rl=p(s),j(Ts.$$.fragment,s),Yl=p(s),ms=y(s,"P",{"data-svelte-h":!0}),U(ms)!=="svelte-1jqphuk"&&(ms.textContent=Oa),Dl=p(s),j(us.$$.fragment,s),Fl=p(s),j(hs.$$.fragment,s),Pl=p(s),ws=y(s,"P",{"data-svelte-h":!0}),U(ws)!=="svelte-1lgcf40"&&(ws.textContent=sn),Kl=p(s),j(Is.$$.fragment,s),Ll=p(s),j(Cs.$$.fragment,s),Ol=p(s),xs=y(s,"P",{"data-svelte-h":!0}),U(xs)!=="svelte-1kaqdns"&&(xs.innerHTML=ln),sa=p(s),j(gs.$$.fragment,s),la=p(s),ds=y(s,"P",{"data-svelte-h":!0}),U(ds)!=="svelte-10bh8zb"&&(ds.innerHTML=an),aa=p(s),j(bs.$$.fragment,s),na=p(s),fs=y(s,"P",{"data-svelte-h":!0}),U(fs)!=="svelte-hv4pw2"&&(fs.textContent=nn),ta=p(s),j(qs.$$.fragment,s),pa=p(s),j($s.$$.fragment,s),Ma=p(s),ks=y(s,"P",{"data-svelte-h":!0}),U(ks)!=="svelte-whfns4"&&(ks.textContent=tn),ea=p(s),j(As.$$.fragment,s),ya=p(s),Qs=y(s,"P",{"data-svelte-h":!0}),U(Qs)!=="svelte-qviz67"&&(Qs.textContent=pn),ia=p(s),j(zs.$$.fragment,s),ja=p(s),j(Bs.$$.fragment,s),Ja=p(s),vs=y(s,"P",{"data-svelte-h":!0}),U(vs)!=="svelte-12ddnm"&&(vs.textContent=Mn),ca=p(s),j(d.$$.fragment,s),ra=p(s),Zs=y(s,"P",{"data-svelte-h":!0}),U(Zs)!=="svelte-1rj1p5f"&&(Zs.textContent=en),oa=p(s),j(Ns.$$.fragment,s),Ua=p(s),_s=y(s,"P",{"data-svelte-h":!0}),U(_s)!=="svelte-fxmhyj"&&(_s.textContent=yn),Ta=p(s),j(Es.$$.fragment,s),ma=p(s),j(Ss.$$.fragment,s),ua=p(s),Gs=y(s,"P",{"data-svelte-h":!0}),U(Gs)!=="svelte-gma2ey"&&(Gs.textContent=jn),ha=p(s),j(Vs.$$.fragment,s),wa=p(s),Xs=y(s,"P",{"data-svelte-h":!0}),U(Xs)!=="svelte-7ot5k5"&&(Xs.textContent=Jn),Ia=p(s),j(Hs.$$.fragment,s),Ca=p(s),j(Ws.$$.fragment,s),xa=p(s),Rs=y(s,"P",{"data-svelte-h":!0}),U(Rs)!=="svelte-flg8sq"&&(Rs.textContent=cn),ga=p(s),j(Ys.$$.fragment,s),da=p(s),Fs=y(s,"P",{}),$a(Fs).forEach(a),this.h()},h(){mn(M,"name","hf:doc:metadata"),mn(M,"content",_n),yl.a=null},m(s,l){un(document.head,M),n(s,u,l),n(s,T,l),n(s,h,l),J(b,s,l),n(s,Ls,l),J(f,s,l),n(s,Os,l),n(s,q,l),n(s,sl,l),J($,s,l),n(s,ll,l),J(I,s,l),n(s,al,l),J(k,s,l),n(s,nl,l),J(C,s,l),n(s,tl,l),n(s,A,l),n(s,pl,l),J(Q,s,l),n(s,Ml,l),n(s,z,l),n(s,el,l),n(s,B,l),un(B,qa),yl.m(hn,B),n(s,il,l),n(s,v,l),n(s,jl,l),n(s,Z,l),n(s,Jl,l),J(N,s,l),n(s,cl,l),n(s,_,l),n(s,rl,l),J(E,s,l),n(s,ol,l),n(s,S,l),n(s,Ul,l),n(s,G,l),n(s,Tl,l),J(V,s,l),n(s,ml,l),n(s,X,l),n(s,ul,l),J(H,s,l),n(s,hl,l),n(s,W,l),n(s,wl,l),J(R,s,l),n(s,Il,l),n(s,Y,l),n(s,Cl,l),J(x,s,l),n(s,xl,l),J(D,s,l),n(s,gl,l),n(s,F,l),n(s,dl,l),n(s,P,l),n(s,bl,l),n(s,K,l),n(s,fl,l),n(s,L,l),n(s,ql,l),J(g,s,l),n(s,$l,l),J(O,s,l),n(s,kl,l),n(s,ss,l),n(s,Al,l),n(s,ls,l),n(s,Ql,l),J(as,s,l),n(s,zl,l),n(s,ns,l),n(s,Bl,l),J(ts,s,l),n(s,vl,l),n(s,ps,l),n(s,Zl,l),J(Ms,s,l),n(s,Nl,l),J(es,s,l),n(s,_l,l),n(s,ys,l),n(s,El,l),J(is,s,l),n(s,Sl,l),J(js,s,l),n(s,Gl,l),n(s,Js,l),n(s,Vl,l),J(cs,s,l),n(s,Xl,l),n(s,rs,l),n(s,Hl,l),J(os,s,l),n(s,Wl,l),n(s,Us,l),n(s,Rl,l),J(Ts,s,l),n(s,Yl,l),n(s,ms,l),n(s,Dl,l),J(us,s,l),n(s,Fl,l),J(hs,s,l),n(s,Pl,l),n(s,ws,l),n(s,Kl,l),J(Is,s,l),n(s,Ll,l),J(Cs,s,l),n(s,Ol,l),n(s,xs,l),n(s,sa,l),J(gs,s,l),n(s,la,l),n(s,ds,l),n(s,aa,l),J(bs,s,l),n(s,na,l),n(s,fs,l),n(s,ta,l),J(qs,s,l),n(s,pa,l),J($s,s,l),n(s,Ma,l),n(s,ks,l),n(s,ea,l),J(As,s,l),n(s,ya,l),n(s,Qs,l),n(s,ia,l),J(zs,s,l),n(s,ja,l),J(Bs,s,l),n(s,Ja,l),n(s,vs,l),n(s,ca,l),J(d,s,l),n(s,ra,l),n(s,Zs,l),n(s,oa,l),J(Ns,s,l),n(s,Ua,l),n(s,_s,l),n(s,Ta,l),J(Es,s,l),n(s,ma,l),J(Ss,s,l),n(s,ua,l),n(s,Gs,l),n(s,ha,l),J(Vs,s,l),n(s,wa,l),n(s,Xs,l),n(s,Ia,l),J(Hs,s,l),n(s,Ca,l),J(Ws,s,l),n(s,xa,l),n(s,Rs,l),n(s,ga,l),J(Ys,s,l),n(s,da,l),n(s,Fs,l),ba=!0},p(s,[l]){const Ds={};l&2&&(Ds.$$scope={dirty:l,ctx:s}),I.$set(Ds);const rn={};l&2&&(rn.$$scope={dirty:l,ctx:s}),C.$set(rn);const on={};l&2&&(on.$$scope={dirty:l,ctx:s}),x.$set(on);const Un={};l&2&&(Un.$$scope={dirty:l,ctx:s}),g.$set(Un);const Tn={};l&2&&(Tn.$$scope={dirty:l,ctx:s}),d.$set(Tn)},i(s){ba||(c(b.$$.fragment,s),c(f.$$.fragment,s),c($.$$.fragment,s),c(I.$$.fragment,s),c(k.$$.fragment,s),c(C.$$.fragment,s),c(Q.$$.fragment,s),c(N.$$.fragment,s),c(E.$$.fragment,s),c(V.$$.fragment,s),c(H.$$.fragment,s),c(R.$$.fragment,s),c(x.$$.fragment,s),c(D.$$.fragment,s),c(g.$$.fragment,s),c(O.$$.fragment,s),c(as.$$.fragment,s),c(ts.$$.fragment,s),c(Ms.$$.fragment,s),c(es.$$.fragment,s),c(is.$$.fragment,s),c(js.$$.fragment,s),c(cs.$$.fragment,s),c(os.$$.fragment,s),c(Ts.$$.fragment,s),c(us.$$.fragment,s),c(hs.$$.fragment,s),c(Is.$$.fragment,s),c(Cs.$$.fragment,s),c(gs.$$.fragment,s),c(bs.$$.fragment,s),c(qs.$$.fragment,s),c($s.$$.fragment,s),c(As.$$.fragment,s),c(zs.$$.fragment,s),c(Bs.$$.fragment,s),c(d.$$.fragment,s),c(Ns.$$.fragment,s),c(Es.$$.fragment,s),c(Ss.$$.fragment,s),c(Vs.$$.fragment,s),c(Hs.$$.fragment,s),c(Ws.$$.fragment,s),c(Ys.$$.fragment,s),ba=!0)},o(s){r(b.$$.fragment,s),r(f.$$.fragment,s),r($.$$.fragment,s),r(I.$$.fragment,s),r(k.$$.fragment,s),r(C.$$.fragment,s),r(Q.$$.fragment,s),r(N.$$.fragment,s),r(E.$$.fragment,s),r(V.$$.fragment,s),r(H.$$.fragment,s),r(R.$$.fragment,s),r(x.$$.fragment,s),r(D.$$.fragment,s),r(g.$$.fragment,s),r(O.$$.fragment,s),r(as.$$.fragment,s),r(ts.$$.fragment,s),r(Ms.$$.fragment,s),r(es.$$.fragment,s),r(is.$$.fragment,s),r(js.$$.fragment,s),r(cs.$$.fragment,s),r(os.$$.fragment,s),r(Ts.$$.fragment,s),r(us.$$.fragment,s),r(hs.$$.fragment,s),r(Is.$$.fragment,s),r(Cs.$$.fragment,s),r(gs.$$.fragment,s),r(bs.$$.fragment,s),r(qs.$$.fragment,s),r($s.$$.fragment,s),r(As.$$.fragment,s),r(zs.$$.fragment,s),r(Bs.$$.fragment,s),r(d.$$.fragment,s),r(Ns.$$.fragment,s),r(Es.$$.fragment,s),r(Ss.$$.fragment,s),r(Vs.$$.fragment,s),r(Hs.$$.fragment,s),r(Ws.$$.fragment,s),r(Ys.$$.fragment,s),ba=!1},d(s){s&&(a(u),a(T),a(h),a(Ls),a(Os),a(q),a(sl),a(ll),a(al),a(nl),a(tl),a(A),a(pl),a(Ml),a(z),a(el),a(B),a(il),a(v),a(jl),a(Z),a(Jl),a(cl),a(_),a(rl),a(ol),a(S),a(Ul),a(G),a(Tl),a(ml),a(X),a(ul),a(hl),a(W),a(wl),a(Il),a(Y),a(Cl),a(xl),a(gl),a(F),a(dl),a(P),a(bl),a(K),a(fl),a(L),a(ql),a($l),a(kl),a(ss),a(Al),a(ls),a(Ql),a(zl),a(ns),a(Bl),a(vl),a(ps),a(Zl),a(Nl),a(_l),a(ys),a(El),a(Sl),a(Gl),a(Js),a(Vl),a(Xl),a(rs),a(Hl),a(Wl),a(Us),a(Rl),a(Yl),a(ms),a(Dl),a(Fl),a(Pl),a(ws),a(Kl),a(Ll),a(Ol),a(xs),a(sa),a(la),a(ds),a(aa),a(na),a(fs),a(ta),a(pa),a(Ma),a(ks),a(ea),a(ya),a(Qs),a(ia),a(ja),a(Ja),a(vs),a(ca),a(ra),a(Zs),a(oa),a(Ua),a(_s),a(Ta),a(ma),a(ua),a(Gs),a(ha),a(wa),a(Xs),a(Ia),a(Ca),a(xa),a(Rs),a(ga),a(da),a(Fs)),a(M),o(b,s),o(f,s),o($,s),o(I,s),o(k,s),o(C,s),o(Q,s),o(N,s),o(E,s),o(V,s),o(H,s),o(R,s),o(x,s),o(D,s),o(g,s),o(O,s),o(as,s),o(ts,s),o(Ms,s),o(es,s),o(is,s),o(js,s),o(cs,s),o(os,s),o(Ts,s),o(us,s),o(hs,s),o(Is,s),o(Cs,s),o(gs,s),o(bs,s),o(qs,s),o($s,s),o(As,s),o(zs,s),o(Bs,s),o(d,s),o(Ns,s),o(Es,s),o(Ss,s),o(Vs,s),o(Hs,s),o(Ws,s),o(Ys,s)}}}const _n='{"title":"Токенизация WordPiece","local":"wordpiece-tokenization","sections":[{"title":"Алгоритм обучения","local":"training-algorithm","sections":[],"depth":2},{"title":"Алгоритм токенизации","local":"tokenization-algorithm","sections":[],"depth":2},{"title":"Реализация WordPiece","local":"implementing-wordpiece","sections":[],"depth":2}],"depth":1}';function En(w){return In(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Yn extends Cn{constructor(M){super(),xn(this,M,En,Nn,wn,{})}}export{Yn as component};

Xet Storage Details

Size:
79.3 kB
·
Xet hash:
0eb184867a9448ab27df34c45d27492634f663a93097086e09d171b6d2a7cf67

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