Buckets:

rtrm's picture
download
raw
69.7 kB
import{s as ca,n as Ua,o as ra}from"../chunks/scheduler.0835143d.js";import{S as ua,i as Ta,e as M,s as t,c as j,h as oa,a as e,d as n,b as p,f as Ja,g as i,j as y,k as m,l as ha,m as a,n as J,t as c,o as U,p as r}from"../chunks/index.0042a36a.js";import{Y as wa}from"../chunks/Youtube.95da9be5.js";import{C as u}from"../chunks/CodeBlock.92e22b27.js";import{C as Ca}from"../chunks/CourseFloatingBanner.42a32842.js";import{H as gn,E as xa}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.77aca24b.js";function ga(mn){let T,Ws,Xs,Rs,I,Ys,d,Ks,f,In="Byte-Pair Encoding (BPE) изначально была разработана как алгоритм для сжатия текстов, а затем использовалась OpenAI для токенизации при предварительном обучении модели GPT. Она используется во многих моделях трансформеров, включая GPT, GPT-2, RoBERTa, BART и DeBERTa.",Fs,b,Ps,o,dn="<p>💡 В этом разделе подробно рассматривается BPE, вплоть до демонстрации полной реализации. Вы можете пропустить этот раздел, если вам нужен только общий обзор алгоритма токенизации.</p>",Ls,q,Os,Q,fn="Обучение BPE начинается с вычисления уникального набора слов, используемых в корпусе (после завершения этапов нормализации и предварительной токенизации), затем создается словарь, в который заносятся все символы, используемые для записи этих слов. В качестве очень простого примера предположим, что в нашем корпусе используются следующие пять слов:",sl,k,ll,A,bn="Тогда базовым словарем будет <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 очень плохо анализируют контент с эмоджи, например.",nl,h,qn="<p>Токенизаторы GPT-2 и RoBERTa (которые довольно похожи) имеют умный способ решения этой проблемы: они рассматривают слова не как символы Unicode, а как байты. Таким образом, базовый словарь имеет небольшой размер (256), но все символы, которые вы можете придумать, все равно будут включены и не будут преобразованы в неизвестный токен. Этот трюк называется <em>byte-level BPE</em>.</p>",al,$,Qn="После получения базового словаря мы добавляем новые токены, пока не достигнем желаемого объема словаря, обучаясь <em>слияниям</em>, которые представляют собой правила слияния двух элементов существующего словаря в новый. Таким образом, в начале эти слияния будут создавать токены с двумя символами, а затем, по мере обучения, более длинные подслова.",tl,B,kn="На любом шаге обучения токенизатора алгоритм BPE будет искать наиболее частую пару существующих токенов (под “парой” здесь понимаются два последовательных токена в слове). Эта наиболее часто встречающаяся пара и будет объединена, после чего все повторяется для следующего шага.",pl,E,An="Возвращаясь к нашему предыдущему примеру, предположим, что слова имеют следующую частоту:",Ml,V,el,Z,$n="значение <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 раз. Мы начинаем обучение с разбиения каждого слова на части символов (те, которые формируют наш начальный словарь), чтобы мы могли рассматривать каждое слово как список токенов:",yl,z,jl,G,Bn="Затем мы посмотрим на пары. Пара <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 раз в словаре.",il,S,En="Таким образом, первое правило слияния, выученное токенизатором, - <code>(&quot;u&quot;, &quot;g&quot;) -&gt; &quot;ug&quot;</code>, что означает, что <code>&quot;ug&quot;</code> будет добавлено в словарь, и эта пара должна быть объединена во всех словах корпуса. В конце этого этапа словарь и корпус выглядят следующим образом:",Jl,N,cl,v,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,_,rl,H,Zn="Теперь наиболее частой парой является <code>(&quot;h&quot;, &quot;ug&quot;)</code>, поэтому мы изучаем правило слияния <code>(&quot;h&quot;, &quot;ug&quot;) -&gt; &quot;hug&quot;</code>, что дает нам первый трехбуквенный токен. После слияния корпус выглядит следующим образом:",ul,X,Tl,D,zn="И продолжаем в том же духе, пока не достигнем желаемого размера словаря.",ol,w,Gn="<p>✏️ <strong>Теперь ваша очередь!</strong> Как вы думаете, каким будет следующее правило слияния?</p>",hl,W,wl,R,Sn="Токенизация следует за процессом обучения в том смысле, что новые входные данные подвергаются токенизации путем применения следующих шагов:",Cl,Y,Nn="<li>Нормализация</li> <li>Предварительная токенизация</li> <li>Разделение слов на отдельные символы</li> <li>Применение правил слияния, изученных по порядку, к этим частям</li>",xl,K,vn="Возьмем пример, который мы использовали во время обучения, с тремя выученными правилами слияния:",gl,F,ml,P,_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>.",Il,C,Hn="<p>✏️ <strong>Теперь ваша очередь!</strong> Как вы думаете, как будет токенизировано слово <code>&#39;unhug&#39;</code>?</p>",dl,L,fl,O,Xn="Теперь давайте посмотрим на реализацию алгоритма BPE. Это не будет оптимизированная версия, которую вы сможете использовать на большом корпусе; мы просто хотим показать вам код, чтобы вы могли лучше понять алгоритм.",bl,ss,Dn="Для начала нам нужен корпус текста, поэтому давайте создадим простой корпус с несколькими предложениями:",ql,ls,Ql,ns,Wn="Далее нам нужно предварительно токенизировать корпус в слова. Поскольку мы воспроизводим токенизатор BPE (например, GPT-2), для предварительной токенизации мы будем использовать токенизатор <code>gpt2</code>:",kl,as,Al,ts,Rn="Затем мы вычисляем частоту каждого слова в корпусе, как и при предварительной токенизации:",$l,ps,Bl,Ms,El,es,Yn="Следующий шаг - составление базового словаря, состоящего из всех символов, используемых в корпусе:",Vl,ys,Zl,js,zl,is,Kn="Мы также добавляем специальные токены, используемые моделью, в начало этого словаря. В случае GPT-2 единственным специальным токеном является <code>&quot;&lt;|endoftext|&gt;&quot;</code>:",Gl,Js,Sl,cs,Fn="Теперь нам нужно разделить каждое слово на отдельные символы, чтобы можно было начать обучение:",Nl,Us,vl,rs,Pn="Теперь, когда мы готовы к обучению, давайте напишем функцию, которая вычисляет частоту каждой пары. Нам нужно будет использовать ее на каждом шаге обучения:",_l,us,Hl,Ts,Ln="Давайте посмотрим на часть этого словаря после первых разделений:",Xl,os,Dl,hs,Wl,ws,On="Теперь, чтобы найти наиболее часто встречающуюся пару, нужно всего лишь сделать быстрый цикл:",Rl,Cs,Yl,xs,Kl,gs,sa="Итак, первое слияние, которое нужно выучить, это <code>(&#39;Ġ&#39;, &#39;t&#39;) -&gt; &#39;Ġt&#39;</code>, и мы добавляем <code>&#39;Ġt&#39;</code> в словарь:",Fl,ms,Pl,Is,la="Чтобы продолжить, нам нужно применить это объединение в нашем экземпляре <code>splits</code> словаря. Давайте напишем для этого еще одну функцию:",Ll,ds,Ol,fs,na="И мы можем посмотреть на результат первого слияния:",sn,bs,ln,qs,nn,Qs,aa="Теперь у нас есть все, что нужно, чтобы проитерироваться до тех пор, пока мы не выучим все слияния, которые нам нужны. Пусть размер словаря будет 50:",an,ks,tn,As,ta="В результате мы выучили 19 правил слияния (исходный словарь имел размер 31 - 30 символов в алфавите плюс специальный токен):",pn,$s,Mn,Bs,en,Es,pa="А словарь состоит из специального токена, начального алфавита и всех результатов слияния:",yn,Vs,jn,Zs,Jn,x,Ma="<p>💡 Использование <code>train_new_from_iterator()</code> на том же корпусе не приведет к созданию точно такого же словаря. Это связано с тем, что при выборе наиболее частотной пары мы выбираем первую попавшуюся, в то время как библиотека 🤗 Tokenizers выбирает первую пару, основываясь на ее внутренних ID.</p>",cn,zs,ea="Чтобы токенизировать новый текст, мы предварительно токенизируем его, разбиваем на части, а затем применяем все изученные правила слияния:",Un,Gs,rn,Ss,ya="Мы можем попробовать это на любом тексте, состоящем из символов алфавита:",un,Ns,Tn,vs,on,g,ja="<p>⚠️ Наша реализация будет выбрасывать ошибку при наличии неизвестного символа, поскольку мы ничего не сделали для их обработки. На самом деле в GPT-2 нет неизвестного токена (невозможно получить неизвестный символ при использовании BPE на уровне байтов), но здесь это может произойти, поскольку мы не включили все возможные байты в начальный словарь. Этот аспект BPE выходит за рамки данного раздела, поэтому мы опустили подробности.</p>",hn,_s,ia="Вот и все об алгоритме BPE! Далее мы рассмотрим WordPiece.",wn,Hs,Cn,Ds,xn;return I=new gn({props:{title:"Токенизация Byte-Pair Encoding",local:"byte-pair-encoding-tokenization",headingTag:"h1"}}),d=new Ca({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"}]}}),b=new wa({props:{id:"HEikzVL-lZU"}}),q=new gn({props:{title:"Алгоритм обучения",local:"training-algorithm",headingTag:"h2"}}),k=new u({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}}),V=new u({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}}),z=new u({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}}),N=new u({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}}),_=new u({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}}),X=new u({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}}),W=new gn({props:{title:"Алгоритм токенизации",local:"tokenization-algorithm",headingTag:"h2"}}),F=new u({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}}),L=new gn({props:{title:"Реализация BPE",local:"implementing-bpe",headingTag:"h2"}}),ls=new u({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}}),as=new u({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}}),ps=new u({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}}),Ms=new u({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}}),ys=new u({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}}),js=new u({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}}),Js=new u({props:{code:"dm9jYWIlMjAlM0QlMjAlNUIlMjIlM0MlN0NlbmRvZnRleHQlN0MlM0UlMjIlNUQlMjAlMkIlMjBhbHBoYWJldC5jb3B5KCk=",highlighted:'vocab = [<span class="hljs-string">&quot;&lt;|endoftext|&gt;&quot;</span>] + alphabet.copy()',wrap:!1}}),Us=new u({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}}),us=new u({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}}),os=new u({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}}),hs=new u({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}}),Cs=new u({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}}),xs=new u({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}}),ms=new u({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}}),ds=new u({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}}),bs=new u({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}}),qs=new u({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}}),ks=new u({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}}),$s=new u({props:{code:"cHJpbnQobWVyZ2VzKQ==",highlighted:'<span class="hljs-built_in">print</span>(merges)',wrap:!1}}),Bs=new u({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}}),Vs=new u({props:{code:"cHJpbnQodm9jYWIp",highlighted:'<span class="hljs-built_in">print</span>(vocab)',wrap:!1}}),Zs=new u({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}}),Gs=new u({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}}),Ns=new u({props:{code:"dG9rZW5pemUoJTIyVGhpcyUyMGlzJTIwbm90JTIwYSUyMHRva2VuLiUyMik=",highlighted:'tokenize(<span class="hljs-string">&quot;This is not a token.&quot;</span>)',wrap:!1}}),vs=new u({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}}),Hs=new xa({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ru/chapter6/5.mdx"}}),{c(){T=M("meta"),Ws=t(),Xs=M("p"),Rs=t(),j(I.$$.fragment),Ys=t(),j(d.$$.fragment),Ks=t(),f=M("p"),f.textContent=In,Fs=t(),j(b.$$.fragment),Ps=t(),o=M("blockquote"),o.innerHTML=dn,Ls=t(),j(q.$$.fragment),Os=t(),Q=M("p"),Q.textContent=fn,sl=t(),j(k.$$.fragment),ll=t(),A=M("p"),A.innerHTML=bn,nl=t(),h=M("blockquote"),h.innerHTML=qn,al=t(),$=M("p"),$.innerHTML=Qn,tl=t(),B=M("p"),B.textContent=kn,pl=t(),E=M("p"),E.textContent=An,Ml=t(),j(V.$$.fragment),el=t(),Z=M("p"),Z.innerHTML=$n,yl=t(),j(z.$$.fragment),jl=t(),G=M("p"),G.innerHTML=Bn,il=t(),S=M("p"),S.innerHTML=En,Jl=t(),j(N.$$.fragment),cl=t(),v=M("p"),v.innerHTML=Vn,Ul=t(),j(_.$$.fragment),rl=t(),H=M("p"),H.innerHTML=Zn,ul=t(),j(X.$$.fragment),Tl=t(),D=M("p"),D.textContent=zn,ol=t(),w=M("blockquote"),w.innerHTML=Gn,hl=t(),j(W.$$.fragment),wl=t(),R=M("p"),R.textContent=Sn,Cl=t(),Y=M("ol"),Y.innerHTML=Nn,xl=t(),K=M("p"),K.textContent=vn,gl=t(),j(F.$$.fragment),ml=t(),P=M("p"),P.innerHTML=_n,Il=t(),C=M("blockquote"),C.innerHTML=Hn,dl=t(),j(L.$$.fragment),fl=t(),O=M("p"),O.textContent=Xn,bl=t(),ss=M("p"),ss.textContent=Dn,ql=t(),j(ls.$$.fragment),Ql=t(),ns=M("p"),ns.innerHTML=Wn,kl=t(),j(as.$$.fragment),Al=t(),ts=M("p"),ts.textContent=Rn,$l=t(),j(ps.$$.fragment),Bl=t(),j(Ms.$$.fragment),El=t(),es=M("p"),es.textContent=Yn,Vl=t(),j(ys.$$.fragment),Zl=t(),j(js.$$.fragment),zl=t(),is=M("p"),is.innerHTML=Kn,Gl=t(),j(Js.$$.fragment),Sl=t(),cs=M("p"),cs.textContent=Fn,Nl=t(),j(Us.$$.fragment),vl=t(),rs=M("p"),rs.textContent=Pn,_l=t(),j(us.$$.fragment),Hl=t(),Ts=M("p"),Ts.textContent=Ln,Xl=t(),j(os.$$.fragment),Dl=t(),j(hs.$$.fragment),Wl=t(),ws=M("p"),ws.textContent=On,Rl=t(),j(Cs.$$.fragment),Yl=t(),j(xs.$$.fragment),Kl=t(),gs=M("p"),gs.innerHTML=sa,Fl=t(),j(ms.$$.fragment),Pl=t(),Is=M("p"),Is.innerHTML=la,Ll=t(),j(ds.$$.fragment),Ol=t(),fs=M("p"),fs.textContent=na,sn=t(),j(bs.$$.fragment),ln=t(),j(qs.$$.fragment),nn=t(),Qs=M("p"),Qs.textContent=aa,an=t(),j(ks.$$.fragment),tn=t(),As=M("p"),As.textContent=ta,pn=t(),j($s.$$.fragment),Mn=t(),j(Bs.$$.fragment),en=t(),Es=M("p"),Es.textContent=pa,yn=t(),j(Vs.$$.fragment),jn=t(),j(Zs.$$.fragment),Jn=t(),x=M("blockquote"),x.innerHTML=Ma,cn=t(),zs=M("p"),zs.textContent=ea,Un=t(),j(Gs.$$.fragment),rn=t(),Ss=M("p"),Ss.textContent=ya,un=t(),j(Ns.$$.fragment),Tn=t(),j(vs.$$.fragment),on=t(),g=M("blockquote"),g.innerHTML=ja,hn=t(),_s=M("p"),_s.textContent=ia,wn=t(),j(Hs.$$.fragment),Cn=t(),Ds=M("p"),this.h()},l(s){const l=oa("svelte-u9bgzb",document.head);T=e(l,"META",{name:!0,content:!0}),l.forEach(n),Ws=p(s),Xs=e(s,"P",{}),Ja(Xs).forEach(n),Rs=p(s),i(I.$$.fragment,s),Ys=p(s),i(d.$$.fragment,s),Ks=p(s),f=e(s,"P",{"data-svelte-h":!0}),y(f)!=="svelte-eaj6yc"&&(f.textContent=In),Fs=p(s),i(b.$$.fragment,s),Ps=p(s),o=e(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(o)!=="svelte-ar77d4"&&(o.innerHTML=dn),Ls=p(s),i(q.$$.fragment,s),Os=p(s),Q=e(s,"P",{"data-svelte-h":!0}),y(Q)!=="svelte-19hcv1f"&&(Q.textContent=fn),sl=p(s),i(k.$$.fragment,s),ll=p(s),A=e(s,"P",{"data-svelte-h":!0}),y(A)!=="svelte-14pgves"&&(A.innerHTML=bn),nl=p(s),h=e(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(h)!=="svelte-mvgo6b"&&(h.innerHTML=qn),al=p(s),$=e(s,"P",{"data-svelte-h":!0}),y($)!=="svelte-1yidhm0"&&($.innerHTML=Qn),tl=p(s),B=e(s,"P",{"data-svelte-h":!0}),y(B)!=="svelte-19o9d39"&&(B.textContent=kn),pl=p(s),E=e(s,"P",{"data-svelte-h":!0}),y(E)!=="svelte-bclbxw"&&(E.textContent=An),Ml=p(s),i(V.$$.fragment,s),el=p(s),Z=e(s,"P",{"data-svelte-h":!0}),y(Z)!=="svelte-1svhn5f"&&(Z.innerHTML=$n),yl=p(s),i(z.$$.fragment,s),jl=p(s),G=e(s,"P",{"data-svelte-h":!0}),y(G)!=="svelte-1v2r224"&&(G.innerHTML=Bn),il=p(s),S=e(s,"P",{"data-svelte-h":!0}),y(S)!=="svelte-1czjk8r"&&(S.innerHTML=En),Jl=p(s),i(N.$$.fragment,s),cl=p(s),v=e(s,"P",{"data-svelte-h":!0}),y(v)!=="svelte-yjdndm"&&(v.innerHTML=Vn),Ul=p(s),i(_.$$.fragment,s),rl=p(s),H=e(s,"P",{"data-svelte-h":!0}),y(H)!=="svelte-15tola0"&&(H.innerHTML=Zn),ul=p(s),i(X.$$.fragment,s),Tl=p(s),D=e(s,"P",{"data-svelte-h":!0}),y(D)!=="svelte-1td587j"&&(D.textContent=zn),ol=p(s),w=e(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(w)!=="svelte-14kxtfn"&&(w.innerHTML=Gn),hl=p(s),i(W.$$.fragment,s),wl=p(s),R=e(s,"P",{"data-svelte-h":!0}),y(R)!=="svelte-1e9demv"&&(R.textContent=Sn),Cl=p(s),Y=e(s,"OL",{"data-svelte-h":!0}),y(Y)!=="svelte-33m93k"&&(Y.innerHTML=Nn),xl=p(s),K=e(s,"P",{"data-svelte-h":!0}),y(K)!=="svelte-1j1l7yl"&&(K.textContent=vn),gl=p(s),i(F.$$.fragment,s),ml=p(s),P=e(s,"P",{"data-svelte-h":!0}),y(P)!=="svelte-qspggk"&&(P.innerHTML=_n),Il=p(s),C=e(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(C)!=="svelte-ubgzdn"&&(C.innerHTML=Hn),dl=p(s),i(L.$$.fragment,s),fl=p(s),O=e(s,"P",{"data-svelte-h":!0}),y(O)!=="svelte-267xwa"&&(O.textContent=Xn),bl=p(s),ss=e(s,"P",{"data-svelte-h":!0}),y(ss)!=="svelte-cgxv49"&&(ss.textContent=Dn),ql=p(s),i(ls.$$.fragment,s),Ql=p(s),ns=e(s,"P",{"data-svelte-h":!0}),y(ns)!=="svelte-5h6bfa"&&(ns.innerHTML=Wn),kl=p(s),i(as.$$.fragment,s),Al=p(s),ts=e(s,"P",{"data-svelte-h":!0}),y(ts)!=="svelte-8r9jet"&&(ts.textContent=Rn),$l=p(s),i(ps.$$.fragment,s),Bl=p(s),i(Ms.$$.fragment,s),El=p(s),es=e(s,"P",{"data-svelte-h":!0}),y(es)!=="svelte-1uiue0y"&&(es.textContent=Yn),Vl=p(s),i(ys.$$.fragment,s),Zl=p(s),i(js.$$.fragment,s),zl=p(s),is=e(s,"P",{"data-svelte-h":!0}),y(is)!=="svelte-66ut2j"&&(is.innerHTML=Kn),Gl=p(s),i(Js.$$.fragment,s),Sl=p(s),cs=e(s,"P",{"data-svelte-h":!0}),y(cs)!=="svelte-r6bb7j"&&(cs.textContent=Fn),Nl=p(s),i(Us.$$.fragment,s),vl=p(s),rs=e(s,"P",{"data-svelte-h":!0}),y(rs)!=="svelte-17td1y2"&&(rs.textContent=Pn),_l=p(s),i(us.$$.fragment,s),Hl=p(s),Ts=e(s,"P",{"data-svelte-h":!0}),y(Ts)!=="svelte-1jqphuk"&&(Ts.textContent=Ln),Xl=p(s),i(os.$$.fragment,s),Dl=p(s),i(hs.$$.fragment,s),Wl=p(s),ws=e(s,"P",{"data-svelte-h":!0}),y(ws)!=="svelte-p5rfjw"&&(ws.textContent=On),Rl=p(s),i(Cs.$$.fragment,s),Yl=p(s),i(xs.$$.fragment,s),Kl=p(s),gs=e(s,"P",{"data-svelte-h":!0}),y(gs)!=="svelte-18yy5ox"&&(gs.innerHTML=sa),Fl=p(s),i(ms.$$.fragment,s),Pl=p(s),Is=e(s,"P",{"data-svelte-h":!0}),y(Is)!=="svelte-1truv5b"&&(Is.innerHTML=la),Ll=p(s),i(ds.$$.fragment,s),Ol=p(s),fs=e(s,"P",{"data-svelte-h":!0}),y(fs)!=="svelte-hv4pw2"&&(fs.textContent=na),sn=p(s),i(bs.$$.fragment,s),ln=p(s),i(qs.$$.fragment,s),nn=p(s),Qs=e(s,"P",{"data-svelte-h":!0}),y(Qs)!=="svelte-127xmvz"&&(Qs.textContent=aa),an=p(s),i(ks.$$.fragment,s),tn=p(s),As=e(s,"P",{"data-svelte-h":!0}),y(As)!=="svelte-g2y7zp"&&(As.textContent=ta),pn=p(s),i($s.$$.fragment,s),Mn=p(s),i(Bs.$$.fragment,s),en=p(s),Es=e(s,"P",{"data-svelte-h":!0}),y(Es)!=="svelte-pm4clv"&&(Es.textContent=pa),yn=p(s),i(Vs.$$.fragment,s),jn=p(s),i(Zs.$$.fragment,s),Jn=p(s),x=e(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(x)!=="svelte-1eixyqa"&&(x.innerHTML=Ma),cn=p(s),zs=e(s,"P",{"data-svelte-h":!0}),y(zs)!=="svelte-1i6hrxm"&&(zs.textContent=ea),Un=p(s),i(Gs.$$.fragment,s),rn=p(s),Ss=e(s,"P",{"data-svelte-h":!0}),y(Ss)!=="svelte-ok7ajl"&&(Ss.textContent=ya),un=p(s),i(Ns.$$.fragment,s),Tn=p(s),i(vs.$$.fragment,s),on=p(s),g=e(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(g)!=="svelte-9yaeau"&&(g.innerHTML=ja),hn=p(s),_s=e(s,"P",{"data-svelte-h":!0}),y(_s)!=="svelte-sgfedo"&&(_s.textContent=ia),wn=p(s),i(Hs.$$.fragment,s),Cn=p(s),Ds=e(s,"P",{}),Ja(Ds).forEach(n),this.h()},h(){m(T,"name","hf:doc:metadata"),m(T,"content",ma),m(o,"class","tip"),m(h,"class","tip"),m(w,"class","tip"),m(C,"class","tip"),m(x,"class","tip"),m(g,"class","warning")},m(s,l){ha(document.head,T),a(s,Ws,l),a(s,Xs,l),a(s,Rs,l),J(I,s,l),a(s,Ys,l),J(d,s,l),a(s,Ks,l),a(s,f,l),a(s,Fs,l),J(b,s,l),a(s,Ps,l),a(s,o,l),a(s,Ls,l),J(q,s,l),a(s,Os,l),a(s,Q,l),a(s,sl,l),J(k,s,l),a(s,ll,l),a(s,A,l),a(s,nl,l),a(s,h,l),a(s,al,l),a(s,$,l),a(s,tl,l),a(s,B,l),a(s,pl,l),a(s,E,l),a(s,Ml,l),J(V,s,l),a(s,el,l),a(s,Z,l),a(s,yl,l),J(z,s,l),a(s,jl,l),a(s,G,l),a(s,il,l),a(s,S,l),a(s,Jl,l),J(N,s,l),a(s,cl,l),a(s,v,l),a(s,Ul,l),J(_,s,l),a(s,rl,l),a(s,H,l),a(s,ul,l),J(X,s,l),a(s,Tl,l),a(s,D,l),a(s,ol,l),a(s,w,l),a(s,hl,l),J(W,s,l),a(s,wl,l),a(s,R,l),a(s,Cl,l),a(s,Y,l),a(s,xl,l),a(s,K,l),a(s,gl,l),J(F,s,l),a(s,ml,l),a(s,P,l),a(s,Il,l),a(s,C,l),a(s,dl,l),J(L,s,l),a(s,fl,l),a(s,O,l),a(s,bl,l),a(s,ss,l),a(s,ql,l),J(ls,s,l),a(s,Ql,l),a(s,ns,l),a(s,kl,l),J(as,s,l),a(s,Al,l),a(s,ts,l),a(s,$l,l),J(ps,s,l),a(s,Bl,l),J(Ms,s,l),a(s,El,l),a(s,es,l),a(s,Vl,l),J(ys,s,l),a(s,Zl,l),J(js,s,l),a(s,zl,l),a(s,is,l),a(s,Gl,l),J(Js,s,l),a(s,Sl,l),a(s,cs,l),a(s,Nl,l),J(Us,s,l),a(s,vl,l),a(s,rs,l),a(s,_l,l),J(us,s,l),a(s,Hl,l),a(s,Ts,l),a(s,Xl,l),J(os,s,l),a(s,Dl,l),J(hs,s,l),a(s,Wl,l),a(s,ws,l),a(s,Rl,l),J(Cs,s,l),a(s,Yl,l),J(xs,s,l),a(s,Kl,l),a(s,gs,l),a(s,Fl,l),J(ms,s,l),a(s,Pl,l),a(s,Is,l),a(s,Ll,l),J(ds,s,l),a(s,Ol,l),a(s,fs,l),a(s,sn,l),J(bs,s,l),a(s,ln,l),J(qs,s,l),a(s,nn,l),a(s,Qs,l),a(s,an,l),J(ks,s,l),a(s,tn,l),a(s,As,l),a(s,pn,l),J($s,s,l),a(s,Mn,l),J(Bs,s,l),a(s,en,l),a(s,Es,l),a(s,yn,l),J(Vs,s,l),a(s,jn,l),J(Zs,s,l),a(s,Jn,l),a(s,x,l),a(s,cn,l),a(s,zs,l),a(s,Un,l),J(Gs,s,l),a(s,rn,l),a(s,Ss,l),a(s,un,l),J(Ns,s,l),a(s,Tn,l),J(vs,s,l),a(s,on,l),a(s,g,l),a(s,hn,l),a(s,_s,l),a(s,wn,l),J(Hs,s,l),a(s,Cn,l),a(s,Ds,l),xn=!0},p:Ua,i(s){xn||(c(I.$$.fragment,s),c(d.$$.fragment,s),c(b.$$.fragment,s),c(q.$$.fragment,s),c(k.$$.fragment,s),c(V.$$.fragment,s),c(z.$$.fragment,s),c(N.$$.fragment,s),c(_.$$.fragment,s),c(X.$$.fragment,s),c(W.$$.fragment,s),c(F.$$.fragment,s),c(L.$$.fragment,s),c(ls.$$.fragment,s),c(as.$$.fragment,s),c(ps.$$.fragment,s),c(Ms.$$.fragment,s),c(ys.$$.fragment,s),c(js.$$.fragment,s),c(Js.$$.fragment,s),c(Us.$$.fragment,s),c(us.$$.fragment,s),c(os.$$.fragment,s),c(hs.$$.fragment,s),c(Cs.$$.fragment,s),c(xs.$$.fragment,s),c(ms.$$.fragment,s),c(ds.$$.fragment,s),c(bs.$$.fragment,s),c(qs.$$.fragment,s),c(ks.$$.fragment,s),c($s.$$.fragment,s),c(Bs.$$.fragment,s),c(Vs.$$.fragment,s),c(Zs.$$.fragment,s),c(Gs.$$.fragment,s),c(Ns.$$.fragment,s),c(vs.$$.fragment,s),c(Hs.$$.fragment,s),xn=!0)},o(s){U(I.$$.fragment,s),U(d.$$.fragment,s),U(b.$$.fragment,s),U(q.$$.fragment,s),U(k.$$.fragment,s),U(V.$$.fragment,s),U(z.$$.fragment,s),U(N.$$.fragment,s),U(_.$$.fragment,s),U(X.$$.fragment,s),U(W.$$.fragment,s),U(F.$$.fragment,s),U(L.$$.fragment,s),U(ls.$$.fragment,s),U(as.$$.fragment,s),U(ps.$$.fragment,s),U(Ms.$$.fragment,s),U(ys.$$.fragment,s),U(js.$$.fragment,s),U(Js.$$.fragment,s),U(Us.$$.fragment,s),U(us.$$.fragment,s),U(os.$$.fragment,s),U(hs.$$.fragment,s),U(Cs.$$.fragment,s),U(xs.$$.fragment,s),U(ms.$$.fragment,s),U(ds.$$.fragment,s),U(bs.$$.fragment,s),U(qs.$$.fragment,s),U(ks.$$.fragment,s),U($s.$$.fragment,s),U(Bs.$$.fragment,s),U(Vs.$$.fragment,s),U(Zs.$$.fragment,s),U(Gs.$$.fragment,s),U(Ns.$$.fragment,s),U(vs.$$.fragment,s),U(Hs.$$.fragment,s),xn=!1},d(s){s&&(n(Ws),n(Xs),n(Rs),n(Ys),n(Ks),n(f),n(Fs),n(Ps),n(o),n(Ls),n(Os),n(Q),n(sl),n(ll),n(A),n(nl),n(h),n(al),n($),n(tl),n(B),n(pl),n(E),n(Ml),n(el),n(Z),n(yl),n(jl),n(G),n(il),n(S),n(Jl),n(cl),n(v),n(Ul),n(rl),n(H),n(ul),n(Tl),n(D),n(ol),n(w),n(hl),n(wl),n(R),n(Cl),n(Y),n(xl),n(K),n(gl),n(ml),n(P),n(Il),n(C),n(dl),n(fl),n(O),n(bl),n(ss),n(ql),n(Ql),n(ns),n(kl),n(Al),n(ts),n($l),n(Bl),n(El),n(es),n(Vl),n(Zl),n(zl),n(is),n(Gl),n(Sl),n(cs),n(Nl),n(vl),n(rs),n(_l),n(Hl),n(Ts),n(Xl),n(Dl),n(Wl),n(ws),n(Rl),n(Yl),n(Kl),n(gs),n(Fl),n(Pl),n(Is),n(Ll),n(Ol),n(fs),n(sn),n(ln),n(nn),n(Qs),n(an),n(tn),n(As),n(pn),n(Mn),n(en),n(Es),n(yn),n(jn),n(Jn),n(x),n(cn),n(zs),n(Un),n(rn),n(Ss),n(un),n(Tn),n(on),n(g),n(hn),n(_s),n(wn),n(Cn),n(Ds)),n(T),r(I,s),r(d,s),r(b,s),r(q,s),r(k,s),r(V,s),r(z,s),r(N,s),r(_,s),r(X,s),r(W,s),r(F,s),r(L,s),r(ls,s),r(as,s),r(ps,s),r(Ms,s),r(ys,s),r(js,s),r(Js,s),r(Us,s),r(us,s),r(os,s),r(hs,s),r(Cs,s),r(xs,s),r(ms,s),r(ds,s),r(bs,s),r(qs,s),r(ks,s),r($s,s),r(Bs,s),r(Vs,s),r(Zs,s),r(Gs,s),r(Ns,s),r(vs,s),r(Hs,s)}}}const ma='{"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 Ia(mn){return ra(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Aa extends ua{constructor(T){super(),Ta(this,T,Ia,ga,ca,{})}}export{Aa as component};

Xet Storage Details

Size:
69.7 kB
·
Xet hash:
780bce46ec88ce87a9b9f476790074016c6b9adb7e148366a350c33b1230d71e

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