Buckets:
| import{s as Rt,o as _t}from"../chunks/scheduler.893fe8c9.js";import{S as Ct,i as Wt,e as i,s as n,c as o,h as Ht,a as p,d as l,b as a,f as vt,g as c,j as r,k as lt,l as Et,m as s,n as d,t as m,o as M,p as u}from"../chunks/index.2d09ebb4.js";import{C as Ft,H as nt,E as It}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.5420a656.js";import{Y as Xt}from"../chunks/Youtube.b7012d06.js";import{C as f}from"../chunks/CodeBlock.e9202c9f.js";import{C as zt}from"../chunks/CourseFloatingBanner.e3aeab73.js";import{F as Bt}from"../chunks/FrameworkSwitchCourse.f49b9dc4.js";function Vt(st){let b,re,T,oe,y,de,J,me,h,Me,w,ue,g,fe,k,at='Библиотека 🤗 Transformers предоставляет класс <code>Trainer</code>, который помогает произвести fine-tuning любой предобученной модели на вашем датасете. После предобработки данных, сделанных в прошлом разделе, вам останется сделать несколько шагов для определения <code>Trainer</code>. Самая сложная часть – подготовить окружение для запуска <code>Trainer.train()</code>, т.к. она медленно работает на центральном процессоре. Если у вас нет видеокарты, вы можете бесплатно воспользоваться сервисом <a href="https://colab.research.google.com/" rel="nofollow">Google Colab</a>, который предоставляет доступ к вычислениям с использованием GPU и TPU.',be,U,it="Фрагменты кода ниже предполагают, что вы выполнили код из предыдущего раздела. Ниже приведено краткое резюме того, что вам нужно:",Te,G,ye,Z,$e,v,pt="Первый шаг перед определением <code>Trainer</code>, задание класса <code>TrainingArguments</code>, который будет содержать все гиперпараметры для <code>Trainer</code> (для процессов обучения и валидации). Единственный аргумент, который вы должны задать — это каталог, в котором будет сохранена обученная модель, а также контрольные точки. Для всего остального вы можете оставить значения по умолчанию, которые должны подойти для базового fine-tuning.",je,R,Je,$,rt='<p>💡 Если вы хотите автоматически загружать модель на Hub во время обучения, передайте аргумент <code>push_to_hub=True</code> в <code>TrainingArguments</code>. Мы больше узнаем об этом в <a href="../chapter4/3">главе 4</a>.</p>',he,_,ot='Второй шаг – задание модели. Так же, как и в <a href="../chapter2/1">предыдущей главе</a>, мы будем использовать класс <code>AutoModelForSequenceClassification</code> с двумя лейблами:',we,C,ge,W,ct='После создания экземпляра предобученной модели будет распечатано предупреждение (в <a href="../chapter2/1">главе 2</a> мы с таким не сталкивались). Это происходит потому, что BERT не был предобучен для задачи классификации пар предложений, его последний слой не будет использован, вместо него будет добавлен слой, позволяющий работать с такой задачей. Предупреждения сообщают, что некоторые веса не будут использованы (как раз тех слоев, которые не будут использоваться) и для новых будут инициализированы случайные веса. В заключении предлагается обучить модель, что мы и сделаем прямо сейчас.',ke,H,dt="После того, как мы загрузили модель, мы можем определить <code>Trainer</code> и передать туда нужные объекты: <code>model</code>, <code>training_args</code>, обучающую и валидационную выборки, <code>data_collator</code> и <code>tokenizer</code>",Ue,E,Ge,F,mt="Заметьте, когда вы передали <code>tokenizer</code> как в примере выше, значение по умолчанию для <code>data_collator</code> в <code>Trainer</code> будет <code>DataCollatorWithPadding</code> таким, как определено выше, так что эту строку (<code>data_collator=data_collator</code>) можно пропустить в этом вызове.",Ze,I,Mt="Для fine-tuning модели на нашем датасете мы просто должны вызвать метод <code>train()</code> у <code>Trainer</code>:",ve,X,Re,z,ut="Это запустит процесс дообучения (который должен занять несколько минут на GPU) и будет распечатывать значение лосса каждые 500 итераций. Однако эти значения не скажут нам, насколько хорошо или плохо модель работает. И вот почему:",_e,B,ft="<li>Мы не сообщили <code>Trainer</code>, что необходимо проводить валидацию: для этого нужно присвоить аргументу <code>evaluation_strategy</code> значение <code>"steps"</code> (валидировать каждые <code>eval_steps</code>) или <code>"epoch"</code> (валидировать по окончании каждой эпохи).</li> <li>Мы не указали <code>Trainer</code> аргумент <code>compute_metrics()</code> – функцию для вычисления метрики на валидационной части (в таком случае в процессе валидации будет только распечатываться значение лосса, что не очень информативно).</li>",Ce,V,We,x,bt="Давайте посмотрим как мы можем создать и использовать в процессе обучения полезную функцию <code>compute_metrics()</code>. Функция должна принимать на вход объект <code>EvalPrediction</code> (именованный кортеж с полями <code>predictions</code> и <code>label_ids</code>) и возвращать словарь, где ключи - названия метрик, а значения - оценки этих метрик. Чтобы получить предсказания, мы можем использовать функцию <code>Trainer.predict()</code>:",He,Y,Ee,A,Fe,L,Tt="Результат функции <code>predict()</code> - другой именованный кортеж с полями <code>predictions</code>, <code>label_ids</code> и <code>metrics</code>. Поле <code>metrics</code> будет содержать значение лосса на нашем датасете и значения метрик. После реализации функции <code>compute_metrics()</code> и передачи ее в <code>Trainer</code> поле <code>metrics</code> также будет содержать результат функции <code>compute_metrics()</code>.",Ie,Q,yt='Как можно заметить, <code>predictions</code> - массив 408 х 2 (408 - число элементов в датасете, который мы использовали). Это логиты для каждого элемента нашего датасета, переданного в <code>predict()</code> (как вы видели в <a href="../chapter2/1">предыдущей главе</a> все модели Трансформеров возвращают логиты). Чтобы превратить их в предсказания и сравнить с нашими лейблами, нам необходимо узнать индекс максимального элемента второй оси:',Xe,N,ze,q,$t='Теперь мы можем сравнить эти предсказания с лейблами. Для создания функции <code>compute_metric()</code> мы воспользуемся метриками из библиотеки 🤗 <a href="https://github.com/huggingface/evaluate/" rel="nofollow">Evaluate</a>. Мы можем загрузить подходящие для датасета MRPC метрики так же просто, как мы загрузили датасет, но на этот раз с помощью функции <code>evaluate.load()</code>. Возвращаемый объект имеет метод <code>compute()</code>, который мы можем использовать для вычисления метрики:',Be,P,Ve,S,xe,K,jt='У вас эти результаты могут отличаться ввиду случайной инициализации параметров модели. Тут мы можем увидеть точность 85.78% и F1 89.97% на валидационной части выборки. Эти метрики используются для валидации результатов на MRPC датасете на бенчмарке GLUE. В таблице в статье о <a href="https://arxiv.org/pdf/1810.04805.pdf" rel="nofollow">BERT</a> указано значение F1 оценки в 88.9 для базовой модели. Это была оценка для варианта модели <code>uncased</code>, а мы использовали <code>cased</code>, этим и объясняется более хороший результат.',Ye,D,Jt="Собирая вместе все фрагменты выше, мы получим нашу функцию <code>compute_metrics()</code>:",Ae,O,Le,ee,ht="Чтобы увидеть эту функцию в действии после каждой эпохи ниже мы определим еще один <code>Trainer</code> с функцией <code>compute_metrics()</code>:",Qe,te,Ne,le,wt="Обратите внимание, что мы создали новый объект <code>TrainingArguments</code> с собственным <code>evaluation_strategy</code> равным <code>"epoch"</code> и новой моделью - иначе мы бы продолжили обучать модель, которая уже является обученной. Чтобы запустить обучение заново, надо выполнить:",qe,se,Pe,ne,gt="На этот раз будет распечатываться валидационный лосс и метрики по окончанию каждой эпохи обучения. Напомним, что полученные значения точности и F1 могут не полностью совпадать с приведенными в примере из-за случайной инициализации слоев модели, но порядок должен быть примерно таким же.",Se,ae,kt="<code>Trainer</code> может работать с несколькими GPU или TPU и предоставляет множество опций, например применение техники mixed-precision (установите <code>fp16 = True</code> в аргументах). Подробно об опциях мы поговорим чуть в Главе 10.",Ke,ie,Ut="На этом введение в fine-tuning с использованием API <code>Trainer</code> подошло к концу. Пример того, как сделать это же для наиболее распространенных задач NLP мы рассмотрим в Главе 7, а сейчас взглянем на то, как реализовать то же самое на чистом PyTorch.",De,j,Gt="<p>✏️ <strong>Попробуйте!</strong> Произведите fine-tuning модели на датасете GLUE SST-2 с использованием препроцессинга из раздела 2.</p>",Oe,pe,et,ce,tt;return y=new Bt({props:{fw:st[0]}}),J=new Ft({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),h=new nt({props:{title:"Fine-tuning модели с использованием Trainer API",local:"fine-tuning-модели-с-использованием-trainer-api",headingTag:"h1"}}),w=new zt({props:{chapter:3,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/ru/chapter3/section3.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/ru/chapter3/section3.ipynb"}]}}),g=new Xt({props:{id:"nvBXf7s7vTI"}}),G=new f({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBEYXRhQ29sbGF0b3JXaXRoUGFkZGluZyUwQSUwQXJhd19kYXRhc2V0cyUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJnbHVlJTIyJTJDJTIwJTIybXJwYyUyMiklMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyYmVydC1iYXNlLXVuY2FzZWQlMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQSUwQSUwQWRlZiUyMHRva2VuaXplX2Z1bmN0aW9uKGV4YW1wbGUpJTNBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwdG9rZW5pemVyKGV4YW1wbGUlNUIlMjJzZW50ZW5jZTElMjIlNUQlMkMlMjBleGFtcGxlJTVCJTIyc2VudGVuY2UyJTIyJTVEJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUpJTBBJTBBJTBBdG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwcmF3X2RhdGFzZXRzLm1hcCh0b2tlbml6ZV9mdW5jdGlvbiUyQyUyMGJhdGNoZWQlM0RUcnVlKSUwQWRhdGFfY29sbGF0b3IlMjAlM0QlMjBEYXRhQ29sbGF0b3JXaXRoUGFkZGluZyh0b2tlbml6ZXIlM0R0b2tlbml6ZXIp",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset | |
| <span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, DataCollatorWithPadding | |
| raw_datasets = load_dataset(<span class="hljs-string">"glue"</span>, <span class="hljs-string">"mrpc"</span>) | |
| checkpoint = <span class="hljs-string">"bert-base-uncased"</span> | |
| tokenizer = AutoTokenizer.from_pretrained(checkpoint) | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">tokenize_function</span>(<span class="hljs-params">example</span>): | |
| <span class="hljs-keyword">return</span> tokenizer(example[<span class="hljs-string">"sentence1"</span>], example[<span class="hljs-string">"sentence2"</span>], truncation=<span class="hljs-literal">True</span>) | |
| tokenized_datasets = raw_datasets.<span class="hljs-built_in">map</span>(tokenize_function, batched=<span class="hljs-literal">True</span>) | |
| data_collator = DataCollatorWithPadding(tokenizer=tokenizer)`,wrap:!1}}),Z=new nt({props:{title:"Обучение",local:"обучение",headingTag:"h3"}}),R=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluaW5nQXJndW1lbnRzJTBBJTBBdHJhaW5pbmdfYXJncyUyMCUzRCUyMFRyYWluaW5nQXJndW1lbnRzKCUyMnRlc3QtdHJhaW5lciUyMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TrainingArguments | |
| training_args = TrainingArguments(<span class="hljs-string">"test-trainer"</span>)`,wrap:!1}}),C=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMEElMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQlMkMlMjBudW1fbGFiZWxzJTNEMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForSequenceClassification | |
| model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=<span class="hljs-number">2</span>)`,wrap:!1}}),E=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluZXIlMEElMEF0cmFpbmVyJTIwJTNEJTIwVHJhaW5lciglMEElMjAlMjAlMjAlMjBtb2RlbCUyQyUwQSUyMCUyMCUyMCUyMHRyYWluaW5nX2FyZ3MlMkMlMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhc2V0JTNEdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBldmFsX2RhdGFzZXQlM0R0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwZGF0YV9jb2xsYXRvciUzRGRhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjB0b2tlbml6ZXIlM0R0b2tlbml6ZXIlMkMlMEEp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Trainer | |
| trainer = Trainer( | |
| model, | |
| training_args, | |
| train_dataset=tokenized_datasets[<span class="hljs-string">"train"</span>], | |
| eval_dataset=tokenized_datasets[<span class="hljs-string">"validation"</span>], | |
| data_collator=data_collator, | |
| tokenizer=tokenizer, | |
| )`,wrap:!1}}),X=new f({props:{code:"dHJhaW5lci50cmFpbigp",highlighted:"trainer.train()",wrap:!1}}),V=new nt({props:{title:"Валидация",local:"валидация",headingTag:"h3"}}),Y=new f({props:{code:"cHJlZGljdGlvbnMlMjAlM0QlMjB0cmFpbmVyLnByZWRpY3QodG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydmFsaWRhdGlvbiUyMiU1RCklMEFwcmludChwcmVkaWN0aW9ucy5wcmVkaWN0aW9ucy5zaGFwZSUyQyUyMHByZWRpY3Rpb25zLmxhYmVsX2lkcy5zaGFwZSk=",highlighted:`predictions = trainer.predict(tokenized_datasets[<span class="hljs-string">"validation"</span>]) | |
| <span class="hljs-built_in">print</span>(predictions.predictions.shape, predictions.label_ids.shape)`,wrap:!1}}),A=new f({props:{code:"KDQwOCUyQyUyMDIpJTIwKDQwOCUyQyk=",highlighted:'(<span class="hljs-number">408</span>, <span class="hljs-number">2</span>) (<span class="hljs-number">408</span>,)',wrap:!1}}),N=new f({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBcHJlZHMlMjAlM0QlMjBucC5hcmdtYXgocHJlZGljdGlvbnMucHJlZGljdGlvbnMlMkMlMjBheGlzJTNELTEp",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np | |
| preds = np.argmax(predictions.predictions, axis=-<span class="hljs-number">1</span>)`,wrap:!1}}),P=new f({props:{code:"aW1wb3J0JTIwZXZhbHVhdGUlMEElMEFtZXRyaWMlMjAlM0QlMjBldmFsdWF0ZS5sb2FkKCUyMmdsdWUlMjIlMkMlMjAlMjJtcnBjJTIyKSUwQW1ldHJpYy5jb21wdXRlKHByZWRpY3Rpb25zJTNEcHJlZHMlMkMlMjByZWZlcmVuY2VzJTNEcHJlZGljdGlvbnMubGFiZWxfaWRzKQ==",highlighted:`<span class="hljs-keyword">import</span> evaluate | |
| metric = evaluate.load(<span class="hljs-string">"glue"</span>, <span class="hljs-string">"mrpc"</span>) | |
| metric.compute(predictions=preds, references=predictions.label_ids)`,wrap:!1}}),S=new f({props:{code:"JTdCJ2FjY3VyYWN5JyUzQSUyMDAuODU3ODQzMTM3MjU0OTAxOSUyQyUyMCdmMSclM0ElMjAwLjg5OTY1Mzk3OTIzODc1NDIlN0Q=",highlighted:'{<span class="hljs-string">'accuracy'</span>: <span class="hljs-number">0.8578431372549019</span>, <span class="hljs-string">'f1'</span>: <span class="hljs-number">0.8996539792387542</span>}',wrap:!1}}),O=new f({props:{code:"ZGVmJTIwY29tcHV0ZV9tZXRyaWNzKGV2YWxfcHJlZHMpJTNBJTBBJTIwJTIwJTIwJTIwbWV0cmljJTIwJTNEJTIwZXZhbHVhdGUubG9hZCglMjJnbHVlJTIyJTJDJTIwJTIybXJwYyUyMiklMEElMjAlMjAlMjAlMjBsb2dpdHMlMkMlMjBsYWJlbHMlMjAlM0QlMjBldmFsX3ByZWRzJTBBJTIwJTIwJTIwJTIwcHJlZGljdGlvbnMlMjAlM0QlMjBucC5hcmdtYXgobG9naXRzJTJDJTIwYXhpcyUzRC0xKSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMG1ldHJpYy5jb21wdXRlKHByZWRpY3Rpb25zJTNEcHJlZGljdGlvbnMlMkMlMjByZWZlcmVuY2VzJTNEbGFiZWxzKQ==",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">compute_metrics</span>(<span class="hljs-params">eval_preds</span>): | |
| metric = evaluate.load(<span class="hljs-string">"glue"</span>, <span class="hljs-string">"mrpc"</span>) | |
| logits, labels = eval_preds | |
| predictions = np.argmax(logits, axis=-<span class="hljs-number">1</span>) | |
| <span class="hljs-keyword">return</span> metric.compute(predictions=predictions, references=labels)`,wrap:!1}}),te=new f({props:{code:"dHJhaW5pbmdfYXJncyUyMCUzRCUyMFRyYWluaW5nQXJndW1lbnRzKCUyMnRlc3QtdHJhaW5lciUyMiUyQyUyMGV2YWx1YXRpb25fc3RyYXRlZ3klM0QlMjJlcG9jaCUyMiklMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQlMkMlMjBudW1fbGFiZWxzJTNEMiklMEElMEF0cmFpbmVyJTIwJTNEJTIwVHJhaW5lciglMEElMjAlMjAlMjAlMjBtb2RlbCUyQyUwQSUyMCUyMCUyMCUyMHRyYWluaW5nX2FyZ3MlMkMlMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhc2V0JTNEdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBldmFsX2RhdGFzZXQlM0R0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwZGF0YV9jb2xsYXRvciUzRGRhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjB0b2tlbml6ZXIlM0R0b2tlbml6ZXIlMkMlMEElMjAlMjAlMjAlMjBjb21wdXRlX21ldHJpY3MlM0Rjb21wdXRlX21ldHJpY3MlMkMlMEEp",highlighted:`training_args = TrainingArguments(<span class="hljs-string">"test-trainer"</span>, evaluation_strategy=<span class="hljs-string">"epoch"</span>) | |
| model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=<span class="hljs-number">2</span>) | |
| trainer = Trainer( | |
| model, | |
| training_args, | |
| train_dataset=tokenized_datasets[<span class="hljs-string">"train"</span>], | |
| eval_dataset=tokenized_datasets[<span class="hljs-string">"validation"</span>], | |
| data_collator=data_collator, | |
| tokenizer=tokenizer, | |
| compute_metrics=compute_metrics, | |
| )`,wrap:!1}}),se=new f({props:{code:"dHJhaW5lci50cmFpbigp",highlighted:'trainer.trai<span class="hljs-meta">n</span>()',wrap:!1}}),pe=new It({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ru/chapter3/3.mdx"}}),{c(){b=i("meta"),re=n(),T=i("p"),oe=n(),o(y.$$.fragment),de=n(),o(J.$$.fragment),me=n(),o(h.$$.fragment),Me=n(),o(w.$$.fragment),ue=n(),o(g.$$.fragment),fe=n(),k=i("p"),k.innerHTML=at,be=n(),U=i("p"),U.textContent=it,Te=n(),o(G.$$.fragment),ye=n(),o(Z.$$.fragment),$e=n(),v=i("p"),v.innerHTML=pt,je=n(),o(R.$$.fragment),Je=n(),$=i("blockquote"),$.innerHTML=rt,he=n(),_=i("p"),_.innerHTML=ot,we=n(),o(C.$$.fragment),ge=n(),W=i("p"),W.innerHTML=ct,ke=n(),H=i("p"),H.innerHTML=dt,Ue=n(),o(E.$$.fragment),Ge=n(),F=i("p"),F.innerHTML=mt,Ze=n(),I=i("p"),I.innerHTML=Mt,ve=n(),o(X.$$.fragment),Re=n(),z=i("p"),z.textContent=ut,_e=n(),B=i("ol"),B.innerHTML=ft,Ce=n(),o(V.$$.fragment),We=n(),x=i("p"),x.innerHTML=bt,He=n(),o(Y.$$.fragment),Ee=n(),o(A.$$.fragment),Fe=n(),L=i("p"),L.innerHTML=Tt,Ie=n(),Q=i("p"),Q.innerHTML=yt,Xe=n(),o(N.$$.fragment),ze=n(),q=i("p"),q.innerHTML=$t,Be=n(),o(P.$$.fragment),Ve=n(),o(S.$$.fragment),xe=n(),K=i("p"),K.innerHTML=jt,Ye=n(),D=i("p"),D.innerHTML=Jt,Ae=n(),o(O.$$.fragment),Le=n(),ee=i("p"),ee.innerHTML=ht,Qe=n(),o(te.$$.fragment),Ne=n(),le=i("p"),le.innerHTML=wt,qe=n(),o(se.$$.fragment),Pe=n(),ne=i("p"),ne.textContent=gt,Se=n(),ae=i("p"),ae.innerHTML=kt,Ke=n(),ie=i("p"),ie.innerHTML=Ut,De=n(),j=i("blockquote"),j.innerHTML=Gt,Oe=n(),o(pe.$$.fragment),et=n(),ce=i("p"),this.h()},l(e){const t=Ht("svelte-u9bgzb",document.head);b=p(t,"META",{name:!0,content:!0}),t.forEach(l),re=a(e),T=p(e,"P",{}),vt(T).forEach(l),oe=a(e),c(y.$$.fragment,e),de=a(e),c(J.$$.fragment,e),me=a(e),c(h.$$.fragment,e),Me=a(e),c(w.$$.fragment,e),ue=a(e),c(g.$$.fragment,e),fe=a(e),k=p(e,"P",{"data-svelte-h":!0}),r(k)!=="svelte-1ydyfc5"&&(k.innerHTML=at),be=a(e),U=p(e,"P",{"data-svelte-h":!0}),r(U)!=="svelte-zddvdi"&&(U.textContent=it),Te=a(e),c(G.$$.fragment,e),ye=a(e),c(Z.$$.fragment,e),$e=a(e),v=p(e,"P",{"data-svelte-h":!0}),r(v)!=="svelte-189hckl"&&(v.innerHTML=pt),je=a(e),c(R.$$.fragment,e),Je=a(e),$=p(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),r($)!=="svelte-1m4ddbh"&&($.innerHTML=rt),he=a(e),_=p(e,"P",{"data-svelte-h":!0}),r(_)!=="svelte-g2bimy"&&(_.innerHTML=ot),we=a(e),c(C.$$.fragment,e),ge=a(e),W=p(e,"P",{"data-svelte-h":!0}),r(W)!=="svelte-1fl1q8l"&&(W.innerHTML=ct),ke=a(e),H=p(e,"P",{"data-svelte-h":!0}),r(H)!=="svelte-1s3gapf"&&(H.innerHTML=dt),Ue=a(e),c(E.$$.fragment,e),Ge=a(e),F=p(e,"P",{"data-svelte-h":!0}),r(F)!=="svelte-1jzisoh"&&(F.innerHTML=mt),Ze=a(e),I=p(e,"P",{"data-svelte-h":!0}),r(I)!=="svelte-159l1wi"&&(I.innerHTML=Mt),ve=a(e),c(X.$$.fragment,e),Re=a(e),z=p(e,"P",{"data-svelte-h":!0}),r(z)!=="svelte-9n8hhe"&&(z.textContent=ut),_e=a(e),B=p(e,"OL",{"data-svelte-h":!0}),r(B)!=="svelte-1l6i09g"&&(B.innerHTML=ft),Ce=a(e),c(V.$$.fragment,e),We=a(e),x=p(e,"P",{"data-svelte-h":!0}),r(x)!=="svelte-w4t8m7"&&(x.innerHTML=bt),He=a(e),c(Y.$$.fragment,e),Ee=a(e),c(A.$$.fragment,e),Fe=a(e),L=p(e,"P",{"data-svelte-h":!0}),r(L)!=="svelte-185f6i7"&&(L.innerHTML=Tt),Ie=a(e),Q=p(e,"P",{"data-svelte-h":!0}),r(Q)!=="svelte-flcsdp"&&(Q.innerHTML=yt),Xe=a(e),c(N.$$.fragment,e),ze=a(e),q=p(e,"P",{"data-svelte-h":!0}),r(q)!=="svelte-n04ftp"&&(q.innerHTML=$t),Be=a(e),c(P.$$.fragment,e),Ve=a(e),c(S.$$.fragment,e),xe=a(e),K=p(e,"P",{"data-svelte-h":!0}),r(K)!=="svelte-1j9axbb"&&(K.innerHTML=jt),Ye=a(e),D=p(e,"P",{"data-svelte-h":!0}),r(D)!=="svelte-ap2krs"&&(D.innerHTML=Jt),Ae=a(e),c(O.$$.fragment,e),Le=a(e),ee=p(e,"P",{"data-svelte-h":!0}),r(ee)!=="svelte-ll5fb5"&&(ee.innerHTML=ht),Qe=a(e),c(te.$$.fragment,e),Ne=a(e),le=p(e,"P",{"data-svelte-h":!0}),r(le)!=="svelte-1l8jjkk"&&(le.innerHTML=wt),qe=a(e),c(se.$$.fragment,e),Pe=a(e),ne=p(e,"P",{"data-svelte-h":!0}),r(ne)!=="svelte-1yj6bqb"&&(ne.textContent=gt),Se=a(e),ae=p(e,"P",{"data-svelte-h":!0}),r(ae)!=="svelte-6ncnfr"&&(ae.innerHTML=kt),Ke=a(e),ie=p(e,"P",{"data-svelte-h":!0}),r(ie)!=="svelte-ozav2a"&&(ie.innerHTML=Ut),De=a(e),j=p(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),r(j)!=="svelte-104p99u"&&(j.innerHTML=Gt),Oe=a(e),c(pe.$$.fragment,e),et=a(e),ce=p(e,"P",{}),vt(ce).forEach(l),this.h()},h(){lt(b,"name","hf:doc:metadata"),lt(b,"content",xt),lt($,"class","tip"),lt(j,"class","tip")},m(e,t){Et(document.head,b),s(e,re,t),s(e,T,t),s(e,oe,t),d(y,e,t),s(e,de,t),d(J,e,t),s(e,me,t),d(h,e,t),s(e,Me,t),d(w,e,t),s(e,ue,t),d(g,e,t),s(e,fe,t),s(e,k,t),s(e,be,t),s(e,U,t),s(e,Te,t),d(G,e,t),s(e,ye,t),d(Z,e,t),s(e,$e,t),s(e,v,t),s(e,je,t),d(R,e,t),s(e,Je,t),s(e,$,t),s(e,he,t),s(e,_,t),s(e,we,t),d(C,e,t),s(e,ge,t),s(e,W,t),s(e,ke,t),s(e,H,t),s(e,Ue,t),d(E,e,t),s(e,Ge,t),s(e,F,t),s(e,Ze,t),s(e,I,t),s(e,ve,t),d(X,e,t),s(e,Re,t),s(e,z,t),s(e,_e,t),s(e,B,t),s(e,Ce,t),d(V,e,t),s(e,We,t),s(e,x,t),s(e,He,t),d(Y,e,t),s(e,Ee,t),d(A,e,t),s(e,Fe,t),s(e,L,t),s(e,Ie,t),s(e,Q,t),s(e,Xe,t),d(N,e,t),s(e,ze,t),s(e,q,t),s(e,Be,t),d(P,e,t),s(e,Ve,t),d(S,e,t),s(e,xe,t),s(e,K,t),s(e,Ye,t),s(e,D,t),s(e,Ae,t),d(O,e,t),s(e,Le,t),s(e,ee,t),s(e,Qe,t),d(te,e,t),s(e,Ne,t),s(e,le,t),s(e,qe,t),d(se,e,t),s(e,Pe,t),s(e,ne,t),s(e,Se,t),s(e,ae,t),s(e,Ke,t),s(e,ie,t),s(e,De,t),s(e,j,t),s(e,Oe,t),d(pe,e,t),s(e,et,t),s(e,ce,t),tt=!0},p(e,[t]){const Zt={};t&1&&(Zt.fw=e[0]),y.$set(Zt)},i(e){tt||(m(y.$$.fragment,e),m(J.$$.fragment,e),m(h.$$.fragment,e),m(w.$$.fragment,e),m(g.$$.fragment,e),m(G.$$.fragment,e),m(Z.$$.fragment,e),m(R.$$.fragment,e),m(C.$$.fragment,e),m(E.$$.fragment,e),m(X.$$.fragment,e),m(V.$$.fragment,e),m(Y.$$.fragment,e),m(A.$$.fragment,e),m(N.$$.fragment,e),m(P.$$.fragment,e),m(S.$$.fragment,e),m(O.$$.fragment,e),m(te.$$.fragment,e),m(se.$$.fragment,e),m(pe.$$.fragment,e),tt=!0)},o(e){M(y.$$.fragment,e),M(J.$$.fragment,e),M(h.$$.fragment,e),M(w.$$.fragment,e),M(g.$$.fragment,e),M(G.$$.fragment,e),M(Z.$$.fragment,e),M(R.$$.fragment,e),M(C.$$.fragment,e),M(E.$$.fragment,e),M(X.$$.fragment,e),M(V.$$.fragment,e),M(Y.$$.fragment,e),M(A.$$.fragment,e),M(N.$$.fragment,e),M(P.$$.fragment,e),M(S.$$.fragment,e),M(O.$$.fragment,e),M(te.$$.fragment,e),M(se.$$.fragment,e),M(pe.$$.fragment,e),tt=!1},d(e){e&&(l(re),l(T),l(oe),l(de),l(me),l(Me),l(ue),l(fe),l(k),l(be),l(U),l(Te),l(ye),l($e),l(v),l(je),l(Je),l($),l(he),l(_),l(we),l(ge),l(W),l(ke),l(H),l(Ue),l(Ge),l(F),l(Ze),l(I),l(ve),l(Re),l(z),l(_e),l(B),l(Ce),l(We),l(x),l(He),l(Ee),l(Fe),l(L),l(Ie),l(Q),l(Xe),l(ze),l(q),l(Be),l(Ve),l(xe),l(K),l(Ye),l(D),l(Ae),l(Le),l(ee),l(Qe),l(Ne),l(le),l(qe),l(Pe),l(ne),l(Se),l(ae),l(Ke),l(ie),l(De),l(j),l(Oe),l(et),l(ce)),l(b),u(y,e),u(J,e),u(h,e),u(w,e),u(g,e),u(G,e),u(Z,e),u(R,e),u(C,e),u(E,e),u(X,e),u(V,e),u(Y,e),u(A,e),u(N,e),u(P,e),u(S,e),u(O,e),u(te,e),u(se,e),u(pe,e)}}}const xt='{"title":"Fine-tuning модели с использованием Trainer API","local":"fine-tuning-модели-с-использованием-trainer-api","sections":[{"title":"Обучение","local":"обучение","sections":[],"depth":3},{"title":"Валидация","local":"валидация","sections":[],"depth":3}],"depth":1}';function Yt(st,b,re){let T="pt";return _t(()=>{const oe=new URLSearchParams(window.location.search);re(0,T=oe.get("fw")||"pt")}),[T]}class Kt extends Ct{constructor(b){super(),Wt(this,b,Yt,Vt,Rt,{})}}export{Kt as component}; | |
Xet Storage Details
- Size:
- 29.3 kB
- Xet hash:
- 0532f852eb9aaec4c808a38096e01bf81e4250cbe54814686fe0cc9b4a111cc6
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.