import{s as ze,o as We}from"../chunks/scheduler.37c15a92.js";import{S as Ae,i as Ie,g as Me,s as p,r as o,A as Ce,h as _e,f as $,c as f,j as Ze,u,k as je,y as Ve,a as m,v as c,t as s,b as Ue,d as a,w as g,p as qe}from"../chunks/index.2bf4358c.js";import{C as we}from"../chunks/CodeBlock.4e987730.js";import{C as Be}from"../chunks/CourseFloatingBanner.9ff4c771.js";import{Q as w}from"../chunks/Question.668688bc.js";import{F as Fe}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as _,E as Qe}from"../chunks/index.49fc26ef.js";function Xe(y){let l,x,i,d;return l=new _({props:{title:"5. Что такое TFAutoModel?",local:"5-что-такое-tfautomodel",headingTag:"h3"}}),i=new w({props:{choices:[{text:"Модель, которая автоматически обучается на ваших данных",explain:"Неправильно. Вы путаете это с нашим продуктом <a href='https://huggingface.co/autotrain'>AutoTrain</a>?"},{text:"Объект, возвращающий правильную архитектуру на основе контрольной точки",explain:"Именно так: в <code>TFAutoModel</code> для возврата правильной архитектуры достаточно знать контрольную точку, с которой нужно инициализироваться.",correct:!0},{text:"Модель, которая автоматически определяет язык, используемый на входах, чтобы загрузить правильные веса",explain:"Неверно; хотя некоторые контрольные точки и модели способны работать с несколькими языками, встроенных инструментов для автоматического выбора контрольной точки в зависимости от языка не существует. Вам следует обратиться в <a href='https://huggingface.co/models'>Model Hub</a>, чтобы найти лучшую контрольную точку для вашей задачи!"}]}}),{c(){o(l.$$.fragment),x=p(),o(i.$$.fragment)},l(t){u(l.$$.fragment,t),x=f(t),u(i.$$.fragment,t)},m(t,b){c(l,t,b),m(t,x,b),c(i,t,b),d=!0},i(t){d||(a(l.$$.fragment,t),a(i.$$.fragment,t),d=!0)},o(t){s(l.$$.fragment,t),s(i.$$.fragment,t),d=!1},d(t){t&&$(x),g(l,t),g(i,t)}}}function ve(y){let l,x,i,d;return l=new _({props:{title:"5. Что такое AutoModel?",local:"5-что-такое-automodel",headingTag:"h3"}}),i=new w({props:{choices:[{text:"Модель, которая автоматически обучается на ваших данных",explain:"Неверно. Вы не путаете это с нашим продуктом <a href='https://huggingface.co/autotrain'>AutoTrain</a>?"},{text:"Объект, возвращающий правильную архитектуру на основе контрольной точки",explain:"Именно: в <code>AutoModel</code> для возврата правильной архитектуры достаточно знать контрольную точку, с которой нужно инициализироваться.",correct:!0},{text:"Модель, которая автоматически определяет язык, используемый для входов, чтобы загрузить правильные веса",explain:"Неверно; хотя некоторые контрольные точки и модели способны работать с несколькими языками, встроенных инструментов для автоматического выбора контрольной точки в зависимости от языка не существует. Вам следует обратиться в <a href='https://huggingface.co/models'>Model Hub</a>, чтобы найти лучшую контрольную точку для вашей задачи!"}]}}),{c(){o(l.$$.fragment),x=p(),o(i.$$.fragment)},l(t){u(l.$$.fragment,t),x=f(t),u(i.$$.fragment,t)},m(t,b){c(l,t,b),m(t,x,b),c(i,t,b),d=!0},i(t){d||(a(l.$$.fragment,t),a(i.$$.fragment,t),d=!0)},o(t){s(l.$$.fragment,t),s(i.$$.fragment,t),d=!1},d(t){t&&$(x),g(l,t),g(i,t)}}}function Ee(y){let l,x,i,d,t,b;return l=new _({props:{title:"10. Что-то не так с приведенным ниже кодом?",local:"10-что-то-не-так-с-приведенным-ниже-кодом",headingTag:"h3"}}),i=new we({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBURkF1dG9Nb2RlbCUwQSUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKCUyMmJlcnQtYmFzZS1jYXNlZCUyMiklMEFtb2RlbCUyMCUzRCUyMFRGQXV0b01vZGVsLmZyb21fcHJldHJhaW5lZCglMjJncHQyJTIyKSUwQSUwQWVuY29kZWQlMjAlM0QlMjB0b2tlbml6ZXIoJTIySGV5ISUyMiUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIycHQlMjIpJTBBcmVzdWx0JTIwJTNEJTIwbW9kZWwoKiplbmNvZGVkKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, TFAutoModel

tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)
model = TFAutoModel.from_pretrained(<span class="hljs-string">&quot;gpt2&quot;</span>)

encoded = tokenizer(<span class="hljs-string">&quot;Hey!&quot;</span>, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)
result = model(**encoded)`,wrap:!1}}),t=new w({props:{choices:[{text:"Нет, кажется, все правильно.",explain:"К сожалению, сопряжение модели с токенизатором, который был обучен на другой контрольной точке, редко бывает хорошей идеей. Модель не была обучена извлекать смысл из вывода этого токенизатора, поэтому вывод модели (если она вообще сможет работать!) не будет иметь никакого смысла."},{text:"Токенизатор и модель всегда должны быть из одной контрольной точки.",explain:"Верно!",correct:!0},{text:"Хорошей практикой является дополнении и усечении с помощью токенизатора, поскольку каждый вход - это батч.",explain:"Действительно, каждый вход модели должен быть батчем. Однако в усечении или дополнении этой последовательности нет смысла, поскольку она только одна, а это техника объединения в батч списка предложений."}]}}),{c(){o(l.$$.fragment),x=p(),o(i.$$.fragment),d=p(),o(t.$$.fragment)},l(r){u(l.$$.fragment,r),x=f(r),u(i.$$.fragment,r),d=f(r),u(t.$$.fragment,r)},m(r,M){c(l,r,M),m(r,x,M),c(i,r,M),m(r,d,M),c(t,r,M),b=!0},i(r){b||(a(l.$$.fragment,r),a(i.$$.fragment,r),a(t.$$.fragment,r),b=!0)},o(r){s(l.$$.fragment,r),s(i.$$.fragment,r),s(t.$$.fragment,r),b=!1},d(r){r&&($(x),$(d)),g(l,r),g(i,r),g(t,r)}}}function He(y){let l,x,i,d,t,b;return l=new _({props:{title:"10. Есть ли что-то неправильное в следующем коде?",local:"10-есть-ли-что-то-неправильное-в-следующем-коде",headingTag:"h3"}}),i=new we({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBBdXRvTW9kZWwlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIpJTBBbW9kZWwlMjAlM0QlMjBBdXRvTW9kZWwuZnJvbV9wcmV0cmFpbmVkKCUyMmdwdDIlMjIpJTBBJTBBZW5jb2RlZCUyMCUzRCUyMHRva2VuaXplciglMjJIZXkhJTIyJTJDJTIwcmV0dXJuX3RlbnNvcnMlM0QlMjJwdCUyMiklMEFyZXN1bHQlMjAlM0QlMjBtb2RlbCgqKmVuY29kZWQp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, AutoModel

tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)
model = AutoModel.from_pretrained(<span class="hljs-string">&quot;gpt2&quot;</span>)

encoded = tokenizer(<span class="hljs-string">&quot;Hey!&quot;</span>, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)
result = model(**encoded)`,wrap:!1}}),t=new w({props:{choices:[{text:"Нет, кажется, все правильно.",explain:"К сожалению, сопряжение модели с токенизатором, который был обучен на другой контрольной точке, редко бывает хорошей идеей. Модель не была обучена извлекать смысл из вывода этого токенизатора, поэтому вывод модели (если она вообще сможет работать!) не будет иметь никакого смысла."},{text:"Токенизатор и модель всегда должны быть из одной контрольной точки.",explain:"Правильно!",correct:!0},{text:"Хорошей практикой является дополнении и усечении с помощью токенизатора, поскольку каждый вход - это батч.",explain:"Действительно, каждый вход модели должен быть батчем. Однако в усечении или дополнении этой последовательности нет смысла, поскольку она только одна, а это техника объединения в батч списка предложений."}]}}),{c(){o(l.$$.fragment),x=p(),o(i.$$.fragment),d=p(),o(t.$$.fragment)},l(r){u(l.$$.fragment,r),x=f(r),u(i.$$.fragment,r),d=f(r),u(t.$$.fragment,r)},m(r,M){c(l,r,M),m(r,x,M),c(i,r,M),m(r,d,M),c(t,r,M),b=!0},i(r){b||(a(l.$$.fragment,r),a(i.$$.fragment,r),a(t.$$.fragment,r),b=!0)},o(r){s(l.$$.fragment,r),s(i.$$.fragment,r),s(t.$$.fragment,r),b=!1},d(r){r&&($(x),$(d)),g(l,r),g(i,r),g(t,r)}}}function Re(y){let l,x,i,d,t,b,r,M,Z,L,j,D,U,O,q,ee,z,te,W,re,A,ne,I,le,C,ie,k,h,P,V,$e,B,se,F,ae,Q,me,X,pe,v,fe,E,oe,H,ue,R,ce,T,J,Y,G,ge,K,xe;t=new Fe({props:{fw:y[0]}}),r=new _({props:{title:"Тест в конце главы",local:"end-of-chapter-quiz",headingTag:"h1"}}),Z=new Be({props:{chapter:2,classNames:"absolute z-10 right-0 top-0"}}),j=new _({props:{title:"1. Каков порядок работы конвейера языкового моделирования?",local:"1-каков-порядок-работы-конвейера-языкового-моделирования",headingTag:"h3"}}),U=new w({props:{choices:[{text:"Сначала модель, которая обрабатывает текст и возвращает необработанные прогнозы. Затем токенизатор осмысливает эти предсказания и при необходимости преобразует их обратно в текст.",explain:"Модель не может понять текст! Токенизатор должен сначала обработать текст и преобразовать его в идентификаторы, чтобы он был понятен модели."},{text:"Сначала работает токенизатор, который обрабатывает текст и возвращает идентификаторы. Модель обрабатывает эти идентификаторы и выдает прогноз, который может представлять собой некоторый текст.",explain:"Прогноз модели не может сразу стать текстом. Для преобразования прогноза в текст необходимо использовать токенизатор!"},{text:"Токенизатор обрабатывает текст и возвращает идентификаторы. Модель обрабатывает эти идентификаторы и выдает прогноз. Затем токенизатор можно снова использовать для преобразования этих прогнозов обратно в текст.",explain:"Правильно! Токенизатор может использоваться как для токенизации, так и для де-токенизации.",correct:!0}]}}),q=new _({props:{title:"2. Сколько измерений имеет тензор, выводимый базовой моделью Transformer, и каковы они?",local:"2-сколько-измерений-имеет-тензор-выводимый-базовой-моделью-transformer-и-каковы-они",headingTag:"h3"}}),z=new w({props:{choices:[{text:"2: Длина последовательности и размер батча",explain:"Неверно! Тензор, выводимый моделью, имеет третье измерение: скрытый размер."},{text:"2: Длина последовательности и скрытый размер",explain:"Неверно! Все модели Transformer работают с батчами, даже с одной последовательностью; размер батча будет равен 1!"},{text:"3: Длина последовательности, размер батча и скрытый размер",explain:"Верно!",correct:!0}]}}),W=new _({props:{title:"3. Что из перечисленного ниже является примером токенизации по подсловам?",local:"3-что-из-перечисленного-ниже-является-примером-токенизации-по-подсловам",headingTag:"h3"}}),A=new w({props:{choices:[{text:"WordPiece",explain:"Да, это один из примеров токенизации по подсловам!",correct:!0},{text:"Посимвольная токенизация",explain:"Токенизация по символам не является разновидностью токенизации по подсловам."},{text:"Разделение по пробелам и пунктуации",explain:"Это схема токенизации по подсловам!"},{text:"BPE",explain:"Да, это один из примеров токенизации по подсловам!",correct:!0},{text:"Unigram",explain:"Да, это один из примеров токенизации по подсловам!",correct:!0},{text:"Ничего из вышеперечисленного",explain:"Неверно!"}]}}),I=new _({props:{title:"4. Что такое голова модели?",local:"4-что-такое-голова-модели",headingTag:"h3"}}),C=new w({props:{choices:[{text:"Компонент базовой сети Transformer, который перенаправляет тензоры на корректные слои",explain:"Неверно! Такого компонента не существует."},{text:"Также известный как механизм самовнимания, он адаптирует представление токена в соответствии с другими токенами последовательности",explain:'Неверно! Слой самовнимания действительно содержит "головы" внимания, но это не головы адаптации.'},{text:"Дополнительный компонент, обычно состоящий из одного или нескольких слоев, для преобразования прогнозов трансформера в специфический для конкретной задачи выход",explain:"Именно так. Адаптационные головы, также известные просто как головы, встречаются в разных формах: головы языкового моделирования, головы ответов на вопросы, головы классификации последовательностей... ",correct:!0}]}});const ye=[ve,Xe],S=[];function ke(e,n){return e[0]==="pt"?0:1}k=ke(y),h=S[k]=ye[k](y),V=new _({props:{title:"6. На какие техники следует обратить внимание при объединении в батч последовательностей разной длины?",local:"6-на-какие-техники-следует-обратить-внимание-при-объединении-в-батч-последовательностей-разной-длины",headingTag:"h3"}}),B=new w({props:{choices:[{text:"Усечение (truncating)",explain:"Да, усечение - это правильный способ выровнять последовательности так, чтобы они вписывались в прямоугольную форму. Но разве это единственный способ?",correct:!0},{text:"Возврат тензоров",explain:"Хотя другие методы позволяют возвращать прямоугольные тензоры, возвращение тензоров не поможет при объединении последовательностей в батч."},{text:"Дополнение (padding)",explain:"Да, дополнение - это правильный способ выровнять последовательности так, чтобы они вписывались в прямоугольную форму. Но разве это единственный способ?",correct:!0},{text:"Маскирование внимания (attention masking)",explain:"Обязательно! Маски внимания имеют первостепенное значение при работе с последовательностями разной длины. Однако это не единственная техника, о которой следует помнить.",correct:!0}]}}),F=new _({props:{title:"7. В чем смысл применения функции SoftMax к логитам, выводимым моделью классификации последовательностей?",local:"7-в-чем-смысл-применения-функции-softmax-к-логитам-выводимым-моделью-классификации-последовательностей",headingTag:"h3"}}),Q=new w({props:{choices:[{text:"Она смягчает логиты, чтобы они были более надежными.",explain:"Нет, функция SoftMax не влияет на достоверность результатов."},{text:"Она применяет нижнюю и верхнюю границы, чтобы они были понятны.",explain:"Правильно! Результирующие значения ограничены между 0 и 1. Однако это не единственная причина, по которой мы используем функцию SoftMax.",correct:!0},{text:"Общая сумма вывода равна 1, что позволяет получить вероятностную интерпретацию.",explain:"Правильно! Однако это не единственная причина, по которой мы используем функцию SoftMax.",correct:!0}]}}),X=new _({props:{title:"8. Какой метод является основным в API токенизатора?",local:"8-какой-метод-является-основным-в-api-токенизатора",headingTag:"h3"}}),v=new w({props:{choices:[{text:"<code>encode</code>, поскольку он может кодировать текст в идентификаторы и идентификаторы в прогнозы.",explain:"Неверно! Если метод <code>encode</code> существует в токенизаторах, то в моделях его нет."},{text:"Вызов объекта токенизатора напрямую.",explain:"Точно! Метод <code>__call__</code> токенизатора - это очень мощный метод, который может обрабатывать практически все. Это также метод, используемый для получения прогнозов из модели.",correct:!0},{text:"<code>pad</code>",explain:"Неверно! Дополнение очень полезно, но это всего лишь одна из частей API токенизатора."},{text:"<code>tokenize</code>",explain:"Метод <code>tokenize</code>, пожалуй, один из самых полезных методов, но он не является ядром API токенизатора."}]}}),E=new _({props:{title:"9. Что содержит переменная result в этом примере кода?",local:"9-что-содержит-переменная-result-в-этом-примере-кода",headingTag:"h3"}}),H=new we({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIpJTBBcmVzdWx0JTIwJTNEJTIwdG9rZW5pemVyLnRva2VuaXplKCUyMkhlbGxvISUyMik=",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-cased&quot;</span>)
result = tokenizer.tokenize(<span class="hljs-string">&quot;Hello!&quot;</span>)`,wrap:!1}}),R=new w({props:{choices:[{text:"Список строк, каждая из которых является токеном",explain:"Конечно! Преобразуйте это в идентификаторы и отправьте их в модель!",correct:!0},{text:"Список идентификаторов",explain:"Неверно; для этого и нужен метод <code>__call__</code> или <code>convert_tokens_to_ids</code>!"},{text:"Строка, содержащая все токены",explain:"Это было бы неоптимально, поскольку цель состоит в том, чтобы разбить строку на множество токенов."}]}});const he=[He,Ee],N=[];function Te(e,n){return e[0]==="pt"?0:1}return T=Te(y),J=N[T]=he[T](y),G=new Qe({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ru/chapter2/8.mdx"}}),{c(){l=Me("meta"),x=p(),i=Me("p"),d=p(),o(t.$$.fragment),b=p(),o(r.$$.fragment),M=p(),o(Z.$$.fragment),L=p(),o(j.$$.fragment),D=p(),o(U.$$.fragment),O=p(),o(q.$$.fragment),ee=p(),o(z.$$.fragment),te=p(),o(W.$$.fragment),re=p(),o(A.$$.fragment),ne=p(),o(I.$$.fragment),le=p(),o(C.$$.fragment),ie=p(),h.c(),P=p(),o(V.$$.fragment),$e=p(),o(B.$$.fragment),se=p(),o(F.$$.fragment),ae=p(),o(Q.$$.fragment),me=p(),o(X.$$.fragment),pe=p(),o(v.$$.fragment),fe=p(),o(E.$$.fragment),oe=p(),o(H.$$.fragment),ue=p(),o(R.$$.fragment),ce=p(),J.c(),Y=p(),o(G.$$.fragment),ge=p(),K=Me("p"),this.h()},l(e){const n=Ce("svelte-u9bgzb",document.head);l=_e(n,"META",{name:!0,content:!0}),n.forEach($),x=f(e),i=_e(e,"P",{}),Ze(i).forEach($),d=f(e),u(t.$$.fragment,e),b=f(e),u(r.$$.fragment,e),M=f(e),u(Z.$$.fragment,e),L=f(e),u(j.$$.fragment,e),D=f(e),u(U.$$.fragment,e),O=f(e),u(q.$$.fragment,e),ee=f(e),u(z.$$.fragment,e),te=f(e),u(W.$$.fragment,e),re=f(e),u(A.$$.fragment,e),ne=f(e),u(I.$$.fragment,e),le=f(e),u(C.$$.fragment,e),ie=f(e),h.l(e),P=f(e),u(V.$$.fragment,e),$e=f(e),u(B.$$.fragment,e),se=f(e),u(F.$$.fragment,e),ae=f(e),u(Q.$$.fragment,e),me=f(e),u(X.$$.fragment,e),pe=f(e),u(v.$$.fragment,e),fe=f(e),u(E.$$.fragment,e),oe=f(e),u(H.$$.fragment,e),ue=f(e),u(R.$$.fragment,e),ce=f(e),J.l(e),Y=f(e),u(G.$$.fragment,e),ge=f(e),K=_e(e,"P",{}),Ze(K).forEach($),this.h()},h(){je(l,"name","hf:doc:metadata"),je(l,"content",Ge)},m(e,n){Ve(document.head,l),m(e,x,n),m(e,i,n),m(e,d,n),c(t,e,n),m(e,b,n),c(r,e,n),m(e,M,n),c(Z,e,n),m(e,L,n),c(j,e,n),m(e,D,n),c(U,e,n),m(e,O,n),c(q,e,n),m(e,ee,n),c(z,e,n),m(e,te,n),c(W,e,n),m(e,re,n),c(A,e,n),m(e,ne,n),c(I,e,n),m(e,le,n),c(C,e,n),m(e,ie,n),S[k].m(e,n),m(e,P,n),c(V,e,n),m(e,$e,n),c(B,e,n),m(e,se,n),c(F,e,n),m(e,ae,n),c(Q,e,n),m(e,me,n),c(X,e,n),m(e,pe,n),c(v,e,n),m(e,fe,n),c(E,e,n),m(e,oe,n),c(H,e,n),m(e,ue,n),c(R,e,n),m(e,ce,n),N[T].m(e,n),m(e,Y,n),c(G,e,n),m(e,ge,n),m(e,K,n),xe=!0},p(e,[n]){const Je={};n&1&&(Je.fw=e[0]),t.$set(Je);let de=k;k=ke(e),k!==de&&(qe(),s(S[de],1,1,()=>{S[de]=null}),Ue(),h=S[k],h||(h=S[k]=ye[k](e),h.c()),a(h,1),h.m(P.parentNode,P));let be=T;T=Te(e),T!==be&&(qe(),s(N[be],1,1,()=>{N[be]=null}),Ue(),J=N[T],J||(J=N[T]=he[T](e),J.c()),a(J,1),J.m(Y.parentNode,Y))},i(e){xe||(a(t.$$.fragment,e),a(r.$$.fragment,e),a(Z.$$.fragment,e),a(j.$$.fragment,e),a(U.$$.fragment,e),a(q.$$.fragment,e),a(z.$$.fragment,e),a(W.$$.fragment,e),a(A.$$.fragment,e),a(I.$$.fragment,e),a(C.$$.fragment,e),a(h),a(V.$$.fragment,e),a(B.$$.fragment,e),a(F.$$.fragment,e),a(Q.$$.fragment,e),a(X.$$.fragment,e),a(v.$$.fragment,e),a(E.$$.fragment,e),a(H.$$.fragment,e),a(R.$$.fragment,e),a(J),a(G.$$.fragment,e),xe=!0)},o(e){s(t.$$.fragment,e),s(r.$$.fragment,e),s(Z.$$.fragment,e),s(j.$$.fragment,e),s(U.$$.fragment,e),s(q.$$.fragment,e),s(z.$$.fragment,e),s(W.$$.fragment,e),s(A.$$.fragment,e),s(I.$$.fragment,e),s(C.$$.fragment,e),s(h),s(V.$$.fragment,e),s(B.$$.fragment,e),s(F.$$.fragment,e),s(Q.$$.fragment,e),s(X.$$.fragment,e),s(v.$$.fragment,e),s(E.$$.fragment,e),s(H.$$.fragment,e),s(R.$$.fragment,e),s(J),s(G.$$.fragment,e),xe=!1},d(e){e&&($(x),$(i),$(d),$(b),$(M),$(L),$(D),$(O),$(ee),$(te),$(re),$(ne),$(le),$(ie),$(P),$($e),$(se),$(ae),$(me),$(pe),$(fe),$(oe),$(ue),$(ce),$(Y),$(ge),$(K)),$(l),g(t,e),g(r,e),g(Z,e),g(j,e),g(U,e),g(q,e),g(z,e),g(W,e),g(A,e),g(I,e),g(C,e),S[k].d(e),g(V,e),g(B,e),g(F,e),g(Q,e),g(X,e),g(v,e),g(E,e),g(H,e),g(R,e),N[T].d(e),g(G,e)}}}const Ge='{"title":"Тест в конце главы","local":"end-of-chapter-quiz","sections":[{"title":"1. Каков порядок работы конвейера языкового моделирования?","local":"1-каков-порядок-работы-конвейера-языкового-моделирования","sections":[],"depth":3},{"title":"2. Сколько измерений имеет тензор, выводимый базовой моделью Transformer, и каковы они?","local":"2-сколько-измерений-имеет-тензор-выводимый-базовой-моделью-transformer-и-каковы-они","sections":[],"depth":3},{"title":"3. Что из перечисленного ниже является примером токенизации по подсловам?","local":"3-что-из-перечисленного-ниже-является-примером-токенизации-по-подсловам","sections":[],"depth":3},{"title":"4. Что такое голова модели?","local":"4-что-такое-голова-модели","sections":[],"depth":3},{"title":"5. Что такое AutoModel?","local":"5-что-такое-automodel","sections":[],"depth":3},{"title":"5. Что такое TFAutoModel?","local":"5-что-такое-tfautomodel","sections":[],"depth":3},{"title":"6. На какие техники следует обратить внимание при объединении в батч последовательностей разной длины?","local":"6-на-какие-техники-следует-обратить-внимание-при-объединении-в-батч-последовательностей-разной-длины","sections":[],"depth":3},{"title":"7. В чем смысл применения функции SoftMax к логитам, выводимым моделью классификации последовательностей?","local":"7-в-чем-смысл-применения-функции-softmax-к-логитам-выводимым-моделью-классификации-последовательностей","sections":[],"depth":3},{"title":"8. Какой метод является основным в API токенизатора?","local":"8-какой-метод-является-основным-в-api-токенизатора","sections":[],"depth":3},{"title":"9. Что содержит переменная result в этом примере кода?","local":"9-что-содержит-переменная-result-в-этом-примере-кода","sections":[],"depth":3},{"title":"10. Есть ли что-то неправильное в следующем коде?","local":"10-есть-ли-что-то-неправильное-в-следующем-коде","sections":[],"depth":3},{"title":"10. Что-то не так с приведенным ниже кодом?","local":"10-что-то-не-так-с-приведенным-ниже-кодом","sections":[],"depth":3}],"depth":1}';function Se(y,l,x){let i="pt";return We(()=>{const d=new URLSearchParams(window.location.search);x(0,i=d.get("fw")||"pt")}),[i]}class et extends Ae{constructor(l){super(),Ie(this,l,Se,Re,ze,{})}}export{et as component};
