Buckets:

rtrm's picture
download
raw
71 kB
import{s as Ua,o as ua,n as Ys}from"../chunks/scheduler.37c15a92.js";import{S as oa,i as Ta,g as r,s as t,r as M,A as ha,h as U,f as n,c as p,j as ca,u as y,x as o,k as ra,y as wa,a,v as j,d as i,t as J,w as c}from"../chunks/index.2bf4358c.js";import{T as Rs}from"../chunks/Tip.363c041f.js";import{Y as Ca}from"../chunks/Youtube.1e50a667.js";import{C as T}from"../chunks/CodeBlock.4e987730.js";import{C as xa}from"../chunks/CourseFloatingBanner.9ff4c771.js";import{H as In,E as ma}from"../chunks/getInferenceSnippets.24b50994.js";function ga(C){let e,h="💡 В этом разделе подробно рассматривается BPE, вплоть до демонстрации полной реализации. Вы можете пропустить этот раздел, если вам нужен только общий обзор алгоритма токенизации.";return{c(){e=r("p"),e.textContent=h},l(u){e=U(u,"P",{"data-svelte-h":!0}),o(e)!=="svelte-ndoz5j"&&(e.textContent=h)},m(u,w){a(u,e,w)},p:Ys,d(u){u&&n(e)}}}function Ia(C){let e,h="Токенизаторы GPT-2 и RoBERTa (которые довольно похожи) имеют умный способ решения этой проблемы: они рассматривают слова не как символы Unicode, а как байты. Таким образом, базовый словарь имеет небольшой размер (256), но все символы, которые вы можете придумать, все равно будут включены и не будут преобразованы в неизвестный токен. Этот трюк называется <em>byte-level BPE</em>.";return{c(){e=r("p"),e.innerHTML=h},l(u){e=U(u,"P",{"data-svelte-h":!0}),o(e)!=="svelte-lvpi6"&&(e.innerHTML=h)},m(u,w){a(u,e,w)},p:Ys,d(u){u&&n(e)}}}function fa(C){let e,h="✏️ <strong>Теперь ваша очередь!</strong> Как вы думаете, каким будет следующее правило слияния?";return{c(){e=r("p"),e.innerHTML=h},l(u){e=U(u,"P",{"data-svelte-h":!0}),o(e)!=="svelte-yvu3ie"&&(e.innerHTML=h)},m(u,w){a(u,e,w)},p:Ys,d(u){u&&n(e)}}}function $a(C){let e,h="✏️ <strong>Теперь ваша очередь!</strong> Как вы думаете, как будет токенизировано слово <code>&#39;unhug&#39;</code>?";return{c(){e=r("p"),e.innerHTML=h},l(u){e=U(u,"P",{"data-svelte-h":!0}),o(e)!=="svelte-36cf7u"&&(e.innerHTML=h)},m(u,w){a(u,e,w)},p:Ys,d(u){u&&n(e)}}}function da(C){let e,h="💡 Использование <code>train_new_from_iterator()</code> на том же корпусе не приведет к созданию точно такого же словаря. Это связано с тем, что при выборе наиболее частотной пары мы выбираем первую попавшуюся, в то время как библиотека 🤗 Tokenizers выбирает первую пару, основываясь на ее внутренних ID.";return{c(){e=r("p"),e.innerHTML=h},l(u){e=U(u,"P",{"data-svelte-h":!0}),o(e)!=="svelte-1gqxnsp"&&(e.innerHTML=h)},m(u,w){a(u,e,w)},p:Ys,d(u){u&&n(e)}}}function ba(C){let e,h="⚠️ Наша реализация будет выбрасывать ошибку при наличии неизвестного символа, поскольку мы ничего не сделали для их обработки. На самом деле в GPT-2 нет неизвестного токена (невозможно получить неизвестный символ при использовании BPE на уровне байтов), но здесь это может произойти, поскольку мы не включили все возможные байты в начальный словарь. Этот аспект BPE выходит за рамки данного раздела, поэтому мы опустили подробности.";return{c(){e=r("p"),e.textContent=h},l(u){e=U(u,"P",{"data-svelte-h":!0}),o(e)!=="svelte-955ecy"&&(e.textContent=h)},m(u,w){a(u,e,w)},p:Ys,d(u){u&&n(e)}}}function qa(C){let e,h,u,w,d,Ks,b,Fs,q,fn="Byte-Pair Encoding (BPE) изначально была разработана как алгоритм для сжатия текстов, а затем использовалась OpenAI для токенизации при предварительном обучении модели GPT. Она используется во многих моделях трансформеров, включая GPT, GPT-2, RoBERTa, BART и DeBERTa.",Ls,Q,Os,x,sl,k,ll,A,$n="Обучение BPE начинается с вычисления уникального набора слов, используемых в корпусе (после завершения этапов нормализации и предварительной токенизации), затем создается словарь, в который заносятся все символы, используемые для записи этих слов. В качестве очень простого примера предположим, что в нашем корпусе используются следующие пять слов:",nl,B,al,V,dn="Тогда базовым словарем будет <code>[&quot;b&quot;, &quot;g&quot;, &quot;h&quot;, &quot;n&quot;, &quot;p&quot;, &quot;s&quot;, &quot;u&quot;]</code>. В реальном мире этот базовый словарь будет содержать, как минимум, все символы ASCII, а возможно, и некоторые символы Unicode. Если в примере, который вы обрабатываете, используется символ, которого нет в обучающем корпусе, этот символ будет преобразован в неизвестный токен. Это одна из причин, по которой многие модели NLP очень плохо анализируют контент с эмоджи, например.",tl,m,pl,E,bn="После получения базового словаря мы добавляем новые токены, пока не достигнем желаемого объема словаря, обучаясь <em>слияниям</em>, которые представляют собой правила слияния двух элементов существующего словаря в новый. Таким образом, в начале эти слияния будут создавать токены с двумя символами, а затем, по мере обучения, более длинные подслова.",el,Z,qn="На любом шаге обучения токенизатора алгоритм BPE будет искать наиболее частую пару существующих токенов (под “парой” здесь понимаются два последовательных токена в слове). Эта наиболее часто встречающаяся пара и будет объединена, после чего все повторяется для следующего шага.",Ml,z,Qn="Возвращаясь к нашему предыдущему примеру, предположим, что слова имеют следующую частоту:",yl,G,jl,S,kn="значение <code>&quot; hug&quot;</code> встречалось в корпусе 10 раз, <code>&quot;pug&quot;</code> - 5 раз, <code>&quot;pun&quot;</code> - 12 раз, <code>&quot;bun&quot;</code> - 4 раза, и <code>&quot;hugs&quot;</code> - 5 раз. Мы начинаем обучение с разбиения каждого слова на части символов (те, которые формируют наш начальный словарь), чтобы мы могли рассматривать каждое слово как список токенов:",il,_,Jl,N,An="Затем мы посмотрим на пары. Пара <code>(&quot;h&quot;, &quot;u&quot;)</code> присутствует в словах <code>&quot;hug&quot;</code> и <code>&quot;hugs&quot;</code>, всего 15 раз в корпусе. Однако это не самая частая пара: эта честь принадлежит <code>(&quot;u&quot;, &quot;g&quot;)</code>, которая присутствует в словах <code>&quot;hug&quot;</code>, <code>&quot;pug&quot;</code> и <code>&quot;hugs&quot;</code>, в общей сложности 20 раз в словаре.",cl,v,Bn="Таким образом, первое правило слияния, выученное токенизатором, - <code>(&quot;u&quot;, &quot;g&quot;) -&gt; &quot;ug&quot;</code>, что означает, что <code>&quot;ug&quot;</code> будет добавлено в словарь, и эта пара должна быть объединена во всех словах корпуса. В конце этого этапа словарь и корпус выглядят следующим образом:",rl,H,Ul,X,Vn="Теперь у нас есть несколько пар, в результате которых получается токен длиннее двух символов: например, пара <code>(&quot;h&quot;, &quot;ug&quot;)</code> (встречается в корпусе 15 раз). Самая частая пара на этом этапе - <code>(&quot;u&quot;, &quot;n&quot;)</code>, однако она встречается в корпусе 16 раз, поэтому второе выученное правило слияния - <code>(&quot;u&quot;, &quot;n&quot;) -&gt; &quot;un&quot;</code>. Добавив это в словарь и объединив все существующие вхождения, мы получаем:",ul,D,ol,W,En="Теперь наиболее частой парой является <code>(&quot;h&quot;, &quot;ug&quot;)</code>, поэтому мы изучаем правило слияния <code>(&quot;h&quot;, &quot;ug&quot;) -&gt; &quot;hug&quot;</code>, что дает нам первый трехбуквенный токен. После слияния корпус выглядит следующим образом:",Tl,R,hl,Y,Zn="И продолжаем в том же духе, пока не достигнем желаемого размера словаря.",wl,g,Cl,P,xl,K,zn="Токенизация следует за процессом обучения в том смысле, что новые входные данные подвергаются токенизации путем применения следующих шагов:",ml,F,Gn="<li>Нормализация</li> <li>Предварительная токенизация</li> <li>Разделение слов на отдельные символы</li> <li>Применение правил слияния, изученных по порядку, к этим частям</li>",gl,L,Sn="Возьмем пример, который мы использовали во время обучения, с тремя выученными правилами слияния:",Il,O,fl,ss,_n="Слово <code>&quot;bug&quot;</code> будет токенизировано как <code>[&quot;b&quot;, &quot;ug&quot;]</code>. Слово <code>&quot;mug&quot;</code>, однако, будет токенизировано как <code>[&quot;[UNK]&quot;, &quot;ug&quot;]</code>, поскольку буква <code>&quot;m&quot;</code> отсутствует в базовом словаре. Аналогично, слово <code>&quot;thug&quot; будет токенизировано как </code>[”[UNK]”, “hug”]<code>: буква </code>“t” отсутствует в базовом словаре, и применение правил слияния приводит сначала к слиянию <code>&quot;u&quot;</code> и <code>&quot;g&quot;</code>, а затем к слиянию <code>&quot;h&quot;</code> и <code>&quot;ug&quot;</code>.",$l,I,dl,ls,bl,ns,Nn="Теперь давайте посмотрим на реализацию алгоритма BPE. Это не будет оптимизированная версия, которую вы сможете использовать на большом корпусе; мы просто хотим показать вам код, чтобы вы могли лучше понять алгоритм.",ql,as,vn="Для начала нам нужен корпус текста, поэтому давайте создадим простой корпус с несколькими предложениями:",Ql,ts,kl,ps,Hn="Далее нам нужно предварительно токенизировать корпус в слова. Поскольку мы воспроизводим токенизатор BPE (например, GPT-2), для предварительной токенизации мы будем использовать токенизатор <code>gpt2</code>:",Al,es,Bl,Ms,Xn="Затем мы вычисляем частоту каждого слова в корпусе, как и при предварительной токенизации:",Vl,ys,El,js,Zl,is,Dn="Следующий шаг - составление базового словаря, состоящего из всех символов, используемых в корпусе:",zl,Js,Gl,cs,Sl,rs,Wn="Мы также добавляем специальные токены, используемые моделью, в начало этого словаря. В случае GPT-2 единственным специальным токеном является <code>&quot;&lt;|endoftext|&gt;&quot;</code>:",_l,Us,Nl,us,Rn="Теперь нам нужно разделить каждое слово на отдельные символы, чтобы можно было начать обучение:",vl,os,Hl,Ts,Yn="Теперь, когда мы готовы к обучению, давайте напишем функцию, которая вычисляет частоту каждой пары. Нам нужно будет использовать ее на каждом шаге обучения:",Xl,hs,Dl,ws,Pn="Давайте посмотрим на часть этого словаря после первых разделений:",Wl,Cs,Rl,xs,Yl,ms,Kn="Теперь, чтобы найти наиболее часто встречающуюся пару, нужно всего лишь сделать быстрый цикл:",Pl,gs,Kl,Is,Fl,fs,Fn="Итак, первое слияние, которое нужно выучить, это <code>(&#39;Ġ&#39;, &#39;t&#39;) -&gt; &#39;Ġt&#39;</code>, и мы добавляем <code>&#39;Ġt&#39;</code> в словарь:",Ll,$s,Ol,ds,Ln="Чтобы продолжить, нам нужно применить это объединение в нашем экземпляре <code>splits</code> словаря. Давайте напишем для этого еще одну функцию:",sn,bs,ln,qs,On="И мы можем посмотреть на результат первого слияния:",nn,Qs,an,ks,tn,As,sa="Теперь у нас есть все, что нужно, чтобы проитерироваться до тех пор, пока мы не выучим все слияния, которые нам нужны. Пусть размер словаря будет 50:",pn,Bs,en,Vs,la="В результате мы выучили 19 правил слияния (исходный словарь имел размер 31 - 30 символов в алфавите плюс специальный токен):",Mn,Es,yn,Zs,jn,zs,na="А словарь состоит из специального токена, начального алфавита и всех результатов слияния:",Jn,Gs,cn,Ss,rn,f,Un,_s,aa="Чтобы токенизировать новый текст, мы предварительно токенизируем его, разбиваем на части, а затем применяем все изученные правила слияния:",un,Ns,on,vs,ta="Мы можем попробовать это на любом тексте, состоящем из символов алфавита:",Tn,Hs,hn,Xs,wn,$,Cn,Ds,pa="Вот и все об алгоритме BPE! Далее мы рассмотрим WordPiece.",xn,Ws,mn,Ps,gn;return d=new In({props:{title:"Токенизация Byte-Pair Encoding",local:"byte-pair-encoding-tokenization",headingTag:"h1"}}),b=new xa({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/section5.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter6/section5.ipynb"}]}}),Q=new Ca({props:{id:"HEikzVL-lZU"}}),x=new Rs({props:{$$slots:{default:[ga]},$$scope:{ctx:C}}}),k=new In({props:{title:"Алгоритм обучения",local:"training-algorithm",headingTag:"h2"}}),B=new T({props:{code:"JTIyaHVnJTIyJTJDJTIwJTIycHVnJTIyJTJDJTIwJTIycHVuJTIyJTJDJTIwJTIyYnVuJTIyJTJDJTIwJTIyaHVncyUyMg==",highlighted:'<span class="hljs-string">&quot;hug&quot;</span>, <span class="hljs-string">&quot;pug&quot;</span>, <span class="hljs-string">&quot;pun&quot;</span>, <span class="hljs-string">&quot;bun&quot;</span>, <span class="hljs-string">&quot;hugs&quot;</span>',wrap:!1}}),m=new Rs({props:{$$slots:{default:[Ia]},$$scope:{ctx:C}}}),G=new T({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}}),_=new T({props:{code:"KCUyMmglMjIlMjAlMjJ1JTIyJTIwJTIyZyUyMiUyQyUyMDEwKSUyQyUyMCglMjJwJTIyJTIwJTIydSUyMiUyMCUyMmclMjIlMkMlMjA1KSUyQyUyMCglMjJwJTIyJTIwJTIydSUyMiUyMCUyMm4lMjIlMkMlMjAxMiklMkMlMjAoJTIyYiUyMiUyMCUyMnUlMjIlMjAlMjJuJTIyJTJDJTIwNCklMkMlMjAoJTIyaCUyMiUyMCUyMnUlMjIlMjAlMjJnJTIyJTIwJTIycyUyMiUyQyUyMDUp",highlighted:'(<span class="hljs-string">&quot;h&quot;</span> <span class="hljs-string">&quot;u&quot;</span> <span class="hljs-string">&quot;g&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-number">10</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">&quot;p&quot;</span> <span class="hljs-string">&quot;u&quot;</span> <span class="hljs-string">&quot;g&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-number">5</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">&quot;p&quot;</span> <span class="hljs-string">&quot;u&quot;</span> <span class="hljs-string">&quot;n&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-number">12</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">&quot;b&quot;</span> <span class="hljs-string">&quot;u&quot;</span> <span class="hljs-string">&quot;n&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-number">4</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">&quot;h&quot;</span> <span class="hljs-string">&quot;u&quot;</span> <span class="hljs-string">&quot;g&quot;</span> <span class="hljs-string">&quot;s&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-number">5</span>)',wrap:!1}}),H=new T({props:{code:"Vm9jYWJ1bGFyeSUzQSUyMCU1QiUyMmIlMjIlMkMlMjAlMjJnJTIyJTJDJTIwJTIyaCUyMiUyQyUyMCUyMm4lMjIlMkMlMjAlMjJwJTIyJTJDJTIwJTIycyUyMiUyQyUyMCUyMnUlMjIlMkMlMjAlMjJ1ZyUyMiU1RCUwQUNvcnB1cyUzQSUyMCglMjJoJTIyJTIwJTIydWclMjIlMkMlMjAxMCklMkMlMjAoJTIycCUyMiUyMCUyMnVnJTIyJTJDJTIwNSklMkMlMjAoJTIycCUyMiUyMCUyMnUlMjIlMjAlMjJuJTIyJTJDJTIwMTIpJTJDJTIwKCUyMmIlMjIlMjAlMjJ1JTIyJTIwJTIybiUyMiUyQyUyMDQpJTJDJTIwKCUyMmglMjIlMjAlMjJ1ZyUyMiUyMCUyMnMlMjIlMkMlMjA1KQ==",highlighted:`<span class="hljs-symbol">Vocabulary:</span> [<span class="hljs-string">&quot;b&quot;</span>, <span class="hljs-string">&quot;g&quot;</span>, <span class="hljs-string">&quot;h&quot;</span>, <span class="hljs-string">&quot;n&quot;</span>, <span class="hljs-string">&quot;p&quot;</span>, <span class="hljs-string">&quot;s&quot;</span>, <span class="hljs-string">&quot;u&quot;</span>, <span class="hljs-string">&quot;ug&quot;</span>]
<span class="hljs-symbol">Corpus:</span> (<span class="hljs-string">&quot;h&quot;</span> <span class="hljs-string">&quot;ug&quot;</span>, <span class="hljs-number">10</span>), (<span class="hljs-string">&quot;p&quot;</span> <span class="hljs-string">&quot;ug&quot;</span>, <span class="hljs-number">5</span>), (<span class="hljs-string">&quot;p&quot;</span> <span class="hljs-string">&quot;u&quot;</span> <span class="hljs-string">&quot;n&quot;</span>, <span class="hljs-number">12</span>), (<span class="hljs-string">&quot;b&quot;</span> <span class="hljs-string">&quot;u&quot;</span> <span class="hljs-string">&quot;n&quot;</span>, <span class="hljs-number">4</span>), (<span class="hljs-string">&quot;h&quot;</span> <span class="hljs-string">&quot;ug&quot;</span> <span class="hljs-string">&quot;s&quot;</span>, <span class="hljs-number">5</span>)`,wrap:!1}}),D=new T({props:{code:"Vm9jYWJ1bGFyeSUzQSUyMCU1QiUyMmIlMjIlMkMlMjAlMjJnJTIyJTJDJTIwJTIyaCUyMiUyQyUyMCUyMm4lMjIlMkMlMjAlMjJwJTIyJTJDJTIwJTIycyUyMiUyQyUyMCUyMnUlMjIlMkMlMjAlMjJ1ZyUyMiUyQyUyMCUyMnVuJTIyJTVEJTBBQ29ycHVzJTNBJTIwKCUyMmglMjIlMjAlMjJ1ZyUyMiUyQyUyMDEwKSUyQyUyMCglMjJwJTIyJTIwJTIydWclMjIlMkMlMjA1KSUyQyUyMCglMjJwJTIyJTIwJTIydW4lMjIlMkMlMjAxMiklMkMlMjAoJTIyYiUyMiUyMCUyMnVuJTIyJTJDJTIwNCklMkMlMjAoJTIyaCUyMiUyMCUyMnVnJTIyJTIwJTIycyUyMiUyQyUyMDUp",highlighted:`<span class="hljs-symbol">Vocabulary:</span> [<span class="hljs-string">&quot;b&quot;</span>, <span class="hljs-string">&quot;g&quot;</span>, <span class="hljs-string">&quot;h&quot;</span>, <span class="hljs-string">&quot;n&quot;</span>, <span class="hljs-string">&quot;p&quot;</span>, <span class="hljs-string">&quot;s&quot;</span>, <span class="hljs-string">&quot;u&quot;</span>, <span class="hljs-string">&quot;ug&quot;</span>, <span class="hljs-string">&quot;un&quot;</span>]
<span class="hljs-symbol">Corpus:</span> (<span class="hljs-string">&quot;h&quot;</span> <span class="hljs-string">&quot;ug&quot;</span>, <span class="hljs-number">10</span>), (<span class="hljs-string">&quot;p&quot;</span> <span class="hljs-string">&quot;ug&quot;</span>, <span class="hljs-number">5</span>), (<span class="hljs-string">&quot;p&quot;</span> <span class="hljs-string">&quot;un&quot;</span>, <span class="hljs-number">12</span>), (<span class="hljs-string">&quot;b&quot;</span> <span class="hljs-string">&quot;un&quot;</span>, <span class="hljs-number">4</span>), (<span class="hljs-string">&quot;h&quot;</span> <span class="hljs-string">&quot;ug&quot;</span> <span class="hljs-string">&quot;s&quot;</span>, <span class="hljs-number">5</span>)`,wrap:!1}}),R=new T({props:{code:"Vm9jYWJ1bGFyeSUzQSUyMCU1QiUyMmIlMjIlMkMlMjAlMjJnJTIyJTJDJTIwJTIyaCUyMiUyQyUyMCUyMm4lMjIlMkMlMjAlMjJwJTIyJTJDJTIwJTIycyUyMiUyQyUyMCUyMnUlMjIlMkMlMjAlMjJ1ZyUyMiUyQyUyMCUyMnVuJTIyJTJDJTIwJTIyaHVnJTIyJTVEJTBBQ29ycHVzJTNBJTIwKCUyMmh1ZyUyMiUyQyUyMDEwKSUyQyUyMCglMjJwJTIyJTIwJTIydWclMjIlMkMlMjA1KSUyQyUyMCglMjJwJTIyJTIwJTIydW4lMjIlMkMlMjAxMiklMkMlMjAoJTIyYiUyMiUyMCUyMnVuJTIyJTJDJTIwNCklMkMlMjAoJTIyaHVnJTIyJTIwJTIycyUyMiUyQyUyMDUp",highlighted:`<span class="hljs-symbol">Vocabulary:</span> [<span class="hljs-string">&quot;b&quot;</span>, <span class="hljs-string">&quot;g&quot;</span>, <span class="hljs-string">&quot;h&quot;</span>, <span class="hljs-string">&quot;n&quot;</span>, <span class="hljs-string">&quot;p&quot;</span>, <span class="hljs-string">&quot;s&quot;</span>, <span class="hljs-string">&quot;u&quot;</span>, <span class="hljs-string">&quot;ug&quot;</span>, <span class="hljs-string">&quot;un&quot;</span>, <span class="hljs-string">&quot;hug&quot;</span>]
<span class="hljs-symbol">Corpus:</span> (<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;ug&quot;</span>, <span class="hljs-number">5</span>), (<span class="hljs-string">&quot;p&quot;</span> <span class="hljs-string">&quot;un&quot;</span>, <span class="hljs-number">12</span>), (<span class="hljs-string">&quot;b&quot;</span> <span class="hljs-string">&quot;un&quot;</span>, <span class="hljs-number">4</span>), (<span class="hljs-string">&quot;hug&quot;</span> <span class="hljs-string">&quot;s&quot;</span>, <span class="hljs-number">5</span>)`,wrap:!1}}),g=new Rs({props:{$$slots:{default:[fa]},$$scope:{ctx:C}}}),P=new In({props:{title:"Алгоритм токенизации",local:"tokenization-algorithm",headingTag:"h2"}}),O=new T({props:{code:"KCUyMnUlMjIlMkMlMjAlMjJnJTIyKSUyMC0lM0UlMjAlMjJ1ZyUyMiUwQSglMjJ1JTIyJTJDJTIwJTIybiUyMiklMjAtJTNFJTIwJTIydW4lMjIlMEEoJTIyaCUyMiUyQyUyMCUyMnVnJTIyKSUyMC0lM0UlMjAlMjJodWclMjI=",highlighted:`<span class="hljs-function"><span class="hljs-params">(<span class="hljs-string">&quot;u&quot;</span>, <span class="hljs-string">&quot;g&quot;</span>)</span> -&gt;</span> <span class="hljs-string">&quot;ug&quot;</span>
<span class="hljs-function"><span class="hljs-params">(<span class="hljs-string">&quot;u&quot;</span>, <span class="hljs-string">&quot;n&quot;</span>)</span> -&gt;</span> <span class="hljs-string">&quot;un&quot;</span>
<span class="hljs-function"><span class="hljs-params">(<span class="hljs-string">&quot;h&quot;</span>, <span class="hljs-string">&quot;ug&quot;</span>)</span> -&gt;</span> <span class="hljs-string">&quot;hug&quot;</span>`,wrap:!1}}),I=new Rs({props:{$$slots:{default:[$a]},$$scope:{ctx:C}}}),ls=new In({props:{title:"Реализация BPE",local:"implementing-bpe",headingTag:"h2"}}),ts=new T({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}}),es=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJncHQyJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;gpt2&quot;</span>)`,wrap:!1}}),ys=new T({props:{code:"ZnJvbSUyMGNvbGxlY3Rpb25zJTIwaW1wb3J0JTIwZGVmYXVsdGRpY3QlMEElMEF3b3JkX2ZyZXFzJTIwJTNEJTIwZGVmYXVsdGRpY3QoaW50KSUwQSUwQWZvciUyMHRleHQlMjBpbiUyMGNvcnB1cyUzQSUwQSUyMCUyMCUyMCUyMHdvcmRzX3dpdGhfb2Zmc2V0cyUyMCUzRCUyMHRva2VuaXplci5iYWNrZW5kX3Rva2VuaXplci5wcmVfdG9rZW5pemVyLnByZV90b2tlbml6ZV9zdHIodGV4dCklMEElMjAlMjAlMjAlMjBuZXdfd29yZHMlMjAlM0QlMjAlNUJ3b3JkJTIwZm9yJTIwd29yZCUyQyUyMG9mZnNldCUyMGluJTIwd29yZHNfd2l0aF9vZmZzZXRzJTVEJTBBJTIwJTIwJTIwJTIwZm9yJTIwd29yZCUyMGluJTIwbmV3X3dvcmRzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd29yZF9mcmVxcyU1QndvcmQlNUQlMjAlMkIlM0QlMjAxJTBBJTBBcHJpbnQod29yZF9mcmVxcyk=",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>
<span class="hljs-built_in">print</span>(word_freqs)`,wrap:!1}}),js=new T({props:{code:"ZGVmYXVsdGRpY3QoaW50JTJDJTIwJTdCJ1RoaXMnJTNBJTIwMyUyQyUyMCclQzQlQTBpcyclM0ElMjAyJTJDJTIwJyVDNCVBMHRoZSclM0ElMjAxJTJDJTIwJyVDNCVBMEh1Z2dpbmcnJTNBJTIwMSUyQyUyMCclQzQlQTBGYWNlJyUzQSUyMDElMkMlMjAnJUM0JUEwQ291cnNlJyUzQSUyMDElMkMlMjAnLiclM0ElMjA0JTJDJTIwJyVDNCVBMGNoYXB0ZXInJTNBJTIwMSUyQyUwQSUyMCUyMCUyMCUyMCclQzQlQTBhYm91dCclM0ElMjAxJTJDJTIwJyVDNCVBMHRva2VuaXphdGlvbiclM0ElMjAxJTJDJTIwJyVDNCVBMHNlY3Rpb24nJTNBJTIwMSUyQyUyMCclQzQlQTBzaG93cyclM0ElMjAxJTJDJTIwJyVDNCVBMHNldmVyYWwnJTNBJTIwMSUyQyUyMCclQzQlQTB0b2tlbml6ZXInJTNBJTIwMSUyQyUyMCclQzQlQTBhbGdvcml0aG1zJyUzQSUyMDElMkMlMEElMjAlMjAlMjAlMjAnSG9wZWZ1bGx5JyUzQSUyMDElMkMlMjAnJTJDJyUzQSUyMDElMkMlMjAnJUM0JUEweW91JyUzQSUyMDElMkMlMjAnJUM0JUEwd2lsbCclM0ElMjAxJTJDJTIwJyVDNCVBMGJlJyUzQSUyMDElMkMlMjAnJUM0JUEwYWJsZSclM0ElMjAxJTJDJTIwJyVDNCVBMHRvJyUzQSUyMDElMkMlMjAnJUM0JUEwdW5kZXJzdGFuZCclM0ElMjAxJTJDJTIwJyVDNCVBMGhvdyclM0ElMjAxJTJDJTBBJTIwJTIwJTIwJTIwJyVDNCVBMHRoZXknJTNBJTIwMSUyQyUyMCclQzQlQTBhcmUnJTNBJTIwMSUyQyUyMCclQzQlQTB0cmFpbmVkJyUzQSUyMDElMkMlMjAnJUM0JUEwYW5kJyUzQSUyMDElMkMlMjAnJUM0JUEwZ2VuZXJhdGUnJTNBJTIwMSUyQyUyMCclQzQlQTB0b2tlbnMnJTNBJTIwMSU3RCk=",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}}),Js=new T({props:{code:"YWxwaGFiZXQlMjAlM0QlMjAlNUIlNUQlMEElMEFmb3IlMjB3b3JkJTIwaW4lMjB3b3JkX2ZyZXFzLmtleXMoKSUzQSUwQSUyMCUyMCUyMCUyMGZvciUyMGxldHRlciUyMGluJTIwd29yZCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwbGV0dGVyJTIwbm90JTIwaW4lMjBhbHBoYWJldCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGFscGhhYmV0LmFwcGVuZChsZXR0ZXIpJTBBYWxwaGFiZXQuc29ydCgpJTBBJTBBcHJpbnQoYWxwaGFiZXQp",highlighted:`alphabet = []
<span class="hljs-keyword">for</span> word <span class="hljs-keyword">in</span> word_freqs.keys():
<span class="hljs-keyword">for</span> letter <span class="hljs-keyword">in</span> word:
<span class="hljs-keyword">if</span> letter <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> alphabet:
alphabet.append(letter)
alphabet.sort()
<span class="hljs-built_in">print</span>(alphabet)`,wrap:!1}}),cs=new T({props:{code:"JTVCJTIwJyUyQyclMkMlMjAnLiclMkMlMjAnQyclMkMlMjAnRiclMkMlMjAnSCclMkMlMjAnVCclMkMlMjAnYSclMkMlMjAnYiclMkMlMjAnYyclMkMlMjAnZCclMkMlMjAnZSclMkMlMjAnZiclMkMlMjAnZyclMkMlMjAnaCclMkMlMjAnaSclMkMlMjAnayclMkMlMjAnbCclMkMlMjAnbSclMkMlMjAnbiclMkMlMjAnbyclMkMlMjAncCclMkMlMjAnciclMkMlMjAncyclMkMlMEElMjAlMjAndCclMkMlMjAndSclMkMlMjAndiclMkMlMjAndyclMkMlMjAneSclMkMlMjAneiclMkMlMjAnJUM0JUEwJyU1RA==",highlighted:`[ <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;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>]`,wrap:!1}}),Us=new T({props:{code:"dm9jYWIlMjAlM0QlMjAlNUIlMjIlM0MlN0NlbmRvZnRleHQlN0MlM0UlMjIlNUQlMjAlMkIlMjBhbHBoYWJldC5jb3B5KCk=",highlighted:'vocab = [<span class="hljs-string">&quot;&lt;|endoftext|&gt;&quot;</span>] + alphabet.copy()',wrap:!1}}),os=new T({props:{code:"c3BsaXRzJTIwJTNEJTIwJTdCd29yZCUzQSUyMCU1QmMlMjBmb3IlMjBjJTIwaW4lMjB3b3JkJTVEJTIwZm9yJTIwd29yZCUyMGluJTIwd29yZF9mcmVxcy5rZXlzKCklN0Q=",highlighted:'splits = {word: [c <span class="hljs-keyword">for</span> c <span class="hljs-keyword">in</span> word] <span class="hljs-keyword">for</span> word <span class="hljs-keyword">in</span> word_freqs.keys()}',wrap:!1}}),hs=new T({props:{code:"ZGVmJTIwY29tcHV0ZV9wYWlyX2ZyZXFzKHNwbGl0cyklM0ElMEElMjAlMjAlMjAlMjBwYWlyX2ZyZXFzJTIwJTNEJTIwZGVmYXVsdGRpY3QoaW50KSUwQSUyMCUyMCUyMCUyMGZvciUyMHdvcmQlMkMlMjBmcmVxJTIwaW4lMjB3b3JkX2ZyZXFzLml0ZW1zKCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzcGxpdCUyMCUzRCUyMHNwbGl0cyU1QndvcmQlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGxlbihzcGxpdCklMjAlM0QlM0QlMjAxJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29udGludWUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBpJTIwaW4lMjByYW5nZShsZW4oc3BsaXQpJTIwLSUyMDEpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcGFpciUyMCUzRCUyMChzcGxpdCU1QmklNUQlMkMlMjBzcGxpdCU1QmklMjAlMkIlMjAxJTVEKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHBhaXJfZnJlcXMlNUJwYWlyJTVEJTIwJTJCJTNEJTIwZnJlcSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMHBhaXJfZnJlcXM=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">compute_pair_freqs</span>(<span class="hljs-params">splits</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>:
<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>])
pair_freqs[pair] += freq
<span class="hljs-keyword">return</span> pair_freqs`,wrap:!1}}),Cs=new T({props:{code:"cGFpcl9mcmVxcyUyMCUzRCUyMGNvbXB1dGVfcGFpcl9mcmVxcyhzcGxpdHMpJTBBJTBBZm9yJTIwaSUyQyUyMGtleSUyMGluJTIwZW51bWVyYXRlKHBhaXJfZnJlcXMua2V5cygpKSUzQSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjIlN0JrZXklN0QlM0ElMjAlN0JwYWlyX2ZyZXFzJTVCa2V5JTVEJTdEJTIyKSUwQSUyMCUyMCUyMCUyMGlmJTIwaSUyMCUzRSUzRCUyMDUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBicmVhaw==",highlighted:`pair_freqs = compute_pair_freqs(splits)
<span class="hljs-keyword">for</span> i, key <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(pair_freqs.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_freqs[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}}),xs=new T({props:{code:"KCdUJyUyQyUyMCdoJyklM0ElMjAzJTBBKCdoJyUyQyUyMCdpJyklM0ElMjAzJTBBKCdpJyUyQyUyMCdzJyklM0ElMjA1JTBBKCclQzQlQTAnJTJDJTIwJ2knKSUzQSUyMDIlMEEoJyVDNCVBMCclMkMlMjAndCcpJTNBJTIwNyUwQSgndCclMkMlMjAnaCcpJTNBJTIwMw==",highlighted:`(<span class="hljs-string">&#x27;T&#x27;</span>, <span class="hljs-string">&#x27;h&#x27;</span>): <span class="hljs-number">3</span>
(<span class="hljs-string">&#x27;h&#x27;</span>, <span class="hljs-string">&#x27;i&#x27;</span>): <span class="hljs-number">3</span>
(<span class="hljs-string">&#x27;i&#x27;</span>, <span class="hljs-string">&#x27;s&#x27;</span>): <span class="hljs-number">5</span>
(<span class="hljs-string">&#x27;Ġ&#x27;</span>, <span class="hljs-string">&#x27;i&#x27;</span>): <span class="hljs-number">2</span>
(<span class="hljs-string">&#x27;Ġ&#x27;</span>, <span class="hljs-string">&#x27;t&#x27;</span>): <span class="hljs-number">7</span>
(<span class="hljs-string">&#x27;t&#x27;</span>, <span class="hljs-string">&#x27;h&#x27;</span>): <span class="hljs-number">3</span>`,wrap:!1}}),gs=new T({props:{code:"YmVzdF9wYWlyJTIwJTNEJTIwJTIyJTIyJTBBbWF4X2ZyZXElMjAlM0QlMjBOb25lJTBBJTBBZm9yJTIwcGFpciUyQyUyMGZyZXElMjBpbiUyMHBhaXJfZnJlcXMuaXRlbXMoKSUzQSUwQSUyMCUyMCUyMCUyMGlmJTIwbWF4X2ZyZXElMjBpcyUyME5vbmUlMjBvciUyMG1heF9mcmVxJTIwJTNDJTIwZnJlcSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJlc3RfcGFpciUyMCUzRCUyMHBhaXIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtYXhfZnJlcSUyMCUzRCUyMGZyZXElMEElMEFwcmludChiZXN0X3BhaXIlMkMlMjBtYXhfZnJlcSk=",highlighted:`best_pair = <span class="hljs-string">&quot;&quot;</span>
max_freq = <span class="hljs-literal">None</span>
<span class="hljs-keyword">for</span> pair, freq <span class="hljs-keyword">in</span> pair_freqs.items():
<span class="hljs-keyword">if</span> max_freq <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span> <span class="hljs-keyword">or</span> max_freq &lt; freq:
best_pair = pair
max_freq = freq
<span class="hljs-built_in">print</span>(best_pair, max_freq)`,wrap:!1}}),Is=new T({props:{code:"KCclQzQlQTAnJTJDJTIwJ3QnKSUyMDc=",highlighted:'(<span class="hljs-string">&#x27;Ġ&#x27;</span>, <span class="hljs-string">&#x27;t&#x27;</span>) <span class="hljs-number">7</span>',wrap:!1}}),$s=new T({props:{code:"bWVyZ2VzJTIwJTNEJTIwJTdCKCUyMiVDNCVBMCUyMiUyQyUyMCUyMnQlMjIpJTNBJTIwJTIyJUM0JUEwdCUyMiU3RCUwQXZvY2FiLmFwcGVuZCglMjIlQzQlQTB0JTIyKQ==",highlighted:`merges = {(<span class="hljs-string">&quot;Ġ&quot;</span>, <span class="hljs-string">&quot;t&quot;</span>): <span class="hljs-string">&quot;Ġt&quot;</span>}
vocab.append(<span class="hljs-string">&quot;Ġt&quot;</span>)`,wrap:!1}}),bs=new T({props:{code:"ZGVmJTIwbWVyZ2VfcGFpcihhJTJDJTIwYiUyQyUyMHNwbGl0cyklM0ElMEElMjAlMjAlMjAlMjBmb3IlMjB3b3JkJTIwaW4lMjB3b3JkX2ZyZXFzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3BsaXQlMjAlM0QlMjBzcGxpdHMlNUJ3b3JkJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBsZW4oc3BsaXQpJTIwJTNEJTNEJTIwMSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbnRpbnVlJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaSUyMCUzRCUyMDAlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB3aGlsZSUyMGklMjAlM0MlMjBsZW4oc3BsaXQpJTIwLSUyMDElM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMHNwbGl0JTVCaSU1RCUyMCUzRCUzRCUyMGElMjBhbmQlMjBzcGxpdCU1QmklMjAlMkIlMjAxJTVEJTIwJTNEJTNEJTIwYiUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNwbGl0JTIwJTNEJTIwc3BsaXQlNUIlM0FpJTVEJTIwJTJCJTIwJTVCYSUyMCUyQiUyMGIlNUQlMjAlMkIlMjBzcGxpdCU1QmklMjAlMkIlMjAyJTIwJTNBJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZWxzZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGklMjAlMkIlM0QlMjAxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3BsaXRzJTVCd29yZCU1RCUyMCUzRCUyMHNwbGl0JTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwc3BsaXRz",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:
split = split[:i] + [a + b] + 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 T({props:{code:"c3BsaXRzJTIwJTNEJTIwbWVyZ2VfcGFpciglMjIlQzQlQTAlMjIlMkMlMjAlMjJ0JTIyJTJDJTIwc3BsaXRzKSUwQXByaW50KHNwbGl0cyU1QiUyMiVDNCVBMHRyYWluZWQlMjIlNUQp",highlighted:`splits = merge_pair(<span class="hljs-string">&quot;Ġ&quot;</span>, <span class="hljs-string">&quot;t&quot;</span>, splits)
<span class="hljs-built_in">print</span>(splits[<span class="hljs-string">&quot;Ġtrained&quot;</span>])`,wrap:!1}}),ks=new T({props:{code:"JTVCJyVDNCVBMHQnJTJDJTIwJ3InJTJDJTIwJ2EnJTJDJTIwJ2knJTJDJTIwJ24nJTJDJTIwJ2UnJTJDJTIwJ2QnJTVE",highlighted:'[<span class="hljs-string">&#x27;Ġt&#x27;</span>, <span class="hljs-string">&#x27;r&#x27;</span>, <span class="hljs-string">&#x27;a&#x27;</span>, <span class="hljs-string">&#x27;i&#x27;</span>, <span class="hljs-string">&#x27;n&#x27;</span>, <span class="hljs-string">&#x27;e&#x27;</span>, <span class="hljs-string">&#x27;d&#x27;</span>]',wrap:!1}}),Bs=new T({props:{code:"dm9jYWJfc2l6ZSUyMCUzRCUyMDUwJTBBJTBBd2hpbGUlMjBsZW4odm9jYWIpJTIwJTNDJTIwdm9jYWJfc2l6ZSUzQSUwQSUyMCUyMCUyMCUyMHBhaXJfZnJlcXMlMjAlM0QlMjBjb21wdXRlX3BhaXJfZnJlcXMoc3BsaXRzKSUwQSUyMCUyMCUyMCUyMGJlc3RfcGFpciUyMCUzRCUyMCUyMiUyMiUwQSUyMCUyMCUyMCUyMG1heF9mcmVxJTIwJTNEJTIwTm9uZSUwQSUyMCUyMCUyMCUyMGZvciUyMHBhaXIlMkMlMjBmcmVxJTIwaW4lMjBwYWlyX2ZyZXFzLml0ZW1zKCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMG1heF9mcmVxJTIwaXMlMjBOb25lJTIwb3IlMjBtYXhfZnJlcSUyMCUzQyUyMGZyZXElM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBiZXN0X3BhaXIlMjAlM0QlMjBwYWlyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbWF4X2ZyZXElMjAlM0QlMjBmcmVxJTBBJTIwJTIwJTIwJTIwc3BsaXRzJTIwJTNEJTIwbWVyZ2VfcGFpcigqYmVzdF9wYWlyJTJDJTIwc3BsaXRzKSUwQSUyMCUyMCUyMCUyMG1lcmdlcyU1QmJlc3RfcGFpciU1RCUyMCUzRCUyMGJlc3RfcGFpciU1QjAlNUQlMjAlMkIlMjBiZXN0X3BhaXIlNUIxJTVEJTBBJTIwJTIwJTIwJTIwdm9jYWIuYXBwZW5kKGJlc3RfcGFpciU1QjAlNUQlMjAlMkIlMjBiZXN0X3BhaXIlNUIxJTVEKQ==",highlighted:`vocab_size = <span class="hljs-number">50</span>
<span class="hljs-keyword">while</span> <span class="hljs-built_in">len</span>(vocab) &lt; vocab_size:
pair_freqs = compute_pair_freqs(splits)
best_pair = <span class="hljs-string">&quot;&quot;</span>
max_freq = <span class="hljs-literal">None</span>
<span class="hljs-keyword">for</span> pair, freq <span class="hljs-keyword">in</span> pair_freqs.items():
<span class="hljs-keyword">if</span> max_freq <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span> <span class="hljs-keyword">or</span> max_freq &lt; freq:
best_pair = pair
max_freq = freq
splits = merge_pair(*best_pair, splits)
merges[best_pair] = best_pair[<span class="hljs-number">0</span>] + best_pair[<span class="hljs-number">1</span>]
vocab.append(best_pair[<span class="hljs-number">0</span>] + best_pair[<span class="hljs-number">1</span>])`,wrap:!1}}),Es=new T({props:{code:"cHJpbnQobWVyZ2VzKQ==",highlighted:'<span class="hljs-built_in">print</span>(merges)',wrap:!1}}),Zs=new T({props:{code:"JTdCKCclQzQlQTAnJTJDJTIwJ3QnKSUzQSUyMCclQzQlQTB0JyUyQyUyMCgnaSclMkMlMjAncycpJTNBJTIwJ2lzJyUyQyUyMCgnZSclMkMlMjAncicpJTNBJTIwJ2VyJyUyQyUyMCgnJUM0JUEwJyUyQyUyMCdhJyklM0ElMjAnJUM0JUEwYSclMkMlMjAoJyVDNCVBMHQnJTJDJTIwJ28nKSUzQSUyMCclQzQlQTB0byclMkMlMjAoJ2UnJTJDJTIwJ24nKSUzQSUyMCdlbiclMkMlMEElMjAoJ1QnJTJDJTIwJ2gnKSUzQSUyMCdUaCclMkMlMjAoJ1RoJyUyQyUyMCdpcycpJTNBJTIwJ1RoaXMnJTJDJTIwKCdvJyUyQyUyMCd1JyklM0ElMjAnb3UnJTJDJTIwKCdzJyUyQyUyMCdlJyklM0ElMjAnc2UnJTJDJTIwKCclQzQlQTB0byclMkMlMjAnaycpJTNBJTIwJyVDNCVBMHRvayclMkMlMEElMjAoJyVDNCVBMHRvayclMkMlMjAnZW4nKSUzQSUyMCclQzQlQTB0b2tlbiclMkMlMjAoJ24nJTJDJTIwJ2QnKSUzQSUyMCduZCclMkMlMjAoJyVDNCVBMCclMkMlMjAnaXMnKSUzQSUyMCclQzQlQTBpcyclMkMlMjAoJyVDNCVBMHQnJTJDJTIwJ2gnKSUzQSUyMCclQzQlQTB0aCclMkMlMjAoJyVDNCVBMHRoJyUyQyUyMCdlJyklM0ElMjAnJUM0JUEwdGhlJyUyQyUwQSUyMCgnaSclMkMlMjAnbicpJTNBJTIwJ2luJyUyQyUyMCgnJUM0JUEwYSclMkMlMjAnYicpJTNBJTIwJyVDNCVBMGFiJyUyQyUyMCgnJUM0JUEwdG9rZW4nJTJDJTIwJ2knKSUzQSUyMCclQzQlQTB0b2tlbmknJTdE",highlighted:`{(<span class="hljs-string">&#x27;Ġ&#x27;</span>, <span class="hljs-string">&#x27;t&#x27;</span>): <span class="hljs-string">&#x27;Ġt&#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;e&#x27;</span>, <span class="hljs-string">&#x27;r&#x27;</span>): <span class="hljs-string">&#x27;er&#x27;</span>, (<span class="hljs-string">&#x27;Ġ&#x27;</span>, <span class="hljs-string">&#x27;a&#x27;</span>): <span class="hljs-string">&#x27;Ġa&#x27;</span>, (<span class="hljs-string">&#x27;Ġt&#x27;</span>, <span class="hljs-string">&#x27;o&#x27;</span>): <span class="hljs-string">&#x27;Ġto&#x27;</span>, (<span class="hljs-string">&#x27;e&#x27;</span>, <span class="hljs-string">&#x27;n&#x27;</span>): <span class="hljs-string">&#x27;en&#x27;</span>,
(<span class="hljs-string">&#x27;T&#x27;</span>, <span class="hljs-string">&#x27;h&#x27;</span>): <span class="hljs-string">&#x27;Th&#x27;</span>, (<span class="hljs-string">&#x27;Th&#x27;</span>, <span class="hljs-string">&#x27;is&#x27;</span>): <span class="hljs-string">&#x27;This&#x27;</span>, (<span class="hljs-string">&#x27;o&#x27;</span>, <span class="hljs-string">&#x27;u&#x27;</span>): <span class="hljs-string">&#x27;ou&#x27;</span>, (<span class="hljs-string">&#x27;s&#x27;</span>, <span class="hljs-string">&#x27;e&#x27;</span>): <span class="hljs-string">&#x27;se&#x27;</span>, (<span class="hljs-string">&#x27;Ġto&#x27;</span>, <span class="hljs-string">&#x27;k&#x27;</span>): <span class="hljs-string">&#x27;Ġtok&#x27;</span>,
(<span class="hljs-string">&#x27;Ġtok&#x27;</span>, <span class="hljs-string">&#x27;en&#x27;</span>): <span class="hljs-string">&#x27;Ġtoken&#x27;</span>, (<span class="hljs-string">&#x27;n&#x27;</span>, <span class="hljs-string">&#x27;d&#x27;</span>): <span class="hljs-string">&#x27;nd&#x27;</span>, (<span class="hljs-string">&#x27;Ġ&#x27;</span>, <span class="hljs-string">&#x27;is&#x27;</span>): <span class="hljs-string">&#x27;Ġis&#x27;</span>, (<span class="hljs-string">&#x27;Ġt&#x27;</span>, <span class="hljs-string">&#x27;h&#x27;</span>): <span class="hljs-string">&#x27;Ġth&#x27;</span>, (<span class="hljs-string">&#x27;Ġth&#x27;</span>, <span class="hljs-string">&#x27;e&#x27;</span>): <span class="hljs-string">&#x27;Ġthe&#x27;</span>,
(<span class="hljs-string">&#x27;i&#x27;</span>, <span class="hljs-string">&#x27;n&#x27;</span>): <span class="hljs-string">&#x27;in&#x27;</span>, (<span class="hljs-string">&#x27;Ġa&#x27;</span>, <span class="hljs-string">&#x27;b&#x27;</span>): <span class="hljs-string">&#x27;Ġab&#x27;</span>, (<span class="hljs-string">&#x27;Ġtoken&#x27;</span>, <span class="hljs-string">&#x27;i&#x27;</span>): <span class="hljs-string">&#x27;Ġtokeni&#x27;</span>}`,wrap:!1}}),Gs=new T({props:{code:"cHJpbnQodm9jYWIp",highlighted:'<span class="hljs-built_in">print</span>(vocab)',wrap:!1}}),Ss=new T({props:{code:"JTVCJyUzQyU3Q2VuZG9mdGV4dCU3QyUzRSclMkMlMjAnJTJDJyUyQyUyMCcuJyUyQyUyMCdDJyUyQyUyMCdGJyUyQyUyMCdIJyUyQyUyMCdUJyUyQyUyMCdhJyUyQyUyMCdiJyUyQyUyMCdjJyUyQyUyMCdkJyUyQyUyMCdlJyUyQyUyMCdmJyUyQyUyMCdnJyUyQyUyMCdoJyUyQyUyMCdpJyUyQyUyMCdrJyUyQyUyMCdsJyUyQyUyMCdtJyUyQyUyMCduJyUyQyUyMCdvJyUyQyUwQSUyMCdwJyUyQyUyMCdyJyUyQyUyMCdzJyUyQyUyMCd0JyUyQyUyMCd1JyUyQyUyMCd2JyUyQyUyMCd3JyUyQyUyMCd5JyUyQyUyMCd6JyUyQyUyMCclQzQlQTAnJTJDJTIwJyVDNCVBMHQnJTJDJTIwJ2lzJyUyQyUyMCdlciclMkMlMjAnJUM0JUEwYSclMkMlMjAnJUM0JUEwdG8nJTJDJTIwJ2VuJyUyQyUyMCdUaCclMkMlMjAnVGhpcyclMkMlMjAnb3UnJTJDJTIwJ3NlJyUyQyUwQSUyMCclQzQlQTB0b2snJTJDJTIwJyVDNCVBMHRva2VuJyUyQyUyMCduZCclMkMlMjAnJUM0JUEwaXMnJTJDJTIwJyVDNCVBMHRoJyUyQyUyMCclQzQlQTB0aGUnJTJDJTIwJ2luJyUyQyUyMCclQzQlQTBhYiclMkMlMjAnJUM0JUEwdG9rZW5pJyU1RA==",highlighted:`[<span class="hljs-string">&#x27;&lt;|endoftext|&gt;&#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;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;Ġt&#x27;</span>, <span class="hljs-string">&#x27;is&#x27;</span>, <span class="hljs-string">&#x27;er&#x27;</span>, <span class="hljs-string">&#x27;Ġa&#x27;</span>, <span class="hljs-string">&#x27;Ġto&#x27;</span>, <span class="hljs-string">&#x27;en&#x27;</span>, <span class="hljs-string">&#x27;Th&#x27;</span>, <span class="hljs-string">&#x27;This&#x27;</span>, <span class="hljs-string">&#x27;ou&#x27;</span>, <span class="hljs-string">&#x27;se&#x27;</span>,
<span class="hljs-string">&#x27;Ġtok&#x27;</span>, <span class="hljs-string">&#x27;Ġtoken&#x27;</span>, <span class="hljs-string">&#x27;nd&#x27;</span>, <span class="hljs-string">&#x27;Ġis&#x27;</span>, <span class="hljs-string">&#x27;Ġth&#x27;</span>, <span class="hljs-string">&#x27;Ġthe&#x27;</span>, <span class="hljs-string">&#x27;in&#x27;</span>, <span class="hljs-string">&#x27;Ġab&#x27;</span>, <span class="hljs-string">&#x27;Ġtokeni&#x27;</span>]`,wrap:!1}}),f=new Rs({props:{$$slots:{default:[da]},$$scope:{ctx:C}}}),Ns=new T({props:{code:"ZGVmJTIwdG9rZW5pemUodGV4dCklM0ElMEElMjAlMjAlMjAlMjBwcmVfdG9rZW5pemVfcmVzdWx0JTIwJTNEJTIwdG9rZW5pemVyLl90b2tlbml6ZXIucHJlX3Rva2VuaXplci5wcmVfdG9rZW5pemVfc3RyKHRleHQpJTBBJTIwJTIwJTIwJTIwcHJlX3Rva2VuaXplZF90ZXh0JTIwJTNEJTIwJTVCd29yZCUyMGZvciUyMHdvcmQlMkMlMjBvZmZzZXQlMjBpbiUyMHByZV90b2tlbml6ZV9yZXN1bHQlNUQlMEElMjAlMjAlMjAlMjBzcGxpdHMlMjAlM0QlMjAlNUIlNUJsJTIwZm9yJTIwbCUyMGluJTIwd29yZCU1RCUyMGZvciUyMHdvcmQlMjBpbiUyMHByZV90b2tlbml6ZWRfdGV4dCU1RCUwQSUyMCUyMCUyMCUyMGZvciUyMHBhaXIlMkMlMjBtZXJnZSUyMGluJTIwbWVyZ2VzLml0ZW1zKCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBpZHglMkMlMjBzcGxpdCUyMGluJTIwZW51bWVyYXRlKHNwbGl0cyklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpJTIwJTNEJTIwMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdoaWxlJTIwaSUyMCUzQyUyMGxlbihzcGxpdCklMjAtJTIwMSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwc3BsaXQlNUJpJTVEJTIwJTNEJTNEJTIwcGFpciU1QjAlNUQlMjBhbmQlMjBzcGxpdCU1QmklMjAlMkIlMjAxJTVEJTIwJTNEJTNEJTIwcGFpciU1QjElNUQlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzcGxpdCUyMCUzRCUyMHNwbGl0JTVCJTNBaSU1RCUyMCUyQiUyMCU1Qm1lcmdlJTVEJTIwJTJCJTIwc3BsaXQlNUJpJTIwJTJCJTIwMiUyMCUzQSU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVsc2UlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpJTIwJTJCJTNEJTIwMSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNwbGl0cyU1QmlkeCU1RCUyMCUzRCUyMHNwbGl0JTBBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwc3VtKHNwbGl0cyUyQyUyMCU1QiU1RCk=",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]
splits = [[l <span class="hljs-keyword">for</span> l <span class="hljs-keyword">in</span> word] <span class="hljs-keyword">for</span> word <span class="hljs-keyword">in</span> pre_tokenized_text]
<span class="hljs-keyword">for</span> pair, merge <span class="hljs-keyword">in</span> merges.items():
<span class="hljs-keyword">for</span> idx, split <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(splits):
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] == pair[<span class="hljs-number">0</span>] <span class="hljs-keyword">and</span> split[i + <span class="hljs-number">1</span>] == pair[<span class="hljs-number">1</span>]:
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[idx] = split
<span class="hljs-keyword">return</span> <span class="hljs-built_in">sum</span>(splits, [])`,wrap:!1}}),Hs=new T({props:{code:"dG9rZW5pemUoJTIyVGhpcyUyMGlzJTIwbm90JTIwYSUyMHRva2VuLiUyMik=",highlighted:'tokenize(<span class="hljs-string">&quot;This is not a token.&quot;</span>)',wrap:!1}}),Xs=new T({props:{code:"JTVCJ1RoaXMnJTJDJTIwJyVDNCVBMGlzJyUyQyUyMCclQzQlQTAnJTJDJTIwJ24nJTJDJTIwJ28nJTJDJTIwJ3QnJTJDJTIwJyVDNCVBMGEnJTJDJTIwJyVDNCVBMHRva2VuJyUyQyUyMCcuJyU1RA==",highlighted:'[<span class="hljs-string">&#x27;This&#x27;</span>, <span class="hljs-string">&#x27;Ġis&#x27;</span>, <span class="hljs-string">&#x27;Ġ&#x27;</span>, <span class="hljs-string">&#x27;n&#x27;</span>, <span class="hljs-string">&#x27;o&#x27;</span>, <span class="hljs-string">&#x27;t&#x27;</span>, <span class="hljs-string">&#x27;Ġa&#x27;</span>, <span class="hljs-string">&#x27;Ġtoken&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>]',wrap:!1}}),$=new Rs({props:{warning:!0,$$slots:{default:[ba]},$$scope:{ctx:C}}}),Ws=new ma({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ru/chapter6/5.mdx"}}),{c(){e=r("meta"),h=t(),u=r("p"),w=t(),M(d.$$.fragment),Ks=t(),M(b.$$.fragment),Fs=t(),q=r("p"),q.textContent=fn,Ls=t(),M(Q.$$.fragment),Os=t(),M(x.$$.fragment),sl=t(),M(k.$$.fragment),ll=t(),A=r("p"),A.textContent=$n,nl=t(),M(B.$$.fragment),al=t(),V=r("p"),V.innerHTML=dn,tl=t(),M(m.$$.fragment),pl=t(),E=r("p"),E.innerHTML=bn,el=t(),Z=r("p"),Z.textContent=qn,Ml=t(),z=r("p"),z.textContent=Qn,yl=t(),M(G.$$.fragment),jl=t(),S=r("p"),S.innerHTML=kn,il=t(),M(_.$$.fragment),Jl=t(),N=r("p"),N.innerHTML=An,cl=t(),v=r("p"),v.innerHTML=Bn,rl=t(),M(H.$$.fragment),Ul=t(),X=r("p"),X.innerHTML=Vn,ul=t(),M(D.$$.fragment),ol=t(),W=r("p"),W.innerHTML=En,Tl=t(),M(R.$$.fragment),hl=t(),Y=r("p"),Y.textContent=Zn,wl=t(),M(g.$$.fragment),Cl=t(),M(P.$$.fragment),xl=t(),K=r("p"),K.textContent=zn,ml=t(),F=r("ol"),F.innerHTML=Gn,gl=t(),L=r("p"),L.textContent=Sn,Il=t(),M(O.$$.fragment),fl=t(),ss=r("p"),ss.innerHTML=_n,$l=t(),M(I.$$.fragment),dl=t(),M(ls.$$.fragment),bl=t(),ns=r("p"),ns.textContent=Nn,ql=t(),as=r("p"),as.textContent=vn,Ql=t(),M(ts.$$.fragment),kl=t(),ps=r("p"),ps.innerHTML=Hn,Al=t(),M(es.$$.fragment),Bl=t(),Ms=r("p"),Ms.textContent=Xn,Vl=t(),M(ys.$$.fragment),El=t(),M(js.$$.fragment),Zl=t(),is=r("p"),is.textContent=Dn,zl=t(),M(Js.$$.fragment),Gl=t(),M(cs.$$.fragment),Sl=t(),rs=r("p"),rs.innerHTML=Wn,_l=t(),M(Us.$$.fragment),Nl=t(),us=r("p"),us.textContent=Rn,vl=t(),M(os.$$.fragment),Hl=t(),Ts=r("p"),Ts.textContent=Yn,Xl=t(),M(hs.$$.fragment),Dl=t(),ws=r("p"),ws.textContent=Pn,Wl=t(),M(Cs.$$.fragment),Rl=t(),M(xs.$$.fragment),Yl=t(),ms=r("p"),ms.textContent=Kn,Pl=t(),M(gs.$$.fragment),Kl=t(),M(Is.$$.fragment),Fl=t(),fs=r("p"),fs.innerHTML=Fn,Ll=t(),M($s.$$.fragment),Ol=t(),ds=r("p"),ds.innerHTML=Ln,sn=t(),M(bs.$$.fragment),ln=t(),qs=r("p"),qs.textContent=On,nn=t(),M(Qs.$$.fragment),an=t(),M(ks.$$.fragment),tn=t(),As=r("p"),As.textContent=sa,pn=t(),M(Bs.$$.fragment),en=t(),Vs=r("p"),Vs.textContent=la,Mn=t(),M(Es.$$.fragment),yn=t(),M(Zs.$$.fragment),jn=t(),zs=r("p"),zs.textContent=na,Jn=t(),M(Gs.$$.fragment),cn=t(),M(Ss.$$.fragment),rn=t(),M(f.$$.fragment),Un=t(),_s=r("p"),_s.textContent=aa,un=t(),M(Ns.$$.fragment),on=t(),vs=r("p"),vs.textContent=ta,Tn=t(),M(Hs.$$.fragment),hn=t(),M(Xs.$$.fragment),wn=t(),M($.$$.fragment),Cn=t(),Ds=r("p"),Ds.textContent=pa,xn=t(),M(Ws.$$.fragment),mn=t(),Ps=r("p"),this.h()},l(s){const l=ha("svelte-u9bgzb",document.head);e=U(l,"META",{name:!0,content:!0}),l.forEach(n),h=p(s),u=U(s,"P",{}),ca(u).forEach(n),w=p(s),y(d.$$.fragment,s),Ks=p(s),y(b.$$.fragment,s),Fs=p(s),q=U(s,"P",{"data-svelte-h":!0}),o(q)!=="svelte-eaj6yc"&&(q.textContent=fn),Ls=p(s),y(Q.$$.fragment,s),Os=p(s),y(x.$$.fragment,s),sl=p(s),y(k.$$.fragment,s),ll=p(s),A=U(s,"P",{"data-svelte-h":!0}),o(A)!=="svelte-19hcv1f"&&(A.textContent=$n),nl=p(s),y(B.$$.fragment,s),al=p(s),V=U(s,"P",{"data-svelte-h":!0}),o(V)!=="svelte-14pgves"&&(V.innerHTML=dn),tl=p(s),y(m.$$.fragment,s),pl=p(s),E=U(s,"P",{"data-svelte-h":!0}),o(E)!=="svelte-1yidhm0"&&(E.innerHTML=bn),el=p(s),Z=U(s,"P",{"data-svelte-h":!0}),o(Z)!=="svelte-19o9d39"&&(Z.textContent=qn),Ml=p(s),z=U(s,"P",{"data-svelte-h":!0}),o(z)!=="svelte-bclbxw"&&(z.textContent=Qn),yl=p(s),y(G.$$.fragment,s),jl=p(s),S=U(s,"P",{"data-svelte-h":!0}),o(S)!=="svelte-1svhn5f"&&(S.innerHTML=kn),il=p(s),y(_.$$.fragment,s),Jl=p(s),N=U(s,"P",{"data-svelte-h":!0}),o(N)!=="svelte-1v2r224"&&(N.innerHTML=An),cl=p(s),v=U(s,"P",{"data-svelte-h":!0}),o(v)!=="svelte-1czjk8r"&&(v.innerHTML=Bn),rl=p(s),y(H.$$.fragment,s),Ul=p(s),X=U(s,"P",{"data-svelte-h":!0}),o(X)!=="svelte-yjdndm"&&(X.innerHTML=Vn),ul=p(s),y(D.$$.fragment,s),ol=p(s),W=U(s,"P",{"data-svelte-h":!0}),o(W)!=="svelte-15tola0"&&(W.innerHTML=En),Tl=p(s),y(R.$$.fragment,s),hl=p(s),Y=U(s,"P",{"data-svelte-h":!0}),o(Y)!=="svelte-1td587j"&&(Y.textContent=Zn),wl=p(s),y(g.$$.fragment,s),Cl=p(s),y(P.$$.fragment,s),xl=p(s),K=U(s,"P",{"data-svelte-h":!0}),o(K)!=="svelte-1e9demv"&&(K.textContent=zn),ml=p(s),F=U(s,"OL",{"data-svelte-h":!0}),o(F)!=="svelte-33m93k"&&(F.innerHTML=Gn),gl=p(s),L=U(s,"P",{"data-svelte-h":!0}),o(L)!=="svelte-1j1l7yl"&&(L.textContent=Sn),Il=p(s),y(O.$$.fragment,s),fl=p(s),ss=U(s,"P",{"data-svelte-h":!0}),o(ss)!=="svelte-qspggk"&&(ss.innerHTML=_n),$l=p(s),y(I.$$.fragment,s),dl=p(s),y(ls.$$.fragment,s),bl=p(s),ns=U(s,"P",{"data-svelte-h":!0}),o(ns)!=="svelte-267xwa"&&(ns.textContent=Nn),ql=p(s),as=U(s,"P",{"data-svelte-h":!0}),o(as)!=="svelte-cgxv49"&&(as.textContent=vn),Ql=p(s),y(ts.$$.fragment,s),kl=p(s),ps=U(s,"P",{"data-svelte-h":!0}),o(ps)!=="svelte-5h6bfa"&&(ps.innerHTML=Hn),Al=p(s),y(es.$$.fragment,s),Bl=p(s),Ms=U(s,"P",{"data-svelte-h":!0}),o(Ms)!=="svelte-8r9jet"&&(Ms.textContent=Xn),Vl=p(s),y(ys.$$.fragment,s),El=p(s),y(js.$$.fragment,s),Zl=p(s),is=U(s,"P",{"data-svelte-h":!0}),o(is)!=="svelte-1uiue0y"&&(is.textContent=Dn),zl=p(s),y(Js.$$.fragment,s),Gl=p(s),y(cs.$$.fragment,s),Sl=p(s),rs=U(s,"P",{"data-svelte-h":!0}),o(rs)!=="svelte-66ut2j"&&(rs.innerHTML=Wn),_l=p(s),y(Us.$$.fragment,s),Nl=p(s),us=U(s,"P",{"data-svelte-h":!0}),o(us)!=="svelte-r6bb7j"&&(us.textContent=Rn),vl=p(s),y(os.$$.fragment,s),Hl=p(s),Ts=U(s,"P",{"data-svelte-h":!0}),o(Ts)!=="svelte-17td1y2"&&(Ts.textContent=Yn),Xl=p(s),y(hs.$$.fragment,s),Dl=p(s),ws=U(s,"P",{"data-svelte-h":!0}),o(ws)!=="svelte-1jqphuk"&&(ws.textContent=Pn),Wl=p(s),y(Cs.$$.fragment,s),Rl=p(s),y(xs.$$.fragment,s),Yl=p(s),ms=U(s,"P",{"data-svelte-h":!0}),o(ms)!=="svelte-p5rfjw"&&(ms.textContent=Kn),Pl=p(s),y(gs.$$.fragment,s),Kl=p(s),y(Is.$$.fragment,s),Fl=p(s),fs=U(s,"P",{"data-svelte-h":!0}),o(fs)!=="svelte-18yy5ox"&&(fs.innerHTML=Fn),Ll=p(s),y($s.$$.fragment,s),Ol=p(s),ds=U(s,"P",{"data-svelte-h":!0}),o(ds)!=="svelte-1truv5b"&&(ds.innerHTML=Ln),sn=p(s),y(bs.$$.fragment,s),ln=p(s),qs=U(s,"P",{"data-svelte-h":!0}),o(qs)!=="svelte-hv4pw2"&&(qs.textContent=On),nn=p(s),y(Qs.$$.fragment,s),an=p(s),y(ks.$$.fragment,s),tn=p(s),As=U(s,"P",{"data-svelte-h":!0}),o(As)!=="svelte-127xmvz"&&(As.textContent=sa),pn=p(s),y(Bs.$$.fragment,s),en=p(s),Vs=U(s,"P",{"data-svelte-h":!0}),o(Vs)!=="svelte-g2y7zp"&&(Vs.textContent=la),Mn=p(s),y(Es.$$.fragment,s),yn=p(s),y(Zs.$$.fragment,s),jn=p(s),zs=U(s,"P",{"data-svelte-h":!0}),o(zs)!=="svelte-pm4clv"&&(zs.textContent=na),Jn=p(s),y(Gs.$$.fragment,s),cn=p(s),y(Ss.$$.fragment,s),rn=p(s),y(f.$$.fragment,s),Un=p(s),_s=U(s,"P",{"data-svelte-h":!0}),o(_s)!=="svelte-1i6hrxm"&&(_s.textContent=aa),un=p(s),y(Ns.$$.fragment,s),on=p(s),vs=U(s,"P",{"data-svelte-h":!0}),o(vs)!=="svelte-ok7ajl"&&(vs.textContent=ta),Tn=p(s),y(Hs.$$.fragment,s),hn=p(s),y(Xs.$$.fragment,s),wn=p(s),y($.$$.fragment,s),Cn=p(s),Ds=U(s,"P",{"data-svelte-h":!0}),o(Ds)!=="svelte-sgfedo"&&(Ds.textContent=pa),xn=p(s),y(Ws.$$.fragment,s),mn=p(s),Ps=U(s,"P",{}),ca(Ps).forEach(n),this.h()},h(){ra(e,"name","hf:doc:metadata"),ra(e,"content",Qa)},m(s,l){wa(document.head,e),a(s,h,l),a(s,u,l),a(s,w,l),j(d,s,l),a(s,Ks,l),j(b,s,l),a(s,Fs,l),a(s,q,l),a(s,Ls,l),j(Q,s,l),a(s,Os,l),j(x,s,l),a(s,sl,l),j(k,s,l),a(s,ll,l),a(s,A,l),a(s,nl,l),j(B,s,l),a(s,al,l),a(s,V,l),a(s,tl,l),j(m,s,l),a(s,pl,l),a(s,E,l),a(s,el,l),a(s,Z,l),a(s,Ml,l),a(s,z,l),a(s,yl,l),j(G,s,l),a(s,jl,l),a(s,S,l),a(s,il,l),j(_,s,l),a(s,Jl,l),a(s,N,l),a(s,cl,l),a(s,v,l),a(s,rl,l),j(H,s,l),a(s,Ul,l),a(s,X,l),a(s,ul,l),j(D,s,l),a(s,ol,l),a(s,W,l),a(s,Tl,l),j(R,s,l),a(s,hl,l),a(s,Y,l),a(s,wl,l),j(g,s,l),a(s,Cl,l),j(P,s,l),a(s,xl,l),a(s,K,l),a(s,ml,l),a(s,F,l),a(s,gl,l),a(s,L,l),a(s,Il,l),j(O,s,l),a(s,fl,l),a(s,ss,l),a(s,$l,l),j(I,s,l),a(s,dl,l),j(ls,s,l),a(s,bl,l),a(s,ns,l),a(s,ql,l),a(s,as,l),a(s,Ql,l),j(ts,s,l),a(s,kl,l),a(s,ps,l),a(s,Al,l),j(es,s,l),a(s,Bl,l),a(s,Ms,l),a(s,Vl,l),j(ys,s,l),a(s,El,l),j(js,s,l),a(s,Zl,l),a(s,is,l),a(s,zl,l),j(Js,s,l),a(s,Gl,l),j(cs,s,l),a(s,Sl,l),a(s,rs,l),a(s,_l,l),j(Us,s,l),a(s,Nl,l),a(s,us,l),a(s,vl,l),j(os,s,l),a(s,Hl,l),a(s,Ts,l),a(s,Xl,l),j(hs,s,l),a(s,Dl,l),a(s,ws,l),a(s,Wl,l),j(Cs,s,l),a(s,Rl,l),j(xs,s,l),a(s,Yl,l),a(s,ms,l),a(s,Pl,l),j(gs,s,l),a(s,Kl,l),j(Is,s,l),a(s,Fl,l),a(s,fs,l),a(s,Ll,l),j($s,s,l),a(s,Ol,l),a(s,ds,l),a(s,sn,l),j(bs,s,l),a(s,ln,l),a(s,qs,l),a(s,nn,l),j(Qs,s,l),a(s,an,l),j(ks,s,l),a(s,tn,l),a(s,As,l),a(s,pn,l),j(Bs,s,l),a(s,en,l),a(s,Vs,l),a(s,Mn,l),j(Es,s,l),a(s,yn,l),j(Zs,s,l),a(s,jn,l),a(s,zs,l),a(s,Jn,l),j(Gs,s,l),a(s,cn,l),j(Ss,s,l),a(s,rn,l),j(f,s,l),a(s,Un,l),a(s,_s,l),a(s,un,l),j(Ns,s,l),a(s,on,l),a(s,vs,l),a(s,Tn,l),j(Hs,s,l),a(s,hn,l),j(Xs,s,l),a(s,wn,l),j($,s,l),a(s,Cn,l),a(s,Ds,l),a(s,xn,l),j(Ws,s,l),a(s,mn,l),a(s,Ps,l),gn=!0},p(s,[l]){const ea={};l&2&&(ea.$$scope={dirty:l,ctx:s}),x.$set(ea);const Ma={};l&2&&(Ma.$$scope={dirty:l,ctx:s}),m.$set(Ma);const ya={};l&2&&(ya.$$scope={dirty:l,ctx:s}),g.$set(ya);const ja={};l&2&&(ja.$$scope={dirty:l,ctx:s}),I.$set(ja);const ia={};l&2&&(ia.$$scope={dirty:l,ctx:s}),f.$set(ia);const Ja={};l&2&&(Ja.$$scope={dirty:l,ctx:s}),$.$set(Ja)},i(s){gn||(i(d.$$.fragment,s),i(b.$$.fragment,s),i(Q.$$.fragment,s),i(x.$$.fragment,s),i(k.$$.fragment,s),i(B.$$.fragment,s),i(m.$$.fragment,s),i(G.$$.fragment,s),i(_.$$.fragment,s),i(H.$$.fragment,s),i(D.$$.fragment,s),i(R.$$.fragment,s),i(g.$$.fragment,s),i(P.$$.fragment,s),i(O.$$.fragment,s),i(I.$$.fragment,s),i(ls.$$.fragment,s),i(ts.$$.fragment,s),i(es.$$.fragment,s),i(ys.$$.fragment,s),i(js.$$.fragment,s),i(Js.$$.fragment,s),i(cs.$$.fragment,s),i(Us.$$.fragment,s),i(os.$$.fragment,s),i(hs.$$.fragment,s),i(Cs.$$.fragment,s),i(xs.$$.fragment,s),i(gs.$$.fragment,s),i(Is.$$.fragment,s),i($s.$$.fragment,s),i(bs.$$.fragment,s),i(Qs.$$.fragment,s),i(ks.$$.fragment,s),i(Bs.$$.fragment,s),i(Es.$$.fragment,s),i(Zs.$$.fragment,s),i(Gs.$$.fragment,s),i(Ss.$$.fragment,s),i(f.$$.fragment,s),i(Ns.$$.fragment,s),i(Hs.$$.fragment,s),i(Xs.$$.fragment,s),i($.$$.fragment,s),i(Ws.$$.fragment,s),gn=!0)},o(s){J(d.$$.fragment,s),J(b.$$.fragment,s),J(Q.$$.fragment,s),J(x.$$.fragment,s),J(k.$$.fragment,s),J(B.$$.fragment,s),J(m.$$.fragment,s),J(G.$$.fragment,s),J(_.$$.fragment,s),J(H.$$.fragment,s),J(D.$$.fragment,s),J(R.$$.fragment,s),J(g.$$.fragment,s),J(P.$$.fragment,s),J(O.$$.fragment,s),J(I.$$.fragment,s),J(ls.$$.fragment,s),J(ts.$$.fragment,s),J(es.$$.fragment,s),J(ys.$$.fragment,s),J(js.$$.fragment,s),J(Js.$$.fragment,s),J(cs.$$.fragment,s),J(Us.$$.fragment,s),J(os.$$.fragment,s),J(hs.$$.fragment,s),J(Cs.$$.fragment,s),J(xs.$$.fragment,s),J(gs.$$.fragment,s),J(Is.$$.fragment,s),J($s.$$.fragment,s),J(bs.$$.fragment,s),J(Qs.$$.fragment,s),J(ks.$$.fragment,s),J(Bs.$$.fragment,s),J(Es.$$.fragment,s),J(Zs.$$.fragment,s),J(Gs.$$.fragment,s),J(Ss.$$.fragment,s),J(f.$$.fragment,s),J(Ns.$$.fragment,s),J(Hs.$$.fragment,s),J(Xs.$$.fragment,s),J($.$$.fragment,s),J(Ws.$$.fragment,s),gn=!1},d(s){s&&(n(h),n(u),n(w),n(Ks),n(Fs),n(q),n(Ls),n(Os),n(sl),n(ll),n(A),n(nl),n(al),n(V),n(tl),n(pl),n(E),n(el),n(Z),n(Ml),n(z),n(yl),n(jl),n(S),n(il),n(Jl),n(N),n(cl),n(v),n(rl),n(Ul),n(X),n(ul),n(ol),n(W),n(Tl),n(hl),n(Y),n(wl),n(Cl),n(xl),n(K),n(ml),n(F),n(gl),n(L),n(Il),n(fl),n(ss),n($l),n(dl),n(bl),n(ns),n(ql),n(as),n(Ql),n(kl),n(ps),n(Al),n(Bl),n(Ms),n(Vl),n(El),n(Zl),n(is),n(zl),n(Gl),n(Sl),n(rs),n(_l),n(Nl),n(us),n(vl),n(Hl),n(Ts),n(Xl),n(Dl),n(ws),n(Wl),n(Rl),n(Yl),n(ms),n(Pl),n(Kl),n(Fl),n(fs),n(Ll),n(Ol),n(ds),n(sn),n(ln),n(qs),n(nn),n(an),n(tn),n(As),n(pn),n(en),n(Vs),n(Mn),n(yn),n(jn),n(zs),n(Jn),n(cn),n(rn),n(Un),n(_s),n(un),n(on),n(vs),n(Tn),n(hn),n(wn),n(Cn),n(Ds),n(xn),n(mn),n(Ps)),n(e),c(d,s),c(b,s),c(Q,s),c(x,s),c(k,s),c(B,s),c(m,s),c(G,s),c(_,s),c(H,s),c(D,s),c(R,s),c(g,s),c(P,s),c(O,s),c(I,s),c(ls,s),c(ts,s),c(es,s),c(ys,s),c(js,s),c(Js,s),c(cs,s),c(Us,s),c(os,s),c(hs,s),c(Cs,s),c(xs,s),c(gs,s),c(Is,s),c($s,s),c(bs,s),c(Qs,s),c(ks,s),c(Bs,s),c(Es,s),c(Zs,s),c(Gs,s),c(Ss,s),c(f,s),c(Ns,s),c(Hs,s),c(Xs,s),c($,s),c(Ws,s)}}}const Qa='{"title":"Токенизация Byte-Pair Encoding","local":"byte-pair-encoding-tokenization","sections":[{"title":"Алгоритм обучения","local":"training-algorithm","sections":[],"depth":2},{"title":"Алгоритм токенизации","local":"tokenization-algorithm","sections":[],"depth":2},{"title":"Реализация BPE","local":"implementing-bpe","sections":[],"depth":2}],"depth":1}';function ka(C){return ua(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Sa extends oa{constructor(e){super(),Ta(this,e,ka,qa,Ua,{})}}export{Sa as component};

Xet Storage Details

Size:
71 kB
·
Xet hash:
f39acfb756eac7dbf1b50e004ad4ed2fa107473546be13ee4f3cface96f366f2

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