import{s as ta,o as sa}from"../chunks/scheduler.cd324960.js";import{S as na,i as aa,e as p,s as n,c as r,h as pa,a as M,d as t,b as a,f as Dn,g as c,j as i,k as Kn,l as Ma,m as s,n as m,t as o,o as y,p as J,q as la,r as ea}from"../chunks/index.d5c3adcc.js";import{T as On}from"../chunks/Tip.889bec11.js";import{C as ia,H as j,E as ra}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.14d935fa.js";import{C as T}from"../chunks/CodeBlock.77426a60.js";function ca(Ie){let u;return{c(){u=la('Вы можете изменить идентификатор языка с `"dv"` на идентификатор языка по вашему выбору. Чтобы увидеть все возможные\n    языки в Common Voice 13, ознакомьтесь с карточкой набора данных на Hub Hugging Face: https://huggingface.co/datasets/mozilla-foundation/common_voice_13_0')},l(U){u=ea(U,'Вы можете изменить идентификатор языка с `"dv"` на идентификатор языка по вашему выбору. Чтобы увидеть все возможные\n    языки в Common Voice 13, ознакомьтесь с карточкой набора данных на Hub Hugging Face: https://huggingface.co/datasets/mozilla-foundation/common_voice_13_0')},m(U,w){s(U,u,w)},d(U){U&&t(u)}}}function ma(Ie){let u;return{c(){u=la("Если вы не хотите загружать контрольные точки модели на Hugging Face Hub, установите `push_to_hub=False`.")},l(U){u=ea(U,"Если вы не хотите загружать контрольные точки модели на Hugging Face Hub, установите `push_to_hub=False`.")},m(U,w){s(U,u,w)},d(U){U&&t(u)}}}function oa(Ie){let u,U,w,_e,b,$e,f,We,C,xs=`В этом разделе мы рассмотрим пошаговое руководство по дообучению модели Whisper для распознавания речи на наборе данных Common
Voice 13. Мы будем использовать версию модели ‘small’ и относительно небольшой набор данных, что позволит вам провести настройку
довольно быстро на любом GPU объемом памяти 16 ГБ и более с небольшими требованиями к дисковому пространству, на таком GPU как T4
объемом 16 ГБ, предоставляемый в бесплатной версии Google Colab.`,ve,I,Xs=`Если у вас GPU с меньшим объемом памяти или возникают проблемы с памятью во время обучения, вы можете следовать предложенным советам
по снижению использования памяти. Если у вас есть доступ к GPU с бОльшим объемом памяти, вы можете изменить аргументы обучения для
максимизации производительности. Таким образом, это руководство доступно независимо от спецификаций вашего GPU!`,Ge,g,ks=`Так же это руководство описывает, как дообучить модель Whisper для языка Дивехи. Однако шаги, описанные здесь, обобщаются на любой
язык в наборе данных Common Voice и будут работать для любого набора данных распознавания речи на Hub Hugging Face. Вы можете изменить
код, чтобы быстро переключиться на необходимый вам язык и дообучить модель Whisper на вашем родном языке 🌍`,Ze,_,Vs="Отлично! Теперь, когда мы разобрались с этим, давайте начнем и запустим нашу процедуру дообучения модели!",Be,$,xe,W,Hs=`Мы настоятельно рекомендуем вам загружать контрольные точки модели непосредственно на <a href="https://huggingface.co/" rel="nofollow">Hugging Face Hub</a> во время обучения.
Hugging Face Hub предоставляет следующие возможности:`,Xe,v,Rs="<li>Встроенный контроль версий: вы можете быть уверены, что ни одна контрольная точка модели не будет потеряна в процессе обучения.</li> <li>Журналы Tensorboard: отслеживание важных показателей в процессе обучения.</li> <li>Карты моделей: документирование того, что делает модель, и предполагаемых вариантов ее использования.</li> <li>Сообщество: простой способ обмена информацией и сотрудничества с сообществом! 🤗</li>",ke,G,Ns=`Связать блокнот с Hub Hugging Face довольно просто - вам просто нужно ввести свой токен аутентификации Hugging Face Hub, когда вас
попросят. Найдите свой токен аутентификации Hugging Face Hub <a href="https://huggingface.co/settings/tokens" rel="nofollow">здесь</a> и введите его, когда вас попросят:`,Ve,Z,He,B,As="<strong>Output:</strong>",Re,x,Ne,X,Ae,k,Es=`<a href="https://huggingface.co/datasets/mozilla-foundation/common_voice_13_0" rel="nofollow">Common Voice 13</a> содержит примерно десять часов
размеченных данных для Дивехи, из которых три часа являются тестовой частью данных. Этих данных крайне мало для дообучения модели,
поэтому мы будем опираться на обширные многоязыковые знания в области распознавания речи, накопленные Whisper во время предварительного
обучения, для низкоресурсного языка Дивехи.`,Ee,V,Ys=`Используя 🤗 Datasets, загрузка и подготовка данных чрезвычайно просты. Мы можем загрузить и подготовить разделения набора данных Common
Voice 13 всего за одну строку кода. Так как Дивехи имеет очень небольшой объем данных, мы объединим выборки <code>train</code> и <code>validation</code>, чтобы
получить примерно семь часов данных для обучения. Мы будем использовать три часа данных выборки <code>test</code> в качестве нашего тестового набора данных:`,Ye,H,Fe,R,Fs="<strong>Output:</strong>",Qe,N,ze,d,qe,A,Qs=`Большинство наборов данных для распознавания речи предоставляют только аудиофайлы для ввода (<code>audio</code>) и соответствующий
транскрибированный текст (<code>sentence</code>). В наборе данных Common Voice есть дополнительная метаинформация, такая как <code>accent</code>
и <code>locale</code>, которую мы можем не учитывать для ASR. Сохраняя блокнот максимально общим, мы будем рассматривать только входное
аудио и транскрибированный текст для дообучения модели, отбрасывая дополнительную метаинформацию:`,Se,E,Le,Y,Pe,F,zs="Конвеер для задачи распознавания речи можно разделить на три этапа:",De,Q,qs="<li>Извлекатель признаков, который предварительно обрабатывает сырой аудиоввод и создает логарифмические мел-спектрограммы</li> <li>Модель, выполняющая отображение последовательности в последовательность</li> <li>Токенизатор, который выполняет постобработку предсказанных токенов в текст</li>",Ke,z,Ss=`В библиотеке 🤗 Transformers для модели Whisper существуют связанные извлекатель признаков и токенизатор, называемые
<a href="https://huggingface.co/docs/transformers/main/model_doc/whisper#transformers.WhisperFeatureExtractor" rel="nofollow">WhisperFeatureExtractor</a>
и <a href="https://huggingface.co/docs/transformers/main/model_doc/whisper#transformers.WhisperTokenizer" rel="nofollow">WhisperTokenizer</a> соответственно.
Для упрощения работы с ними, эти два объекта объединены в одном классе, названном <a href="https://huggingface.co/docs/transformers/model_doc/whisper#transformers.WhisperProcessor" rel="nofollow">WhisperProcessor</a>.
Мы можем вызвать WhisperProcessor для выполнения как предварительной обработки звука, так и постобработки текстового токена.
При этом во время обучения нам нужно отслеживать только два объекта: процессор и модель.`,Oe,q,Ls=`При выполнении многоязыкового дообучения модели нам необходимо установить параметры <code>&quot;language&quot;</code> и <code>&quot;task&quot;</code> при создании процессора.
Параметр <code>&quot;language&quot;</code> должен быть установлен на язык исходного аудио, а параметр <code>&quot;task&quot;</code> на <code>&quot;transcribe&quot;</code> для распознавания речи или
на <code>&quot;translate&quot;</code> для перевода речи. Эти аргументы изменяют поведение токенизатора и должны быть правильно установлены, чтобы обеспечить
правильное кодирование целевых меток.`,lt,S,Ps="Мы можем увидеть все возможные поддерживаемые языки моделью Whisper, импортировав список языков:",et,L,tt,P,Ds=`Если вы прокрутите этот список, вы заметите, что многие языки присутствуют, но Дивехи в нем нет! Это означает, что модель
Whisper не была предварительно обучена на Дивехи. Однако это не означает, что мы не можем дообучить Whisper на этом языке.
Таким образом, мы будем обучать Whisper новому языку, который не поддерживается предварительно обученной контрольной точкой.
Это довольно круто, не так ли?`,st,D,Ks=`При дообучения модели на новый язык Whisper хорошо использует свои знания о других 96 языках, на которых эта модель была
предварительно обучена. В целом, все современные языки будут лингвистически похожи хотя бы на один из 96 языков, которые Whisper
уже знает, и мы будем попадать под эту парадигму кросс-языкового представления знаний.`,nt,K,Os=`Для дообучения модели Whisper на новый язык нам нужно найти <strong>самый похожий</strong> язык, на котором Whisper был предварительно обучен.
Статья в Википедии о Дивехи утверждает, что Дивехи тесно связан с Сингальским языком Шри-Ланки. Если мы снова проверим коды языков,
мы увидим, что Сингальский присутствует в наборе языков Whisper, поэтому мы можем безопасно установить аргумент “language” в значение <code>&quot;sinhalese&quot;</code>.`,at,O,ln=`Отлично! Мы загрузим наш процессор из предварительно обученной контрольной точки, установив язык на <code>&quot;sinhalese&quot;</code> и задачу на <code>&quot;transcribe&quot;</code>,
как объяснено выше:`,pt,ll,Mt,el,en=`Стоит отметить, что в большинстве случаев вы обнаружите, что язык, на котором вы хотите дообучить модель, есть в наборе языков
предобученной модели, в этом случае вы можете просто установить язык напрямую как язык вашего аудиоввода! Обратите внимание,
что оба эти аргумента следует исключить для дообучения только на английском языке, когда есть только один вариант для языка (<code>&quot;English&quot;</code>)
и задачи (<code>&quot;transcribe&quot;</code>).`,it,tl,rt,sl,tn=`Давайте посмотрим на характеристики набора данных. Особое внимание уделяем колонке <code>&quot;audio&quot;</code> - это подробности о частоте
дискретизации наших аудиовходов:`,ct,nl,mt,al,sn="<strong>Output:</strong>",ot,pl,yt,Ml,nn=`Поскольку наше входной звук дискретизируется на частоте 48 кГц, нам нужно уменьшить частоту дискретизации до 16 кГц
перед передачей его в извлекатель признаков Whisper, так как модель Whisper ожидает аудио с частотой дискретизации 16 кГц.`,Jt,il,an=`Мы установим необходимую частоту дискретизации аудиовводов набора данных с помощью метода <a href="https://huggingface.co/docs/datasets/main/en/package_reference/main_classes#datasets.Dataset.cast_column" rel="nofollow"><code>cast_column</code></a>.
Эта операция не изменяет звук непосредственно, а сигнализирует набору данных о пересемплировании аудиообразцов при их загрузке на лету:`,Tt,rl,ut,cl,pn="Теперь мы можем написать функцию для подготовки наших данных к использованию моделью:",Ut,ml,Mn=`<li>Мы загружаем и выполняем пересемплирование аудиоданных на основе выборки, вызывая sample[“audio”]. Как уже было объяснено, библиотека
🤗 Datasets выполняет все необходимые операции пересемплирования на лету.</li> <li>Мы используем извлекатель признаков для вычисления входных признаков в виде логарифмической мел-спектрограммы из нашего одномерного аудио-массива.</li> <li>Мы кодируем транскрипции в идентификаторы меток с помощью токенизатора.</li>`,jt,ol,wt,yl,rn=`Мы можем применить функцию подготовки данных ко всем нашим обучающим примерам, используя метод <code>.map</code> библиотеки 🤗 Datasets.
Мы удалим столбцы из исходных данных обучения (аудио и текст), оставив только столбцы, возвращаемые функцией <code>prepare_dataset</code>:`,dt,Jl,ht,Tl,cn=`Наконец, мы фильтруем любые обучающие данные с аудиообразцами длиннее 30 секунд. В противном случае эти образцы могли бы быть усечены
извлекателем признаков Whisper, что может повлиять на стабильность обучения. Мы определяем функцию, которая возвращает <code>True</code> для образцов,
которые короче 30 секунд, и <code>False</code> для тех, что длиннее:`,bt,ul,ft,Ul,mn="Мы применяем нашу функцию фильтра к всем образцам нашего обучающего набора данных с помощью метода <code>.filter</code> библиотеки 🤗 Datasets:",Ct,jl,It,wl,on="Давайте проверим, сколько обучающих данных мы удалили на этом этапе фильтрации:",gt,dl,_t,hl,yn="<strong>Output</strong>",$t,bl,Wt,fl,Jn=`Хорошо! В этом случае у нас фактически осталось такое же количество образцов, что и раньше, так что образцы длиннее 30 секунд отсутствуют.
Это может быть не так, если вы переключаете языки, поэтому лучше оставить этот шаг фильтра на месте для надежности. Теперь наши данные
полностью готовы для обучения! Давайте продолжим и рассмотрим, как мы можем использовать эти данные для дообучения модели Whisper.`,vt,Cl,Gt,Il,Tn=`Теперь, когда мы подготовили наши данные, мы готовы приступить к обучению модели. <a href="https://huggingface.co/transformers/master/main_classes/trainer.html?highlight=trainer" rel="nofollow">🤗 Trainer</a>
выполнит большую часть тяжелой работы за нас. Все, что нам нужно сделать:`,Zt,gl,un="<li><p>Определить сборщика данных: сборщик данных берет наши предварительно обработанные данные и готовит тензоры PyTorch, готовые для модели.</p></li> <li><p>Определить метрику оценки: во время оценки мы хотим оценивать модель с использованием метрики Word Error Rate (WER). Нам нужно определить функцию <code>compute_metrics</code>, которая будет обрабатывать этот расчет.</p></li> <li><p>Загрузить предварительно обученную контрольную точку: нам нужно загрузить предварительно обученную контрольную точку и правильно сконфигурировать её для обучения.</p></li> <li><p>Определить аргументы обучения: они будут использоваться 🤗 Trainer для построения расписания обучения.</p></li>",Bt,_l,Un="После дообучения модели мы будем оценивать ее на тестовых данных, чтобы убедиться, что мы правильно обучили ее распознавать речь на Дивехи.",xt,$l,Xt,Wl,jn=`Сборщик данных для модели речевой последовательности-в-последовательность уникален в том смысле, что он обрабатывает <code>input_features</code> и
<code>labels</code> независимо: <code>input_features</code> должны обрабатываться извлекателем признаков, а <code>labels</code> - токенизатором.`,kt,vl,wn=`<code>input_features</code> уже дополнены по 30 секунд и преобразованы в логарифмическую мел-спектрограмму фиксированной размерности, поэтому все,
что нам нужно сделать, это преобразовать их в пакетированные тензоры PyTorch. Мы делаем это с помощью метода <code>.pad</code> извлекателя признаков
с параметром <code>return_tensors=pt</code>. Обратите внимание, что дополнительная подгонка не применяется, так как входные данные имеют
фиксированную размерность, и <code>input_features</code> просто преобразуются в тензоры PyTorch.`,Vt,Gl,dn=`С другой стороны, <code>labels</code> не дополняются. Сначала мы дополняем последовательности до максимальной длины в пакете с использованием метода
<code>.pad</code> токенизатора. Затем дополнительные токены заполняются значением <code>-100</code>, чтобы эти токены <strong>не</strong> учитывались при вычислении потерь.
Затем мы удаляем начальный токен транскрипции из начала последовательности меток, так как мы добавим его позже во время обучения.`,Ht,Zl,hn="Мы можем воспользоваться ранее определенным <code>WhisperProcessor</code>, чтобы выполнить как операции извлекателя признаков, так и токенизатора:",Rt,Bl,Nt,xl,bn="Теперь мы можем инициализировать только что определенный сборщик данных:",At,Xl,Et,kl,fn="Продолжаем!",Yt,Vl,Ft,Hl,Cn=`Далее мы определяем метрику оценки, которую будем использовать на нашем наборе для оценки. Мы будем использовать метрику
Word Error Rate (WER), представленную в разделе <a href="evaluation">Оценка</a>, это “де-факто” метрика для оценки систем автоматического распознавания речи.`,Qt,Rl,In="Давайте загрузим метрику WER из библиотеки 🤗 Evaluate:",zt,Nl,qt,Al,gn=`Затем нам просто нужно определить функцию, которая принимает предсказания нашей модели и возвращает метрику WER. Эта функция,
называемая <code>compute_metrics</code>, сначала заменяет <code>-100</code> на <code>pad_token_id</code> в <code>label_ids</code> (отменяя шаг, который мы применили в
коллекторе данных, чтобы правильно игнорировать заполненные токены при вычислении потерь). Затем он декодирует предсказанные
идентификаторы и идентификаторы меток в строки. Наконец, она вычисляет WER между предсказаниями и эталонными метками.
Здесь у нас есть возможность оценить “нормализованные” транскрипции и предсказания, у которых удалены знаки препинания и регистр.
Мы рекомендуем следовать этому совету, чтобы получить преимущество от улучшения WER, полученного путем нормализации транскрипций.`,St,El,Lt,Yl,Pt,Fl,_n="Теперь давайте загрузим предварительно обученную контрольную точку Whisper small. Опять же, это делается с помощью 🤗 Transformers без труда!",Dt,Ql,Kt,zl,$n=`Мы установим <code>use_cache</code> в значение <code>False</code> для обучения, так как мы используем <a href="https://huggingface.co/docs/transformers/v4.18.0/en/performance#gradient-checkpointing" rel="nofollow">проверку градиента</a>,
и эти две опции несовместимы. Мы также переопределим два аргумента для генерации, чтобы контролировать поведение модели во время вывода:
мы принудительно зададим токены языка и задачи во время генерации, установив аргументы <code>language</code> и <code>task</code>, и также снова включим
кэш для генерации, чтобы ускорить время вывода:`,Ot,ql,ls,Sl,es,Ll,Wn=`На последнем этапе мы определяем все параметры, связанные с обучением. Здесь мы устанавливаем количество шагов обучения на 500.
Этого количества шагов достаточно, чтобы увидеть большое улучшение WER по сравнению с предварительно обученной моделью Whisper,
при этом обеспечивая возможность выполнения дообучения в течение примерно 45 минут в бесплатном тарифе Google Colab.
Для получения более подробной информации о параметрах обучения обратитесь к документации по Seq2SeqTrainingArguments <a href="https://huggingface.co/docs/transformers/main_classes/trainer#transformers.Seq2SeqTrainingArguments" rel="nofollow">здесь</a>.`,ts,Pl,ss,h,ns,Dl,vn="Мы можем передать аргументы обучения в 🤗 Trainer вместе с нашей моделью, набором данных, сборщиком данных и функцией <code>compute_metrics</code>:",as,Kl,ps,Ol,Gn="И теперь мы готовы приступить к обучению!",Ms,le,is,ee,Zn="Для запуска обучения просто выполните:",rs,te,cs,se,Bn=`Обучение займет примерно 45 минут в зависимости от вашего графического ускорителя или того, который выделен в Google Colab.
В зависимости от вашего GPU возможно, что при запуске обучения вы столкнетесь с ошибкой CUDA “out-of-memory”. В этом случае
вы можете уменьшать <code>per_device_train_batch_size</code> постепенно вдвое и использовать <a href="https://huggingface.co/docs/transformers/main_classes/trainer#transformers.Seq2SeqTrainingArguments.gradient_accumulation_steps" rel="nofollow"><code>gradient_accumulation_steps</code></a>
для компенсации.`,ms,ne,xn="<strong>Output:</strong>",os,ae,Xn='<thead><tr><th align="center">Training Loss</th> <th align="center">Epoch</th> <th align="center">Step</th> <th align="center">Validation Loss</th> <th align="center">Wer Ortho</th> <th align="center">Wer</th></tr></thead> <tbody><tr><td align="center">0.136</td> <td align="center">1.63</td> <td align="center">500</td> <td align="center">0.1727</td> <td align="center">63.8972</td> <td align="center">14.0661</td></tr></tbody>',ys,pe,kn=`Наш окончательный WER составляет 14,1% - не плохо для семи часов данных обучения и всего 500 шагов обучения! Это означает
улучшение на 112% по сравнению с предварительно обученной моделью! Это означает, что мы взяли модель, которая ранее не имела знаний
о Дивехи, и успешно дообучили ее распознавать речь на Дивехи с достаточной точностью менее чем за один час 🤯`,Js,Me,Vn=`Большой вопрос заключается в том, как это сравнивать с другими системами распознавания речи. Для этого мы можем посмотреть на <a href="https://huggingface.co/spaces/autoevaluate/leaderboards?dataset=mozilla-foundation%2Fcommon_voice_13_0&amp;only_verified=0&amp;task=automatic-speech-recognition&amp;config=dv&amp;split=test&amp;metric=wer" rel="nofollow">доску лидеров autoevaluate</a>,
которая классифицирует модели по языку и набору данных, а затем ранжирует их по их WER.`,Ts,ie,Hn=`Посмотрев на доску лидеров, мы видим, что наша модель, обученная за 500 шагов, убедительно обгоняет предварительно обученный <a href="https://huggingface.co/openai/whisper-small" rel="nofollow">Whisper Small</a>,
который мы оценивали в предыдущем разделе. Отличная работа 👏`,us,re,Rn=`Мы видим, что есть несколько контрольных точек, которые показывают лучший результат, чем тот, который мы обучили. Прелесть платформы
Hugging Face Hub заключается в том, что это <em>коллаборативная</em> платформа - если у нас нет времени или ресурсов для проведения более
длительного обучения самостоятельно, мы можем загрузить контрольную точку, которую кто-то из сообщества обучил и любезно поделился ей
(не забудьте поблагодарить его за это!). Вы сможете загрузить эти контрольные точки так же, как и предварительно обученные модели, используя
класс <code>pipeline</code>, как мы делали ранее! Так что нет ничего, что бы могло помешать вам выбрать лучшую модель из доски лидеров для использования в вашей задаче!`,Us,ce,Nn=`Мы можем автоматически отправить нашу контрольную точку на доску лидеров, когда мы публикуем результаты обучения на Hugging Face Hub - нам
просто нужно установить соответствующие аргументы (kwargs). Вы можете изменить эти значения, чтобы они соответствовали вашему набору данных,
языку и имени модели:`,js,me,ws,oe,An="Теперь результаты обучения можно загрузить на Hugging Face Hub. Для этого выполните команду push_to_hub:",ds,ye,hs,Je,En=`Это сохранит журналы обучения и веса модели в папке <code>&quot;ваше-имя-пользователя/имя-которое-вы-выбрали&quot;</code>. В этом примере посмотрите
загрузку по адресу <code>sanchit-gandhi/whisper-small-dv</code>.`,bs,Te,Yn=`Хотя дообученная модель дает удовлетворительные результаты на тестовых данных Common Voice 13 на Дивехи, это далеко не оптимальный результат.
Цель данного руководства - показать, как настроить модель ASR с использованием 🤗 Trainer для многоязычного распознавания речи.`,fs,ue,Fn=`Если у вас есть доступ к собственному GPU или вы подписаны на платный план Google Colab, вы можете увеличить max_steps до 4000, чтобы
дополнительно улучшить WER, обучаясь больше шагов. Обучение на 4000 шагов займет примерно 3-5 часов в зависимости от вашего GPU и приведет
к результатам WER примерно на 3% ниже, чем при обучении на 500 шагах. Если вы решите обучить на 4000 шагов, мы также рекомендуем изменить
планировщик скорости обучения на <em>линейный</em> (установите <code>lr_scheduler_type=&quot;linear&quot;</code>), так как это также принесет дополнительный прирост
производительности при длительных обучающихся сессиях.`,Cs,Ue,Qn=`Результаты могут быть дальше улучшены путем оптимизации гиперпараметров обучения, таких как <em>скорость обучения</em> (<em>learning rate</em>) и <em>dropout</em>,
а также использования более крупной предварительно обученной контрольной точки (<code>medium</code> или <code>large</code>). Мы оставляем это как упражнение для читателя.`,Is,je,gs,we,zn=`Теперь вы можете поделиться этой моделью с любым пользователем, используя ссылку на Hugging Face Hub. Они могут загрузить ее с идентификатором
<code>&quot;your-username/the-name-you-picked&quot;</code> непосредственно в объект <code>pipeline()</code>. Например, для загрузки дообученной контрольной
точки <a href="https://huggingface.co/sanchit-gandhi/whisper-small-dv" rel="nofollow">“sanchit-gandhi/whisper-small-dv”</a>:`,_s,de,$s,he,Ws,be,qn=`В этом разделе мы рассмотрели пошаговое руководство по дообучению модели Whisper для распознавания речи с использованием 🤗 Datasets,
Transformers и Hugging Face Hub. Сначала мы загрузили набор данных Dhivehi из Common Voice 13 и предобработали его, вычислив лог-мел-спектрограммы
и токенизировав текст. Затем мы определили способ обработки данных, метрику оценки и параметры обучения, прежде чем использовать 🤗 Trainer
для обучения и оценки нашей модели. Мы закончили, загрузив настроенную модель на Hugging Face Hub, и показали, как поделиться и использовать ее
с помощью класса <code>pipeline()</code>.`,vs,fe,Sn=`Если вы следовали этому руководству до этой точки, у вас теперь есть дообученная контрольная точка для распознавания речи, отличная работа! 🥳
Еще более важно то, что вы экипированы всеми инструментами, необходимыми для дообучения модели Whisper на любом наборе данных или в любой предметной
области. Так что чего вы ждете! Выберите один из наборов данных, охваченных в разделе <a href="choosing_dataset">Выбор набора данных</a>, или выберите свой
собственный набор данных и посмотрите, сможете ли вы достичь современной производительности (state-of-the-art performance)! Лидерборд ждет вас…`,Gs,Ce,Zs,ge,Bs;return b=new ia({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),f=new j({props:{title:"Дообучение модели ASR",local:"дообучение-модели-asr",headingTag:"h1"}}),$=new j({props:{title:"Подготовка окружения",local:"подготовка-окружения",headingTag:"h2"}}),Z=new T({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMG5vdGVib29rX2xvZ2luJTBBJTBBbm90ZWJvb2tfbG9naW4oKQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> notebook_login

notebook_login()`,wrap:!1}}),x=new T({props:{code:"TG9naW4lMjBzdWNjZXNzZnVsJTBBWW91ciUyMHRva2VuJTIwaGFzJTIwYmVlbiUyMHNhdmVkJTIwdG8lMjAlMkZyb290JTJGLmh1Z2dpbmdmYWNlJTJGdG9rZW4=",highlighted:`Login successful
Your token has been saved to /root/.huggingface/token`,wrap:!1}}),X=new j({props:{title:"Загрузка набора данных",local:"загрузка-набора-данных",headingTag:"h2"}}),H=new T({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTJDJTIwRGF0YXNldERpY3QlMEElMEFjb21tb25fdm9pY2UlMjAlM0QlMjBEYXRhc2V0RGljdCgpJTBBJTBBY29tbW9uX3ZvaWNlJTVCJTIydHJhaW4lMjIlNUQlMjAlM0QlMjBsb2FkX2RhdGFzZXQoJTBBJTIwJTIwJTIwJTIwJTIybW96aWxsYS1mb3VuZGF0aW9uJTJGY29tbW9uX3ZvaWNlXzEzXzAlMjIlMkMlMjAlMjJkdiUyMiUyQyUyMHNwbGl0JTNEJTIydHJhaW4lMkJ2YWxpZGF0aW9uJTIyJTBBKSUwQWNvbW1vbl92b2ljZSU1QiUyMnRlc3QlMjIlNUQlMjAlM0QlMjBsb2FkX2RhdGFzZXQoJTBBJTIwJTIwJTIwJTIwJTIybW96aWxsYS1mb3VuZGF0aW9uJTJGY29tbW9uX3ZvaWNlXzEzXzAlMjIlMkMlMjAlMjJkdiUyMiUyQyUyMHNwbGl0JTNEJTIydGVzdCUyMiUwQSklMEElMEFwcmludChjb21tb25fdm9pY2Up",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset, DatasetDict

common_voice = DatasetDict()

common_voice[<span class="hljs-string">&quot;train&quot;</span>] = load_dataset(
    <span class="hljs-string">&quot;mozilla-foundation/common_voice_13_0&quot;</span>, <span class="hljs-string">&quot;dv&quot;</span>, split=<span class="hljs-string">&quot;train+validation&quot;</span>
)
common_voice[<span class="hljs-string">&quot;test&quot;</span>] = load_dataset(
    <span class="hljs-string">&quot;mozilla-foundation/common_voice_13_0&quot;</span>, <span class="hljs-string">&quot;dv&quot;</span>, split=<span class="hljs-string">&quot;test&quot;</span>
)

<span class="hljs-built_in">print</span>(common_voice)`,wrap:!1}}),N=new T({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2NsaWVudF9pZCclMkMlMjAncGF0aCclMkMlMjAnYXVkaW8nJTJDJTIwJ3NlbnRlbmNlJyUyQyUyMCd1cF92b3RlcyclMkMlMjAnZG93bl92b3RlcyclMkMlMjAnYWdlJyUyQyUyMCdnZW5kZXInJTJDJTIwJ2FjY2VudCclMkMlMjAnbG9jYWxlJyUyQyUyMCdzZWdtZW50JyUyQyUyMCd2YXJpYW50JyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwNDkwNCUwQSUyMCUyMCUyMCUyMCU3RCklMEElMjAlMjAlMjAlMjB0ZXN0JTNBJTIwRGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidjbGllbnRfaWQnJTJDJTIwJ3BhdGgnJTJDJTIwJ2F1ZGlvJyUyQyUyMCdzZW50ZW5jZSclMkMlMjAndXBfdm90ZXMnJTJDJTIwJ2Rvd25fdm90ZXMnJTJDJTIwJ2FnZSclMkMlMjAnZ2VuZGVyJyUyQyUyMCdhY2NlbnQnJTJDJTIwJ2xvY2FsZSclMkMlMjAnc2VnbWVudCclMkMlMjAndmFyaWFudCclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDIyMTIlMEElMjAlMjAlMjAlMjAlN0QpJTBBJTdEKQ==",highlighted:`DatasetDict({
    train: <span class="hljs-built_in">Dataset</span>({
        features: [<span class="hljs-string">&#x27;client_id&#x27;</span>, <span class="hljs-string">&#x27;path&#x27;</span>, <span class="hljs-string">&#x27;audio&#x27;</span>, <span class="hljs-string">&#x27;sentence&#x27;</span>, <span class="hljs-string">&#x27;up_votes&#x27;</span>, <span class="hljs-string">&#x27;down_votes&#x27;</span>, <span class="hljs-string">&#x27;age&#x27;</span>, <span class="hljs-string">&#x27;gender&#x27;</span>, <span class="hljs-string">&#x27;accent&#x27;</span>, <span class="hljs-string">&#x27;locale&#x27;</span>, <span class="hljs-string">&#x27;segment&#x27;</span>, <span class="hljs-string">&#x27;variant&#x27;</span>],
        num_rows: <span class="hljs-number">4904</span>
    })
    test: <span class="hljs-built_in">Dataset</span>({
        features: [<span class="hljs-string">&#x27;client_id&#x27;</span>, <span class="hljs-string">&#x27;path&#x27;</span>, <span class="hljs-string">&#x27;audio&#x27;</span>, <span class="hljs-string">&#x27;sentence&#x27;</span>, <span class="hljs-string">&#x27;up_votes&#x27;</span>, <span class="hljs-string">&#x27;down_votes&#x27;</span>, <span class="hljs-string">&#x27;age&#x27;</span>, <span class="hljs-string">&#x27;gender&#x27;</span>, <span class="hljs-string">&#x27;accent&#x27;</span>, <span class="hljs-string">&#x27;locale&#x27;</span>, <span class="hljs-string">&#x27;segment&#x27;</span>, <span class="hljs-string">&#x27;variant&#x27;</span>],
        num_rows: <span class="hljs-number">2212</span>
    })
})`,wrap:!1}}),d=new On({props:{$$slots:{default:[ca]},$$scope:{ctx:Ie}}}),E=new T({props:{code:"Y29tbW9uX3ZvaWNlJTIwJTNEJTIwY29tbW9uX3ZvaWNlLnNlbGVjdF9jb2x1bW5zKCU1QiUyMmF1ZGlvJTIyJTJDJTIwJTIyc2VudGVuY2UlMjIlNUQp",highlighted:'common_voice = common_voice.select_columns([<span class="hljs-string">&quot;audio&quot;</span>, <span class="hljs-string">&quot;sentence&quot;</span>])',wrap:!1}}),Y=new j({props:{title:"Извлечение признаков, токенизатор и обработчик",local:"извлечение-признаков-токенизатор-и-обработчик",headingTag:"h2"}}),L=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy5tb2RlbHMud2hpc3Blci50b2tlbml6YXRpb25fd2hpc3BlciUyMGltcG9ydCUyMFRPX0xBTkdVQUdFX0NPREUlMEElMEFUT19MQU5HVUFHRV9DT0RF",highlighted:`<span class="hljs-keyword">from</span> transformers.models.whisper.tokenization_whisper <span class="hljs-keyword">import</span> TO_LANGUAGE_CODE

TO_LANGUAGE_CODE`,wrap:!1}}),ll=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFdoaXNwZXJQcm9jZXNzb3IlMEElMEFwcm9jZXNzb3IlMjAlM0QlMjBXaGlzcGVyUHJvY2Vzc29yLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjAlMjJvcGVuYWklMkZ3aGlzcGVyLXNtYWxsJTIyJTJDJTIwbGFuZ3VhZ2UlM0QlMjJzaW5oYWxlc2UlMjIlMkMlMjB0YXNrJTNEJTIydHJhbnNjcmliZSUyMiUwQSk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> WhisperProcessor

processor = WhisperProcessor.from_pretrained(
    <span class="hljs-string">&quot;openai/whisper-small&quot;</span>, language=<span class="hljs-string">&quot;sinhalese&quot;</span>, task=<span class="hljs-string">&quot;transcribe&quot;</span>
)`,wrap:!1}}),tl=new j({props:{title:"Предварительная обработка данных",local:"предварительная-обработка-данных",headingTag:"h2"}}),nl=new T({props:{code:"Y29tbW9uX3ZvaWNlJTVCJTIydHJhaW4lMjIlNUQuZmVhdHVyZXM=",highlighted:'common_voice[<span class="hljs-string">&quot;train&quot;</span>].features',wrap:!1}}),pl=new T({props:{code:"JTdCJ2F1ZGlvJyUzQSUyMEF1ZGlvKHNhbXBsaW5nX3JhdGUlM0Q0ODAwMCUyQyUyMG1vbm8lM0RUcnVlJTJDJTIwZGVjb2RlJTNEVHJ1ZSUyQyUyMGlkJTNETm9uZSklMkMlMEElMjAnc2VudGVuY2UnJTNBJTIwVmFsdWUoZHR5cGUlM0Qnc3RyaW5nJyUyQyUyMGlkJTNETm9uZSklN0Q=",highlighted:`{<span class="hljs-string">&#x27;audio&#x27;</span>: Audio(<span class="hljs-attribute">sampling_rate</span>=48000, <span class="hljs-attribute">mono</span>=<span class="hljs-literal">True</span>, <span class="hljs-attribute">decode</span>=<span class="hljs-literal">True</span>, <span class="hljs-attribute">id</span>=None),
 <span class="hljs-string">&#x27;sentence&#x27;</span>: Value(<span class="hljs-attribute">dtype</span>=<span class="hljs-string">&#x27;string&#x27;</span>, <span class="hljs-attribute">id</span>=None)}`,wrap:!1}}),rl=new T({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwQXVkaW8lMEElMEFzYW1wbGluZ19yYXRlJTIwJTNEJTIwcHJvY2Vzc29yLmZlYXR1cmVfZXh0cmFjdG9yLnNhbXBsaW5nX3JhdGUlMEFjb21tb25fdm9pY2UlMjAlM0QlMjBjb21tb25fdm9pY2UuY2FzdF9jb2x1bW4oJTIyYXVkaW8lMjIlMkMlMjBBdWRpbyhzYW1wbGluZ19yYXRlJTNEc2FtcGxpbmdfcmF0ZSkp",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> Audio

sampling_rate = processor.feature_extractor.sampling_rate
common_voice = common_voice.cast_column(<span class="hljs-string">&quot;audio&quot;</span>, Audio(sampling_rate=sampling_rate))`,wrap:!1}}),ol=new T({props:{code:"ZGVmJTIwcHJlcGFyZV9kYXRhc2V0KGV4YW1wbGUpJTNBJTBBJTIwJTIwJTIwJTIwYXVkaW8lMjAlM0QlMjBleGFtcGxlJTVCJTIyYXVkaW8lMjIlNUQlMEElMEElMjAlMjAlMjAlMjBleGFtcGxlJTIwJTNEJTIwcHJvY2Vzc29yKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGF1ZGlvJTNEYXVkaW8lNUIlMjJhcnJheSUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNhbXBsaW5nX3JhdGUlM0RhdWRpbyU1QiUyMnNhbXBsaW5nX3JhdGUlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0ZXh0JTNEZXhhbXBsZSU1QiUyMnNlbnRlbmNlJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwKSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMGNvbXB1dGUlMjBpbnB1dCUyMGxlbmd0aCUyMG9mJTIwYXVkaW8lMjBzYW1wbGUlMjBpbiUyMHNlY29uZHMlMEElMjAlMjAlMjAlMjBleGFtcGxlJTVCJTIyaW5wdXRfbGVuZ3RoJTIyJTVEJTIwJTNEJTIwbGVuKGF1ZGlvJTVCJTIyYXJyYXklMjIlNUQpJTIwJTJGJTIwYXVkaW8lNUIlMjJzYW1wbGluZ19yYXRlJTIyJTVEJTBBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwZXhhbXBsZQ==",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">prepare_dataset</span>(<span class="hljs-params">example</span>):
    audio = example[<span class="hljs-string">&quot;audio&quot;</span>]

    example = processor(
        audio=audio[<span class="hljs-string">&quot;array&quot;</span>],
        sampling_rate=audio[<span class="hljs-string">&quot;sampling_rate&quot;</span>],
        text=example[<span class="hljs-string">&quot;sentence&quot;</span>],
    )

    <span class="hljs-comment"># compute input length of audio sample in seconds</span>
    example[<span class="hljs-string">&quot;input_length&quot;</span>] = <span class="hljs-built_in">len</span>(audio[<span class="hljs-string">&quot;array&quot;</span>]) / audio[<span class="hljs-string">&quot;sampling_rate&quot;</span>]

    <span class="hljs-keyword">return</span> example`,wrap:!1}}),Jl=new T({props:{code:"Y29tbW9uX3ZvaWNlJTIwJTNEJTIwY29tbW9uX3ZvaWNlLm1hcCglMEElMjAlMjAlMjAlMjBwcmVwYXJlX2RhdGFzZXQlMkMlMjByZW1vdmVfY29sdW1ucyUzRGNvbW1vbl92b2ljZS5jb2x1bW5fbmFtZXMlNUIlMjJ0cmFpbiUyMiU1RCUyQyUyMG51bV9wcm9jJTNEMSUwQSk=",highlighted:`common_voice = common_voice.<span class="hljs-built_in">map</span>(
    prepare_dataset, remove_columns=common_voice.column_names[<span class="hljs-string">&quot;train&quot;</span>], num_proc=<span class="hljs-number">1</span>
)`,wrap:!1}}),ul=new T({props:{code:"bWF4X2lucHV0X2xlbmd0aCUyMCUzRCUyMDMwLjAlMEElMEElMEFkZWYlMjBpc19hdWRpb19pbl9sZW5ndGhfcmFuZ2UobGVuZ3RoKSUzQSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMGxlbmd0aCUyMCUzQyUyMG1heF9pbnB1dF9sZW5ndGg=",highlighted:`max_input_length = <span class="hljs-number">30.0</span>


<span class="hljs-keyword">def</span> <span class="hljs-title function_">is_audio_in_length_range</span>(<span class="hljs-params">length</span>):
    <span class="hljs-keyword">return</span> length &lt; max_input_length`,wrap:!1}}),jl=new T({props:{code:"Y29tbW9uX3ZvaWNlJTVCJTIydHJhaW4lMjIlNUQlMjAlM0QlMjBjb21tb25fdm9pY2UlNUIlMjJ0cmFpbiUyMiU1RC5maWx0ZXIoJTBBJTIwJTIwJTIwJTIwaXNfYXVkaW9faW5fbGVuZ3RoX3JhbmdlJTJDJTBBJTIwJTIwJTIwJTIwaW5wdXRfY29sdW1ucyUzRCU1QiUyMmlucHV0X2xlbmd0aCUyMiU1RCUyQyUwQSk=",highlighted:`common_voice[<span class="hljs-string">&quot;train&quot;</span>] = common_voice[<span class="hljs-string">&quot;train&quot;</span>].<span class="hljs-built_in">filter</span>(
    is_audio_in_length_range,
    input_columns=[<span class="hljs-string">&quot;input_length&quot;</span>],
)`,wrap:!1}}),dl=new T({props:{code:"Y29tbW9uX3ZvaWNlJTVCJTIydHJhaW4lMjIlNUQ=",highlighted:'common_voice[<span class="hljs-string">&quot;train&quot;</span>]',wrap:!1}}),bl=new T({props:{code:"RGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidpbnB1dF9mZWF0dXJlcyclMkMlMjAnbGFiZWxzJyUyQyUyMCdpbnB1dF9sZW5ndGgnJTVEJTJDJTBBJTIwJTIwJTIwJTIwbnVtX3Jvd3MlM0ElMjA0OTA0JTBBJTdEKQ==",highlighted:`<span class="hljs-title function_ invoke__">Dataset</span>({
    <span class="hljs-attr">features</span>: [<span class="hljs-string">&#x27;input_features&#x27;</span>, <span class="hljs-string">&#x27;labels&#x27;</span>, <span class="hljs-string">&#x27;input_length&#x27;</span>],
    <span class="hljs-attr">num_rows</span>: <span class="hljs-number">4904</span>
})`,wrap:!1}}),Cl=new j({props:{title:"Обучение и оценка",local:"обучение-и-оценка",headingTag:"h2"}}),$l=new j({props:{title:"Определение сборщика данных",local:"определение-сборщика-данных",headingTag:"h2"}}),Bl=new T({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFmcm9tJTIwZGF0YWNsYXNzZXMlMjBpbXBvcnQlMjBkYXRhY2xhc3MlMEFmcm9tJTIwdHlwaW5nJTIwaW1wb3J0JTIwQW55JTJDJTIwRGljdCUyQyUyMExpc3QlMkMlMjBVbmlvbiUwQSUwQSUwQSU0MGRhdGFjbGFzcyUwQWNsYXNzJTIwRGF0YUNvbGxhdG9yU3BlZWNoU2VxMlNlcVdpdGhQYWRkaW5nJTNBJTBBJTIwJTIwJTIwJTIwcHJvY2Vzc29yJTNBJTIwQW55JTBBJTBBJTIwJTIwJTIwJTIwZGVmJTIwX19jYWxsX18oJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2VsZiUyQyUyMGZlYXR1cmVzJTNBJTIwTGlzdCU1QkRpY3QlNUJzdHIlMkMlMjBVbmlvbiU1Qkxpc3QlNUJpbnQlNUQlMkMlMjB0b3JjaC5UZW5zb3IlNUQlNUQlNUQlMEElMjAlMjAlMjAlMjApJTIwLSUzRSUyMERpY3QlNUJzdHIlMkMlMjB0b3JjaC5UZW5zb3IlNUQlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBzcGxpdCUyMGlucHV0cyUyMGFuZCUyMGxhYmVscyUyMHNpbmNlJTIwdGhleSUyMGhhdmUlMjB0byUyMGJlJTIwb2YlMjBkaWZmZXJlbnQlMjBsZW5ndGhzJTIwYW5kJTIwbmVlZCUyMGRpZmZlcmVudCUyMHBhZGRpbmclMjBtZXRob2RzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwZmlyc3QlMjB0cmVhdCUyMHRoZSUyMGF1ZGlvJTIwaW5wdXRzJTIwYnklMjBzaW1wbHklMjByZXR1cm5pbmclMjB0b3JjaCUyMHRlbnNvcnMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpbnB1dF9mZWF0dXJlcyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3QiUyMmlucHV0X2ZlYXR1cmVzJTIyJTNBJTIwZmVhdHVyZSU1QiUyMmlucHV0X2ZlYXR1cmVzJTIyJTVEJTVCMCU1RCU3RCUyMGZvciUyMGZlYXR1cmUlMjBpbiUyMGZlYXR1cmVzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmF0Y2glMjAlM0QlMjBzZWxmLnByb2Nlc3Nvci5mZWF0dXJlX2V4dHJhY3Rvci5wYWQoaW5wdXRfZmVhdHVyZXMlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnB0JTIyKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMGdldCUyMHRoZSUyMHRva2VuaXplZCUyMGxhYmVsJTIwc2VxdWVuY2VzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbGFiZWxfZmVhdHVyZXMlMjAlM0QlMjAlNUIlN0IlMjJpbnB1dF9pZHMlMjIlM0ElMjBmZWF0dXJlJTVCJTIybGFiZWxzJTIyJTVEJTdEJTIwZm9yJTIwZmVhdHVyZSUyMGluJTIwZmVhdHVyZXMlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBwYWQlMjB0aGUlMjBsYWJlbHMlMjB0byUyMG1heCUyMGxlbmd0aCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxhYmVsc19iYXRjaCUyMCUzRCUyMHNlbGYucHJvY2Vzc29yLnRva2VuaXplci5wYWQobGFiZWxfZmVhdHVyZXMlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnB0JTIyKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMHJlcGxhY2UlMjBwYWRkaW5nJTIwd2l0aCUyMC0xMDAlMjB0byUyMGlnbm9yZSUyMGxvc3MlMjBjb3JyZWN0bHklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsYWJlbHMlMjAlM0QlMjBsYWJlbHNfYmF0Y2glNUIlMjJpbnB1dF9pZHMlMjIlNUQubWFza2VkX2ZpbGwoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbGFiZWxzX2JhdGNoLmF0dGVudGlvbl9tYXNrLm5lKDEpJTJDJTIwLTEwMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBpZiUyMGJvcyUyMHRva2VuJTIwaXMlMjBhcHBlbmRlZCUyMGluJTIwcHJldmlvdXMlMjB0b2tlbml6YXRpb24lMjBzdGVwJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwY3V0JTIwYm9zJTIwdG9rZW4lMjBoZXJlJTIwYXMlMjBpdCdzJTIwYXBwZW5kJTIwbGF0ZXIlMjBhbnl3YXlzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjAobGFiZWxzJTVCJTNBJTJDJTIwMCU1RCUyMCUzRCUzRCUyMHNlbGYucHJvY2Vzc29yLnRva2VuaXplci5ib3NfdG9rZW5faWQpLmFsbCgpLmNwdSgpLml0ZW0oKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxhYmVscyUyMCUzRCUyMGxhYmVscyU1QiUzQSUyQyUyMDElM0ElNUQlMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBiYXRjaCU1QiUyMmxhYmVscyUyMiU1RCUyMCUzRCUyMGxhYmVscyUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybiUyMGJhdGNo",highlighted:`<span class="hljs-keyword">import</span> torch

<span class="hljs-keyword">from</span> dataclasses <span class="hljs-keyword">import</span> dataclass
<span class="hljs-keyword">from</span> typing <span class="hljs-keyword">import</span> <span class="hljs-type">Any</span>, <span class="hljs-type">Dict</span>, <span class="hljs-type">List</span>, <span class="hljs-type">Union</span>


<span class="hljs-meta">@dataclass</span>
<span class="hljs-keyword">class</span> <span class="hljs-title class_">DataCollatorSpeechSeq2SeqWithPadding</span>:
    processor: <span class="hljs-type">Any</span>

    <span class="hljs-keyword">def</span> <span class="hljs-title function_">__call__</span>(<span class="hljs-params">
        self, features: <span class="hljs-type">List</span>[<span class="hljs-type">Dict</span>[<span class="hljs-built_in">str</span>, <span class="hljs-type">Union</span>[<span class="hljs-type">List</span>[<span class="hljs-built_in">int</span>], torch.Tensor]]]
    </span>) -&gt; <span class="hljs-type">Dict</span>[<span class="hljs-built_in">str</span>, torch.Tensor]:
        <span class="hljs-comment"># split inputs and labels since they have to be of different lengths and need different padding methods</span>
        <span class="hljs-comment"># first treat the audio inputs by simply returning torch tensors</span>
        input_features = [
            {<span class="hljs-string">&quot;input_features&quot;</span>: feature[<span class="hljs-string">&quot;input_features&quot;</span>][<span class="hljs-number">0</span>]} <span class="hljs-keyword">for</span> feature <span class="hljs-keyword">in</span> features
        ]
        batch = self.processor.feature_extractor.pad(input_features, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)

        <span class="hljs-comment"># get the tokenized label sequences</span>
        label_features = [{<span class="hljs-string">&quot;input_ids&quot;</span>: feature[<span class="hljs-string">&quot;labels&quot;</span>]} <span class="hljs-keyword">for</span> feature <span class="hljs-keyword">in</span> features]
        <span class="hljs-comment"># pad the labels to max length</span>
        labels_batch = self.processor.tokenizer.pad(label_features, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)

        <span class="hljs-comment"># replace padding with -100 to ignore loss correctly</span>
        labels = labels_batch[<span class="hljs-string">&quot;input_ids&quot;</span>].masked_fill(
            labels_batch.attention_mask.ne(<span class="hljs-number">1</span>), -<span class="hljs-number">100</span>
        )

        <span class="hljs-comment"># if bos token is appended in previous tokenization step,</span>
        <span class="hljs-comment"># cut bos token here as it&#x27;s append later anyways</span>
        <span class="hljs-keyword">if</span> (labels[:, <span class="hljs-number">0</span>] == self.processor.tokenizer.bos_token_id).<span class="hljs-built_in">all</span>().cpu().item():
            labels = labels[:, <span class="hljs-number">1</span>:]

        batch[<span class="hljs-string">&quot;labels&quot;</span>] = labels

        <span class="hljs-keyword">return</span> batch`,wrap:!1}}),Xl=new T({props:{code:"ZGF0YV9jb2xsYXRvciUyMCUzRCUyMERhdGFDb2xsYXRvclNwZWVjaFNlcTJTZXFXaXRoUGFkZGluZyhwcm9jZXNzb3IlM0Rwcm9jZXNzb3Ip",highlighted:"data_collator = DataCollatorSpeechSeq2SeqWithPadding(processor=processor)",wrap:!1}}),Vl=new j({props:{title:"Метрики оценки",local:"метрики-оценки",headingTag:"h3"}}),Nl=new T({props:{code:"aW1wb3J0JTIwZXZhbHVhdGUlMEElMEFtZXRyaWMlMjAlM0QlMjBldmFsdWF0ZS5sb2FkKCUyMndlciUyMik=",highlighted:`<span class="hljs-keyword">import</span> evaluate

metric = evaluate.load(<span class="hljs-string">&quot;wer&quot;</span>)`,wrap:!1}}),El=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy5tb2RlbHMud2hpc3Blci5lbmdsaXNoX25vcm1hbGl6ZXIlMjBpbXBvcnQlMjBCYXNpY1RleHROb3JtYWxpemVyJTBBJTBBbm9ybWFsaXplciUyMCUzRCUyMEJhc2ljVGV4dE5vcm1hbGl6ZXIoKSUwQSUwQSUwQWRlZiUyMGNvbXB1dGVfbWV0cmljcyhwcmVkKSUzQSUwQSUyMCUyMCUyMCUyMHByZWRfaWRzJTIwJTNEJTIwcHJlZC5wcmVkaWN0aW9ucyUwQSUyMCUyMCUyMCUyMGxhYmVsX2lkcyUyMCUzRCUyMHByZWQubGFiZWxfaWRzJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwcmVwbGFjZSUyMC0xMDAlMjB3aXRoJTIwdGhlJTIwcGFkX3Rva2VuX2lkJTBBJTIwJTIwJTIwJTIwbGFiZWxfaWRzJTVCbGFiZWxfaWRzJTIwJTNEJTNEJTIwLTEwMCU1RCUyMCUzRCUyMHByb2Nlc3Nvci50b2tlbml6ZXIucGFkX3Rva2VuX2lkJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwd2UlMjBkbyUyMG5vdCUyMHdhbnQlMjB0byUyMGdyb3VwJTIwdG9rZW5zJTIwd2hlbiUyMGNvbXB1dGluZyUyMHRoZSUyMG1ldHJpY3MlMEElMjAlMjAlMjAlMjBwcmVkX3N0ciUyMCUzRCUyMHByb2Nlc3Nvci5iYXRjaF9kZWNvZGUocHJlZF9pZHMlMkMlMjBza2lwX3NwZWNpYWxfdG9rZW5zJTNEVHJ1ZSklMEElMjAlMjAlMjAlMjBsYWJlbF9zdHIlMjAlM0QlMjBwcm9jZXNzb3IuYmF0Y2hfZGVjb2RlKGxhYmVsX2lkcyUyQyUyMHNraXBfc3BlY2lhbF90b2tlbnMlM0RUcnVlKSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMGNvbXB1dGUlMjBvcnRob2dyYXBoaWMlMjB3ZXIlMEElMjAlMjAlMjAlMjB3ZXJfb3J0aG8lMjAlM0QlMjAxMDAlMjAqJTIwbWV0cmljLmNvbXB1dGUocHJlZGljdGlvbnMlM0RwcmVkX3N0ciUyQyUyMHJlZmVyZW5jZXMlM0RsYWJlbF9zdHIpJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwY29tcHV0ZSUyMG5vcm1hbGlzZWQlMjBXRVIlMEElMjAlMjAlMjAlMjBwcmVkX3N0cl9ub3JtJTIwJTNEJTIwJTVCbm9ybWFsaXplcihwcmVkKSUyMGZvciUyMHByZWQlMjBpbiUyMHByZWRfc3RyJTVEJTBBJTIwJTIwJTIwJTIwbGFiZWxfc3RyX25vcm0lMjAlM0QlMjAlNUJub3JtYWxpemVyKGxhYmVsKSUyMGZvciUyMGxhYmVsJTIwaW4lMjBsYWJlbF9zdHIlNUQlMEElMjAlMjAlMjAlMjAlMjMlMjBmaWx0ZXJpbmclMjBzdGVwJTIwdG8lMjBvbmx5JTIwZXZhbHVhdGUlMjB0aGUlMjBzYW1wbGVzJTIwdGhhdCUyMGNvcnJlc3BvbmQlMjB0byUyMG5vbi16ZXJvJTIwcmVmZXJlbmNlcyUzQSUwQSUyMCUyMCUyMCUyMHByZWRfc3RyX25vcm0lMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmVkX3N0cl9ub3JtJTVCaSU1RCUyMGZvciUyMGklMjBpbiUyMHJhbmdlKGxlbihwcmVkX3N0cl9ub3JtKSklMjBpZiUyMGxlbihsYWJlbF9zdHJfbm9ybSU1QmklNUQpJTIwJTNFJTIwMCUwQSUyMCUyMCUyMCUyMCU1RCUwQSUyMCUyMCUyMCUyMGxhYmVsX3N0cl9ub3JtJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbGFiZWxfc3RyX25vcm0lNUJpJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZm9yJTIwaSUyMGluJTIwcmFuZ2UobGVuKGxhYmVsX3N0cl9ub3JtKSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGxlbihsYWJlbF9zdHJfbm9ybSU1QmklNUQpJTIwJTNFJTIwMCUwQSUyMCUyMCUyMCUyMCU1RCUwQSUwQSUyMCUyMCUyMCUyMHdlciUyMCUzRCUyMDEwMCUyMColMjBtZXRyaWMuY29tcHV0ZShwcmVkaWN0aW9ucyUzRHByZWRfc3RyX25vcm0lMkMlMjByZWZlcmVuY2VzJTNEbGFiZWxfc3RyX25vcm0pJTBBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwJTdCJTIyd2VyX29ydGhvJTIyJTNBJTIwd2VyX29ydGhvJTJDJTIwJTIyd2VyJTIyJTNBJTIwd2VyJTdE",highlighted:`<span class="hljs-keyword">from</span> transformers.models.whisper.english_normalizer <span class="hljs-keyword">import</span> BasicTextNormalizer

normalizer = BasicTextNormalizer()


<span class="hljs-keyword">def</span> <span class="hljs-title function_">compute_metrics</span>(<span class="hljs-params">pred</span>):
    pred_ids = pred.predictions
    label_ids = pred.label_ids

    <span class="hljs-comment"># replace -100 with the pad_token_id</span>
    label_ids[label_ids == -<span class="hljs-number">100</span>] = processor.tokenizer.pad_token_id

    <span class="hljs-comment"># we do not want to group tokens when computing the metrics</span>
    pred_str = processor.batch_decode(pred_ids, skip_special_tokens=<span class="hljs-literal">True</span>)
    label_str = processor.batch_decode(label_ids, skip_special_tokens=<span class="hljs-literal">True</span>)

    <span class="hljs-comment"># compute orthographic wer</span>
    wer_ortho = <span class="hljs-number">100</span> * metric.compute(predictions=pred_str, references=label_str)

    <span class="hljs-comment"># compute normalised WER</span>
    pred_str_norm = [normalizer(pred) <span class="hljs-keyword">for</span> pred <span class="hljs-keyword">in</span> pred_str]
    label_str_norm = [normalizer(label) <span class="hljs-keyword">for</span> label <span class="hljs-keyword">in</span> label_str]
    <span class="hljs-comment"># filtering step to only evaluate the samples that correspond to non-zero references:</span>
    pred_str_norm = [
        pred_str_norm[i] <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>(pred_str_norm)) <span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(label_str_norm[i]) &gt; <span class="hljs-number">0</span>
    ]
    label_str_norm = [
        label_str_norm[i]
        <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>(label_str_norm))
        <span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(label_str_norm[i]) &gt; <span class="hljs-number">0</span>
    ]

    wer = <span class="hljs-number">100</span> * metric.compute(predictions=pred_str_norm, references=label_str_norm)

    <span class="hljs-keyword">return</span> {<span class="hljs-string">&quot;wer_ortho&quot;</span>: wer_ortho, <span class="hljs-string">&quot;wer&quot;</span>: wer}`,wrap:!1}}),Yl=new j({props:{title:"Загружаем предобученную контрольную точку",local:"загружаем-предобученную-контрольную-точку",headingTag:"h3"}}),Ql=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFdoaXNwZXJGb3JDb25kaXRpb25hbEdlbmVyYXRpb24lMEElMEFtb2RlbCUyMCUzRCUyMFdoaXNwZXJGb3JDb25kaXRpb25hbEdlbmVyYXRpb24uZnJvbV9wcmV0cmFpbmVkKCUyMm9wZW5haSUyRndoaXNwZXItc21hbGwlMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> WhisperForConditionalGeneration

model = WhisperForConditionalGeneration.from_pretrained(<span class="hljs-string">&quot;openai/whisper-small&quot;</span>)`,wrap:!1}}),ql=new T({props:{code:"ZnJvbSUyMGZ1bmN0b29scyUyMGltcG9ydCUyMHBhcnRpYWwlMEElMEElMjMlMjBkaXNhYmxlJTIwY2FjaGUlMjBkdXJpbmclMjB0cmFpbmluZyUyMHNpbmNlJTIwaXQncyUyMGluY29tcGF0aWJsZSUyMHdpdGglMjBncmFkaWVudCUyMGNoZWNrcG9pbnRpbmclMEFtb2RlbC5jb25maWcudXNlX2NhY2hlJTIwJTNEJTIwRmFsc2UlMEElMEElMjMlMjBzZXQlMjBsYW5ndWFnZSUyMGFuZCUyMHRhc2slMjBmb3IlMjBnZW5lcmF0aW9uJTIwYW5kJTIwcmUtZW5hYmxlJTIwY2FjaGUlMEFtb2RlbC5nZW5lcmF0ZSUyMCUzRCUyMHBhcnRpYWwoJTBBJTIwJTIwJTIwJTIwbW9kZWwuZ2VuZXJhdGUlMkMlMjBsYW5ndWFnZSUzRCUyMnNpbmhhbGVzZSUyMiUyQyUyMHRhc2slM0QlMjJ0cmFuc2NyaWJlJTIyJTJDJTIwdXNlX2NhY2hlJTNEVHJ1ZSUwQSk=",highlighted:`<span class="hljs-keyword">from</span> functools <span class="hljs-keyword">import</span> partial

<span class="hljs-comment"># disable cache during training since it&#x27;s incompatible with gradient checkpointing</span>
model.config.use_cache = <span class="hljs-literal">False</span>

<span class="hljs-comment"># set language and task for generation and re-enable cache</span>
model.generate = partial(
    model.generate, language=<span class="hljs-string">&quot;sinhalese&quot;</span>, task=<span class="hljs-string">&quot;transcribe&quot;</span>, use_cache=<span class="hljs-literal">True</span>
)`,wrap:!1}}),Sl=new j({props:{title:"Определение конфигурации обучения",local:"определение-конфигурации-обучения",headingTag:"h2"}}),Pl=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFNlcTJTZXFUcmFpbmluZ0FyZ3VtZW50cyUwQSUwQXRyYWluaW5nX2FyZ3MlMjAlM0QlMjBTZXEyU2VxVHJhaW5pbmdBcmd1bWVudHMoJTBBJTIwJTIwJTIwJTIwb3V0cHV0X2RpciUzRCUyMi4lMkZ3aGlzcGVyLXNtYWxsLWR2JTIyJTJDJTIwJTIwJTIzJTIwbmFtZSUyMG9uJTIwdGhlJTIwSEYlMjBIdWIlMEElMjAlMjAlMjAlMjBwZXJfZGV2aWNlX3RyYWluX2JhdGNoX3NpemUlM0QxNiUyQyUwQSUyMCUyMCUyMCUyMGdyYWRpZW50X2FjY3VtdWxhdGlvbl9zdGVwcyUzRDElMkMlMjAlMjAlMjMlMjBpbmNyZWFzZSUyMGJ5JTIwMnglMjBmb3IlMjBldmVyeSUyMDJ4JTIwZGVjcmVhc2UlMjBpbiUyMGJhdGNoJTIwc2l6ZSUwQSUyMCUyMCUyMCUyMGxlYXJuaW5nX3JhdGUlM0QxZS01JTJDJTBBJTIwJTIwJTIwJTIwbHJfc2NoZWR1bGVyX3R5cGUlM0QlMjJjb25zdGFudF93aXRoX3dhcm11cCUyMiUyQyUwQSUyMCUyMCUyMCUyMHdhcm11cF9zdGVwcyUzRDUwJTJDJTBBJTIwJTIwJTIwJTIwbWF4X3N0ZXBzJTNENTAwJTJDJTIwJTIwJTIzJTIwaW5jcmVhc2UlMjB0byUyMDQwMDAlMjBpZiUyMHlvdSUyMGhhdmUlMjB5b3VyJTIwb3duJTIwR1BVJTIwb3IlMjBhJTIwQ29sYWIlMjBwYWlkJTIwcGxhbiUwQSUyMCUyMCUyMCUyMGdyYWRpZW50X2NoZWNrcG9pbnRpbmclM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwZnAxNiUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjBmcDE2X2Z1bGxfZXZhbCUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjBldmFsdWF0aW9uX3N0cmF0ZWd5JTNEJTIyc3RlcHMlMjIlMkMlMEElMjAlMjAlMjAlMjBwZXJfZGV2aWNlX2V2YWxfYmF0Y2hfc2l6ZSUzRDE2JTJDJTBBJTIwJTIwJTIwJTIwcHJlZGljdF93aXRoX2dlbmVyYXRlJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMGdlbmVyYXRpb25fbWF4X2xlbmd0aCUzRDIyNSUyQyUwQSUyMCUyMCUyMCUyMHNhdmVfc3RlcHMlM0Q1MDAlMkMlMEElMjAlMjAlMjAlMjBldmFsX3N0ZXBzJTNENTAwJTJDJTBBJTIwJTIwJTIwJTIwbG9nZ2luZ19zdGVwcyUzRDI1JTJDJTBBJTIwJTIwJTIwJTIwcmVwb3J0X3RvJTNEJTVCJTIydGVuc29yYm9hcmQlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBsb2FkX2Jlc3RfbW9kZWxfYXRfZW5kJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMG1ldHJpY19mb3JfYmVzdF9tb2RlbCUzRCUyMndlciUyMiUyQyUwQSUyMCUyMCUyMCUyMGdyZWF0ZXJfaXNfYmV0dGVyJTNERmFsc2UlMkMlMEElMjAlMjAlMjAlMjBwdXNoX3RvX2h1YiUzRFRydWUlMkMlMEEp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Seq2SeqTrainingArguments

