Buckets:
| import{s as ra,n as ua,o as Ta}from"../chunks/scheduler.893fe8c9.js";import{S as oa,i as ha,e as M,s as t,c as j,h as wa,a as e,d as n,b as p,f as Ua,g as i,j as y,k as g,l as Ca,m as a,n as J,t as c,o as U,p as r}from"../chunks/index.2d09ebb4.js";import{C as xa,H as In,E as ma}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.fd8a275b.js";import{Y as ga}from"../chunks/Youtube.b7012d06.js";import{C as u}from"../chunks/CodeBlock.d42a674a.js";import{C as Ia}from"../chunks/CourseFloatingBanner.e3aeab73.js";function fa(fn){let T,Rs,Ds,Ys,I,Ks,f,Fs,d,Ls,b,dn="Byte-Pair Encoding (BPE) изначально была разработана как алгоритм для сжатия текстов, а затем использовалась OpenAI для токенизации при предварительном обучении модели GPT. Она используется во многих моделях трансформеров, включая GPT, GPT-2, RoBERTa, BART и DeBERTa.",Ps,q,Os,o,bn="<p>💡 В этом разделе подробно рассматривается BPE, вплоть до демонстрации полной реализации. Вы можете пропустить этот раздел, если вам нужен только общий обзор алгоритма токенизации.</p>",sl,Q,ll,k,qn="Обучение BPE начинается с вычисления уникального набора слов, используемых в корпусе (после завершения этапов нормализации и предварительной токенизации), затем создается словарь, в который заносятся все символы, используемые для записи этих слов. В качестве очень простого примера предположим, что в нашем корпусе используются следующие пять слов:",nl,A,al,$,Qn="Тогда базовым словарем будет <code>["b", "g", "h", "n", "p", "s", "u"]</code>. В реальном мире этот базовый словарь будет содержать, как минимум, все символы ASCII, а возможно, и некоторые символы Unicode. Если в примере, который вы обрабатываете, используется символ, которого нет в обучающем корпусе, этот символ будет преобразован в неизвестный токен. Это одна из причин, по которой многие модели NLP очень плохо анализируют контент с эмоджи, например.",tl,h,kn="<p>Токенизаторы GPT-2 и RoBERTa (которые довольно похожи) имеют умный способ решения этой проблемы: они рассматривают слова не как символы Unicode, а как байты. Таким образом, базовый словарь имеет небольшой размер (256), но все символы, которые вы можете придумать, все равно будут включены и не будут преобразованы в неизвестный токен. Этот трюк называется <em>byte-level BPE</em>.</p>",pl,B,An="После получения базового словаря мы добавляем новые токены, пока не достигнем желаемого объема словаря, обучаясь <em>слияниям</em>, которые представляют собой правила слияния двух элементов существующего словаря в новый. Таким образом, в начале эти слияния будут создавать токены с двумя символами, а затем, по мере обучения, более длинные подслова.",Ml,E,$n="На любом шаге обучения токенизатора алгоритм BPE будет искать наиболее частую пару существующих токенов (под “парой” здесь понимаются два последовательных токена в слове). Эта наиболее часто встречающаяся пара и будет объединена, после чего все повторяется для следующего шага.",el,V,Bn="Возвращаясь к нашему предыдущему примеру, предположим, что слова имеют следующую частоту:",yl,Z,jl,z,En="значение <code>" hug"</code> встречалось в корпусе 10 раз, <code>"pug"</code> - 5 раз, <code>"pun"</code> - 12 раз, <code>"bun"</code> - 4 раза, и <code>"hugs"</code> - 5 раз. Мы начинаем обучение с разбиения каждого слова на части символов (те, которые формируют наш начальный словарь), чтобы мы могли рассматривать каждое слово как список токенов:",il,G,Jl,S,Vn="Затем мы посмотрим на пары. Пара <code>("h", "u")</code> присутствует в словах <code>"hug"</code> и <code>"hugs"</code>, всего 15 раз в корпусе. Однако это не самая частая пара: эта честь принадлежит <code>("u", "g")</code>, которая присутствует в словах <code>"hug"</code>, <code>"pug"</code> и <code>"hugs"</code>, в общей сложности 20 раз в словаре.",cl,N,Zn="Таким образом, первое правило слияния, выученное токенизатором, - <code>("u", "g") -> "ug"</code>, что означает, что <code>"ug"</code> будет добавлено в словарь, и эта пара должна быть объединена во всех словах корпуса. В конце этого этапа словарь и корпус выглядят следующим образом:",Ul,v,rl,_,zn="Теперь у нас есть несколько пар, в результате которых получается токен длиннее двух символов: например, пара <code>("h", "ug")</code> (встречается в корпусе 15 раз). Самая частая пара на этом этапе - <code>("u", "n")</code>, однако она встречается в корпусе 16 раз, поэтому второе выученное правило слияния - <code>("u", "n") -> "un"</code>. Добавив это в словарь и объединив все существующие вхождения, мы получаем:",ul,H,Tl,X,Gn="Теперь наиболее частой парой является <code>("h", "ug")</code>, поэтому мы изучаем правило слияния <code>("h", "ug") -> "hug"</code>, что дает нам первый трехбуквенный токен. После слияния корпус выглядит следующим образом:",ol,D,hl,W,Sn="И продолжаем в том же духе, пока не достигнем желаемого размера словаря.",wl,w,Nn="<p>✏️ <strong>Теперь ваша очередь!</strong> Как вы думаете, каким будет следующее правило слияния?</p>",Cl,R,xl,Y,vn="Токенизация следует за процессом обучения в том смысле, что новые входные данные подвергаются токенизации путем применения следующих шагов:",ml,K,_n="<li>Нормализация</li> <li>Предварительная токенизация</li> <li>Разделение слов на отдельные символы</li> <li>Применение правил слияния, изученных по порядку, к этим частям</li>",gl,F,Hn="Возьмем пример, который мы использовали во время обучения, с тремя выученными правилами слияния:",Il,L,fl,P,Xn="Слово <code>"bug"</code> будет токенизировано как <code>["b", "ug"]</code>. Слово <code>"mug"</code>, однако, будет токенизировано как <code>["[UNK]", "ug"]</code>, поскольку буква <code>"m"</code> отсутствует в базовом словаре. Аналогично, слово <code>"thug" будет токенизировано как </code>[”[UNK]”, “hug”]<code>: буква </code>“t” отсутствует в базовом словаре, и применение правил слияния приводит сначала к слиянию <code>"u"</code> и <code>"g"</code>, а затем к слиянию <code>"h"</code> и <code>"ug"</code>.",dl,C,Dn="<p>✏️ <strong>Теперь ваша очередь!</strong> Как вы думаете, как будет токенизировано слово <code>'unhug'</code>?</p>",bl,O,ql,ss,Wn="Теперь давайте посмотрим на реализацию алгоритма BPE. Это не будет оптимизированная версия, которую вы сможете использовать на большом корпусе; мы просто хотим показать вам код, чтобы вы могли лучше понять алгоритм.",Ql,ls,Rn="Для начала нам нужен корпус текста, поэтому давайте создадим простой корпус с несколькими предложениями:",kl,ns,Al,as,Yn="Далее нам нужно предварительно токенизировать корпус в слова. Поскольку мы воспроизводим токенизатор BPE (например, GPT-2), для предварительной токенизации мы будем использовать токенизатор <code>gpt2</code>:",$l,ts,Bl,ps,Kn="Затем мы вычисляем частоту каждого слова в корпусе, как и при предварительной токенизации:",El,Ms,Vl,es,Zl,ys,Fn="Следующий шаг - составление базового словаря, состоящего из всех символов, используемых в корпусе:",zl,js,Gl,is,Sl,Js,Ln="Мы также добавляем специальные токены, используемые моделью, в начало этого словаря. В случае GPT-2 единственным специальным токеном является <code>"<|endoftext|>"</code>:",Nl,cs,vl,Us,Pn="Теперь нам нужно разделить каждое слово на отдельные символы, чтобы можно было начать обучение:",_l,rs,Hl,us,On="Теперь, когда мы готовы к обучению, давайте напишем функцию, которая вычисляет частоту каждой пары. Нам нужно будет использовать ее на каждом шаге обучения:",Xl,Ts,Dl,os,sa="Давайте посмотрим на часть этого словаря после первых разделений:",Wl,hs,Rl,ws,Yl,Cs,la="Теперь, чтобы найти наиболее часто встречающуюся пару, нужно всего лишь сделать быстрый цикл:",Kl,xs,Fl,ms,Ll,gs,na="Итак, первое слияние, которое нужно выучить, это <code>('Ġ', 't') -> 'Ġt'</code>, и мы добавляем <code>'Ġt'</code> в словарь:",Pl,Is,Ol,fs,aa="Чтобы продолжить, нам нужно применить это объединение в нашем экземпляре <code>splits</code> словаря. Давайте напишем для этого еще одну функцию:",sn,ds,ln,bs,ta="И мы можем посмотреть на результат первого слияния:",nn,qs,an,Qs,tn,ks,pa="Теперь у нас есть все, что нужно, чтобы проитерироваться до тех пор, пока мы не выучим все слияния, которые нам нужны. Пусть размер словаря будет 50:",pn,As,Mn,$s,Ma="В результате мы выучили 19 правил слияния (исходный словарь имел размер 31 - 30 символов в алфавите плюс специальный токен):",en,Bs,yn,Es,jn,Vs,ea="А словарь состоит из специального токена, начального алфавита и всех результатов слияния:",Jn,Zs,cn,zs,Un,x,ya="<p>💡 Использование <code>train_new_from_iterator()</code> на том же корпусе не приведет к созданию точно такого же словаря. Это связано с тем, что при выборе наиболее частотной пары мы выбираем первую попавшуюся, в то время как библиотека 🤗 Tokenizers выбирает первую пару, основываясь на ее внутренних ID.</p>",rn,Gs,ja="Чтобы токенизировать новый текст, мы предварительно токенизируем его, разбиваем на части, а затем применяем все изученные правила слияния:",un,Ss,Tn,Ns,ia="Мы можем попробовать это на любом тексте, состоящем из символов алфавита:",on,vs,hn,_s,wn,m,Ja="<p>⚠️ Наша реализация будет выбрасывать ошибку при наличии неизвестного символа, поскольку мы ничего не сделали для их обработки. На самом деле в GPT-2 нет неизвестного токена (невозможно получить неизвестный символ при использовании BPE на уровне байтов), но здесь это может произойти, поскольку мы не включили все возможные байты в начальный словарь. Этот аспект BPE выходит за рамки данного раздела, поэтому мы опустили подробности.</p>",Cn,Hs,ca="Вот и все об алгоритме BPE! Далее мы рассмотрим WordPiece.",xn,Xs,mn,Ws,gn;return I=new xa({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),f=new In({props:{title:"Токенизация Byte-Pair Encoding",local:"byte-pair-encoding-tokenization",headingTag:"h1"}}),d=new Ia({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 ga({props:{id:"HEikzVL-lZU"}}),Q=new In({props:{title:"Алгоритм обучения",local:"training-algorithm",headingTag:"h2"}}),A=new u({props:{code:"JTIyaHVnJTIyJTJDJTIwJTIycHVnJTIyJTJDJTIwJTIycHVuJTIyJTJDJTIwJTIyYnVuJTIyJTJDJTIwJTIyaHVncyUyMg==",highlighted:'<span class="hljs-string">"hug"</span>, <span class="hljs-string">"pug"</span>, <span class="hljs-string">"pun"</span>, <span class="hljs-string">"bun"</span>, <span class="hljs-string">"hugs"</span>',wrap:!1}}),Z=new u({props:{code:"KCUyMmh1ZyUyMiUyQyUyMDEwKSUyQyUyMCglMjJwdWclMjIlMkMlMjA1KSUyQyUyMCglMjJwdW4lMjIlMkMlMjAxMiklMkMlMjAoJTIyYnVuJTIyJTJDJTIwNCklMkMlMjAoJTIyaHVncyUyMiUyQyUyMDUp",highlighted:'(<span class="hljs-string">"hug"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">10</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">"pug"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">5</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">"pun"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">12</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">"bun"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">4</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">"hugs"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">5</span>)',wrap:!1}}),G=new u({props:{code:"KCUyMmglMjIlMjAlMjJ1JTIyJTIwJTIyZyUyMiUyQyUyMDEwKSUyQyUyMCglMjJwJTIyJTIwJTIydSUyMiUyMCUyMmclMjIlMkMlMjA1KSUyQyUyMCglMjJwJTIyJTIwJTIydSUyMiUyMCUyMm4lMjIlMkMlMjAxMiklMkMlMjAoJTIyYiUyMiUyMCUyMnUlMjIlMjAlMjJuJTIyJTJDJTIwNCklMkMlMjAoJTIyaCUyMiUyMCUyMnUlMjIlMjAlMjJnJTIyJTIwJTIycyUyMiUyQyUyMDUp",highlighted:'(<span class="hljs-string">"h"</span> <span class="hljs-string">"u"</span> <span class="hljs-string">"g"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">10</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">"p"</span> <span class="hljs-string">"u"</span> <span class="hljs-string">"g"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">5</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">"p"</span> <span class="hljs-string">"u"</span> <span class="hljs-string">"n"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">12</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">"b"</span> <span class="hljs-string">"u"</span> <span class="hljs-string">"n"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">4</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">"h"</span> <span class="hljs-string">"u"</span> <span class="hljs-string">"g"</span> <span class="hljs-string">"s"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">5</span>)',wrap:!1}}),v=new u({props:{code:"Vm9jYWJ1bGFyeSUzQSUyMCU1QiUyMmIlMjIlMkMlMjAlMjJnJTIyJTJDJTIwJTIyaCUyMiUyQyUyMCUyMm4lMjIlMkMlMjAlMjJwJTIyJTJDJTIwJTIycyUyMiUyQyUyMCUyMnUlMjIlMkMlMjAlMjJ1ZyUyMiU1RCUwQUNvcnB1cyUzQSUyMCglMjJoJTIyJTIwJTIydWclMjIlMkMlMjAxMCklMkMlMjAoJTIycCUyMiUyMCUyMnVnJTIyJTJDJTIwNSklMkMlMjAoJTIycCUyMiUyMCUyMnUlMjIlMjAlMjJuJTIyJTJDJTIwMTIpJTJDJTIwKCUyMmIlMjIlMjAlMjJ1JTIyJTIwJTIybiUyMiUyQyUyMDQpJTJDJTIwKCUyMmglMjIlMjAlMjJ1ZyUyMiUyMCUyMnMlMjIlMkMlMjA1KQ==",highlighted:`<span class="hljs-symbol">Vocabulary:</span> [<span class="hljs-string">"b"</span>, <span class="hljs-string">"g"</span>, <span class="hljs-string">"h"</span>, <span class="hljs-string">"n"</span>, <span class="hljs-string">"p"</span>, <span class="hljs-string">"s"</span>, <span class="hljs-string">"u"</span>, <span class="hljs-string">"ug"</span>] | |
| <span class="hljs-symbol">Corpus:</span> (<span class="hljs-string">"h"</span> <span class="hljs-string">"ug"</span>, <span class="hljs-number">10</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"ug"</span>, <span class="hljs-number">5</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"u"</span> <span class="hljs-string">"n"</span>, <span class="hljs-number">12</span>), (<span class="hljs-string">"b"</span> <span class="hljs-string">"u"</span> <span class="hljs-string">"n"</span>, <span class="hljs-number">4</span>), (<span class="hljs-string">"h"</span> <span class="hljs-string">"ug"</span> <span class="hljs-string">"s"</span>, <span class="hljs-number">5</span>)`,wrap:!1}}),H=new u({props:{code:"Vm9jYWJ1bGFyeSUzQSUyMCU1QiUyMmIlMjIlMkMlMjAlMjJnJTIyJTJDJTIwJTIyaCUyMiUyQyUyMCUyMm4lMjIlMkMlMjAlMjJwJTIyJTJDJTIwJTIycyUyMiUyQyUyMCUyMnUlMjIlMkMlMjAlMjJ1ZyUyMiUyQyUyMCUyMnVuJTIyJTVEJTBBQ29ycHVzJTNBJTIwKCUyMmglMjIlMjAlMjJ1ZyUyMiUyQyUyMDEwKSUyQyUyMCglMjJwJTIyJTIwJTIydWclMjIlMkMlMjA1KSUyQyUyMCglMjJwJTIyJTIwJTIydW4lMjIlMkMlMjAxMiklMkMlMjAoJTIyYiUyMiUyMCUyMnVuJTIyJTJDJTIwNCklMkMlMjAoJTIyaCUyMiUyMCUyMnVnJTIyJTIwJTIycyUyMiUyQyUyMDUp",highlighted:`<span class="hljs-symbol">Vocabulary:</span> [<span class="hljs-string">"b"</span>, <span class="hljs-string">"g"</span>, <span class="hljs-string">"h"</span>, <span class="hljs-string">"n"</span>, <span class="hljs-string">"p"</span>, <span class="hljs-string">"s"</span>, <span class="hljs-string">"u"</span>, <span class="hljs-string">"ug"</span>, <span class="hljs-string">"un"</span>] | |
| <span class="hljs-symbol">Corpus:</span> (<span class="hljs-string">"h"</span> <span class="hljs-string">"ug"</span>, <span class="hljs-number">10</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"ug"</span>, <span class="hljs-number">5</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"un"</span>, <span class="hljs-number">12</span>), (<span class="hljs-string">"b"</span> <span class="hljs-string">"un"</span>, <span class="hljs-number">4</span>), (<span class="hljs-string">"h"</span> <span class="hljs-string">"ug"</span> <span class="hljs-string">"s"</span>, <span class="hljs-number">5</span>)`,wrap:!1}}),D=new u({props:{code:"Vm9jYWJ1bGFyeSUzQSUyMCU1QiUyMmIlMjIlMkMlMjAlMjJnJTIyJTJDJTIwJTIyaCUyMiUyQyUyMCUyMm4lMjIlMkMlMjAlMjJwJTIyJTJDJTIwJTIycyUyMiUyQyUyMCUyMnUlMjIlMkMlMjAlMjJ1ZyUyMiUyQyUyMCUyMnVuJTIyJTJDJTIwJTIyaHVnJTIyJTVEJTBBQ29ycHVzJTNBJTIwKCUyMmh1ZyUyMiUyQyUyMDEwKSUyQyUyMCglMjJwJTIyJTIwJTIydWclMjIlMkMlMjA1KSUyQyUyMCglMjJwJTIyJTIwJTIydW4lMjIlMkMlMjAxMiklMkMlMjAoJTIyYiUyMiUyMCUyMnVuJTIyJTJDJTIwNCklMkMlMjAoJTIyaHVnJTIyJTIwJTIycyUyMiUyQyUyMDUp",highlighted:`<span class="hljs-symbol">Vocabulary:</span> [<span class="hljs-string">"b"</span>, <span class="hljs-string">"g"</span>, <span class="hljs-string">"h"</span>, <span class="hljs-string">"n"</span>, <span class="hljs-string">"p"</span>, <span class="hljs-string">"s"</span>, <span class="hljs-string">"u"</span>, <span class="hljs-string">"ug"</span>, <span class="hljs-string">"un"</span>, <span class="hljs-string">"hug"</span>] | |
| <span class="hljs-symbol">Corpus:</span> (<span class="hljs-string">"hug"</span>, <span class="hljs-number">10</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"ug"</span>, <span class="hljs-number">5</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"un"</span>, <span class="hljs-number">12</span>), (<span class="hljs-string">"b"</span> <span class="hljs-string">"un"</span>, <span class="hljs-number">4</span>), (<span class="hljs-string">"hug"</span> <span class="hljs-string">"s"</span>, <span class="hljs-number">5</span>)`,wrap:!1}}),R=new In({props:{title:"Алгоритм токенизации",local:"tokenization-algorithm",headingTag:"h2"}}),L=new u({props:{code:"KCUyMnUlMjIlMkMlMjAlMjJnJTIyKSUyMC0lM0UlMjAlMjJ1ZyUyMiUwQSglMjJ1JTIyJTJDJTIwJTIybiUyMiklMjAtJTNFJTIwJTIydW4lMjIlMEEoJTIyaCUyMiUyQyUyMCUyMnVnJTIyKSUyMC0lM0UlMjAlMjJodWclMjI=",highlighted:`<span class="hljs-function"><span class="hljs-params">(<span class="hljs-string">"u"</span>, <span class="hljs-string">"g"</span>)</span> -></span> <span class="hljs-string">"ug"</span> | |
| <span class="hljs-function"><span class="hljs-params">(<span class="hljs-string">"u"</span>, <span class="hljs-string">"n"</span>)</span> -></span> <span class="hljs-string">"un"</span> | |
| <span class="hljs-function"><span class="hljs-params">(<span class="hljs-string">"h"</span>, <span class="hljs-string">"ug"</span>)</span> -></span> <span class="hljs-string">"hug"</span>`,wrap:!1}}),O=new In({props:{title:"Реализация BPE",local:"implementing-bpe",headingTag:"h2"}}),ns=new u({props:{code:"Y29ycHVzJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIyVGhpcyUyMGlzJTIwdGhlJTIwSHVnZ2luZyUyMEZhY2UlMjBDb3Vyc2UuJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyVGhpcyUyMGNoYXB0ZXIlMjBpcyUyMGFib3V0JTIwdG9rZW5pemF0aW9uLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMlRoaXMlMjBzZWN0aW9uJTIwc2hvd3MlMjBzZXZlcmFsJTIwdG9rZW5pemVyJTIwYWxnb3JpdGhtcy4lMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJIb3BlZnVsbHklMkMlMjB5b3UlMjB3aWxsJTIwYmUlMjBhYmxlJTIwdG8lMjB1bmRlcnN0YW5kJTIwaG93JTIwdGhleSUyMGFyZSUyMHRyYWluZWQlMjBhbmQlMjBnZW5lcmF0ZSUyMHRva2Vucy4lMjIlMkMlMEElNUQ=",highlighted:`corpus = [ | |
| <span class="hljs-string">"This is the Hugging Face Course."</span>, | |
| <span class="hljs-string">"This chapter is about tokenization."</span>, | |
| <span class="hljs-string">"This section shows several tokenizer algorithms."</span>, | |
| <span class="hljs-string">"Hopefully, you will be able to understand how they are trained and generate tokens."</span>, | |
| ]`,wrap:!1}}),ts=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">"gpt2"</span>)`,wrap:!1}}),Ms=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}}),es=new u({props:{code:"ZGVmYXVsdGRpY3QoaW50JTJDJTIwJTdCJ1RoaXMnJTNBJTIwMyUyQyUyMCclQzQlQTBpcyclM0ElMjAyJTJDJTIwJyVDNCVBMHRoZSclM0ElMjAxJTJDJTIwJyVDNCVBMEh1Z2dpbmcnJTNBJTIwMSUyQyUyMCclQzQlQTBGYWNlJyUzQSUyMDElMkMlMjAnJUM0JUEwQ291cnNlJyUzQSUyMDElMkMlMjAnLiclM0ElMjA0JTJDJTIwJyVDNCVBMGNoYXB0ZXInJTNBJTIwMSUyQyUwQSUyMCUyMCUyMCUyMCclQzQlQTBhYm91dCclM0ElMjAxJTJDJTIwJyVDNCVBMHRva2VuaXphdGlvbiclM0ElMjAxJTJDJTIwJyVDNCVBMHNlY3Rpb24nJTNBJTIwMSUyQyUyMCclQzQlQTBzaG93cyclM0ElMjAxJTJDJTIwJyVDNCVBMHNldmVyYWwnJTNBJTIwMSUyQyUyMCclQzQlQTB0b2tlbml6ZXInJTNBJTIwMSUyQyUyMCclQzQlQTBhbGdvcml0aG1zJyUzQSUyMDElMkMlMEElMjAlMjAlMjAlMjAnSG9wZWZ1bGx5JyUzQSUyMDElMkMlMjAnJTJDJyUzQSUyMDElMkMlMjAnJUM0JUEweW91JyUzQSUyMDElMkMlMjAnJUM0JUEwd2lsbCclM0ElMjAxJTJDJTIwJyVDNCVBMGJlJyUzQSUyMDElMkMlMjAnJUM0JUEwYWJsZSclM0ElMjAxJTJDJTIwJyVDNCVBMHRvJyUzQSUyMDElMkMlMjAnJUM0JUEwdW5kZXJzdGFuZCclM0ElMjAxJTJDJTIwJyVDNCVBMGhvdyclM0ElMjAxJTJDJTBBJTIwJTIwJTIwJTIwJyVDNCVBMHRoZXknJTNBJTIwMSUyQyUyMCclQzQlQTBhcmUnJTNBJTIwMSUyQyUyMCclQzQlQTB0cmFpbmVkJyUzQSUyMDElMkMlMjAnJUM0JUEwYW5kJyUzQSUyMDElMkMlMjAnJUM0JUEwZ2VuZXJhdGUnJTNBJTIwMSUyQyUyMCclQzQlQTB0b2tlbnMnJTNBJTIwMSU3RCk=",highlighted:`defaultdict(<span class="hljs-built_in">int</span>, {<span class="hljs-string">'This'</span>: <span class="hljs-number">3</span>, <span class="hljs-string">'Ġis'</span>: <span class="hljs-number">2</span>, <span class="hljs-string">'Ġthe'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'ĠHugging'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'ĠFace'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'ĠCourse'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'.'</span>: <span class="hljs-number">4</span>, <span class="hljs-string">'Ġchapter'</span>: <span class="hljs-number">1</span>, | |
| <span class="hljs-string">'Ġabout'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġtokenization'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġsection'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġshows'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġseveral'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġtokenizer'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġalgorithms'</span>: <span class="hljs-number">1</span>, | |
| <span class="hljs-string">'Hopefully'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">','</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġyou'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġwill'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġbe'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġable'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġto'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġunderstand'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġhow'</span>: <span class="hljs-number">1</span>, | |
| <span class="hljs-string">'Ġthey'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġare'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġtrained'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġand'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġgenerate'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġtokens'</span>: <span class="hljs-number">1</span>})`,wrap:!1}}),js=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}}),is=new u({props:{code:"JTVCJTIwJyUyQyclMkMlMjAnLiclMkMlMjAnQyclMkMlMjAnRiclMkMlMjAnSCclMkMlMjAnVCclMkMlMjAnYSclMkMlMjAnYiclMkMlMjAnYyclMkMlMjAnZCclMkMlMjAnZSclMkMlMjAnZiclMkMlMjAnZyclMkMlMjAnaCclMkMlMjAnaSclMkMlMjAnayclMkMlMjAnbCclMkMlMjAnbSclMkMlMjAnbiclMkMlMjAnbyclMkMlMjAncCclMkMlMjAnciclMkMlMjAncyclMkMlMEElMjAlMjAndCclMkMlMjAndSclMkMlMjAndiclMkMlMjAndyclMkMlMjAneSclMkMlMjAneiclMkMlMjAnJUM0JUEwJyU1RA==",highlighted:`[ <span class="hljs-string">','</span>, <span class="hljs-string">'.'</span>, <span class="hljs-string">'C'</span>, <span class="hljs-string">'F'</span>, <span class="hljs-string">'H'</span>, <span class="hljs-string">'T'</span>, <span class="hljs-string">'a'</span>, <span class="hljs-string">'b'</span>, <span class="hljs-string">'c'</span>, <span class="hljs-string">'d'</span>, <span class="hljs-string">'e'</span>, <span class="hljs-string">'f'</span>, <span class="hljs-string">'g'</span>, <span class="hljs-string">'h'</span>, <span class="hljs-string">'i'</span>, <span class="hljs-string">'k'</span>, <span class="hljs-string">'l'</span>, <span class="hljs-string">'m'</span>, <span class="hljs-string">'n'</span>, <span class="hljs-string">'o'</span>, <span class="hljs-string">'p'</span>, <span class="hljs-string">'r'</span>, <span class="hljs-string">'s'</span>, | |
| <span class="hljs-string">'t'</span>, <span class="hljs-string">'u'</span>, <span class="hljs-string">'v'</span>, <span class="hljs-string">'w'</span>, <span class="hljs-string">'y'</span>, <span class="hljs-string">'z'</span>, <span class="hljs-string">'Ġ'</span>]`,wrap:!1}}),cs=new u({props:{code:"dm9jYWIlMjAlM0QlMjAlNUIlMjIlM0MlN0NlbmRvZnRleHQlN0MlM0UlMjIlNUQlMjAlMkIlMjBhbHBoYWJldC5jb3B5KCk=",highlighted:'vocab = [<span class="hljs-string">"<|endoftext|>"</span>] + alphabet.copy()',wrap:!1}}),rs=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}}),Ts=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}}),hs=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"<span class="hljs-subst">{key}</span>: <span class="hljs-subst">{pair_freqs[key]}</span>"</span>) | |
| <span class="hljs-keyword">if</span> i >= <span class="hljs-number">5</span>: | |
| <span class="hljs-keyword">break</span>`,wrap:!1}}),ws=new u({props:{code:"KCdUJyUyQyUyMCdoJyklM0ElMjAzJTBBKCdoJyUyQyUyMCdpJyklM0ElMjAzJTBBKCdpJyUyQyUyMCdzJyklM0ElMjA1JTBBKCclQzQlQTAnJTJDJTIwJ2knKSUzQSUyMDIlMEEoJyVDNCVBMCclMkMlMjAndCcpJTNBJTIwNyUwQSgndCclMkMlMjAnaCcpJTNBJTIwMw==",highlighted:`(<span class="hljs-string">'T'</span>, <span class="hljs-string">'h'</span>): <span class="hljs-number">3</span> | |
| (<span class="hljs-string">'h'</span>, <span class="hljs-string">'i'</span>): <span class="hljs-number">3</span> | |
| (<span class="hljs-string">'i'</span>, <span class="hljs-string">'s'</span>): <span class="hljs-number">5</span> | |
| (<span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'i'</span>): <span class="hljs-number">2</span> | |
| (<span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'t'</span>): <span class="hljs-number">7</span> | |
| (<span class="hljs-string">'t'</span>, <span class="hljs-string">'h'</span>): <span class="hljs-number">3</span>`,wrap:!1}}),xs=new u({props:{code:"YmVzdF9wYWlyJTIwJTNEJTIwJTIyJTIyJTBBbWF4X2ZyZXElMjAlM0QlMjBOb25lJTBBJTBBZm9yJTIwcGFpciUyQyUyMGZyZXElMjBpbiUyMHBhaXJfZnJlcXMuaXRlbXMoKSUzQSUwQSUyMCUyMCUyMCUyMGlmJTIwbWF4X2ZyZXElMjBpcyUyME5vbmUlMjBvciUyMG1heF9mcmVxJTIwJTNDJTIwZnJlcSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJlc3RfcGFpciUyMCUzRCUyMHBhaXIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtYXhfZnJlcSUyMCUzRCUyMGZyZXElMEElMEFwcmludChiZXN0X3BhaXIlMkMlMjBtYXhfZnJlcSk=",highlighted:`best_pair = <span class="hljs-string">""</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 < freq: | |
| best_pair = pair | |
| max_freq = freq | |
| <span class="hljs-built_in">print</span>(best_pair, max_freq)`,wrap:!1}}),ms=new u({props:{code:"KCclQzQlQTAnJTJDJTIwJ3QnKSUyMDc=",highlighted:'(<span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'t'</span>) <span class="hljs-number">7</span>',wrap:!1}}),Is=new u({props:{code:"bWVyZ2VzJTIwJTNEJTIwJTdCKCUyMiVDNCVBMCUyMiUyQyUyMCUyMnQlMjIpJTNBJTIwJTIyJUM0JUEwdCUyMiU3RCUwQXZvY2FiLmFwcGVuZCglMjIlQzQlQTB0JTIyKQ==",highlighted:`merges = {(<span class="hljs-string">"Ġ"</span>, <span class="hljs-string">"t"</span>): <span class="hljs-string">"Ġt"</span>} | |
| vocab.append(<span class="hljs-string">"Ġt"</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 < <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 u({props:{code:"c3BsaXRzJTIwJTNEJTIwbWVyZ2VfcGFpciglMjIlQzQlQTAlMjIlMkMlMjAlMjJ0JTIyJTJDJTIwc3BsaXRzKSUwQXByaW50KHNwbGl0cyU1QiUyMiVDNCVBMHRyYWluZWQlMjIlNUQp",highlighted:`splits = merge_pair(<span class="hljs-string">"Ġ"</span>, <span class="hljs-string">"t"</span>, splits) | |
| <span class="hljs-built_in">print</span>(splits[<span class="hljs-string">"Ġtrained"</span>])`,wrap:!1}}),Qs=new u({props:{code:"JTVCJyVDNCVBMHQnJTJDJTIwJ3InJTJDJTIwJ2EnJTJDJTIwJ2knJTJDJTIwJ24nJTJDJTIwJ2UnJTJDJTIwJ2QnJTVE",highlighted:'[<span class="hljs-string">'Ġt'</span>, <span class="hljs-string">'r'</span>, <span class="hljs-string">'a'</span>, <span class="hljs-string">'i'</span>, <span class="hljs-string">'n'</span>, <span class="hljs-string">'e'</span>, <span class="hljs-string">'d'</span>]',wrap:!1}}),As=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) < vocab_size: | |
| pair_freqs = compute_pair_freqs(splits) | |
| best_pair = <span class="hljs-string">""</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 < 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}}),Bs=new u({props:{code:"cHJpbnQobWVyZ2VzKQ==",highlighted:'<span class="hljs-built_in">print</span>(merges)',wrap:!1}}),Es=new u({props:{code:"JTdCKCclQzQlQTAnJTJDJTIwJ3QnKSUzQSUyMCclQzQlQTB0JyUyQyUyMCgnaSclMkMlMjAncycpJTNBJTIwJ2lzJyUyQyUyMCgnZSclMkMlMjAncicpJTNBJTIwJ2VyJyUyQyUyMCgnJUM0JUEwJyUyQyUyMCdhJyklM0ElMjAnJUM0JUEwYSclMkMlMjAoJyVDNCVBMHQnJTJDJTIwJ28nKSUzQSUyMCclQzQlQTB0byclMkMlMjAoJ2UnJTJDJTIwJ24nKSUzQSUyMCdlbiclMkMlMEElMjAoJ1QnJTJDJTIwJ2gnKSUzQSUyMCdUaCclMkMlMjAoJ1RoJyUyQyUyMCdpcycpJTNBJTIwJ1RoaXMnJTJDJTIwKCdvJyUyQyUyMCd1JyklM0ElMjAnb3UnJTJDJTIwKCdzJyUyQyUyMCdlJyklM0ElMjAnc2UnJTJDJTIwKCclQzQlQTB0byclMkMlMjAnaycpJTNBJTIwJyVDNCVBMHRvayclMkMlMEElMjAoJyVDNCVBMHRvayclMkMlMjAnZW4nKSUzQSUyMCclQzQlQTB0b2tlbiclMkMlMjAoJ24nJTJDJTIwJ2QnKSUzQSUyMCduZCclMkMlMjAoJyVDNCVBMCclMkMlMjAnaXMnKSUzQSUyMCclQzQlQTBpcyclMkMlMjAoJyVDNCVBMHQnJTJDJTIwJ2gnKSUzQSUyMCclQzQlQTB0aCclMkMlMjAoJyVDNCVBMHRoJyUyQyUyMCdlJyklM0ElMjAnJUM0JUEwdGhlJyUyQyUwQSUyMCgnaSclMkMlMjAnbicpJTNBJTIwJ2luJyUyQyUyMCgnJUM0JUEwYSclMkMlMjAnYicpJTNBJTIwJyVDNCVBMGFiJyUyQyUyMCgnJUM0JUEwdG9rZW4nJTJDJTIwJ2knKSUzQSUyMCclQzQlQTB0b2tlbmknJTdE",highlighted:`{(<span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'t'</span>): <span class="hljs-string">'Ġt'</span>, (<span class="hljs-string">'i'</span>, <span class="hljs-string">'s'</span>): <span class="hljs-string">'is'</span>, (<span class="hljs-string">'e'</span>, <span class="hljs-string">'r'</span>): <span class="hljs-string">'er'</span>, (<span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'a'</span>): <span class="hljs-string">'Ġa'</span>, (<span class="hljs-string">'Ġt'</span>, <span class="hljs-string">'o'</span>): <span class="hljs-string">'Ġto'</span>, (<span class="hljs-string">'e'</span>, <span class="hljs-string">'n'</span>): <span class="hljs-string">'en'</span>, | |
| (<span class="hljs-string">'T'</span>, <span class="hljs-string">'h'</span>): <span class="hljs-string">'Th'</span>, (<span class="hljs-string">'Th'</span>, <span class="hljs-string">'is'</span>): <span class="hljs-string">'This'</span>, (<span class="hljs-string">'o'</span>, <span class="hljs-string">'u'</span>): <span class="hljs-string">'ou'</span>, (<span class="hljs-string">'s'</span>, <span class="hljs-string">'e'</span>): <span class="hljs-string">'se'</span>, (<span class="hljs-string">'Ġto'</span>, <span class="hljs-string">'k'</span>): <span class="hljs-string">'Ġtok'</span>, | |
| (<span class="hljs-string">'Ġtok'</span>, <span class="hljs-string">'en'</span>): <span class="hljs-string">'Ġtoken'</span>, (<span class="hljs-string">'n'</span>, <span class="hljs-string">'d'</span>): <span class="hljs-string">'nd'</span>, (<span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'is'</span>): <span class="hljs-string">'Ġis'</span>, (<span class="hljs-string">'Ġt'</span>, <span class="hljs-string">'h'</span>): <span class="hljs-string">'Ġth'</span>, (<span class="hljs-string">'Ġth'</span>, <span class="hljs-string">'e'</span>): <span class="hljs-string">'Ġthe'</span>, | |
| (<span class="hljs-string">'i'</span>, <span class="hljs-string">'n'</span>): <span class="hljs-string">'in'</span>, (<span class="hljs-string">'Ġa'</span>, <span class="hljs-string">'b'</span>): <span class="hljs-string">'Ġab'</span>, (<span class="hljs-string">'Ġtoken'</span>, <span class="hljs-string">'i'</span>): <span class="hljs-string">'Ġtokeni'</span>}`,wrap:!1}}),Zs=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">'<|endoftext|>'</span>, <span class="hljs-string">','</span>, <span class="hljs-string">'.'</span>, <span class="hljs-string">'C'</span>, <span class="hljs-string">'F'</span>, <span class="hljs-string">'H'</span>, <span class="hljs-string">'T'</span>, <span class="hljs-string">'a'</span>, <span class="hljs-string">'b'</span>, <span class="hljs-string">'c'</span>, <span class="hljs-string">'d'</span>, <span class="hljs-string">'e'</span>, <span class="hljs-string">'f'</span>, <span class="hljs-string">'g'</span>, <span class="hljs-string">'h'</span>, <span class="hljs-string">'i'</span>, <span class="hljs-string">'k'</span>, <span class="hljs-string">'l'</span>, <span class="hljs-string">'m'</span>, <span class="hljs-string">'n'</span>, <span class="hljs-string">'o'</span>, | |
| <span class="hljs-string">'p'</span>, <span class="hljs-string">'r'</span>, <span class="hljs-string">'s'</span>, <span class="hljs-string">'t'</span>, <span class="hljs-string">'u'</span>, <span class="hljs-string">'v'</span>, <span class="hljs-string">'w'</span>, <span class="hljs-string">'y'</span>, <span class="hljs-string">'z'</span>, <span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'Ġt'</span>, <span class="hljs-string">'is'</span>, <span class="hljs-string">'er'</span>, <span class="hljs-string">'Ġa'</span>, <span class="hljs-string">'Ġto'</span>, <span class="hljs-string">'en'</span>, <span class="hljs-string">'Th'</span>, <span class="hljs-string">'This'</span>, <span class="hljs-string">'ou'</span>, <span class="hljs-string">'se'</span>, | |
| <span class="hljs-string">'Ġtok'</span>, <span class="hljs-string">'Ġtoken'</span>, <span class="hljs-string">'nd'</span>, <span class="hljs-string">'Ġis'</span>, <span class="hljs-string">'Ġth'</span>, <span class="hljs-string">'Ġthe'</span>, <span class="hljs-string">'in'</span>, <span class="hljs-string">'Ġab'</span>, <span class="hljs-string">'Ġtokeni'</span>]`,wrap:!1}}),Ss=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 < <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}}),vs=new u({props:{code:"dG9rZW5pemUoJTIyVGhpcyUyMGlzJTIwbm90JTIwYSUyMHRva2VuLiUyMik=",highlighted:'tokenize(<span class="hljs-string">"This is not a token."</span>)',wrap:!1}}),_s=new u({props:{code:"JTVCJ1RoaXMnJTJDJTIwJyVDNCVBMGlzJyUyQyUyMCclQzQlQTAnJTJDJTIwJ24nJTJDJTIwJ28nJTJDJTIwJ3QnJTJDJTIwJyVDNCVBMGEnJTJDJTIwJyVDNCVBMHRva2VuJyUyQyUyMCcuJyU1RA==",highlighted:'[<span class="hljs-string">'This'</span>, <span class="hljs-string">'Ġis'</span>, <span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'n'</span>, <span class="hljs-string">'o'</span>, <span class="hljs-string">'t'</span>, <span class="hljs-string">'Ġa'</span>, <span class="hljs-string">'Ġtoken'</span>, <span class="hljs-string">'.'</span>]',wrap:!1}}),Xs=new ma({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ru/chapter6/5.mdx"}}),{c(){T=M("meta"),Rs=t(),Ds=M("p"),Ys=t(),j(I.$$.fragment),Ks=t(),j(f.$$.fragment),Fs=t(),j(d.$$.fragment),Ls=t(),b=M("p"),b.textContent=dn,Ps=t(),j(q.$$.fragment),Os=t(),o=M("blockquote"),o.innerHTML=bn,sl=t(),j(Q.$$.fragment),ll=t(),k=M("p"),k.textContent=qn,nl=t(),j(A.$$.fragment),al=t(),$=M("p"),$.innerHTML=Qn,tl=t(),h=M("blockquote"),h.innerHTML=kn,pl=t(),B=M("p"),B.innerHTML=An,Ml=t(),E=M("p"),E.textContent=$n,el=t(),V=M("p"),V.textContent=Bn,yl=t(),j(Z.$$.fragment),jl=t(),z=M("p"),z.innerHTML=En,il=t(),j(G.$$.fragment),Jl=t(),S=M("p"),S.innerHTML=Vn,cl=t(),N=M("p"),N.innerHTML=Zn,Ul=t(),j(v.$$.fragment),rl=t(),_=M("p"),_.innerHTML=zn,ul=t(),j(H.$$.fragment),Tl=t(),X=M("p"),X.innerHTML=Gn,ol=t(),j(D.$$.fragment),hl=t(),W=M("p"),W.textContent=Sn,wl=t(),w=M("blockquote"),w.innerHTML=Nn,Cl=t(),j(R.$$.fragment),xl=t(),Y=M("p"),Y.textContent=vn,ml=t(),K=M("ol"),K.innerHTML=_n,gl=t(),F=M("p"),F.textContent=Hn,Il=t(),j(L.$$.fragment),fl=t(),P=M("p"),P.innerHTML=Xn,dl=t(),C=M("blockquote"),C.innerHTML=Dn,bl=t(),j(O.$$.fragment),ql=t(),ss=M("p"),ss.textContent=Wn,Ql=t(),ls=M("p"),ls.textContent=Rn,kl=t(),j(ns.$$.fragment),Al=t(),as=M("p"),as.innerHTML=Yn,$l=t(),j(ts.$$.fragment),Bl=t(),ps=M("p"),ps.textContent=Kn,El=t(),j(Ms.$$.fragment),Vl=t(),j(es.$$.fragment),Zl=t(),ys=M("p"),ys.textContent=Fn,zl=t(),j(js.$$.fragment),Gl=t(),j(is.$$.fragment),Sl=t(),Js=M("p"),Js.innerHTML=Ln,Nl=t(),j(cs.$$.fragment),vl=t(),Us=M("p"),Us.textContent=Pn,_l=t(),j(rs.$$.fragment),Hl=t(),us=M("p"),us.textContent=On,Xl=t(),j(Ts.$$.fragment),Dl=t(),os=M("p"),os.textContent=sa,Wl=t(),j(hs.$$.fragment),Rl=t(),j(ws.$$.fragment),Yl=t(),Cs=M("p"),Cs.textContent=la,Kl=t(),j(xs.$$.fragment),Fl=t(),j(ms.$$.fragment),Ll=t(),gs=M("p"),gs.innerHTML=na,Pl=t(),j(Is.$$.fragment),Ol=t(),fs=M("p"),fs.innerHTML=aa,sn=t(),j(ds.$$.fragment),ln=t(),bs=M("p"),bs.textContent=ta,nn=t(),j(qs.$$.fragment),an=t(),j(Qs.$$.fragment),tn=t(),ks=M("p"),ks.textContent=pa,pn=t(),j(As.$$.fragment),Mn=t(),$s=M("p"),$s.textContent=Ma,en=t(),j(Bs.$$.fragment),yn=t(),j(Es.$$.fragment),jn=t(),Vs=M("p"),Vs.textContent=ea,Jn=t(),j(Zs.$$.fragment),cn=t(),j(zs.$$.fragment),Un=t(),x=M("blockquote"),x.innerHTML=ya,rn=t(),Gs=M("p"),Gs.textContent=ja,un=t(),j(Ss.$$.fragment),Tn=t(),Ns=M("p"),Ns.textContent=ia,on=t(),j(vs.$$.fragment),hn=t(),j(_s.$$.fragment),wn=t(),m=M("blockquote"),m.innerHTML=Ja,Cn=t(),Hs=M("p"),Hs.textContent=ca,xn=t(),j(Xs.$$.fragment),mn=t(),Ws=M("p"),this.h()},l(s){const l=wa("svelte-u9bgzb",document.head);T=e(l,"META",{name:!0,content:!0}),l.forEach(n),Rs=p(s),Ds=e(s,"P",{}),Ua(Ds).forEach(n),Ys=p(s),i(I.$$.fragment,s),Ks=p(s),i(f.$$.fragment,s),Fs=p(s),i(d.$$.fragment,s),Ls=p(s),b=e(s,"P",{"data-svelte-h":!0}),y(b)!=="svelte-eaj6yc"&&(b.textContent=dn),Ps=p(s),i(q.$$.fragment,s),Os=p(s),o=e(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(o)!=="svelte-ar77d4"&&(o.innerHTML=bn),sl=p(s),i(Q.$$.fragment,s),ll=p(s),k=e(s,"P",{"data-svelte-h":!0}),y(k)!=="svelte-19hcv1f"&&(k.textContent=qn),nl=p(s),i(A.$$.fragment,s),al=p(s),$=e(s,"P",{"data-svelte-h":!0}),y($)!=="svelte-14pgves"&&($.innerHTML=Qn),tl=p(s),h=e(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(h)!=="svelte-mvgo6b"&&(h.innerHTML=kn),pl=p(s),B=e(s,"P",{"data-svelte-h":!0}),y(B)!=="svelte-1yidhm0"&&(B.innerHTML=An),Ml=p(s),E=e(s,"P",{"data-svelte-h":!0}),y(E)!=="svelte-19o9d39"&&(E.textContent=$n),el=p(s),V=e(s,"P",{"data-svelte-h":!0}),y(V)!=="svelte-bclbxw"&&(V.textContent=Bn),yl=p(s),i(Z.$$.fragment,s),jl=p(s),z=e(s,"P",{"data-svelte-h":!0}),y(z)!=="svelte-1svhn5f"&&(z.innerHTML=En),il=p(s),i(G.$$.fragment,s),Jl=p(s),S=e(s,"P",{"data-svelte-h":!0}),y(S)!=="svelte-1v2r224"&&(S.innerHTML=Vn),cl=p(s),N=e(s,"P",{"data-svelte-h":!0}),y(N)!=="svelte-1czjk8r"&&(N.innerHTML=Zn),Ul=p(s),i(v.$$.fragment,s),rl=p(s),_=e(s,"P",{"data-svelte-h":!0}),y(_)!=="svelte-yjdndm"&&(_.innerHTML=zn),ul=p(s),i(H.$$.fragment,s),Tl=p(s),X=e(s,"P",{"data-svelte-h":!0}),y(X)!=="svelte-15tola0"&&(X.innerHTML=Gn),ol=p(s),i(D.$$.fragment,s),hl=p(s),W=e(s,"P",{"data-svelte-h":!0}),y(W)!=="svelte-1td587j"&&(W.textContent=Sn),wl=p(s),w=e(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(w)!=="svelte-14kxtfn"&&(w.innerHTML=Nn),Cl=p(s),i(R.$$.fragment,s),xl=p(s),Y=e(s,"P",{"data-svelte-h":!0}),y(Y)!=="svelte-1e9demv"&&(Y.textContent=vn),ml=p(s),K=e(s,"OL",{"data-svelte-h":!0}),y(K)!=="svelte-33m93k"&&(K.innerHTML=_n),gl=p(s),F=e(s,"P",{"data-svelte-h":!0}),y(F)!=="svelte-1j1l7yl"&&(F.textContent=Hn),Il=p(s),i(L.$$.fragment,s),fl=p(s),P=e(s,"P",{"data-svelte-h":!0}),y(P)!=="svelte-qspggk"&&(P.innerHTML=Xn),dl=p(s),C=e(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(C)!=="svelte-ubgzdn"&&(C.innerHTML=Dn),bl=p(s),i(O.$$.fragment,s),ql=p(s),ss=e(s,"P",{"data-svelte-h":!0}),y(ss)!=="svelte-267xwa"&&(ss.textContent=Wn),Ql=p(s),ls=e(s,"P",{"data-svelte-h":!0}),y(ls)!=="svelte-cgxv49"&&(ls.textContent=Rn),kl=p(s),i(ns.$$.fragment,s),Al=p(s),as=e(s,"P",{"data-svelte-h":!0}),y(as)!=="svelte-5h6bfa"&&(as.innerHTML=Yn),$l=p(s),i(ts.$$.fragment,s),Bl=p(s),ps=e(s,"P",{"data-svelte-h":!0}),y(ps)!=="svelte-8r9jet"&&(ps.textContent=Kn),El=p(s),i(Ms.$$.fragment,s),Vl=p(s),i(es.$$.fragment,s),Zl=p(s),ys=e(s,"P",{"data-svelte-h":!0}),y(ys)!=="svelte-1uiue0y"&&(ys.textContent=Fn),zl=p(s),i(js.$$.fragment,s),Gl=p(s),i(is.$$.fragment,s),Sl=p(s),Js=e(s,"P",{"data-svelte-h":!0}),y(Js)!=="svelte-66ut2j"&&(Js.innerHTML=Ln),Nl=p(s),i(cs.$$.fragment,s),vl=p(s),Us=e(s,"P",{"data-svelte-h":!0}),y(Us)!=="svelte-r6bb7j"&&(Us.textContent=Pn),_l=p(s),i(rs.$$.fragment,s),Hl=p(s),us=e(s,"P",{"data-svelte-h":!0}),y(us)!=="svelte-17td1y2"&&(us.textContent=On),Xl=p(s),i(Ts.$$.fragment,s),Dl=p(s),os=e(s,"P",{"data-svelte-h":!0}),y(os)!=="svelte-1jqphuk"&&(os.textContent=sa),Wl=p(s),i(hs.$$.fragment,s),Rl=p(s),i(ws.$$.fragment,s),Yl=p(s),Cs=e(s,"P",{"data-svelte-h":!0}),y(Cs)!=="svelte-p5rfjw"&&(Cs.textContent=la),Kl=p(s),i(xs.$$.fragment,s),Fl=p(s),i(ms.$$.fragment,s),Ll=p(s),gs=e(s,"P",{"data-svelte-h":!0}),y(gs)!=="svelte-18yy5ox"&&(gs.innerHTML=na),Pl=p(s),i(Is.$$.fragment,s),Ol=p(s),fs=e(s,"P",{"data-svelte-h":!0}),y(fs)!=="svelte-1truv5b"&&(fs.innerHTML=aa),sn=p(s),i(ds.$$.fragment,s),ln=p(s),bs=e(s,"P",{"data-svelte-h":!0}),y(bs)!=="svelte-hv4pw2"&&(bs.textContent=ta),nn=p(s),i(qs.$$.fragment,s),an=p(s),i(Qs.$$.fragment,s),tn=p(s),ks=e(s,"P",{"data-svelte-h":!0}),y(ks)!=="svelte-127xmvz"&&(ks.textContent=pa),pn=p(s),i(As.$$.fragment,s),Mn=p(s),$s=e(s,"P",{"data-svelte-h":!0}),y($s)!=="svelte-g2y7zp"&&($s.textContent=Ma),en=p(s),i(Bs.$$.fragment,s),yn=p(s),i(Es.$$.fragment,s),jn=p(s),Vs=e(s,"P",{"data-svelte-h":!0}),y(Vs)!=="svelte-pm4clv"&&(Vs.textContent=ea),Jn=p(s),i(Zs.$$.fragment,s),cn=p(s),i(zs.$$.fragment,s),Un=p(s),x=e(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(x)!=="svelte-1eixyqa"&&(x.innerHTML=ya),rn=p(s),Gs=e(s,"P",{"data-svelte-h":!0}),y(Gs)!=="svelte-1i6hrxm"&&(Gs.textContent=ja),un=p(s),i(Ss.$$.fragment,s),Tn=p(s),Ns=e(s,"P",{"data-svelte-h":!0}),y(Ns)!=="svelte-ok7ajl"&&(Ns.textContent=ia),on=p(s),i(vs.$$.fragment,s),hn=p(s),i(_s.$$.fragment,s),wn=p(s),m=e(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(m)!=="svelte-9yaeau"&&(m.innerHTML=Ja),Cn=p(s),Hs=e(s,"P",{"data-svelte-h":!0}),y(Hs)!=="svelte-sgfedo"&&(Hs.textContent=ca),xn=p(s),i(Xs.$$.fragment,s),mn=p(s),Ws=e(s,"P",{}),Ua(Ws).forEach(n),this.h()},h(){g(T,"name","hf:doc:metadata"),g(T,"content",da),g(o,"class","tip"),g(h,"class","tip"),g(w,"class","tip"),g(C,"class","tip"),g(x,"class","tip"),g(m,"class","warning")},m(s,l){Ca(document.head,T),a(s,Rs,l),a(s,Ds,l),a(s,Ys,l),J(I,s,l),a(s,Ks,l),J(f,s,l),a(s,Fs,l),J(d,s,l),a(s,Ls,l),a(s,b,l),a(s,Ps,l),J(q,s,l),a(s,Os,l),a(s,o,l),a(s,sl,l),J(Q,s,l),a(s,ll,l),a(s,k,l),a(s,nl,l),J(A,s,l),a(s,al,l),a(s,$,l),a(s,tl,l),a(s,h,l),a(s,pl,l),a(s,B,l),a(s,Ml,l),a(s,E,l),a(s,el,l),a(s,V,l),a(s,yl,l),J(Z,s,l),a(s,jl,l),a(s,z,l),a(s,il,l),J(G,s,l),a(s,Jl,l),a(s,S,l),a(s,cl,l),a(s,N,l),a(s,Ul,l),J(v,s,l),a(s,rl,l),a(s,_,l),a(s,ul,l),J(H,s,l),a(s,Tl,l),a(s,X,l),a(s,ol,l),J(D,s,l),a(s,hl,l),a(s,W,l),a(s,wl,l),a(s,w,l),a(s,Cl,l),J(R,s,l),a(s,xl,l),a(s,Y,l),a(s,ml,l),a(s,K,l),a(s,gl,l),a(s,F,l),a(s,Il,l),J(L,s,l),a(s,fl,l),a(s,P,l),a(s,dl,l),a(s,C,l),a(s,bl,l),J(O,s,l),a(s,ql,l),a(s,ss,l),a(s,Ql,l),a(s,ls,l),a(s,kl,l),J(ns,s,l),a(s,Al,l),a(s,as,l),a(s,$l,l),J(ts,s,l),a(s,Bl,l),a(s,ps,l),a(s,El,l),J(Ms,s,l),a(s,Vl,l),J(es,s,l),a(s,Zl,l),a(s,ys,l),a(s,zl,l),J(js,s,l),a(s,Gl,l),J(is,s,l),a(s,Sl,l),a(s,Js,l),a(s,Nl,l),J(cs,s,l),a(s,vl,l),a(s,Us,l),a(s,_l,l),J(rs,s,l),a(s,Hl,l),a(s,us,l),a(s,Xl,l),J(Ts,s,l),a(s,Dl,l),a(s,os,l),a(s,Wl,l),J(hs,s,l),a(s,Rl,l),J(ws,s,l),a(s,Yl,l),a(s,Cs,l),a(s,Kl,l),J(xs,s,l),a(s,Fl,l),J(ms,s,l),a(s,Ll,l),a(s,gs,l),a(s,Pl,l),J(Is,s,l),a(s,Ol,l),a(s,fs,l),a(s,sn,l),J(ds,s,l),a(s,ln,l),a(s,bs,l),a(s,nn,l),J(qs,s,l),a(s,an,l),J(Qs,s,l),a(s,tn,l),a(s,ks,l),a(s,pn,l),J(As,s,l),a(s,Mn,l),a(s,$s,l),a(s,en,l),J(Bs,s,l),a(s,yn,l),J(Es,s,l),a(s,jn,l),a(s,Vs,l),a(s,Jn,l),J(Zs,s,l),a(s,cn,l),J(zs,s,l),a(s,Un,l),a(s,x,l),a(s,rn,l),a(s,Gs,l),a(s,un,l),J(Ss,s,l),a(s,Tn,l),a(s,Ns,l),a(s,on,l),J(vs,s,l),a(s,hn,l),J(_s,s,l),a(s,wn,l),a(s,m,l),a(s,Cn,l),a(s,Hs,l),a(s,xn,l),J(Xs,s,l),a(s,mn,l),a(s,Ws,l),gn=!0},p:ua,i(s){gn||(c(I.$$.fragment,s),c(f.$$.fragment,s),c(d.$$.fragment,s),c(q.$$.fragment,s),c(Q.$$.fragment,s),c(A.$$.fragment,s),c(Z.$$.fragment,s),c(G.$$.fragment,s),c(v.$$.fragment,s),c(H.$$.fragment,s),c(D.$$.fragment,s),c(R.$$.fragment,s),c(L.$$.fragment,s),c(O.$$.fragment,s),c(ns.$$.fragment,s),c(ts.$$.fragment,s),c(Ms.$$.fragment,s),c(es.$$.fragment,s),c(js.$$.fragment,s),c(is.$$.fragment,s),c(cs.$$.fragment,s),c(rs.$$.fragment,s),c(Ts.$$.fragment,s),c(hs.$$.fragment,s),c(ws.$$.fragment,s),c(xs.$$.fragment,s),c(ms.$$.fragment,s),c(Is.$$.fragment,s),c(ds.$$.fragment,s),c(qs.$$.fragment,s),c(Qs.$$.fragment,s),c(As.$$.fragment,s),c(Bs.$$.fragment,s),c(Es.$$.fragment,s),c(Zs.$$.fragment,s),c(zs.$$.fragment,s),c(Ss.$$.fragment,s),c(vs.$$.fragment,s),c(_s.$$.fragment,s),c(Xs.$$.fragment,s),gn=!0)},o(s){U(I.$$.fragment,s),U(f.$$.fragment,s),U(d.$$.fragment,s),U(q.$$.fragment,s),U(Q.$$.fragment,s),U(A.$$.fragment,s),U(Z.$$.fragment,s),U(G.$$.fragment,s),U(v.$$.fragment,s),U(H.$$.fragment,s),U(D.$$.fragment,s),U(R.$$.fragment,s),U(L.$$.fragment,s),U(O.$$.fragment,s),U(ns.$$.fragment,s),U(ts.$$.fragment,s),U(Ms.$$.fragment,s),U(es.$$.fragment,s),U(js.$$.fragment,s),U(is.$$.fragment,s),U(cs.$$.fragment,s),U(rs.$$.fragment,s),U(Ts.$$.fragment,s),U(hs.$$.fragment,s),U(ws.$$.fragment,s),U(xs.$$.fragment,s),U(ms.$$.fragment,s),U(Is.$$.fragment,s),U(ds.$$.fragment,s),U(qs.$$.fragment,s),U(Qs.$$.fragment,s),U(As.$$.fragment,s),U(Bs.$$.fragment,s),U(Es.$$.fragment,s),U(Zs.$$.fragment,s),U(zs.$$.fragment,s),U(Ss.$$.fragment,s),U(vs.$$.fragment,s),U(_s.$$.fragment,s),U(Xs.$$.fragment,s),gn=!1},d(s){s&&(n(Rs),n(Ds),n(Ys),n(Ks),n(Fs),n(Ls),n(b),n(Ps),n(Os),n(o),n(sl),n(ll),n(k),n(nl),n(al),n($),n(tl),n(h),n(pl),n(B),n(Ml),n(E),n(el),n(V),n(yl),n(jl),n(z),n(il),n(Jl),n(S),n(cl),n(N),n(Ul),n(rl),n(_),n(ul),n(Tl),n(X),n(ol),n(hl),n(W),n(wl),n(w),n(Cl),n(xl),n(Y),n(ml),n(K),n(gl),n(F),n(Il),n(fl),n(P),n(dl),n(C),n(bl),n(ql),n(ss),n(Ql),n(ls),n(kl),n(Al),n(as),n($l),n(Bl),n(ps),n(El),n(Vl),n(Zl),n(ys),n(zl),n(Gl),n(Sl),n(Js),n(Nl),n(vl),n(Us),n(_l),n(Hl),n(us),n(Xl),n(Dl),n(os),n(Wl),n(Rl),n(Yl),n(Cs),n(Kl),n(Fl),n(Ll),n(gs),n(Pl),n(Ol),n(fs),n(sn),n(ln),n(bs),n(nn),n(an),n(tn),n(ks),n(pn),n(Mn),n($s),n(en),n(yn),n(jn),n(Vs),n(Jn),n(cn),n(Un),n(x),n(rn),n(Gs),n(un),n(Tn),n(Ns),n(on),n(hn),n(wn),n(m),n(Cn),n(Hs),n(xn),n(mn),n(Ws)),n(T),r(I,s),r(f,s),r(d,s),r(q,s),r(Q,s),r(A,s),r(Z,s),r(G,s),r(v,s),r(H,s),r(D,s),r(R,s),r(L,s),r(O,s),r(ns,s),r(ts,s),r(Ms,s),r(es,s),r(js,s),r(is,s),r(cs,s),r(rs,s),r(Ts,s),r(hs,s),r(ws,s),r(xs,s),r(ms,s),r(Is,s),r(ds,s),r(qs,s),r(Qs,s),r(As,s),r(Bs,s),r(Es,s),r(Zs,s),r(zs,s),r(Ss,s),r(vs,s),r(_s,s),r(Xs,s)}}}const da='{"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 ba(fn){return Ta(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Ea extends oa{constructor(T){super(),ha(this,T,ba,fa,ra,{})}}export{Ea as component}; | |
Xet Storage Details
- Size:
- 70 kB
- Xet hash:
- 6b0520ba4c6833feb4fe8a7c8dc6c318c3ac3771b8d435f0780b2c33e9115b68
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.