Buckets:

rtrm's picture
download
raw
26.5 kB
import{s as jt,n as Ut,o as wt}from"../chunks/scheduler.893fe8c9.js";import{S as Ct,i as vt,e as p,s as l,c as m,h as _t,a as i,d as n,b as a,f as kt,g as o,j as r,k as Oe,l as zt,m as s,n as c,t as u,o as f,p as $}from"../chunks/index.2d09ebb4.js";import{C as It,H as ie,E as Ht}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.068682ce.js";import{Y as xt}from"../chunks/Youtube.b7012d06.js";import{C as y}from"../chunks/CodeBlock.673577de.js";import{C as Lt}from"../chunks/CourseFloatingBanner.e3aeab73.js";function Pt(et){let M,re,ae,me,b,oe,h,ce,T,ue,J,tt="Прежде чем мы более подробно рассмотрим три наиболее распространенных алгоритма токенизации подслов, используемых в моделях Transformer (Byte-Pair Encoding [BPE], WordPiece и Unigram), мы сначала рассмотрим предварительную обработку, которую каждый токенизатор применяет к тексту. Вот высокоуровневый обзор этапов конвейера токенизации:",fe,g,nt='<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."/>',$e,k,st="Перед тем как разбить текст на подтокены (в соответствии со выбранной моделью), токенизатор выполняет два шага: <em>нормализацию</em> и <em>претокенизацию</em>.",ye,x,Me,j,ge,U,lt='Шаг нормализации включает в себя некоторую общую очистку, например, удаление ненужных пробельных символов, понижение регистра и/или удаление ударений. Если вы знакомы с <a href="http://www.unicode.org/reports/tr15/" rel="nofollow">Unicode normalization</a> (например, NFC или NFKC), это также может быть применено токенизатором.',de,w,at="У 🤗 Transformers <code>tokenizer</code> есть атрибут <code>backend_tokenizer</code>, который предоставляет доступ к базовому токенизатору из библиотеки 🤗 Tokenizers:",be,C,he,v,Te,_,pt="Атрибут <code>normalizer</code> объекта <code>tokenizer</code> имеет метод <code>normalize_str()</code>, который мы можем использовать, чтобы увидеть, как выполняется нормализация:",Je,z,ke,I,xe,H,it="В этом примере, поскольку мы выбрали контрольную точку <code>bert-base-uncased</code>, нормализация применила нижний регистр и удалила ударения.",je,d,rt="<p>✏️ <strong>Попробуйте!</strong> Загрузите токенизатор из контрольной точки <code>bert-base-cased</code> и передайте ему тот же пример. Какие основные различия вы можете увидеть между версией токенизатора cased и uncased?</p>",Ue,L,we,P,Ce,Z,mt='Как мы увидим в следующих разделах, токенизатор не может быть обучен только на сыром тексте. Сначала необходимо разбить текст на небольшие части, например, на слова. Именно в этом и заключается этап предварительной токенизации. Как мы видели в <a href="../chapter2/1">Главе 2</a>, токенизатор на основе слов (word-based tokenizer) может просто разбить необработанный текст на слова по пробелам и знакам пунктуации. Эти слова станут границами подтокенов, которые токенизатор сможет выучить в процессе обучения.',ve,Q,ot="Чтобы увидеть, как быстрый токенизатор выполняет предварительную токенизацию, мы можем воспользоваться методом <code>pre_tokenize_str()</code> атрибута <code>pre_tokenizer</code> объекта <code>tokenizer</code>:",_e,V,ze,X,Ie,D,ct="Обратите внимание, что токенизатор уже следит за смещениями, и именно поэтому он может дать нам сопоставление смещений, которое мы использовали в предыдущем разделе. Здесь токенизатор игнорирует два пробела и заменяет их одним, но смещение перескакивает между <code>are</code> и <code>you</code>, чтобы учесть это.",He,E,ut="Поскольку мы используем токенизатор BERT, предварительная токенизация включает часть пробельных символов и пунктуацию. Другие токенизаторы могут иметь другие правила для этого шага. Например, если мы используем токенизатор GPT-2:",Le,G,Pe,W,ft="он также выполнит разбиение по пробельным символам и пунктуации, но сохранит пробелы и заменит их символом <code>Ġ</code>, что позволит ему восстановить исходные пробелы, если мы декодируем токены:",Ze,S,Qe,B,$t="Также обратите внимание, что в отличие от токенизатора BERT, этот токенизатор не игнорирует двойной пробел.",Ve,K,yt="В качестве последнего примера рассмотрим токенизатор T5, основанный на алгоритме SentencePiece:",Xe,R,De,A,Ee,q,Mt="Как и токенизатор GPT-2, этот сохраняет пробелы и заменяет их специальным токеном (<code>_</code>), но токенизатор T5 делает разбиение только по пробелам, а не по знакам препинания. Также обратите внимание, что он по умолчанию добавляет пробел в начале предложения (перед <code>Hello</code>) и игнорирует двойной пробел между <code>are</code> и <code>you</code>.",Ge,Y,gt="Теперь, когда мы немного познакомились с тем, как обрабатывают текст различные токенизаторы, можно приступить к изучению самих алгоритмов, лежащих в их основе. Мы начнем с краткого обзора широко применяемого SentencePiece; затем, в следующих трех разделах, мы рассмотрим, как работают три основных алгоритма, используемых для токенизации по подсловам.",We,N,Se,F,dt='<a href="https://github.com/google/sentencepiece" rel="nofollow">SentencePiece</a> - это алгоритм токенизации для предварительной обработки текста, который можно использовать с любой из моделей, которые мы рассмотрим в следующих трех разделах. Он рассматривает текст как последовательность символов Unicode и заменяет пробелы специальным символом <code>▁</code>. При использовании в сочетании с алгоритмом Unigram (см. <a href="../chapter7/7">раздел 7</a>) он даже не требует шага предварительной токенизации, что очень полезно для языков, где символ пробела не используется (например, китайского или японского).',Be,O,bt="Другой главной особенностью SentencePiece является <em>обратимая токенизация</em>: поскольку в нем нет специальной обработки пробелов, декодирование токенов осуществляется просто путем их конкатенации и замены <code>_</code> на пробелы - в результате получается нормализованный текст. Как мы видели ранее, токенизатор BERT удаляет повторяющиеся пробелы, поэтому его токенизация не является обратимой.",Ke,ee,Re,te,ht="В следующих разделах мы рассмотрим три основных алгоритма токенизации по подсловам: BPE (используется в GPT-2 и других моделях), WordPiece (используется, например, в BERT) и Unigram (используется в T5 и других моделях). Прежде чем мы приступим, вот краткий обзор того, как работает каждый из них. Не стесняйтесь возвращаться к этой таблице после прочтения каждого из следующих разделов, если вам еще не все понятно.",Ae,ne,Tt='<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>',qe,se,Jt="А теперь давайте погрузимся в BPE!",Ye,le,Ne,pe,Fe;return b=new It({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),h=new ie({props:{title:"Нормализация и предварительная токенизация",local:"normalization-and-pre-tokenization",headingTag:"h1"}}),T=new Lt({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"}]}}),x=new ie({props:{title:"Нормализация",local:"normalization",headingTag:"h2"}}),j=new xt({props:{id:"4IIC2jI9CaU"}}),C=new y({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}}),v=new y({props:{code:"JTNDY2xhc3MlMjAndG9rZW5pemVycy5Ub2tlbml6ZXInJTNF",highlighted:'&lt;<span class="hljs-keyword">class</span> <span class="hljs-string">&#x27;tokenizers.Tokenizer&#x27;</span>&gt;',wrap:!1}}),z=new y({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}}),I=new y({props:{code:"J2hlbGxvJTIwaG93JTIwYXJlJTIwdSUzRic=",highlighted:'<span class="hljs-string">&#x27;hello how are u?&#x27;</span>',wrap:!1}}),L=new ie({props:{title:"Предварительная токенизация",local:"pre-tokenization",headingTag:"h2"}}),P=new xt({props:{id:"grlLV8AIXug"}}),V=new y({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}}),X=new y({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}}),G=new y({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}}),S=new y({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}}),R=new y({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}}),A=new y({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}}),N=new ie({props:{title:"SentencePiece",local:"sentencepiece",headingTag:"h2"}}),ee=new ie({props:{title:"Обзор алгоритма",local:"algorithm-overview",headingTag:"h2"}}),le=new Ht({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ru/chapter6/4.mdx"}}),{c(){M=p("meta"),re=l(),ae=p("p"),me=l(),m(b.$$.fragment),oe=l(),m(h.$$.fragment),ce=l(),m(T.$$.fragment),ue=l(),J=p("p"),J.textContent=tt,fe=l(),g=p("div"),g.innerHTML=nt,$e=l(),k=p("p"),k.innerHTML=st,ye=l(),m(x.$$.fragment),Me=l(),m(j.$$.fragment),ge=l(),U=p("p"),U.innerHTML=lt,de=l(),w=p("p"),w.innerHTML=at,be=l(),m(C.$$.fragment),he=l(),m(v.$$.fragment),Te=l(),_=p("p"),_.innerHTML=pt,Je=l(),m(z.$$.fragment),ke=l(),m(I.$$.fragment),xe=l(),H=p("p"),H.innerHTML=it,je=l(),d=p("blockquote"),d.innerHTML=rt,Ue=l(),m(L.$$.fragment),we=l(),m(P.$$.fragment),Ce=l(),Z=p("p"),Z.innerHTML=mt,ve=l(),Q=p("p"),Q.innerHTML=ot,_e=l(),m(V.$$.fragment),ze=l(),m(X.$$.fragment),Ie=l(),D=p("p"),D.innerHTML=ct,He=l(),E=p("p"),E.textContent=ut,Le=l(),m(G.$$.fragment),Pe=l(),W=p("p"),W.innerHTML=ft,Ze=l(),m(S.$$.fragment),Qe=l(),B=p("p"),B.textContent=$t,Ve=l(),K=p("p"),K.textContent=yt,Xe=l(),m(R.$$.fragment),De=l(),m(A.$$.fragment),Ee=l(),q=p("p"),q.innerHTML=Mt,Ge=l(),Y=p("p"),Y.textContent=gt,We=l(),m(N.$$.fragment),Se=l(),F=p("p"),F.innerHTML=dt,Be=l(),O=p("p"),O.innerHTML=bt,Ke=l(),m(ee.$$.fragment),Re=l(),te=p("p"),te.textContent=ht,Ae=l(),ne=p("table"),ne.innerHTML=Tt,qe=l(),se=p("p"),se.textContent=Jt,Ye=l(),m(le.$$.fragment),Ne=l(),pe=p("p"),this.h()},l(e){const t=_t("svelte-u9bgzb",document.head);M=i(t,"META",{name:!0,content:!0}),t.forEach(n),re=a(e),ae=i(e,"P",{}),kt(ae).forEach(n),me=a(e),o(b.$$.fragment,e),oe=a(e),o(h.$$.fragment,e),ce=a(e),o(T.$$.fragment,e),ue=a(e),J=i(e,"P",{"data-svelte-h":!0}),r(J)!=="svelte-1uqgdit"&&(J.textContent=tt),fe=a(e),g=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(g)!=="svelte-oxfng3"&&(g.innerHTML=nt),$e=a(e),k=i(e,"P",{"data-svelte-h":!0}),r(k)!=="svelte-m7im51"&&(k.innerHTML=st),ye=a(e),o(x.$$.fragment,e),Me=a(e),o(j.$$.fragment,e),ge=a(e),U=i(e,"P",{"data-svelte-h":!0}),r(U)!=="svelte-buhsjn"&&(U.innerHTML=lt),de=a(e),w=i(e,"P",{"data-svelte-h":!0}),r(w)!=="svelte-14zc91"&&(w.innerHTML=at),be=a(e),o(C.$$.fragment,e),he=a(e),o(v.$$.fragment,e),Te=a(e),_=i(e,"P",{"data-svelte-h":!0}),r(_)!=="svelte-1s6nrtp"&&(_.innerHTML=pt),Je=a(e),o(z.$$.fragment,e),ke=a(e),o(I.$$.fragment,e),xe=a(e),H=i(e,"P",{"data-svelte-h":!0}),r(H)!=="svelte-rgqiud"&&(H.innerHTML=it),je=a(e),d=i(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),r(d)!=="svelte-1ocwvwg"&&(d.innerHTML=rt),Ue=a(e),o(L.$$.fragment,e),we=a(e),o(P.$$.fragment,e),Ce=a(e),Z=i(e,"P",{"data-svelte-h":!0}),r(Z)!=="svelte-fpashe"&&(Z.innerHTML=mt),ve=a(e),Q=i(e,"P",{"data-svelte-h":!0}),r(Q)!=="svelte-peg7vu"&&(Q.innerHTML=ot),_e=a(e),o(V.$$.fragment,e),ze=a(e),o(X.$$.fragment,e),Ie=a(e),D=i(e,"P",{"data-svelte-h":!0}),r(D)!=="svelte-181gi2c"&&(D.innerHTML=ct),He=a(e),E=i(e,"P",{"data-svelte-h":!0}),r(E)!=="svelte-jd2eur"&&(E.textContent=ut),Le=a(e),o(G.$$.fragment,e),Pe=a(e),W=i(e,"P",{"data-svelte-h":!0}),r(W)!=="svelte-1b2mn13"&&(W.innerHTML=ft),Ze=a(e),o(S.$$.fragment,e),Qe=a(e),B=i(e,"P",{"data-svelte-h":!0}),r(B)!=="svelte-1sxeexn"&&(B.textContent=$t),Ve=a(e),K=i(e,"P",{"data-svelte-h":!0}),r(K)!=="svelte-wkoqn2"&&(K.textContent=yt),Xe=a(e),o(R.$$.fragment,e),De=a(e),o(A.$$.fragment,e),Ee=a(e),q=i(e,"P",{"data-svelte-h":!0}),r(q)!=="svelte-1nhwka7"&&(q.innerHTML=Mt),Ge=a(e),Y=i(e,"P",{"data-svelte-h":!0}),r(Y)!=="svelte-t5i0kw"&&(Y.textContent=gt),We=a(e),o(N.$$.fragment,e),Se=a(e),F=i(e,"P",{"data-svelte-h":!0}),r(F)!=="svelte-xhhu7n"&&(F.innerHTML=dt),Be=a(e),O=i(e,"P",{"data-svelte-h":!0}),r(O)!=="svelte-13i3ql5"&&(O.innerHTML=bt),Ke=a(e),o(ee.$$.fragment,e),Re=a(e),te=i(e,"P",{"data-svelte-h":!0}),r(te)!=="svelte-1w0ftcf"&&(te.textContent=ht),Ae=a(e),ne=i(e,"TABLE",{"data-svelte-h":!0}),r(ne)!=="svelte-fh8ayb"&&(ne.innerHTML=Tt),qe=a(e),se=i(e,"P",{"data-svelte-h":!0}),r(se)!=="svelte-12a9cp9"&&(se.textContent=Jt),Ye=a(e),o(le.$$.fragment,e),Ne=a(e),pe=i(e,"P",{}),kt(pe).forEach(n),this.h()},h(){Oe(M,"name","hf:doc:metadata"),Oe(M,"content",Zt),Oe(g,"class","flex justify-center"),Oe(d,"class","tip")},m(e,t){zt(document.head,M),s(e,re,t),s(e,ae,t),s(e,me,t),c(b,e,t),s(e,oe,t),c(h,e,t),s(e,ce,t),c(T,e,t),s(e,ue,t),s(e,J,t),s(e,fe,t),s(e,g,t),s(e,$e,t),s(e,k,t),s(e,ye,t),c(x,e,t),s(e,Me,t),c(j,e,t),s(e,ge,t),s(e,U,t),s(e,de,t),s(e,w,t),s(e,be,t),c(C,e,t),s(e,he,t),c(v,e,t),s(e,Te,t),s(e,_,t),s(e,Je,t),c(z,e,t),s(e,ke,t),c(I,e,t),s(e,xe,t),s(e,H,t),s(e,je,t),s(e,d,t),s(e,Ue,t),c(L,e,t),s(e,we,t),c(P,e,t),s(e,Ce,t),s(e,Z,t),s(e,ve,t),s(e,Q,t),s(e,_e,t),c(V,e,t),s(e,ze,t),c(X,e,t),s(e,Ie,t),s(e,D,t),s(e,He,t),s(e,E,t),s(e,Le,t),c(G,e,t),s(e,Pe,t),s(e,W,t),s(e,Ze,t),c(S,e,t),s(e,Qe,t),s(e,B,t),s(e,Ve,t),s(e,K,t),s(e,Xe,t),c(R,e,t),s(e,De,t),c(A,e,t),s(e,Ee,t),s(e,q,t),s(e,Ge,t),s(e,Y,t),s(e,We,t),c(N,e,t),s(e,Se,t),s(e,F,t),s(e,Be,t),s(e,O,t),s(e,Ke,t),c(ee,e,t),s(e,Re,t),s(e,te,t),s(e,Ae,t),s(e,ne,t),s(e,qe,t),s(e,se,t),s(e,Ye,t),c(le,e,t),s(e,Ne,t),s(e,pe,t),Fe=!0},p:Ut,i(e){Fe||(u(b.$$.fragment,e),u(h.$$.fragment,e),u(T.$$.fragment,e),u(x.$$.fragment,e),u(j.$$.fragment,e),u(C.$$.fragment,e),u(v.$$.fragment,e),u(z.$$.fragment,e),u(I.$$.fragment,e),u(L.$$.fragment,e),u(P.$$.fragment,e),u(V.$$.fragment,e),u(X.$$.fragment,e),u(G.$$.fragment,e),u(S.$$.fragment,e),u(R.$$.fragment,e),u(A.$$.fragment,e),u(N.$$.fragment,e),u(ee.$$.fragment,e),u(le.$$.fragment,e),Fe=!0)},o(e){f(b.$$.fragment,e),f(h.$$.fragment,e),f(T.$$.fragment,e),f(x.$$.fragment,e),f(j.$$.fragment,e),f(C.$$.fragment,e),f(v.$$.fragment,e),f(z.$$.fragment,e),f(I.$$.fragment,e),f(L.$$.fragment,e),f(P.$$.fragment,e),f(V.$$.fragment,e),f(X.$$.fragment,e),f(G.$$.fragment,e),f(S.$$.fragment,e),f(R.$$.fragment,e),f(A.$$.fragment,e),f(N.$$.fragment,e),f(ee.$$.fragment,e),f(le.$$.fragment,e),Fe=!1},d(e){e&&(n(re),n(ae),n(me),n(oe),n(ce),n(ue),n(J),n(fe),n(g),n($e),n(k),n(ye),n(Me),n(ge),n(U),n(de),n(w),n(be),n(he),n(Te),n(_),n(Je),n(ke),n(xe),n(H),n(je),n(d),n(Ue),n(we),n(Ce),n(Z),n(ve),n(Q),n(_e),n(ze),n(Ie),n(D),n(He),n(E),n(Le),n(Pe),n(W),n(Ze),n(Qe),n(B),n(Ve),n(K),n(Xe),n(De),n(Ee),n(q),n(Ge),n(Y),n(We),n(Se),n(F),n(Be),n(O),n(Ke),n(Re),n(te),n(Ae),n(ne),n(qe),n(se),n(Ye),n(Ne),n(pe)),n(M),$(b,e),$(h,e),$(T,e),$(x,e),$(j,e),$(C,e),$(v,e),$(z,e),$(I,e),$(L,e),$(P,e),$(V,e),$(X,e),$(G,e),$(S,e),$(R,e),$(A,e),$(N,e),$(ee,e),$(le,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 Qt(et){return wt(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class St extends Ct{constructor(M){super(),vt(this,M,Qt,Pt,jt,{})}}export{St as component};

Xet Storage Details

Size:
26.5 kB
·
Xet hash:
887ca558e6a15a302f669582647e594b10ee5426860b34af7dc452b79c277d70

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