training_args = Seq2SeqTrainingArguments(
    output_dir=<span class="hljs-string">&quot;./whisper-small-dv&quot;</span>,  <span class="hljs-comment"># name on the HF Hub</span>
    per_device_train_batch_size=<span class="hljs-number">16</span>,
    gradient_accumulation_steps=<span class="hljs-number">1</span>,  <span class="hljs-comment"># increase by 2x for every 2x decrease in batch size</span>
    learning_rate=<span class="hljs-number">1e-5</span>,
    lr_scheduler_type=<span class="hljs-string">&quot;constant_with_warmup&quot;</span>,
    warmup_steps=<span class="hljs-number">50</span>,
    max_steps=<span class="hljs-number">500</span>,  <span class="hljs-comment"># increase to 4000 if you have your own GPU or a Colab paid plan</span>
    gradient_checkpointing=<span class="hljs-literal">True</span>,
    fp16=<span class="hljs-literal">True</span>,
    fp16_full_eval=<span class="hljs-literal">True</span>,
    evaluation_strategy=<span class="hljs-string">&quot;steps&quot;</span>,
    per_device_eval_batch_size=<span class="hljs-number">16</span>,
    predict_with_generate=<span class="hljs-literal">True</span>,
    generation_max_length=<span class="hljs-number">225</span>,
    save_steps=<span class="hljs-number">500</span>,
    eval_steps=<span class="hljs-number">500</span>,
    logging_steps=<span class="hljs-number">25</span>,
    report_to=[<span class="hljs-string">&quot;tensorboard&quot;</span>],
    load_best_model_at_end=<span class="hljs-literal">True</span>,
    metric_for_best_model=<span class="hljs-string">&quot;wer&quot;</span>,
    greater_is_better=<span class="hljs-literal">False</span>,
    push_to_hub=<span class="hljs-literal">True</span>,
)`,wrap:!1}}),h=new On({props:{$$slots:{default:[ma]},$$scope:{ctx:Ie}}}),Kl=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFNlcTJTZXFUcmFpbmVyJTBBJTBBdHJhaW5lciUyMCUzRCUyMFNlcTJTZXFUcmFpbmVyKCUwQSUyMCUyMCUyMCUyMGFyZ3MlM0R0cmFpbmluZ19hcmdzJTJDJTBBJTIwJTIwJTIwJTIwbW9kZWwlM0Rtb2RlbCUyQyUwQSUyMCUyMCUyMCUyMHRyYWluX2RhdGFzZXQlM0Rjb21tb25fdm9pY2UlNUIlMjJ0cmFpbiUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGV2YWxfZGF0YXNldCUzRGNvbW1vbl92b2ljZSU1QiUyMnRlc3QlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBkYXRhX2NvbGxhdG9yJTNEZGF0YV9jb2xsYXRvciUyQyUwQSUyMCUyMCUyMCUyMGNvbXB1dGVfbWV0cmljcyUzRGNvbXB1dGVfbWV0cmljcyUyQyUwQSUyMCUyMCUyMCUyMHRva2VuaXplciUzRHByb2Nlc3NvciUyQyUwQSk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Seq2SeqTrainer

trainer = Seq2SeqTrainer(
    args=training_args,
    model=model,
    train_dataset=common_voice[<span class="hljs-string">&quot;train&quot;</span>],
    eval_dataset=common_voice[<span class="hljs-string">&quot;test&quot;</span>],
    data_collator=data_collator,
    compute_metrics=compute_metrics,
    tokenizer=processor,
)`,wrap:!1}}),le=new j({props:{title:"Обучение",local:"обучение",headingTag:"h3"}}),te=new T({props:{code:"dHJhaW5lci50cmFpbigp",highlighted:"trainer.train()",wrap:!1}}),me=new T({props:{code:"a3dhcmdzJTIwJTNEJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIyZGF0YXNldF90YWdzJTIyJTNBJTIwJTIybW96aWxsYS1mb3VuZGF0aW9uJTJGY29tbW9uX3ZvaWNlXzEzXzAlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJkYXRhc2V0JTIyJTNBJTIwJTIyQ29tbW9uJTIwVm9pY2UlMjAxMyUyMiUyQyUyMCUyMCUyMyUyMGElMjAncHJldHR5JyUyMG5hbWUlMjBmb3IlMjB0aGUlMjB0cmFpbmluZyUyMGRhdGFzZXQlMEElMjAlMjAlMjAlMjAlMjJsYW5ndWFnZSUyMiUzQSUyMCUyMmR2JTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIybW9kZWxfbmFtZSUyMiUzQSUyMCUyMldoaXNwZXIlMjBTbWFsbCUyMER2JTIwLSUyMFNhbmNoaXQlMjBHYW5kaGklMjIlMkMlMjAlMjAlMjMlMjBhJTIwJ3ByZXR0eSclMjBuYW1lJTIwZm9yJTIweW91ciUyMG1vZGVsJTBBJTIwJTIwJTIwJTIwJTIyZmluZXR1bmVkX2Zyb20lMjIlM0ElMjAlMjJvcGVuYWklMkZ3aGlzcGVyLXNtYWxsJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIydGFza3MlMjIlM0ElMjAlMjJhdXRvbWF0aWMtc3BlZWNoLXJlY29nbml0aW9uJTIyJTJDJTBBJTdE",highlighted:`kwargs = {
    <span class="hljs-string">&quot;dataset_tags&quot;</span>: <span class="hljs-string">&quot;mozilla-foundation/common_voice_13_0&quot;</span>,
    <span class="hljs-string">&quot;dataset&quot;</span>: <span class="hljs-string">&quot;Common Voice 13&quot;</span>,  <span class="hljs-comment"># a &#x27;pretty&#x27; name for the training dataset</span>
    <span class="hljs-string">&quot;language&quot;</span>: <span class="hljs-string">&quot;dv&quot;</span>,
    <span class="hljs-string">&quot;model_name&quot;</span>: <span class="hljs-string">&quot;Whisper Small Dv - Sanchit Gandhi&quot;</span>,  <span class="hljs-comment"># a &#x27;pretty&#x27; name for your model</span>
    <span class="hljs-string">&quot;finetuned_from&quot;</span>: <span class="hljs-string">&quot;openai/whisper-small&quot;</span>,
    <span class="hljs-string">&quot;tasks&quot;</span>: <span class="hljs-string">&quot;automatic-speech-recognition&quot;</span>,
}`,wrap:!1}}),ye=new T({props:{code:"dHJhaW5lci5wdXNoX3RvX2h1YigqKmt3YXJncyk=",highlighted:"trainer.push_to_hub(**kwargs)",wrap:!1}}),je=new j({props:{title:"Совместный доступ к модели",local:"совместный-доступ-к-модели",headingTag:"h2"}}),de=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBcGlwZSUyMCUzRCUyMHBpcGVsaW5lKCUyMmF1dG9tYXRpYy1zcGVlY2gtcmVjb2duaXRpb24lMjIlMkMlMjBtb2RlbCUzRCUyMnNhbmNoaXQtZ2FuZGhpJTJGd2hpc3Blci1zbWFsbC1kdiUyMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline

