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