Buckets:

rtrm's picture
download
raw
26.5 kB
import{s as kt,o as xt,n as jt}from"../chunks/scheduler.37c15a92.js";import{S as wt,i as Ut,g as p,s as l,r as m,A as Ct,h as i,f as n,c as a,j as Tt,u as o,x as r,k as Fe,y as vt,a as s,v as c,d as u,t as f,w as $}from"../chunks/index.2bf4358c.js";import{T as _t}from"../chunks/Tip.363c041f.js";import{Y as Jt}from"../chunks/Youtube.1e50a667.js";import{C as d}from"../chunks/CodeBlock.4e987730.js";import{C as zt}from"../chunks/CourseFloatingBanner.9ff4c771.js";import{H as re,E as It}from"../chunks/getInferenceSnippets.ebf8be91.js";function Ht(me){let y,b="✏️ <strong>Попробуйте!</strong> Загрузите токенизатор из контрольной точки <code>bert-base-cased</code> и передайте ему тот же пример. Какие основные различия вы можете увидеть между версией токенизатора cased и uncased?";return{c(){y=p("p"),y.innerHTML=b},l(M){y=i(M,"P",{"data-svelte-h":!0}),r(y)!=="svelte-1mxwqcf"&&(y.innerHTML=b)},m(M,pe){s(M,y,pe)},p:jt,d(M){M&&n(y)}}}function Pt(me){let y,b,M,pe,T,oe,J,ce,k,Oe="Прежде чем мы более подробно рассмотрим три наиболее распространенных алгоритма токенизации подслов, используемых в моделях Transformer (Byte-Pair Encoding [BPE], WordPiece и Unigram), мы сначала рассмотрим предварительную обработку, которую каждый токенизатор применяет к тексту. Вот высокоуровневый обзор этапов конвейера токенизации:",ue,g,et='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter6/tokenization_pipeline.svg" alt="The tokenization pipeline."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter6/tokenization_pipeline-dark.svg" alt="The tokenization pipeline."/>',fe,x,tt="Перед тем как разбить текст на подтокены (в соответствии со выбранной моделью), токенизатор выполняет два шага: <em>нормализацию</em> и <em>претокенизацию</em>.",$e,j,ye,w,Me,U,nt='Шаг нормализации включает в себя некоторую общую очистку, например, удаление ненужных пробельных символов, понижение регистра и/или удаление ударений. Если вы знакомы с <a href="http://www.unicode.org/reports/tr15/" rel="nofollow">Unicode normalization</a> (например, NFC или NFKC), это также может быть применено токенизатором.',de,C,st="У 🤗 Transformers <code>tokenizer</code> есть атрибут <code>backend_tokenizer</code>, который предоставляет доступ к базовому токенизатору из библиотеки 🤗 Tokenizers:",ge,v,he,_,be,z,lt="Атрибут <code>normalizer</code> объекта <code>tokenizer</code> имеет метод <code>normalize_str()</code>, который мы можем использовать, чтобы увидеть, как выполняется нормализация:",Te,I,Je,H,ke,P,at="В этом примере, поскольку мы выбрали контрольную точку <code>bert-base-uncased</code>, нормализация применила нижний регистр и удалила ударения.",xe,h,je,Z,we,L,Ue,Q,pt='Как мы увидим в следующих разделах, токенизатор не может быть обучен только на сыром тексте. Сначала необходимо разбить текст на небольшие части, например, на слова. Именно в этом и заключается этап предварительной токенизации. Как мы видели в <a href="../chapter2/1">Главе 2</a>, токенизатор на основе слов (word-based tokenizer) может просто разбить необработанный текст на слова по пробелам и знакам пунктуации. Эти слова станут границами подтокенов, которые токенизатор сможет выучить в процессе обучения.',Ce,V,it="Чтобы увидеть, как быстрый токенизатор выполняет предварительную токенизацию, мы можем воспользоваться методом <code>pre_tokenize_str()</code> атрибута <code>pre_tokenizer</code> объекта <code>tokenizer</code>:",ve,X,_e,D,ze,E,rt="Обратите внимание, что токенизатор уже следит за смещениями, и именно поэтому он может дать нам сопоставление смещений, которое мы использовали в предыдущем разделе. Здесь токенизатор игнорирует два пробела и заменяет их одним, но смещение перескакивает между <code>are</code> и <code>you</code>, чтобы учесть это.",Ie,G,mt="Поскольку мы используем токенизатор BERT, предварительная токенизация включает часть пробельных символов и пунктуацию. Другие токенизаторы могут иметь другие правила для этого шага. Например, если мы используем токенизатор GPT-2:",He,W,Pe,S,ot="он также выполнит разбиение по пробельным символам и пунктуации, но сохранит пробелы и заменит их символом <code>Ġ</code>, что позволит ему восстановить исходные пробелы, если мы декодируем токены:",Ze,A,Le,B,ct="Также обратите внимание, что в отличие от токенизатора BERT, этот токенизатор не игнорирует двойной пробел.",Qe,R,ut="В качестве последнего примера рассмотрим токенизатор T5, основанный на алгоритме SentencePiece:",Ve,K,Xe,q,De,Y,ft="Как и токенизатор GPT-2, этот сохраняет пробелы и заменяет их специальным токеном (<code>_</code>), но токенизатор T5 делает разбиение только по пробелам, а не по знакам препинания. Также обратите внимание, что он по умолчанию добавляет пробел в начале предложения (перед <code>Hello</code>) и игнорирует двойной пробел между <code>are</code> и <code>you</code>.",Ee,N,$t="Теперь, когда мы немного познакомились с тем, как обрабатывают текст различные токенизаторы, можно приступить к изучению самих алгоритмов, лежащих в их основе. Мы начнем с краткого обзора широко применяемого SentencePiece; затем, в следующих трех разделах, мы рассмотрим, как работают три основных алгоритма, используемых для токенизации по подсловам.",Ge,F,We,O,yt='<a href="https://github.com/google/sentencepiece" rel="nofollow">SentencePiece</a> - это алгоритм токенизации для предварительной обработки текста, который можно использовать с любой из моделей, которые мы рассмотрим в следующих трех разделах. Он рассматривает текст как последовательность символов Unicode и заменяет пробелы специальным символом <code>▁</code>. При использовании в сочетании с алгоритмом Unigram (см. <a href="../chapter7/7">раздел 7</a>) он даже не требует шага предварительной токенизации, что очень полезно для языков, где символ пробела не используется (например, китайского или японского).',Se,ee,Mt="Другой главной особенностью SentencePiece является <em>обратимая токенизация</em>: поскольку в нем нет специальной обработки пробелов, декодирование токенов осуществляется просто путем их конкатенации и замены <code>_</code> на пробелы - в результате получается нормализованный текст. Как мы видели ранее, токенизатор BERT удаляет повторяющиеся пробелы, поэтому его токенизация не является обратимой.",Ae,te,Be,ne,dt="В следующих разделах мы рассмотрим три основных алгоритма токенизации по подсловам: BPE (используется в GPT-2 и других моделях), WordPiece (используется, например, в BERT) и Unigram (используется в T5 и других моделях). Прежде чем мы приступим, вот краткий обзор того, как работает каждый из них. Не стесняйтесь возвращаться к этой таблице после прочтения каждого из следующих разделов, если вам еще не все понятно.",Re,se,gt='<thead><tr><th align="center">Model</th> <th align="center">BPE</th> <th align="center">WordPiece</th> <th align="center">Unigram</th></tr></thead> <tbody><tr><td align="center">Обучение</td> <td align="center">Начинается с маленького словаря и изучает правила слияния токенов</td> <td align="center">Начинается с маленького словаря и изучает правила слияния токенов</td> <td align="center">Начинается с большого словаря и изучает правила удаления токенов</td></tr> <tr><td align="center">Шаг обучения</td> <td align="center">Объединяет токены, соответствующие наиболее часто встречающейся паре</td> <td align="center">Объединяет токены, соответствующие паре с наилучшей оценкой, основанной на частоте пары, отдавая предпочтение парам, где каждый отдельный токен встречается реже</td> <td align="center">Удаляет все токены в словаре, что минимизирует потери, вычисленные для всего корпуса.</td></tr> <tr><td align="center">Обучение</td> <td align="center">Слияние правил и словаря</td> <td align="center">Только словарь</td> <td align="center">Словарь с оценкой каждого токена</td></tr> <tr><td align="center">Кодирование</td> <td align="center">Разбивает слово на символы и применяет слияния, полученные во время обучения</td> <td align="center">Находит самое длинное подслово, начиная с начала, которое есть в словаре, затем делает то же самое для остальной части слова</td> <td align="center">Находит наиболее вероятное разбиение на токены, используя оценки, полученные во время обучения</td></tr></tbody>',Ke,le,ht="А теперь давайте погрузимся в BPE!",qe,ae,Ye,ie,Ne;return T=new re({props:{title:"Нормализация и предварительная токенизация",local:"normalization-and-pre-tokenization",headingTag:"h1"}}),J=new zt({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/section4.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter6/section4.ipynb"}]}}),j=new re({props:{title:"Нормализация",local:"normalization",headingTag:"h2"}}),w=new Jt({props:{id:"4IIC2jI9CaU"}}),v=new d({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtdW5jYXNlZCUyMiklMEFwcmludCh0eXBlKHRva2VuaXplci5iYWNrZW5kX3Rva2VuaXplcikp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;bert-base-uncased&quot;</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-built_in">type</span>(tokenizer.backend_tokenizer))`,wrap:!1}}),_=new d({props:{code:"JTNDY2xhc3MlMjAndG9rZW5pemVycy5Ub2tlbml6ZXInJTNF",highlighted:'&lt;<span class="hljs-keyword">class</span> <span class="hljs-string">&#x27;tokenizers.Tokenizer&#x27;</span>&gt;',wrap:!1}}),I=new d({props:{code:"cHJpbnQodG9rZW5pemVyLmJhY2tlbmRfdG9rZW5pemVyLm5vcm1hbGl6ZXIubm9ybWFsaXplX3N0ciglMjJIJUMzJUE5bGwlQzMlQjIlMjBoJUMzJUI0dyUyMGFyZSUyMCVDMyVCQyUzRiUyMikp",highlighted:'<span class="hljs-built_in">print</span>(tokenizer.backend_tokenizer.normalizer.normalize_str(<span class="hljs-string">&quot;Héllò hôw are ü?&quot;</span>))',wrap:!1}}),H=new d({props:{code:"J2hlbGxvJTIwaG93JTIwYXJlJTIwdSUzRic=",highlighted:'<span class="hljs-string">&#x27;hello how are u?&#x27;</span>',wrap:!1}}),h=new _t({props:{$$slots:{default:[Ht]},$$scope:{ctx:me}}}),Z=new re({props:{title:"Предварительная токенизация",local:"pre-tokenization",headingTag:"h2"}}),L=new Jt({props:{id:"grlLV8AIXug"}}),X=new d({props:{code:"dG9rZW5pemVyLmJhY2tlbmRfdG9rZW5pemVyLnByZV90b2tlbml6ZXIucHJlX3Rva2VuaXplX3N0ciglMjJIZWxsbyUyQyUyMGhvdyUyMGFyZSUyMCUyMHlvdSUzRiUyMik=",highlighted:'tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str(<span class="hljs-string">&quot;Hello, how are you?&quot;</span>)',wrap:!1}}),D=new d({props:{code:"JTVCKCdIZWxsbyclMkMlMjAoMCUyQyUyMDUpKSUyQyUyMCgnJTJDJyUyQyUyMCg1JTJDJTIwNikpJTJDJTIwKCdob3cnJTJDJTIwKDclMkMlMjAxMCkpJTJDJTIwKCdhcmUnJTJDJTIwKDExJTJDJTIwMTQpKSUyQyUyMCgneW91JyUyQyUyMCgxNiUyQyUyMDE5KSklMkMlMjAoJyUzRiclMkMlMjAoMTklMkMlMjAyMCkpJTVE",highlighted:'[(<span class="hljs-string">&#x27;Hello&#x27;</span>, (<span class="hljs-number">0</span>, <span class="hljs-number">5</span>)), (<span class="hljs-string">&#x27;,&#x27;</span>, (<span class="hljs-number">5</span>, <span class="hljs-number">6</span>)), (<span class="hljs-string">&#x27;how&#x27;</span>, (<span class="hljs-number">7</span>, <span class="hljs-number">10</span>)), (<span class="hljs-string">&#x27;are&#x27;</span>, (<span class="hljs-number">11</span>, <span class="hljs-number">14</span>)), (<span class="hljs-string">&#x27;you&#x27;</span>, (<span class="hljs-number">16</span>, <span class="hljs-number">19</span>)), (<span class="hljs-string">&#x27;?&#x27;</span>, (<span class="hljs-number">19</span>, <span class="hljs-number">20</span>))]',wrap:!1}}),W=new d({props:{code:"dG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQoJTIyZ3B0MiUyMiklMEF0b2tlbml6ZXIuYmFja2VuZF90b2tlbml6ZXIucHJlX3Rva2VuaXplci5wcmVfdG9rZW5pemVfc3RyKCUyMkhlbGxvJTJDJTIwaG93JTIwYXJlJTIwJTIweW91JTNGJTIyKQ==",highlighted:`tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;gpt2&quot;</span>)
tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str(<span class="hljs-string">&quot;Hello, how are you?&quot;</span>)`,wrap:!1}}),A=new d({props:{code:"JTVCKCdIZWxsbyclMkMlMjAoMCUyQyUyMDUpKSUyQyUyMCgnJTJDJyUyQyUyMCg1JTJDJTIwNikpJTJDJTIwKCclQzQlQTBob3cnJTJDJTIwKDYlMkMlMjAxMCkpJTJDJTIwKCclQzQlQTBhcmUnJTJDJTIwKDEwJTJDJTIwMTQpKSUyQyUyMCgnJUM0JUEwJyUyQyUyMCgxNCUyQyUyMDE1KSklMkMlMjAoJyVDNCVBMHlvdSclMkMlMjAoMTUlMkMlMjAxOSkpJTJDJTBBJTIwKCclM0YnJTJDJTIwKDE5JTJDJTIwMjApKSU1RA==",highlighted:`[(<span class="hljs-string">&#x27;Hello&#x27;</span>, (<span class="hljs-number">0</span>, <span class="hljs-number">5</span>)), (<span class="hljs-string">&#x27;,&#x27;</span>, (<span class="hljs-number">5</span>, <span class="hljs-number">6</span>)), (<span class="hljs-string">&#x27;Ġhow&#x27;</span>, (<span class="hljs-number">6</span>, <span class="hljs-number">10</span>)), (<span class="hljs-string">&#x27;Ġare&#x27;</span>, (<span class="hljs-number">10</span>, <span class="hljs-number">14</span>)), (<span class="hljs-string">&#x27;Ġ&#x27;</span>, (<span class="hljs-number">14</span>, <span class="hljs-number">15</span>)), (<span class="hljs-string">&#x27;Ġyou&#x27;</span>, (<span class="hljs-number">15</span>, <span class="hljs-number">19</span>)),
(<span class="hljs-string">&#x27;?&#x27;</span>, (<span class="hljs-number">19</span>, <span class="hljs-number">20</span>))]`,wrap:!1}}),K=new d({props:{code:"dG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQoJTIydDUtc21hbGwlMjIpJTBBdG9rZW5pemVyLmJhY2tlbmRfdG9rZW5pemVyLnByZV90b2tlbml6ZXIucHJlX3Rva2VuaXplX3N0ciglMjJIZWxsbyUyQyUyMGhvdyUyMGFyZSUyMCUyMHlvdSUzRiUyMik=",highlighted:`tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;t5-small&quot;</span>)
tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str(<span class="hljs-string">&quot;Hello, how are you?&quot;</span>)`,wrap:!1}}),q=new d({props:{code:"JTVCKCclRTIlOTYlODFIZWxsbyUyQyclMkMlMjAoMCUyQyUyMDYpKSUyQyUyMCgnJUUyJTk2JTgxaG93JyUyQyUyMCg3JTJDJTIwMTApKSUyQyUyMCgnJUUyJTk2JTgxYXJlJyUyQyUyMCgxMSUyQyUyMDE0KSklMkMlMjAoJyVFMiU5NiU4MXlvdSUzRiclMkMlMjAoMTYlMkMlMjAyMCkpJTVE",highlighted:'[(<span class="hljs-string">&#x27;▁Hello,&#x27;</span>, (<span class="hljs-number">0</span>, <span class="hljs-number">6</span>)), (<span class="hljs-string">&#x27;▁how&#x27;</span>, (<span class="hljs-number">7</span>, <span class="hljs-number">10</span>)), (<span class="hljs-string">&#x27;▁are&#x27;</span>, (<span class="hljs-number">11</span>, <span class="hljs-number">14</span>)), (<span class="hljs-string">&#x27;▁you?&#x27;</span>, (<span class="hljs-number">16</span>, <span class="hljs-number">20</span>))]',wrap:!1}}),F=new re({props:{title:"SentencePiece",local:"sentencepiece",headingTag:"h2"}}),te=new re({props:{title:"Обзор алгоритма",local:"algorithm-overview",headingTag:"h2"}}),ae=new It({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ru/chapter6/4.mdx"}}),{c(){y=p("meta"),b=l(),M=p("p"),pe=l(),m(T.$$.fragment),oe=l(),m(J.$$.fragment),ce=l(),k=p("p"),k.textContent=Oe,ue=l(),g=p("div"),g.innerHTML=et,fe=l(),x=p("p"),x.innerHTML=tt,$e=l(),m(j.$$.fragment),ye=l(),m(w.$$.fragment),Me=l(),U=p("p"),U.innerHTML=nt,de=l(),C=p("p"),C.innerHTML=st,ge=l(),m(v.$$.fragment),he=l(),m(_.$$.fragment),be=l(),z=p("p"),z.innerHTML=lt,Te=l(),m(I.$$.fragment),Je=l(),m(H.$$.fragment),ke=l(),P=p("p"),P.innerHTML=at,xe=l(),m(h.$$.fragment),je=l(),m(Z.$$.fragment),we=l(),m(L.$$.fragment),Ue=l(),Q=p("p"),Q.innerHTML=pt,Ce=l(),V=p("p"),V.innerHTML=it,ve=l(),m(X.$$.fragment),_e=l(),m(D.$$.fragment),ze=l(),E=p("p"),E.innerHTML=rt,Ie=l(),G=p("p"),G.textContent=mt,He=l(),m(W.$$.fragment),Pe=l(),S=p("p"),S.innerHTML=ot,Ze=l(),m(A.$$.fragment),Le=l(),B=p("p"),B.textContent=ct,Qe=l(),R=p("p"),R.textContent=ut,Ve=l(),m(K.$$.fragment),Xe=l(),m(q.$$.fragment),De=l(),Y=p("p"),Y.innerHTML=ft,Ee=l(),N=p("p"),N.textContent=$t,Ge=l(),m(F.$$.fragment),We=l(),O=p("p"),O.innerHTML=yt,Se=l(),ee=p("p"),ee.innerHTML=Mt,Ae=l(),m(te.$$.fragment),Be=l(),ne=p("p"),ne.textContent=dt,Re=l(),se=p("table"),se.innerHTML=gt,Ke=l(),le=p("p"),le.textContent=ht,qe=l(),m(ae.$$.fragment),Ye=l(),ie=p("p"),this.h()},l(e){const t=Ct("svelte-u9bgzb",document.head);y=i(t,"META",{name:!0,content:!0}),t.forEach(n),b=a(e),M=i(e,"P",{}),Tt(M).forEach(n),pe=a(e),o(T.$$.fragment,e),oe=a(e),o(J.$$.fragment,e),ce=a(e),k=i(e,"P",{"data-svelte-h":!0}),r(k)!=="svelte-1uqgdit"&&(k.textContent=Oe),ue=a(e),g=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(g)!=="svelte-oxfng3"&&(g.innerHTML=et),fe=a(e),x=i(e,"P",{"data-svelte-h":!0}),r(x)!=="svelte-m7im51"&&(x.innerHTML=tt),$e=a(e),o(j.$$.fragment,e),ye=a(e),o(w.$$.fragment,e),Me=a(e),U=i(e,"P",{"data-svelte-h":!0}),r(U)!=="svelte-buhsjn"&&(U.innerHTML=nt),de=a(e),C=i(e,"P",{"data-svelte-h":!0}),r(C)!=="svelte-14zc91"&&(C.innerHTML=st),ge=a(e),o(v.$$.fragment,e),he=a(e),o(_.$$.fragment,e),be=a(e),z=i(e,"P",{"data-svelte-h":!0}),r(z)!=="svelte-1s6nrtp"&&(z.innerHTML=lt),Te=a(e),o(I.$$.fragment,e),Je=a(e),o(H.$$.fragment,e),ke=a(e),P=i(e,"P",{"data-svelte-h":!0}),r(P)!=="svelte-rgqiud"&&(P.innerHTML=at),xe=a(e),o(h.$$.fragment,e),je=a(e),o(Z.$$.fragment,e),we=a(e),o(L.$$.fragment,e),Ue=a(e),Q=i(e,"P",{"data-svelte-h":!0}),r(Q)!=="svelte-fpashe"&&(Q.innerHTML=pt),Ce=a(e),V=i(e,"P",{"data-svelte-h":!0}),r(V)!=="svelte-peg7vu"&&(V.innerHTML=it),ve=a(e),o(X.$$.fragment,e),_e=a(e),o(D.$$.fragment,e),ze=a(e),E=i(e,"P",{"data-svelte-h":!0}),r(E)!=="svelte-181gi2c"&&(E.innerHTML=rt),Ie=a(e),G=i(e,"P",{"data-svelte-h":!0}),r(G)!=="svelte-jd2eur"&&(G.textContent=mt),He=a(e),o(W.$$.fragment,e),Pe=a(e),S=i(e,"P",{"data-svelte-h":!0}),r(S)!=="svelte-1b2mn13"&&(S.innerHTML=ot),Ze=a(e),o(A.$$.fragment,e),Le=a(e),B=i(e,"P",{"data-svelte-h":!0}),r(B)!=="svelte-1sxeexn"&&(B.textContent=ct),Qe=a(e),R=i(e,"P",{"data-svelte-h":!0}),r(R)!=="svelte-wkoqn2"&&(R.textContent=ut),Ve=a(e),o(K.$$.fragment,e),Xe=a(e),o(q.$$.fragment,e),De=a(e),Y=i(e,"P",{"data-svelte-h":!0}),r(Y)!=="svelte-1nhwka7"&&(Y.innerHTML=ft),Ee=a(e),N=i(e,"P",{"data-svelte-h":!0}),r(N)!=="svelte-t5i0kw"&&(N.textContent=$t),Ge=a(e),o(F.$$.fragment,e),We=a(e),O=i(e,"P",{"data-svelte-h":!0}),r(O)!=="svelte-xhhu7n"&&(O.innerHTML=yt),Se=a(e),ee=i(e,"P",{"data-svelte-h":!0}),r(ee)!=="svelte-13i3ql5"&&(ee.innerHTML=Mt),Ae=a(e),o(te.$$.fragment,e),Be=a(e),ne=i(e,"P",{"data-svelte-h":!0}),r(ne)!=="svelte-1w0ftcf"&&(ne.textContent=dt),Re=a(e),se=i(e,"TABLE",{"data-svelte-h":!0}),r(se)!=="svelte-fh8ayb"&&(se.innerHTML=gt),Ke=a(e),le=i(e,"P",{"data-svelte-h":!0}),r(le)!=="svelte-12a9cp9"&&(le.textContent=ht),qe=a(e),o(ae.$$.fragment,e),Ye=a(e),ie=i(e,"P",{}),Tt(ie).forEach(n),this.h()},h(){Fe(y,"name","hf:doc:metadata"),Fe(y,"content",Zt),Fe(g,"class","flex justify-center")},m(e,t){vt(document.head,y),s(e,b,t),s(e,M,t),s(e,pe,t),c(T,e,t),s(e,oe,t),c(J,e,t),s(e,ce,t),s(e,k,t),s(e,ue,t),s(e,g,t),s(e,fe,t),s(e,x,t),s(e,$e,t),c(j,e,t),s(e,ye,t),c(w,e,t),s(e,Me,t),s(e,U,t),s(e,de,t),s(e,C,t),s(e,ge,t),c(v,e,t),s(e,he,t),c(_,e,t),s(e,be,t),s(e,z,t),s(e,Te,t),c(I,e,t),s(e,Je,t),c(H,e,t),s(e,ke,t),s(e,P,t),s(e,xe,t),c(h,e,t),s(e,je,t),c(Z,e,t),s(e,we,t),c(L,e,t),s(e,Ue,t),s(e,Q,t),s(e,Ce,t),s(e,V,t),s(e,ve,t),c(X,e,t),s(e,_e,t),c(D,e,t),s(e,ze,t),s(e,E,t),s(e,Ie,t),s(e,G,t),s(e,He,t),c(W,e,t),s(e,Pe,t),s(e,S,t),s(e,Ze,t),c(A,e,t),s(e,Le,t),s(e,B,t),s(e,Qe,t),s(e,R,t),s(e,Ve,t),c(K,e,t),s(e,Xe,t),c(q,e,t),s(e,De,t),s(e,Y,t),s(e,Ee,t),s(e,N,t),s(e,Ge,t),c(F,e,t),s(e,We,t),s(e,O,t),s(e,Se,t),s(e,ee,t),s(e,Ae,t),c(te,e,t),s(e,Be,t),s(e,ne,t),s(e,Re,t),s(e,se,t),s(e,Ke,t),s(e,le,t),s(e,qe,t),c(ae,e,t),s(e,Ye,t),s(e,ie,t),Ne=!0},p(e,[t]){const bt={};t&2&&(bt.$$scope={dirty:t,ctx:e}),h.$set(bt)},i(e){Ne||(u(T.$$.fragment,e),u(J.$$.fragment,e),u(j.$$.fragment,e),u(w.$$.fragment,e),u(v.$$.fragment,e),u(_.$$.fragment,e),u(I.$$.fragment,e),u(H.$$.fragment,e),u(h.$$.fragment,e),u(Z.$$.fragment,e),u(L.$$.fragment,e),u(X.$$.fragment,e),u(D.$$.fragment,e),u(W.$$.fragment,e),u(A.$$.fragment,e),u(K.$$.fragment,e),u(q.$$.fragment,e),u(F.$$.fragment,e),u(te.$$.fragment,e),u(ae.$$.fragment,e),Ne=!0)},o(e){f(T.$$.fragment,e),f(J.$$.fragment,e),f(j.$$.fragment,e),f(w.$$.fragment,e),f(v.$$.fragment,e),f(_.$$.fragment,e),f(I.$$.fragment,e),f(H.$$.fragment,e),f(h.$$.fragment,e),f(Z.$$.fragment,e),f(L.$$.fragment,e),f(X.$$.fragment,e),f(D.$$.fragment,e),f(W.$$.fragment,e),f(A.$$.fragment,e),f(K.$$.fragment,e),f(q.$$.fragment,e),f(F.$$.fragment,e),f(te.$$.fragment,e),f(ae.$$.fragment,e),Ne=!1},d(e){e&&(n(b),n(M),n(pe),n(oe),n(ce),n(k),n(ue),n(g),n(fe),n(x),n($e),n(ye),n(Me),n(U),n(de),n(C),n(ge),n(he),n(be),n(z),n(Te),n(Je),n(ke),n(P),n(xe),n(je),n(we),n(Ue),n(Q),n(Ce),n(V),n(ve),n(_e),n(ze),n(E),n(Ie),n(G),n(He),n(Pe),n(S),n(Ze),n(Le),n(B),n(Qe),n(R),n(Ve),n(Xe),n(De),n(Y),n(Ee),n(N),n(Ge),n(We),n(O),n(Se),n(ee),n(Ae),n(Be),n(ne),n(Re),n(se),n(Ke),n(le),n(qe),n(Ye),n(ie)),n(y),$(T,e),$(J,e),$(j,e),$(w,e),$(v,e),$(_,e),$(I,e),$(H,e),$(h,e),$(Z,e),$(L,e),$(X,e),$(D,e),$(W,e),$(A,e),$(K,e),$(q,e),$(F,e),$(te,e),$(ae,e)}}}const Zt='{"title":"Нормализация и предварительная токенизация","local":"normalization-and-pre-tokenization","sections":[{"title":"Нормализация","local":"normalization","sections":[],"depth":2},{"title":"Предварительная токенизация","local":"pre-tokenization","sections":[],"depth":2},{"title":"SentencePiece","local":"sentencepiece","sections":[],"depth":2},{"title":"Обзор алгоритма","local":"algorithm-overview","sections":[],"depth":2}],"depth":1}';function Lt(me){return xt(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class St extends wt{constructor(y){super(),Ut(this,y,Lt,Pt,kt,{})}}export{St as component};

Xet Storage Details

Size:
26.5 kB
·
Xet hash:
7a12355a2ecc2648b66a206903fc0e5a037e6f9adef91df12cdc664d7a040461

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