pipe = pipeline(<span class="hljs-string">&quot;automatic-speech-recognition&quot;</span>, model=<span class="hljs-string">&quot;sanchit-gandhi/whisper-small-dv&quot;</span>)`,wrap:!1}}),he=new j({props:{title:"Заключение",local:"заключение",headingTag:"h2"}}),Ce=new ra({props:{source:"https://github.com/huggingface/audio-transformers-course/blob/main/chapters/ru/chapter5/fine-tuning.mdx"}}),{c(){u=p("meta"),U=n(),w=p("p"),_e=n(),r(b.$$.fragment),$e=n(),r(f.$$.fragment),We=n(),C=p("p"),C.textContent=xs,ve=n(),I=p("p"),I.textContent=Xs,Ge=n(),g=p("p"),g.textContent=ks,Ze=n(),_=p("p"),_.textContent=Vs,Be=n(),r($.$$.fragment),xe=n(),W=p("p"),W.innerHTML=Hs,Xe=n(),v=p("ul"),v.innerHTML=Rs,ke=n(),G=p("p"),G.innerHTML=Ns,Ve=n(),r(Z.$$.fragment),He=n(),B=p("p"),B.innerHTML=As,Re=n(),r(x.$$.fragment),Ne=n(),r(X.$$.fragment),Ae=n(),k=p("p"),k.innerHTML=Es,Ee=n(),V=p("p"),V.innerHTML=Ys,Ye=n(),r(H.$$.fragment),Fe=n(),R=p("p"),R.innerHTML=Fs,Qe=n(),r(N.$$.fragment),ze=n(),r(d.$$.fragment),qe=n(),A=p("p"),A.innerHTML=Qs,Se=n(),r(E.$$.fragment),Le=n(),r(Y.$$.fragment),Pe=n(),F=p("p"),F.textContent=zs,De=n(),Q=p("ol"),Q.innerHTML=qs,Ke=n(),z=p("p"),z.innerHTML=Ss,Oe=n(),q=p("p"),q.innerHTML=Ls,lt=n(),S=p("p"),S.textContent=Ps,et=n(),r(L.$$.fragment),tt=n(),P=p("p"),P.textContent=Ds,st=n(),D=p("p"),D.textContent=Ks,nt=n(),K=p("p"),K.innerHTML=Os,at=n(),O=p("p"),O.innerHTML=ln,pt=n(),r(ll.$$.fragment),Mt=n(),el=p("p"),el.innerHTML=en,it=n(),r(tl.$$.fragment),rt=n(),sl=p("p"),sl.innerHTML=tn,ct=n(),r(nl.$$.fragment),mt=n(),al=p("p"),al.innerHTML=sn,ot=n(),r(pl.$$.fragment),yt=n(),Ml=p("p"),Ml.textContent=nn,Jt=n(),il=p("p"),il.innerHTML=an,Tt=n(),r(rl.$$.fragment),ut=n(),cl=p("p"),cl.textContent=pn,Ut=n(),ml=p("ol"),ml.innerHTML=Mn,jt=n(),r(ol.$$.fragment),wt=n(),yl=p("p"),yl.innerHTML=rn,dt=n(),r(Jl.$$.fragment),ht=n(),Tl=p("p"),Tl.innerHTML=cn,bt=n(),r(ul.$$.fragment),ft=n(),Ul=p("p"),Ul.innerHTML=mn,Ct=n(),r(jl.$$.fragment),It=n(),wl=p("p"),wl.textContent=on,gt=n(),r(dl.$$.fragment),_t=n(),hl=p("p"),hl.innerHTML=yn,$t=n(),r(bl.$$.fragment),Wt=n(),fl=p("p"),fl.textContent=Jn,vt=n(),r(Cl.$$.fragment),Gt=n(),Il=p("p"),Il.innerHTML=Tn,Zt=n(),gl=p("ul"),gl.innerHTML=un,Bt=n(),_l=p("p"),_l.textContent=Un,xt=n(),r($l.$$.fragment),Xt=n(),Wl=p("p"),Wl.innerHTML=jn,kt=n(),vl=p("p"),vl.innerHTML=wn,Vt=n(),Gl=p("p"),Gl.innerHTML=dn,Ht=n(),Zl=p("p"),Zl.innerHTML=hn,Rt=n(),r(Bl.$$.fragment),Nt=n(),xl=p("p"),xl.textContent=bn,At=n(),r(Xl.$$.fragment),Et=n(),kl=p("p"),kl.textContent=fn,Yt=n(),r(Vl.$$.fragment),Ft=n(),Hl=p("p"),Hl.innerHTML=Cn,Qt=n(),Rl=p("p"),Rl.textContent=In,zt=n(),r(Nl.$$.fragment),qt=n(),Al=p("p"),Al.innerHTML=gn,St=n(),r(El.$$.fragment),Lt=n(),r(Yl.$$.fragment),Pt=n(),Fl=p("p"),Fl.textContent=_n,Dt=n(),r(Ql.$$.fragment),Kt=n(),zl=p("p"),zl.innerHTML=$n,Ot=n(),r(ql.$$.fragment),ls=n(),r(Sl.$$.fragment),es=n(),Ll=p("p"),Ll.innerHTML=Wn,ts=n(),r(Pl.$$.fragment),ss=n(),r(h.$$.fragment),ns=n(),Dl=p("p"),Dl.innerHTML=vn,as=n(),r(Kl.$$.fragment),ps=n(),Ol=p("p"),Ol.textContent=Gn,Ms=n(),r(le.$$.fragment),is=n(),ee=p("p"),ee.textContent=Zn,rs=n(),r(te.$$.fragment),cs=n(),se=p("p"),se.innerHTML=Bn,ms=n(),ne=p("p"),ne.innerHTML=xn,os=n(),ae=p("table"),ae.innerHTML=Xn,ys=n(),pe=p("p"),pe.textContent=kn,Js=n(),Me=p("p"),Me.innerHTML=Vn,Ts=n(),ie=p("p"),ie.innerHTML=Hn,us=n(),re=p("p"),re.innerHTML=Rn,Us=n(),ce=p("p"),ce.textContent=Nn,js=n(),r(me.$$.fragment),ws=n(),oe=p("p"),oe.textContent=An,ds=n(),r(ye.$$.fragment),hs=n(),Je=p("p"),Je.innerHTML=En,bs=n(),Te=p("p"),Te.textContent=Yn,fs=n(),ue=p("p"),ue.innerHTML=Fn,Cs=n(),Ue=p("p"),Ue.innerHTML=Qn,Is=n(),r(je.$$.fragment),gs=n(),we=p("p"),we.innerHTML=zn,_s=n(),r(de.$$.fragment),$s=n(),r(he.$$.fragment),Ws=n(),be=p("p"),be.innerHTML=qn,vs=n(),fe=p("p"),fe.innerHTML=Sn,Gs=n(),r(Ce.$$.fragment),Zs=n(),ge=p("p"),this.h()},l(l){const e=pa("svelte-u9bgzb",document.head);u=M(e,"META",{name:!0,content:!0}),e.forEach(t),U=a(l),w=M(l,"P",{}),Dn(w).forEach(t),_e=a(l),c(b.$$.fragment,l),$e=a(l),c(f.$$.fragment,l),We=a(l),C=M(l,"P",{"data-svelte-h":!0}),i(C)!=="svelte-1gdhvx5"&&(C.textContent=xs),ve=a(l),I=M(l,"P",{"data-svelte-h":!0}),i(I)!=="svelte-jv8ord"&&(I.textContent=Xs),Ge=a(l),g=M(l,"P",{"data-svelte-h":!0}),i(g)!=="svelte-2mjtza"&&(g.textContent=ks),Ze=a(l),_=M(l,"P",{"data-svelte-h":!0}),i(_)!=="svelte-nyyxay"&&(_.textContent=Vs),Be=a(l),c($.$$.fragment,l),xe=a(l),W=M(l,"P",{"data-svelte-h":!0}),i(W)!=="svelte-5odl8r"&&(W.innerHTML=Hs),Xe=a(l),v=M(l,"UL",{"data-svelte-h":!0}),i(v)!=="svelte-uneh2j"&&(v.innerHTML=Rs),ke=a(l),G=M(l,"P",{"data-svelte-h":!0}),i(G)!=="svelte-19l1bxz"&&(G.innerHTML=Ns),Ve=a(l),c(Z.$$.fragment,l),He=a(l),B=M(l,"P",{"data-svelte-h":!0}),i(B)!=="svelte-1mvdyro"&&(B.innerHTML=As),Re=a(l),c(x.$$.fragment,l),Ne=a(l),c(X.$$.fragment,l),Ae=a(l),k=M(l,"P",{"data-svelte-h":!0}),i(k)!=="svelte-1fv097m"&&(k.innerHTML=Es),Ee=a(l),V=M(l,"P",{"data-svelte-h":!0}),i(V)!=="svelte-d3jo9n"&&(V.innerHTML=Ys),Ye=a(l),c(H.$$.fragment,l),Fe=a(l),R=M(l,"P",{"data-svelte-h":!0}),i(R)!=="svelte-1mvdyro"&&(R.innerHTML=Fs),Qe=a(l),c(N.$$.fragment,l),ze=a(l),c(d.$$.fragment,l),qe=a(l),A=M(l,"P",{"data-svelte-h":!0}),i(A)!=="svelte-1oxcz9"&&(A.innerHTML=Qs),Se=a(l),c(E.$$.fragment,l),Le=a(l),c(Y.$$.fragment,l),Pe=a(l),F=M(l,"P",{"data-svelte-h":!0}),i(F)!=="svelte-1982a3i"&&(F.textContent=zs),De=a(l),Q=M(l,"OL",{"data-svelte-h":!0}),i(Q)!=="svelte-euvldq"&&(Q.innerHTML=qs),Ke=a(l),z=M(l,"P",{"data-svelte-h":!0}),i(z)!=="svelte-1u5lh04"&&(z.innerHTML=Ss),Oe=a(l),q=M(l,"P",{"data-svelte-h":!0}),i(q)!=="svelte-dgpugd"&&(q.innerHTML=Ls),lt=a(l),S=M(l,"P",{"data-svelte-h":!0}),i(S)!=="svelte-jq4udz"&&(S.textContent=Ps),et=a(l),c(L.$$.fragment,l),tt=a(l),P=M(l,"P",{"data-svelte-h":!0}),i(P)!=="svelte-y0p2rx"&&(P.textContent=Ds),st=a(l),D=M(l,"P",{"data-svelte-h":!0}),i(D)!=="svelte-rm76q9"&&(D.textContent=Ks),nt=a(l),K=M(l,"P",{"data-svelte-h":!0}),i(K)!=="svelte-18egven"&&(K.innerHTML=Os),at=a(l),O=M(l,"P",{"data-svelte-h":!0}),i(O)!=="svelte-le3sdu"&&(O.innerHTML=ln),pt=a(l),c(ll.$$.fragment,l),Mt=a(l),el=M(l,"P",{"data-svelte-h":!0}),i(el)!=="svelte-ey8ukh"&&(el.innerHTML=en),it=a(l),c(tl.$$.fragment,l),rt=a(l),sl=M(l,"P",{"data-svelte-h":!0}),i(sl)!=="svelte-1veqy8n"&&(sl.innerHTML=tn),ct=a(l),c(nl.$$.fragment,l),mt=a(l),al=M(l,"P",{"data-svelte-h":!0}),i(al)!=="svelte-1mvdyro"&&(al.innerHTML=sn),ot=a(l),c(pl.$$.fragment,l),yt=a(l),Ml=M(l,"P",{"data-svelte-h":!0}),i(Ml)!=="svelte-1gr70ka"&&(Ml.textContent=nn),Jt=a(l),il=M(l,"P",{"data-svelte-h":!0}),i(il)!=="svelte-wy7cdb"&&(il.innerHTML=an),Tt=a(l),c(rl.$$.fragment,l),ut=a(l),cl=M(l,"P",{"data-svelte-h":!0}),i(cl)!=="svelte-1xmdc9t"&&(cl.textContent=pn),Ut=a(l),ml=M(l,"OL",{"data-svelte-h":!0}),i(ml)!=="svelte-ufdqrd"&&(ml.innerHTML=Mn),jt=a(l),c(ol.$$.fragment,l),wt=a(l),yl=M(l,"P",{"data-svelte-h":!0}),i(yl)!=="svelte-1ofekxr"&&(yl.innerHTML=rn),dt=a(l),c(Jl.$$.fragment,l),ht=a(l),Tl=M(l,"P",{"data-svelte-h":!0}),i(Tl)!=="svelte-ex6lhv"&&(Tl.innerHTML=cn),bt=a(l),c(ul.$$.fragment,l),ft=a(l),Ul=M(l,"P",{"data-svelte-h":!0}),i(Ul)!=="svelte-1uj7qnl"&&(Ul.innerHTML=mn),Ct=a(l),c(jl.$$.fragment,l),It=a(l),wl=M(l,"P",{"data-svelte-h":!0}),i(wl)!=="svelte-1hw2mxb"&&(wl.textContent=on),gt=a(l),c(dl.$$.fragment,l),_t=a(l),hl=M(l,"P",{"data-svelte-h":!0}),i(hl)!=="svelte-1ga3zr2"&&(hl.innerHTML=yn),$t=a(l),c(bl.$$.fragment,l),Wt=a(l),fl=M(l,"P",{"data-svelte-h":!0}),i(fl)!=="svelte-107zr9b"&&(fl.textContent=Jn),vt=a(l),c(Cl.$$.fragment,l),Gt=a(l),Il=M(l,"P",{"data-svelte-h":!0}),i(Il)!=="svelte-e1qopu"&&(Il.innerHTML=Tn),Zt=a(l),gl=M(l,"UL",{"data-svelte-h":!0}),i(gl)!=="svelte-k5j8su"&&(gl.innerHTML=un),Bt=a(l),_l=M(l,"P",{"data-svelte-h":!0}),i(_l)!=="svelte-f9x303"&&(_l.textContent=Un),xt=a(l),c($l.$$.fragment,l),Xt=a(l),Wl=M(l,"P",{"data-svelte-h":!0}),i(Wl)!=="svelte-1c4f67m"&&(Wl.innerHTML=jn),kt=a(l),vl=M(l,"P",{"data-svelte-h":!0}),i(vl)!=="svelte-kgzw5m"&&(vl.innerHTML=wn),Vt=a(l),Gl=M(l,"P",{"data-svelte-h":!0}),i(Gl)!=="svelte-1a4npqt"&&(Gl.innerHTML=dn),Ht=a(l),Zl=M(l,"P",{"data-svelte-h":!0}),i(Zl)!=="svelte-hbt7j"&&(Zl.innerHTML=hn),Rt=a(l),c(Bl.$$.fragment,l),Nt=a(l),xl=M(l,"P",{"data-svelte-h":!0}),i(xl)!=="svelte-1vsa3ig"&&(xl.textContent=bn),At=a(l),c(Xl.$$.fragment,l),Et=a(l),kl=M(l,"P",{"data-svelte-h":!0}),i(kl)!=="svelte-15ohv14"&&(kl.textContent=fn),Yt=a(l),c(Vl.$$.fragment,l),Ft=a(l),Hl=M(l,"P",{"data-svelte-h":!0}),i(Hl)!=="svelte-1j35c5c"&&(Hl.innerHTML=Cn),Qt=a(l),Rl=M(l,"P",{"data-svelte-h":!0}),i(Rl)!=="svelte-1n95bx1"&&(Rl.textContent=In),zt=a(l),c(Nl.$$.fragment,l),qt=a(l),Al=M(l,"P",{"data-svelte-h":!0}),i(Al)!=="svelte-16ubm63"&&(Al.innerHTML=gn),St=a(l),c(El.$$.fragment,l),Lt=a(l),c(Yl.$$.fragment,l),Pt=a(l),Fl=M(l,"P",{"data-svelte-h":!0}),i(Fl)!=="svelte-lx01hw"&&(Fl.textContent=_n),Dt=a(l),c(Ql.$$.fragment,l),Kt=a(l),zl=M(l,"P",{"data-svelte-h":!0}),i(zl)!=="svelte-icc7vi"&&(zl.innerHTML=$n),Ot=a(l),c(ql.$$.fragment,l),ls=a(l),c(Sl.$$.fragment,l),es=a(l),Ll=M(l,"P",{"data-svelte-h":!0}),i(Ll)!=="svelte-1bv1h64"&&(Ll.innerHTML=Wn),ts=a(l),c(Pl.$$.fragment,l),ss=a(l),c(h.$$.fragment,l),ns=a(l),Dl=M(l,"P",{"data-svelte-h":!0}),i(Dl)!=="svelte-oevhzy"&&(Dl.innerHTML=vn),as=a(l),c(Kl.$$.fragment,l),ps=a(l),Ol=M(l,"P",{"data-svelte-h":!0}),i(Ol)!=="svelte-1wz9ige"&&(Ol.textContent=Gn),Ms=a(l),c(le.$$.fragment,l),is=a(l),ee=M(l,"P",{"data-svelte-h":!0}),i(ee)!=="svelte-qlbi77"&&(ee.textContent=Zn),rs=a(l),c(te.$$.fragment,l),cs=a(l),se=M(l,"P",{"data-svelte-h":!0}),i(se)!=="svelte-pgq3f2"&&(se.innerHTML=Bn),ms=a(l),ne=M(l,"P",{"data-svelte-h":!0}),i(ne)!=="svelte-1mvdyro"&&(ne.innerHTML=xn),os=a(l),ae=M(l,"TABLE",{"data-svelte-h":!0}),i(ae)!=="svelte-10vryw9"&&(ae.innerHTML=Xn),ys=a(l),pe=M(l,"P",{"data-svelte-h":!0}),i(pe)!=="svelte-165wziq"&&(pe.textContent=kn),Js=a(l),Me=M(l,"P",{"data-svelte-h":!0}),i(Me)!=="svelte-p2yfko"&&(Me.innerHTML=Vn),Ts=a(l),ie=M(l,"P",{"data-svelte-h":!0}),i(ie)!=="svelte-17deiyd"&&(ie.innerHTML=Hn),us=a(l),re=M(l,"P",{"data-svelte-h":!0}),i(re)!=="svelte-ujbssr"&&(re.innerHTML=Rn),Us=a(l),ce=M(l,"P",{"data-svelte-h":!0}),i(ce)!=="svelte-ss2cql"&&(ce.textContent=Nn),js=a(l),c(me.$$.fragment,l),ws=a(l),oe=M(l,"P",{"data-svelte-h":!0}),i(oe)!=="svelte-ybv228"&&(oe.textContent=An),ds=a(l),c(ye.$$.fragment,l),hs=a(l),Je=M(l,"P",{"data-svelte-h":!0}),i(Je)!=="svelte-8qd5xp"&&(Je.innerHTML=En),bs=a(l),Te=M(l,"P",{"data-svelte-h":!0}),i(Te)!=="svelte-1hysyfl"&&(Te.textContent=Yn),fs=a(l),ue=M(l,"P",{"data-svelte-h":!0}),i(ue)!=="svelte-1s4z0ip"&&(ue.innerHTML=Fn),Cs=a(l),Ue=M(l,"P",{"data-svelte-h":!0}),i(Ue)!=="svelte-1n5lbg8"&&(Ue.innerHTML=Qn),Is=a(l),c(je.$$.fragment,l),gs=a(l),we=M(l,"P",{"data-svelte-h":!0}),i(we)!=="svelte-8fwdem"&&(we.innerHTML=zn),_s=a(l),c(de.$$.fragment,l),$s=a(l),c(he.$$.fragment,l),Ws=a(l),be=M(l,"P",{"data-svelte-h":!0}),i(be)!=="svelte-1mxl60l"&&(be.innerHTML=qn),vs=a(l),fe=M(l,"P",{"data-svelte-h":!0}),i(fe)!=="svelte-819upc"&&(fe.innerHTML=Sn),Gs=a(l),c(Ce.$$.fragment,l),Zs=a(l),ge=M(l,"P",{}),Dn(ge).forEach(t),this.h()},h(){Kn(u,"name","hf:doc:metadata"),Kn(u,"content",ya)},m(l,e){Ma(document.head,u),s(l,U,e),s(l,w,e),s(l,_e,e),m(b,l,e),s(l,$e,e),m(f,l,e),s(l,We,e),s(l,C,e),s(l,ve,e),s(l,I,e),s(l,Ge,e),s(l,g,e),s(l,Ze,e),s(l,_,e),s(l,Be,e),m($,l,e),s(l,xe,e),s(l,W,e),s(l,Xe,e),s(l,v,e),s(l,ke,e),s(l,G,e),s(l,Ve,e),m(Z,l,e),s(l,He,e),s(l,B,e),s(l,Re,e),m(x,l,e),s(l,Ne,e),m(X,l,e),s(l,Ae,e),s(l,k,e),s(l,Ee,e),s(l,V,e),s(l,Ye,e),m(H,l,e),s(l,Fe,e),s(l,R,e),s(l,Qe,e),m(N,l,e),s(l,ze,e),m(d,l,e),s(l,qe,e),s(l,A,e),s(l,Se,e),m(E,l,e),s(l,Le,e),m(Y,l,e),s(l,Pe,e),s(l,F,e),s(l,De,e),s(l,Q,e),s(l,Ke,e),s(l,z,e),s(l,Oe,e),s(l,q,e),s(l,lt,e),s(l,S,e),s(l,et,e),m(L,l,e),s(l,tt,e),s(l,P,e),s(l,st,e),s(l,D,e),s(l,nt,e),s(l,K,e),s(l,at,e),s(l,O,e),s(l,pt,e),m(ll,l,e),s(l,Mt,e),s(l,el,e),s(l,it,e),m(tl,l,e),s(l,rt,e),s(l,sl,e),s(l,ct,e),m(nl,l,e),s(l,mt,e),s(l,al,e),s(l,ot,e),m(pl,l,e),s(l,yt,e),s(l,Ml,e),s(l,Jt,e),s(l,il,e),s(l,Tt,e),m(rl,l,e),s(l,ut,e),s(l,cl,e),s(l,Ut,e),s(l,ml,e),s(l,jt,e),m(ol,l,e),s(l,wt,e),s(l,yl,e),s(l,dt,e),m(Jl,l,e),s(l,ht,e),s(l,Tl,e),s(l,bt,e),m(ul,l,e),s(l,ft,e),s(l,Ul,e),s(l,Ct,e),m(jl,l,e),s(l,It,e),s(l,wl,e),s(l,gt,e),m(dl,l,e),s(l,_t,e),s(l,hl,e),s(l,$t,e),m(bl,l,e),s(l,Wt,e),s(l,fl,e),s(l,vt,e),m(Cl,l,e),s(l,Gt,e),s(l,Il,e),s(l,Zt,e),s(l,gl,e),s(l,Bt,e),s(l,_l,e),s(l,xt,e),m($l,l,e),s(l,Xt,e),s(l,Wl,e),s(l,kt,e),s(l,vl,e),s(l,Vt,e),s(l,Gl,e),s(l,Ht,e),s(l,Zl,e),s(l,Rt,e),m(Bl,l,e),s(l,Nt,e),s(l,xl,e),s(l,At,e),m(Xl,l,e),s(l,Et,e),s(l,kl,e),s(l,Yt,e),m(Vl,l,e),s(l,Ft,e),s(l,Hl,e),s(l,Qt,e),s(l,Rl,e),s(l,zt,e),m(Nl,l,e),s(l,qt,e),s(l,Al,e),s(l,St,e),m(El,l,e),s(l,Lt,e),m(Yl,l,e),s(l,Pt,e),s(l,Fl,e),s(l,Dt,e),m(Ql,l,e),s(l,Kt,e),s(l,zl,e),s(l,Ot,e),m(ql,l,e),s(l,ls,e),m(Sl,l,e),s(l,es,e),s(l,Ll,e),s(l,ts,e),m(Pl,l,e),s(l,ss,e),m(h,l,e),s(l,ns,e),s(l,Dl,e),s(l,as,e),m(Kl,l,e),s(l,ps,e),s(l,Ol,e),s(l,Ms,e),m(le,l,e),s(l,is,e),s(l,ee,e),s(l,rs,e),m(te,l,e),s(l,cs,e),s(l,se,e),s(l,ms,e),s(l,ne,e),s(l,os,e),s(l,ae,e),s(l,ys,e),s(l,pe,e),s(l,Js,e),s(l,Me,e),s(l,Ts,e),s(l,ie,e),s(l,us,e),s(l,re,e),s(l,Us,e),s(l,ce,e),s(l,js,e),m(me,l,e),s(l,ws,e),s(l,oe,e),s(l,ds,e),m(ye,l,e),s(l,hs,e),s(l,Je,e),s(l,bs,e),s(l,Te,e),s(l,fs,e),s(l,ue,e),s(l,Cs,e),s(l,Ue,e),s(l,Is,e),m(je,l,e),s(l,gs,e),s(l,we,e),s(l,_s,e),m(de,l,e),s(l,$s,e),m(he,l,e),s(l,Ws,e),s(l,be,e),s(l,vs,e),s(l,fe,e),s(l,Gs,e),m(Ce,l,e),s(l,Zs,e),s(l,ge,e),Bs=!0},p(l,[e]){const Ln={};e&2&&(Ln.$$scope={dirty:e,ctx:l}),d.$set(Ln);const Pn={};e&2&&(Pn.$$scope={dirty:e,ctx:l}),h.$set(Pn)},i(l){Bs||(o(b.$$.fragment,l),o(f.$$.fragment,l),o($.$$.fragment,l),o(Z.$$.fragment,l),o(x.$$.fragment,l),o(X.$$.fragment,l),o(H.$$.fragment,l),o(N.$$.fragment,l),o(d.$$.fragment,l),o(E.$$.fragment,l),o(Y.$$.fragment,l),o(L.$$.fragment,l),o(ll.$$.fragment,l),o(tl.$$.fragment,l),o(nl.$$.fragment,l),o(pl.$$.fragment,l),o(rl.$$.fragment,l),o(ol.$$.fragment,l),o(Jl.$$.fragment,l),o(ul.$$.fragment,l),o(jl.$$.fragment,l),o(dl.$$.fragment,l),o(bl.$$.fragment,l),o(Cl.$$.fragment,l),o($l.$$.fragment,l),o(Bl.$$.fragment,l),o(Xl.$$.fragment,l),o(Vl.$$.fragment,l),o(Nl.$$.fragment,l),o(El.$$.fragment,l),o(Yl.$$.fragment,l),o(Ql.$$.fragment,l),o(ql.$$.fragment,l),o(Sl.$$.fragment,l),o(Pl.$$.fragment,l),o(h.$$.fragment,l),o(Kl.$$.fragment,l),o(le.$$.fragment,l),o(te.$$.fragment,l),o(me.$$.fragment,l),o(ye.$$.fragment,l),o(je.$$.fragment,l),o(de.$$.fragment,l),o(he.$$.fragment,l),o(Ce.$$.fragment,l),Bs=!0)},o(l){y(b.$$.fragment,l),y(f.$$.fragment,l),y($.$$.fragment,l),y(Z.$$.fragment,l),y(x.$$.fragment,l),y(X.$$.fragment,l),y(H.$$.fragment,l),y(N.$$.fragment,l),y(d.$$.fragment,l),y(E.$$.fragment,l),y(Y.$$.fragment,l),y(L.$$.fragment,l),y(ll.$$.fragment,l),y(tl.$$.fragment,l),y(nl.$$.fragment,l),y(pl.$$.fragment,l),y(rl.$$.fragment,l),y(ol.$$.fragment,l),y(Jl.$$.fragment,l),y(ul.$$.fragment,l),y(jl.$$.fragment,l),y(dl.$$.fragment,l),y(bl.$$.fragment,l),y(Cl.$$.fragment,l),y($l.$$.fragment,l),y(Bl.$$.fragment,l),y(Xl.$$.fragment,l),y(Vl.$$.fragment,l),y(Nl.$$.fragment,l),y(El.$$.fragment,l),y(Yl.$$.fragment,l),y(Ql.$$.fragment,l),y(ql.$$.fragment,l),y(Sl.$$.fragment,l),y(Pl.$$.fragment,l),y(h.$$.fragment,l),y(Kl.$$.fragment,l),y(le.$$.fragment,l),y(te.$$.fragment,l),y(me.$$.fragment,l),y(ye.$$.fragment,l),y(je.$$.fragment,l),y(de.$$.fragment,l),y(he.$$.fragment,l),y(Ce.$$.fragment,l),Bs=!1},d(l){l&&(t(U),t(w),t(_e),t($e),t(We),t(C),t(ve),t(I),t(Ge),t(g),t(Ze),t(_),t(Be),t(xe),t(W),t(Xe),t(v),t(ke),t(G),t(Ve),t(He),t(B),t(Re),t(Ne),t(Ae),t(k),t(Ee),t(V),t(Ye),t(Fe),t(R),t(Qe),t(ze),t(qe),t(A),t(Se),t(Le),t(Pe),t(F),t(De),t(Q),t(Ke),t(z),t(Oe),t(q),t(lt),t(S),t(et),t(tt),t(P),t(st),t(D),t(nt),t(K),t(at),t(O),t(pt),t(Mt),t(el),t(it),t(rt),t(sl),t(ct),t(mt),t(al),t(ot),t(yt),t(Ml),t(Jt),t(il),t(Tt),t(ut),t(cl),t(Ut),t(ml),t(jt),t(wt),t(yl),t(dt),t(ht),t(Tl),t(bt),t(ft),t(Ul),t(Ct),t(It),t(wl),t(gt),t(_t),t(hl),t($t),t(Wt),t(fl),t(vt),t(Gt),t(Il),t(Zt),t(gl),t(Bt),t(_l),t(xt),t(Xt),t(Wl),t(kt),t(vl),t(Vt),t(Gl),t(Ht),t(Zl),t(Rt),t(Nt),t(xl),t(At),t(Et),t(kl),t(Yt),t(Ft),t(Hl),t(Qt),t(Rl),t(zt),t(qt),t(Al),t(St),t(Lt),t(Pt),t(Fl),t(Dt),t(Kt),t(zl),t(Ot),t(ls),t(es),t(Ll),t(ts),t(ss),t(ns),t(Dl),t(as),t(ps),t(Ol),t(Ms),t(is),t(ee),t(rs),t(cs),t(se),t(ms),t(ne),t(os),t(ae),t(ys),t(pe),t(Js),t(Me),t(Ts),t(ie),t(us),t(re),t(Us),t(ce),t(js),t(ws),t(oe),t(ds),t(hs),t(Je),t(bs),t(Te),t(fs),t(ue),t(Cs),t(Ue),t(Is),t(gs),t(we),t(_s),t($s),t(Ws),t(be),t(vs),t(fe),t(Gs),t(Zs),t(ge)),t(u),J(b,l),J(f,l),J($,l),J(Z,l),J(x,l),J(X,l),J(H,l),J(N,l),J(d,l),J(E,l),J(Y,l),J(L,l),J(ll,l),J(tl,l),J(nl,l),J(pl,l),J(rl,l),J(ol,l),J(Jl,l),J(ul,l),J(jl,l),J(dl,l),J(bl,l),J(Cl,l),J($l,l),J(Bl,l),J(Xl,l),J(Vl,l),J(Nl,l),J(El,l),J(Yl,l),J(Ql,l),J(ql,l),J(Sl,l),J(Pl,l),J(h,l),J(Kl,l),J(le,l),J(te,l),J(me,l),J(ye,l),J(je,l),J(de,l),J(he,l),J(Ce,l)}}}const ya='{"title":"Дообучение модели ASR","local":"дообучение-модели-asr","sections":[{"title":"Подготовка окружения","local":"подготовка-окружения","sections":[],"depth":2},{"title":"Загрузка набора данных","local":"загрузка-набора-данных","sections":[],"depth":2},{"title":"Извлечение признаков, токенизатор и обработчик","local":"извлечение-признаков-токенизатор-и-обработчик","sections":[],"depth":2},{"title":"Предварительная обработка данных","local":"предварительная-обработка-данных","sections":[],"depth":2},{"title":"Обучение и оценка","local":"обучение-и-оценка","sections":[],"depth":2},{"title":"Определение сборщика данных","local":"определение-сборщика-данных","sections":[{"title":"Метрики оценки","local":"метрики-оценки","sections":[],"depth":3},{"title":"Загружаем предобученную контрольную точку","local":"загружаем-предобученную-контрольную-точку","sections":[],"depth":3}],"depth":2},{"title":"Определение конфигурации обучения","local":"определение-конфигурации-обучения","sections":[{"title":"Обучение","local":"обучение","sections":[],"depth":3}],"depth":2},{"title":"Совместный доступ к модели","local":"совместный-доступ-к-модели","sections":[],"depth":2},{"title":"Заключение","local":"заключение","sections":[],"depth":2}],"depth":1}';function Ja(Ie){return sa(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class da extends na{constructor(u){super(),aa(this,u,Ja,oa,ta,{})}}export{da as component};
