<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>DrivenData Labs</title><link href="https://www.drivendata.co/" rel="alternate"></link><link href="https://www.drivendata.co/feeds/all.atom.xml" rel="self"></link><id>https://www.drivendata.co/</id><updated>2026-02-27T00:00:00-05:00</updated><entry><title>Improving Automatic Speech Recognition for Kids - A Reference Implementation for Word-level Transcription</title><link href="https://www.drivendata.co/blog/child-asr-word-benchmark" rel="alternate"></link><published>2026-02-27T00:00:00-05:00</published><updated>2026-02-27T00:00:00-05:00</updated><author><name>Jackie Glasheen</name></author><id>tag:www.drivendata.co,2026-02-27:/blog/child-asr-word-benchmark</id><summary type="html">&lt;p&gt;Learn how to train a model to transcribe child speech for the On Top of Pasketti Challenge (Word Track)&lt;/p&gt;</summary><content type="html">&lt;style type="text/css"&gt;/*!
*
* IPython notebook
*
*/
/* CSS font colors for translated ANSI escape sequences */
/* The color values are a mix of
   http://www.xcolors.net/dl/baskerville-ivorylight and
   http://www.xcolors.net/dl/euphrasia */
.ansi-black-fg {
  color: #3E424D;
}
.ansi-black-bg {
  background-color: #3E424D;
}
.ansi-black-intense-fg {
  color: #282C36;
}
.ansi-black-intense-bg {
  background-color: #282C36;
}
.ansi-red-fg {
  color: #E75C58;
}
.ansi-red-bg {
  background-color: #E75C58;
}
.ansi-red-intense-fg {
  color: #B22B31;
}
.ansi-red-intense-bg {
  background-color: #B22B31;
}
.ansi-green-fg {
  color: #00A250;
}
.ansi-green-bg {
  background-color: #00A250;
}
.ansi-green-intense-fg {
  color: #007427;
}
.ansi-green-intense-bg {
  background-color: #007427;
}
.ansi-yellow-fg {
  color: #DDB62B;
}
.ansi-yellow-bg {
  background-color: #DDB62B;
}
.ansi-yellow-intense-fg {
  color: #B27D12;
}
.ansi-yellow-intense-bg {
  background-color: #B27D12;
}
.ansi-blue-fg {
  color: #208FFB;
}
.ansi-blue-bg {
  background-color: #208FFB;
}
.ansi-blue-intense-fg {
  color: #0065CA;
}
.ansi-blue-intense-bg {
  background-color: #0065CA;
}
.ansi-magenta-fg {
  color: #D160C4;
}
.ansi-magenta-bg {
  background-color: #D160C4;
}
.ansi-magenta-intense-fg {
  color: #A03196;
}
.ansi-magenta-intense-bg {
  background-color: #A03196;
}
.ansi-cyan-fg {
  color: #60C6C8;
}
.ansi-cyan-bg {
  background-color: #60C6C8;
}
.ansi-cyan-intense-fg {
  color: #258F8F;
}
.ansi-cyan-intense-bg {
  background-color: #258F8F;
}
.ansi-white-fg {
  color: #C5C1B4;
}
.ansi-white-bg {
  background-color: #C5C1B4;
}
.ansi-white-intense-fg {
  color: #A1A6B2;
}
.ansi-white-intense-bg {
  background-color: #A1A6B2;
}
.ansi-default-inverse-fg {
  color: #FFFFFF;
}
.ansi-default-inverse-bg {
  background-color: #000000;
}
.ansi-bold {
  font-weight: bold;
}
.ansi-underline {
  text-decoration: underline;
}
/* The following styles are deprecated an will be removed in a future version */
.ansibold {
  font-weight: bold;
}
.ansi-inverse {
  outline: 0.5px dotted;
}
/* use dark versions for foreground, to improve visibility */
.ansiblack {
  color: black;
}
.ansired {
  color: darkred;
}
.ansigreen {
  color: darkgreen;
}
.ansiyellow {
  color: #c4a000;
}
.ansiblue {
  color: darkblue;
}
.ansipurple {
  color: darkviolet;
}
.ansicyan {
  color: steelblue;
}
.ansigray {
  color: gray;
}
/* and light for background, for the same reason */
.ansibgblack {
  background-color: black;
}
.ansibgred {
  background-color: red;
}
.ansibggreen {
  background-color: green;
}
.ansibgyellow {
  background-color: yellow;
}
.ansibgblue {
  background-color: blue;
}
.ansibgpurple {
  background-color: magenta;
}
.ansibgcyan {
  background-color: cyan;
}
.ansibggray {
  background-color: gray;
}
div.cell {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  border-radius: 2px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  border-width: 1px;
  border-style: solid;
  border-color: transparent;
  width: 100%;
  padding: 5px;
  /* This acts as a spacer between cells, that is outside the border */
  margin: 0px;
  outline: none;
  position: relative;
  overflow: visible;
}
div.cell:before {
  position: absolute;
  display: block;
  top: -1px;
  left: -1px;
  width: 5px;
  height: calc(100% +  2px);
  content: '';
  background: transparent;
}
div.cell.jupyter-soft-selected {
  border-left-color: #E3F2FD;
  border-left-width: 1px;
  padding-left: 5px;
  border-right-color: #E3F2FD;
  border-right-width: 1px;
  background: #E3F2FD;
}
@media print {
  div.cell.jupyter-soft-selected {
    border-color: transparent;
  }
}
div.cell.selected,
div.cell.selected.jupyter-soft-selected {
  border-color: #ababab;
}
div.cell.selected:before,
div.cell.selected.jupyter-soft-selected:before {
  position: absolute;
  display: block;
  top: -1px;
  left: -1px;
  width: 5px;
  height: calc(100% +  2px);
  content: '';
  background: #42A5F5;
}
@media print {
  div.cell.selected,
  div.cell.selected.jupyter-soft-selected {
    border-color: transparent;
  }
}
.edit_mode div.cell.selected {
  border-color: #66BB6A;
}
.edit_mode div.cell.selected:before {
  position: absolute;
  display: block;
  top: -1px;
  left: -1px;
  width: 5px;
  height: calc(100% +  2px);
  content: '';
  background: #66BB6A;
}
@media print {
  .edit_mode div.cell.selected {
    border-color: transparent;
  }
}
.prompt {
  /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
  min-width: 14ex;
  /* This padding is tuned to match the padding on the CodeMirror editor. */
  padding: 0.4em;
  margin: 0px;
  font-family: monospace;
  text-align: right;
  /* This has to match that of the the CodeMirror class line-height below */
  line-height: 1.21429em;
  /* Don't highlight prompt number selection */
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  /* Use default cursor */
  cursor: default;
}
@media (max-width: 540px) {
  .prompt {
    text-align: left;
  }
}
div.inner_cell {
  min-width: 0;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_area {
  border: 1px solid #cfcfcf;
  border-radius: 2px;
  background: #f7f7f7;
  line-height: 1.21429em;
}
/* This is needed so that empty prompt areas can collapse to zero height when there
   is no content in the output_subarea and the prompt. The main purpose of this is
   to make sure that empty JavaScript output_subareas have no height. */
div.prompt:empty {
  padding-top: 0;
  padding-bottom: 0;
}
div.unrecognized_cell {
  padding: 5px 5px 5px 0px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
div.unrecognized_cell .inner_cell {
  border-radius: 2px;
  padding: 5px;
  font-weight: bold;
  color: red;
  border: 1px solid #cfcfcf;
  background: #eaeaea;
}
div.unrecognized_cell .inner_cell a {
  color: inherit;
  text-decoration: none;
}
div.unrecognized_cell .inner_cell a:hover {
  color: inherit;
  text-decoration: none;
}
@media (max-width: 540px) {
  div.unrecognized_cell &gt; div.prompt {
    display: none;
  }
}
div.code_cell {
  /* avoid page breaking on code cells when printing */
}
@media print {
  div.code_cell {
    page-break-inside: avoid;
  }
}
/* any special styling for code cells that are currently running goes here */
div.input {
  page-break-inside: avoid;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.input {
    /* Old browsers */
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-box-align: stretch;
    display: -moz-box;
    -moz-box-orient: vertical;
    -moz-box-align: stretch;
    display: box;
    box-orient: vertical;
    box-align: stretch;
    /* Modern browsers */
    display: flex;
    flex-direction: column;
    align-items: stretch;
  }
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_prompt {
  color: #303F9F;
  border-top: 1px solid transparent;
}
div.input_area &gt; div.highlight {
  margin: 0.4em;
  border: none;
  padding: 0px;
  background-color: transparent;
}
div.input_area &gt; div.highlight &gt; pre {
  margin: 0px;
  border: none;
  padding: 0px;
  background-color: transparent;
}
/* The following gets added to the &lt;head&gt; if it is detected that the user has a
 * monospace font with inconsistent normal/bold/italic height.  See
 * notebookmain.js.  Such fonts will have keywords vertically offset with
 * respect to the rest of the text.  The user should select a better font.
 * See: https://github.com/ipython/ipython/issues/1503
 *
 * .CodeMirror span {
 *      vertical-align: bottom;
 * }
 */
.CodeMirror {
  line-height: 1.21429em;
  /* Changed from 1em to our global default */
  font-size: 14px;
  height: auto;
  /* Changed to auto to autogrow */
  background: none;
  /* Changed from white to allow our bg to show through */
}
.CodeMirror-scroll {
  /*  The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
  /*  We have found that if it is visible, vertical scrollbars appear with font size changes.*/
  overflow-y: hidden;
  overflow-x: auto;
}
.CodeMirror-lines {
  /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
  /* we have set a different line-height and want this to scale with that. */
  /* Note that this should set vertical padding only, since CodeMirror assumes
       that horizontal padding will be set on CodeMirror pre */
  padding: 0.4em 0;
}
.CodeMirror-linenumber {
  padding: 0 8px 0 4px;
}
.CodeMirror-gutters {
  border-bottom-left-radius: 2px;
  border-top-left-radius: 2px;
}
.CodeMirror pre {
  /* In CM3 this went to 4px from 0 in CM2. This sets horizontal padding only,
    use .CodeMirror-lines for vertical */
  padding: 0 0.4em;
  border: 0;
  border-radius: 0;
}
.CodeMirror-cursor {
  border-left: 1.4px solid black;
}
@media screen and (min-width: 2138px) and (max-width: 4319px) {
  .CodeMirror-cursor {
    border-left: 2px solid black;
  }
}
@media screen and (min-width: 4320px) {
  .CodeMirror-cursor {
    border-left: 4px solid black;
  }
}
/*

Original style from softwaremaniacs.org (c) Ivan Sagalaev &lt;Maniac@SoftwareManiacs.Org&gt;
Adapted from GitHub theme

*/
.highlight-base {
  color: #000;
}
.highlight-variable {
  color: #000;
}
.highlight-variable-2 {
  color: #1a1a1a;
}
.highlight-variable-3 {
  color: #333333;
}
.highlight-string {
  color: #BA2121;
}
.highlight-comment {
  color: #408080;
  font-style: italic;
}
.highlight-number {
  color: #080;
}
.highlight-atom {
  color: #88F;
}
.highlight-keyword {
  color: #008000;
  font-weight: bold;
}
.highlight-builtin {
  color: #008000;
}
.highlight-error {
  color: #f00;
}
.highlight-operator {
  color: #AA22FF;
  font-weight: bold;
}
.highlight-meta {
  color: #AA22FF;
}
/* previously not defined, copying from default codemirror */
.highlight-def {
  color: #00f;
}
.highlight-string-2 {
  color: #f50;
}
.highlight-qualifier {
  color: #555;
}
.highlight-bracket {
  color: #997;
}
.highlight-tag {
  color: #170;
}
.highlight-attribute {
  color: #00c;
}
.highlight-header {
  color: blue;
}
.highlight-quote {
  color: #090;
}
.highlight-link {
  color: #00c;
}
/* apply the same style to codemirror */
.cm-s-ipython span.cm-keyword {
  color: #008000;
  font-weight: bold;
}
.cm-s-ipython span.cm-atom {
  color: #88F;
}
.cm-s-ipython span.cm-number {
  color: #080;
}
.cm-s-ipython span.cm-def {
  color: #00f;
}
.cm-s-ipython span.cm-variable {
  color: #000;
}
.cm-s-ipython span.cm-operator {
  color: #AA22FF;
  font-weight: bold;
}
.cm-s-ipython span.cm-variable-2 {
  color: #1a1a1a;
}
.cm-s-ipython span.cm-variable-3 {
  color: #333333;
}
.cm-s-ipython span.cm-comment {
  color: #408080;
  font-style: italic;
}
.cm-s-ipython span.cm-string {
  color: #BA2121;
}
.cm-s-ipython span.cm-string-2 {
  color: #f50;
}
.cm-s-ipython span.cm-meta {
  color: #AA22FF;
}
.cm-s-ipython span.cm-qualifier {
  color: #555;
}
.cm-s-ipython span.cm-builtin {
  color: #008000;
}
.cm-s-ipython span.cm-bracket {
  color: #997;
}
.cm-s-ipython span.cm-tag {
  color: #170;
}
.cm-s-ipython span.cm-attribute {
  color: #00c;
}
.cm-s-ipython span.cm-header {
  color: blue;
}
.cm-s-ipython span.cm-quote {
  color: #090;
}
.cm-s-ipython span.cm-link {
  color: #00c;
}
.cm-s-ipython span.cm-error {
  color: #f00;
}
.cm-s-ipython span.cm-tab {
  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
  background-position: right;
  background-repeat: no-repeat;
}
div.output_wrapper {
  /* this position must be relative to enable descendents to be absolute within it */
  position: relative;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  z-index: 1;
}
/* class for the output area when it should be height-limited */
div.output_scroll {
  /* ideally, this would be max-height, but FF barfs all over that */
  height: 24em;
  /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
  width: 100%;
  overflow: auto;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
  box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
  display: block;
}
/* output div while it is collapsed */
div.output_collapsed {
  margin: 0px;
  padding: 0px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
div.out_prompt_overlay {
  height: 100%;
  padding: 0px 0.4em;
  position: absolute;
  border-radius: 2px;
}
div.out_prompt_overlay:hover {
  /* use inner shadow to get border that is computed the same on WebKit/FF */
  -webkit-box-shadow: inset 0 0 1px #000;
  box-shadow: inset 0 0 1px #000;
  background: rgba(240, 240, 240, 0.5);
}
div.output_prompt {
  color: #D84315;
}
/* This class is the outer container of all output sections. */
div.output_area {
  padding: 0px;
  page-break-inside: avoid;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
div.output_area .MathJax_Display {
  text-align: left !important;
}
div.output_area 
div.output_area 
div.output_area img,
div.output_area svg {
  max-width: 100%;
  height: auto;
}
div.output_area img.unconfined,
div.output_area svg.unconfined {
  max-width: none;
}
div.output_area .mglyph &gt; img {
  max-width: none;
}
/* This is needed to protect the pre formating from global settings such
   as that of bootstrap */
.output {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.output_area {
    /* Old browsers */
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-box-align: stretch;
    display: -moz-box;
    -moz-box-orient: vertical;
    -moz-box-align: stretch;
    display: box;
    box-orient: vertical;
    box-align: stretch;
    /* Modern browsers */
    display: flex;
    flex-direction: column;
    align-items: stretch;
  }
}
div.output_area pre {
  margin: 0;
  padding: 1px 0 1px 0;
  border: 0;
  vertical-align: baseline;
  color: black;
  background-color: transparent;
  border-radius: 0;
}
/* This class is for the output subarea inside the output_area and after
   the prompt div. */
div.output_subarea {
  overflow-x: auto;
  padding: 0.4em;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
  max-width: calc(100% - 14ex);
}
div.output_scroll div.output_subarea {
  overflow-x: visible;
}
/* The rest of the output_* classes are for special styling of the different
   output types */
/* all text output has this class: */
div.output_text {
  text-align: left;
  color: #000;
  /* This has to match that of the the CodeMirror class line-height below */
  line-height: 1.21429em;
}
/* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
div.output_stderr {
  background: #fdd;
  /* very light red background for stderr */
}
div.output_latex {
  text-align: left;
}
/* Empty output_javascript divs should have no height */
div.output_javascript:empty {
  padding: 0;
}
.js-error {
  color: darkred;
}
/* raw_input styles */
div.raw_input_container {
  line-height: 1.21429em;
  padding-top: 5px;
}
pre.raw_input_prompt {
  /* nothing needed here. */
}
input.raw_input {
  font-family: monospace;
  font-size: inherit;
  color: inherit;
  width: auto;
  /* make sure input baseline aligns with prompt */
  vertical-align: baseline;
  /* padding + margin = 0.5em between prompt and cursor */
  padding: 0em 0.25em;
  margin: 0em 0.25em;
}
input.raw_input:focus {
  box-shadow: none;
}
p.p-space {
  margin-bottom: 10px;
}
div.output_unrecognized {
  padding: 5px;
  font-weight: bold;
  color: red;
}
div.output_unrecognized a {
  color: inherit;
  text-decoration: none;
}
div.output_unrecognized a:hover {
  color: inherit;
  text-decoration: none;
}
.rendered_html {
  color: #000;
  /* any extras will just be numbers: */
}



.rendered_html :link {
  text-decoration: underline;
}
.rendered_html :visited {
  text-decoration: underline;
}






.rendered_html h1:first-child {
  margin-top: 0.538em;
}
.rendered_html h2:first-child {
  margin-top: 0.636em;
}
.rendered_html h3:first-child {
  margin-top: 0.777em;
}
.rendered_html h4:first-child {
  margin-top: 1em;
}
.rendered_html h5:first-child {
  margin-top: 1em;
}
.rendered_html h6:first-child {
  margin-top: 1em;
}
.rendered_html ul:not(.list-inline),
.rendered_html ol:not(.list-inline) {
  padding-left: 2em;
}








.rendered_html * + ul {
  margin-top: 1em;
}
.rendered_html * + ol {
  margin-top: 1em;
}





.rendered_html pre,




.rendered_html tr,
.rendered_html th,


.rendered_html tbody tr:nth-child(odd) {
  background: #f5f5f5;
}
.rendered_html tbody tr:hover {
  background: rgba(66, 165, 245, 0.2);
}
.rendered_html * + table {
  margin-top: 1em;
}

.rendered_html * + p {
  margin-top: 1em;
}

.rendered_html * + img {
  margin-top: 1em;
}
.rendered_html img,

.rendered_html img.unconfined,


.rendered_html * + .alert {
  margin-top: 1em;
}
[dir="rtl"] 
div.text_cell {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.text_cell &gt; div.prompt {
    display: none;
  }
}
div.text_cell_render {
  /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
  outline: none;
  resize: none;
  width: inherit;
  border-style: none;
  padding: 0.5em 0.5em 0.5em 0.4em;
  color: #000;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
a.anchor-link:link {
  text-decoration: none;
  padding: 0px 20px;
  visibility: hidden;
}
h1:hover .anchor-link,
h2:hover .anchor-link,
h3:hover .anchor-link,
h4:hover .anchor-link,
h5:hover .anchor-link,
h6:hover .anchor-link {
  visibility: visible;
}
.text_cell.rendered .input_area {
  display: none;
}
.text_cell.rendered 
.text_cell.rendered .rendered_html tr,
.text_cell.rendered .rendered_html th,
.text_cell.rendered 
.text_cell.unrendered .text_cell_render {
  display: none;
}
.text_cell .dropzone .input_area {
  border: 2px dashed #bababa;
  margin: -1px;
}
.cm-header-1,
.cm-header-2,
.cm-header-3,
.cm-header-4,
.cm-header-5,
.cm-header-6 {
  font-weight: bold;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.cm-header-1 {
  font-size: 185.7%;
}
.cm-header-2 {
  font-size: 157.1%;
}
.cm-header-3 {
  font-size: 128.6%;
}
.cm-header-4 {
  font-size: 110%;
}
.cm-header-5 {
  font-size: 100%;
  font-style: italic;
}
.cm-header-6 {
  font-size: 100%;
  font-style: italic;
}
&lt;/style&gt;
&lt;style type="text/css"&gt;pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
 .highlight pre  .hll { background-color: #ffffcc }
 .highlight pre  { background: #f8f8f8; }
 .highlight pre  .c { color: #3D7B7B; font-style: italic } /* Comment */
 .highlight pre  .err { border: 1px solid #F00 } /* Error */
 .highlight pre  .k { color: #008000; font-weight: bold } /* Keyword */
 .highlight pre  .o { color: #666 } /* Operator */
 .highlight pre  .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
 .highlight pre  .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
 .highlight pre  .cp { color: #9C6500 } /* Comment.Preproc */
 .highlight pre  .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
 .highlight pre  .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
 .highlight pre  .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
 .highlight pre  .gd { color: #A00000 } /* Generic.Deleted */
 .highlight pre  .ge { font-style: italic } /* Generic.Emph */
 .highlight pre  .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
 .highlight pre  .gr { color: #E40000 } /* Generic.Error */
 .highlight pre  .gh { color: #000080; font-weight: bold } /* Generic.Heading */
 .highlight pre  .gi { color: #008400 } /* Generic.Inserted */
 .highlight pre  .go { color: #717171 } /* Generic.Output */
 .highlight pre  .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
 .highlight pre  .gs { font-weight: bold } /* Generic.Strong */
 .highlight pre  .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
 .highlight pre  .gt { color: #04D } /* Generic.Traceback */
 .highlight pre  .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
 .highlight pre  .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
 .highlight pre  .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
 .highlight pre  .kp { color: #008000 } /* Keyword.Pseudo */
 .highlight pre  .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
 .highlight pre  .kt { color: #B00040 } /* Keyword.Type */
 .highlight pre  .m { color: #666 } /* Literal.Number */
 .highlight pre  .s { color: #BA2121 } /* Literal.String */
 .highlight pre  .na { color: #687822 } /* Name.Attribute */
 .highlight pre  .nb { color: #008000 } /* Name.Builtin */
 .highlight pre  .nc { color: #00F; font-weight: bold } /* Name.Class */
 .highlight pre  .no { color: #800 } /* Name.Constant */
 .highlight pre  .nd { color: #A2F } /* Name.Decorator */
 .highlight pre  .ni { color: #717171; font-weight: bold } /* Name.Entity */
 .highlight pre  .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
 .highlight pre  .nf { color: #00F } /* Name.Function */
 .highlight pre  .nl { color: #767600 } /* Name.Label */
 .highlight pre  .nn { color: #00F; font-weight: bold } /* Name.Namespace */
 .highlight pre  .nt { color: #008000; font-weight: bold } /* Name.Tag */
 .highlight pre  .nv { color: #19177C } /* Name.Variable */
 .highlight pre  .ow { color: #A2F; font-weight: bold } /* Operator.Word */
 .highlight pre  .w { color: #BBB } /* Text.Whitespace */
 .highlight pre  .mb { color: #666 } /* Literal.Number.Bin */
 .highlight pre  .mf { color: #666 } /* Literal.Number.Float */
 .highlight pre  .mh { color: #666 } /* Literal.Number.Hex */
 .highlight pre  .mi { color: #666 } /* Literal.Number.Integer */
 .highlight pre  .mo { color: #666 } /* Literal.Number.Oct */
 .highlight pre  .sa { color: #BA2121 } /* Literal.String.Affix */
 .highlight pre  .sb { color: #BA2121 } /* Literal.String.Backtick */
 .highlight pre  .sc { color: #BA2121 } /* Literal.String.Char */
 .highlight pre  .dl { color: #BA2121 } /* Literal.String.Delimiter */
 .highlight pre  .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
 .highlight pre  .s2 { color: #BA2121 } /* Literal.String.Double */
 .highlight pre  .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
 .highlight pre  .sh { color: #BA2121 } /* Literal.String.Heredoc */
 .highlight pre  .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
 .highlight pre  .sx { color: #008000 } /* Literal.String.Other */
 .highlight pre  .sr { color: #A45A77 } /* Literal.String.Regex */
 .highlight pre  .s1 { color: #BA2121 } /* Literal.String.Single */
 .highlight pre  .ss { color: #19177C } /* Literal.String.Symbol */
 .highlight pre  .bp { color: #008000 } /* Name.Builtin.Pseudo */
 .highlight pre  .fm { color: #00F } /* Name.Function.Magic */
 .highlight pre  .vc { color: #19177C } /* Name.Variable.Class */
 .highlight pre  .vg { color: #19177C } /* Name.Variable.Global */
 .highlight pre  .vi { color: #19177C } /* Name.Variable.Instance */
 .highlight pre  .vm { color: #19177C } /* Name.Variable.Magic */
 .highlight pre  .il { color: #666 } /* Literal.Number.Integer.Long */&lt;/style&gt;&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;Welcome to the reference implementation tutorial notebook for the &lt;strong&gt;On Top of Pasketti: Children’s Speech Recognition Challenge - Word Track&lt;/strong&gt;! If you are just getting started, we recommend reading the &lt;a href="https://www.drivendata.org/competitions/308/childrens-word-asr/"&gt;competition webpage&lt;/a&gt; first.&lt;/p&gt;
&lt;p&gt;The goal of this tutorial is to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Demonstrate how to &lt;a href="#Step-1:-Load-and-explore-the-data"&gt;load and explore the data&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Provide a basic framework for &lt;a href="#Step-2:-Build-the-model"&gt;building a model&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Demonstrate how to &lt;a href="#Step-3:-Make-your-submission"&gt;package your work&lt;/a&gt; correctly for submission.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In this tutorial, we will &lt;a href="https://github.com/NVIDIA-NeMo/NeMo/tree/main/examples/asr/asr_adapters"&gt;adapt&lt;/a&gt; NVIDIA's Parakeet model, a pretrained ASR model, using &lt;a href="https://docs.nvidia.com/nemo-framework/user-guide/latest/nemotoolkit/asr/intro.html"&gt;NeMo&lt;/a&gt;. You can either expand on and improve the method in this notebook, or start with something completely different! Let's get started.&lt;/p&gt;
&lt;hr&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h2 id="Background"&gt;Background&lt;a class="anchor-link" href="#Background"&gt;&amp;#182;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Spoken language is a natural way for kids to learn, explore, and show what they know, yet today's Automatic Speech Recognition (ASR) technology hardly understands them. Most ASR systems are built on adult speech, and struggle with the pitch, rhythm, and evolving articulation of young learners.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://www.drivendata.org/competitions/group/childrens-asr-competition/"&gt;On Top of Pasketti: Children’s Speech Recognition Challenge&lt;/a&gt; assembles pre-existing and newly labeled datasets to advance speech models that truly work for children. Your goal in the &lt;a href="https://www.drivendata.org/competitions/308/childrens-word-asr/"&gt;Word Track&lt;/a&gt; is to develop models that accurately predict the words spoken by children in short audio clips.&lt;/p&gt;
&lt;p&gt;This is a &lt;a href="https://drivendata.co/blog/code-execution-competitions"&gt;code execution challenge&lt;/a&gt;! Rather than submitting your predicted labels, you will package your trained model and the prediction code and submit that for containerized execution. See the &lt;a href="https://www.drivendata.org/competitions/308/childrens-word-asr/page/978/"&gt;code submission format&lt;/a&gt; webpage and the &lt;a href="https://github.com/drivendataorg/childrens-speech-recognition-runtime/tree/main"&gt;runtime repository&lt;/a&gt; for more information.&lt;/p&gt;
&lt;p&gt;If you'd like to rerun this notebook, the notebook file can be downloaded from the &lt;a href="https://github.com/drivendataorg/childrens-speech-recognition-benchmark-pub"&gt;benchmark repository&lt;/a&gt;. That repository also includes all code imported into the notebook.&lt;/p&gt;
&lt;hr&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h1 id="Step-0:-Import-packages"&gt;Step 0: Import packages&lt;a class="anchor-link" href="#Step-0:-Import-packages"&gt;&amp;#182;&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;First, create your environment. We use &lt;code&gt;uv&lt;/code&gt; as the package manager in this benchmark repository. &lt;strong&gt;To run this notebook, you must be on a Linux machine with GPU access.&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create an environment: &lt;code&gt;just create-environment&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Activate the environment: &lt;code&gt;source ./.venv/bin/activate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Install the requirements found in the &lt;a href="https://github.com/drivendataorg/childrens-speech-recognition-benchmark-pub/blob/main/pyproject.toml"&gt;TOML file&lt;/a&gt; into the environment: &lt;code&gt;just requirements&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Remember, the runtime repository's &lt;a href="https://github.com/drivendataorg/childrens-speech-recognition-runtime/blob/main/runtime/pyproject.toml"&gt;TOML file&lt;/a&gt; lists the packages that will be available for running inference using model submissions.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;We'll be using NVIDIA's NeMo framework to build our model along with standard data science Python libraries to explore and prepare the data. Because this is a code execution challenge, we'll also be testing our solutions locally before packaging our model and inference code for submission. To help us with scoring, we've imported some utility functions from the competition's &lt;a href="https://github.com/drivendataorg/childrens-speech-recognition-runtime"&gt;runtime repository&lt;/a&gt;.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[1]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Standard library&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;pathlib&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;

&lt;span class="c1"&gt;# Visualization&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;matplotlib.pyplot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;plt&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;matplotlib&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ticker&lt;/span&gt;

&lt;span class="c1"&gt;# Core ML &amp;amp; audio stack&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;librosa&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;lightning.pytorch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;pl&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;numpy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;np&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;pandas&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;torch&lt;/span&gt;

&lt;span class="c1"&gt;# ASR models &amp;amp; normalization&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;nemo.collections.asr.models&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ASRModel&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;transformers.models.whisper.english_normalizer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;EnglishTextNormalizer&lt;/span&gt;

&lt;span class="c1"&gt;# Training &amp;amp; experiment utilities&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;loguru&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;logger&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;nemo.utils&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;logging&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;nemo.utils.exp_manager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;exp_manager&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;nemo.utils.trainer_utils&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;resolve_trainer_cfg&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;omegaconf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OmegaConf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;open_dict&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;sklearn.model_selection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;train_test_split&lt;/span&gt;

&lt;span class="c1"&gt;# Project utilities&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;asr_benchmark.config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;DATA_ROOT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PROJECT_ROOT&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;asr_benchmark.nemo_adapter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;add_global_adapter_cfg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;patch_transcribe_lhotse&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;update_model_cfg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;update_model_config_to_support_adapter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;asr_benchmark.score&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;english_spelling_normalizer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;score_wer&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stderr output_text"&gt;
&lt;pre&gt;fused_indices_to_multihot has reached end of life. Please migrate to a non-experimental function.
OneLogger: Setting error_handling_strategy to DISABLE_QUIETLY_AND_REPORT_METRIC_ERROR for rank (rank=0) with OneLogger disabled. To override: explicitly set error_handling_strategy parameter.
No exporters were provided. This means that no telemetry data will be collected.
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[2]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_float32_matmul_precision&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;high&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Set SAMPLE to use a smaller subset of the data for faster iteration during development. Set it to None to use the full dataset.&lt;/span&gt;
&lt;span class="n"&gt;SAMPLE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;hr&gt;
&lt;h1 id="Step-1:-Load-and-explore-the-data"&gt;Step 1: Load and explore the data&lt;a class="anchor-link" href="#Step-1:-Load-and-explore-the-data"&gt;&amp;#182;&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;First, you'll likely want to set up your own repository for developing a solution.  We recommend using &lt;a href="https://cookiecutter-data-science.drivendata.org/"&gt;Cookiecutter Data Science&lt;/a&gt;, which ensures an easy-to-navigate project structure.&lt;/p&gt;
&lt;p&gt;We'll download all of the competition data to our "raw" folder. There are two distinct training corpora that share the same structure but contain different data, and are hosted in separate locations for participant access. One corpus is hosted on the DrivenData platform, while a second corpus, which follows the same schema but contains different data, is provided by TalkBank. See the &lt;a href="https://www.drivendata.org/competitions/308/childrens-word-asr/data/"&gt;Data Download&lt;/a&gt; page for access instructions.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;Our local data structure after downloading all files to a raw data folder is:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;childrens-speech-recognition-benchmark-pub/data/raw
├──&lt;span class="w"&gt; &lt;/span&gt;drivendata
│&lt;span class="w"&gt;   &lt;/span&gt;├──&lt;span class="w"&gt; &lt;/span&gt;audio_part_0.zip
│&lt;span class="w"&gt;   &lt;/span&gt;├──&lt;span class="w"&gt; &lt;/span&gt;audio_part_1.zip
│&lt;span class="w"&gt;   &lt;/span&gt;├──&lt;span class="w"&gt; &lt;/span&gt;audio_part_2.zip
│&lt;span class="w"&gt;   &lt;/span&gt;└──&lt;span class="w"&gt; &lt;/span&gt;train_word_transcripts.jsonl
└──&lt;span class="w"&gt; &lt;/span&gt;talkbank
&lt;span class="w"&gt;    &lt;/span&gt;├──&lt;span class="w"&gt; &lt;/span&gt;audio.zip
&lt;span class="w"&gt;    &lt;/span&gt;└──&lt;span class="w"&gt; &lt;/span&gt;train_word_transcripts.jsonl
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;After unzipping the files, you may want to consolidate the audio files into a single "audio" folder within the drivendata directory, where audio are split into multiple zip files.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;rsync&lt;span class="w"&gt; &lt;/span&gt;-a&lt;span class="w"&gt; &lt;/span&gt;./data/raw/drivendata/&lt;span class="s2"&gt;&amp;quot;audio 3&amp;quot;&lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;./data/raw/drivendata/audio/
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;childrens-speech-recognition-benchmark-pub/data/raw
├──&lt;span class="w"&gt; &lt;/span&gt;drivendata
│&lt;span class="w"&gt;   &lt;/span&gt;├──&lt;span class="w"&gt; &lt;/span&gt;audio/
│&lt;span class="w"&gt;   &lt;/span&gt;├──&lt;span class="w"&gt; &lt;/span&gt;audio_part_0.zip
│&lt;span class="w"&gt;   &lt;/span&gt;├──&lt;span class="w"&gt; &lt;/span&gt;audio_part_1.zip
│&lt;span class="w"&gt;   &lt;/span&gt;├──&lt;span class="w"&gt; &lt;/span&gt;audio_part_2.zip
│&lt;span class="w"&gt;   &lt;/span&gt;└──&lt;span class="w"&gt; &lt;/span&gt;train_word_transcripts.jsonl
└──&lt;span class="w"&gt; &lt;/span&gt;talkbank
&lt;span class="w"&gt;    &lt;/span&gt;├──&lt;span class="w"&gt; &lt;/span&gt;audio/
&lt;span class="w"&gt;    &lt;/span&gt;├──&lt;span class="w"&gt; &lt;/span&gt;audio.zip
&lt;span class="w"&gt;    &lt;/span&gt;└──&lt;span class="w"&gt; &lt;/span&gt;train_word_transcripts.jsonl
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;For each of the two corpora, the file train_word_transcripts.jsonl contains the following fields:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;utterance_id&lt;/code&gt; (str) - unique identifier for each utterance&lt;/li&gt;
&lt;li&gt;&lt;code&gt;child_id&lt;/code&gt; (str) - unique, anonymized identifier for the speaker&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session_id&lt;/code&gt; (str) - unique identifier for the recording session; a single child_id may be associated with multiple session_ids&lt;/li&gt;
&lt;li&gt;&lt;code&gt;audio_path&lt;/code&gt; (str) - path to the corresponding .flac audio file relative to the /audio directory, following the pattern audio/{utterance_id}.flac&lt;/li&gt;
&lt;li&gt;&lt;code&gt;audio_duration_sec&lt;/code&gt; (float) - duration of the audio clip in seconds&lt;/li&gt;
&lt;li&gt;&lt;code&gt;age_bucket&lt;/code&gt; (str) - age range of the child at the time of recording ("3-4", "5-7", "8-11", "12+", or "unknown")&lt;/li&gt;
&lt;li&gt;&lt;code&gt;md5_hash&lt;/code&gt; (str) - MD5 checksum of the audio file, used for integrity verification&lt;/li&gt;
&lt;li&gt;&lt;code&gt;filesize_bytes&lt;/code&gt; (int) - size of the audio file in bytes&lt;/li&gt;
&lt;li&gt;&lt;code&gt;orthographic_text&lt;/code&gt; (str) - normalized orthographic transcription of the utterance&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;Each line in the JSONL manifest corresponds to a single utterance and references exactly one associated audio file. The &lt;code&gt;orthographic_text&lt;/code&gt; field contains a manually created, minimally normalized orthographic transcription that serves as the training label.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="Let's-explore-the-metadata!"&gt;Let's explore the metadata!&lt;a class="anchor-link" href="#Let's-explore-the-metadata!"&gt;&amp;#182;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;We will load the JSONL transcripts and explore some of the metadata. As a starting point, it is helpful to know how many utterances we have, how many unique children are present, the total audio time, the distribution of audio clip durations, and the distribution of child ages.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[3]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;read_transcripts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_dir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;Read JSONL transcript file into a DataFrame and convert audio paths to absolute paths.&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class="n"&gt;transcript_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data_dir&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;train_word_transcripts.jsonl&amp;quot;&lt;/span&gt;
    &lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;transcript_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Loaded &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; utterance transcripts&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;audio_relpath&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;audio_path&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;audio_path&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;audio_relpath&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_dir&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[4]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;df_dd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;read_transcripts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DATA_ROOT&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;raw&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;drivendata&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df_tb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;read_transcripts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DATA_ROOT&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;raw&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;talkbank&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;df_dd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;df_tb&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;ignore_index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;audio_path&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stderr output_text"&gt;
&lt;pre&gt;&lt;span class="ansi-green-fg"&gt;2026-02-26 04:58:21.910&lt;/span&gt; | &lt;span class="ansi-bold"&gt;INFO    &lt;/span&gt; | &lt;span class="ansi-cyan-fg"&gt;__main__&lt;/span&gt;:&lt;span class="ansi-cyan-fg"&gt;read_transcripts&lt;/span&gt;:&lt;span class="ansi-cyan-fg"&gt;5&lt;/span&gt; - &lt;span class="ansi-bold"&gt;Loaded 95572 utterance transcripts&lt;/span&gt;
&lt;span class="ansi-green-fg"&gt;2026-02-26 04:58:24.452&lt;/span&gt; | &lt;span class="ansi-bold"&gt;INFO    &lt;/span&gt; | &lt;span class="ansi-cyan-fg"&gt;__main__&lt;/span&gt;:&lt;span class="ansi-cyan-fg"&gt;read_transcripts&lt;/span&gt;:&lt;span class="ansi-cyan-fg"&gt;5&lt;/span&gt; - &lt;span class="ansi-bold"&gt;Loaded 255046 utterance transcripts&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[4]:&lt;/div&gt;



&lt;div class="output_html rendered_html output_subarea output_execute_result"&gt;
&lt;div&gt;
&lt;style scoped&gt;
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
&lt;/style&gt;
&lt;table border="1" class="dataframe"&gt;
  &lt;thead&gt;
    &lt;tr style="text-align: right;"&gt;
      &lt;th&gt;&lt;/th&gt;
      &lt;th&gt;utterance_id&lt;/th&gt;
      &lt;th&gt;child_id&lt;/th&gt;
      &lt;th&gt;session_id&lt;/th&gt;
      &lt;th&gt;audio_duration_sec&lt;/th&gt;
      &lt;th&gt;age_bucket&lt;/th&gt;
      &lt;th&gt;md5_hash&lt;/th&gt;
      &lt;th&gt;filesize_bytes&lt;/th&gt;
      &lt;th&gt;orthographic_text&lt;/th&gt;
      &lt;th&gt;audio_relpath&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;th&gt;0&lt;/th&gt;
      &lt;td&gt;U_00003c3ae1c35c6f&lt;/td&gt;
      &lt;td&gt;C_c74bfde2cca8d5da&lt;/td&gt;
      &lt;td&gt;S_7d821c3e4d3bc616&lt;/td&gt;
      &lt;td&gt;1.920&lt;/td&gt;
      &lt;td&gt;8-11&lt;/td&gt;
      &lt;td&gt;9214be45ba2928dd57384f3c7ee54236&lt;/td&gt;
      &lt;td&gt;30672&lt;/td&gt;
      &lt;td&gt;hm&lt;/td&gt;
      &lt;td&gt;audio/U_00003c3ae1c35c6f.flac&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;th&gt;1&lt;/th&gt;
      &lt;td&gt;U_00003db24218ffe4&lt;/td&gt;
      &lt;td&gt;C_c74bfde2cca8d5da&lt;/td&gt;
      &lt;td&gt;S_e6103ab3a4538d71&lt;/td&gt;
      &lt;td&gt;12.737&lt;/td&gt;
      &lt;td&gt;8-11&lt;/td&gt;
      &lt;td&gt;fe761bb3d034530ef05163c7ad98ec3e&lt;/td&gt;
      &lt;td&gt;180942&lt;/td&gt;
      &lt;td&gt;yeah its pouring the water on the screen but t...&lt;/td&gt;
      &lt;td&gt;audio/U_00003db24218ffe4.flac&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;th&gt;2&lt;/th&gt;
      &lt;td&gt;U_0001a0d0a3b4d816&lt;/td&gt;
      &lt;td&gt;C_4d0e1c16566d65a2&lt;/td&gt;
      &lt;td&gt;S_179057c3c3ccdecf&lt;/td&gt;
      &lt;td&gt;11.556&lt;/td&gt;
      &lt;td&gt;8-11&lt;/td&gt;
      &lt;td&gt;b05073e65a98368fccbe777b5ab35e02&lt;/td&gt;
      &lt;td&gt;208352&lt;/td&gt;
      &lt;td&gt;it got water and sunlight but the plant did di...&lt;/td&gt;
      &lt;td&gt;audio/U_0001a0d0a3b4d816.flac&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;th&gt;3&lt;/th&gt;
      &lt;td&gt;U_00021d201a31d313&lt;/td&gt;
      &lt;td&gt;C_3b51c8b1d2c076d8&lt;/td&gt;
      &lt;td&gt;S_90720887e4430996&lt;/td&gt;
      &lt;td&gt;1.125&lt;/td&gt;
      &lt;td&gt;8-11&lt;/td&gt;
      &lt;td&gt;9ed95318724ae6a2d1ce95d6aa743f6b&lt;/td&gt;
      &lt;td&gt;27099&lt;/td&gt;
      &lt;td&gt;there is wires&lt;/td&gt;
      &lt;td&gt;audio/U_00021d201a31d313.flac&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;th&gt;4&lt;/th&gt;
      &lt;td&gt;U_0003537f2bc1eb0b&lt;/td&gt;
      &lt;td&gt;C_b50216b3c70ca0a2&lt;/td&gt;
      &lt;td&gt;S_5b0bb48fadd7f802&lt;/td&gt;
      &lt;td&gt;1.125&lt;/td&gt;
      &lt;td&gt;8-11&lt;/td&gt;
      &lt;td&gt;f3142751c6a52e2c24a85a4544fe8a0f&lt;/td&gt;
      &lt;td&gt;18476&lt;/td&gt;
      &lt;td&gt;good&lt;/td&gt;
      &lt;td&gt;audio/U_0003537f2bc1eb0b.flac&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[5]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utterance_id&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nunique&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[5]:&lt;/div&gt;




&lt;div class="output_text output_subarea output_execute_result"&gt;
&lt;pre&gt;350618&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[6]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;child_id&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nunique&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[6]:&lt;/div&gt;




&lt;div class="output_text output_subarea output_execute_result"&gt;
&lt;pre&gt;3344&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[7]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;audio_duration_sec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[7]:&lt;/div&gt;




&lt;div class="output_text output_subarea output_execute_result"&gt;
&lt;pre&gt;344&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;There are over 350,000 utterances in the training dataset, across 3,344 children, totaling 344 hours of audio data. Next, let's take a look at the distribution of audio clip durations.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[8]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;bins&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;inf&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;labels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;20+&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;binned&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cut&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;audio_duration_sec&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bins&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;bins&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;labels&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;counts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;binned&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;value_counts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sort_index&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;counts&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kind&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;bar&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Audio Duration (sec)&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Number of Audio Clips&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Distribution of Audio Durations&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xticks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rotation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;




&lt;div class="output_png output_subarea "&gt;
&lt;img src="data:image/png;base64,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8D5VREREukfn71NFREREpEsYqoiIiIhkwFBFREREJAOGKiIiIiIZMFQRERERyYChioiIiEgGDFVEREREMmCoIiIiIpIBQxURERGRDBiqiIiIiGTAUEVEREQkA4YqIiIiIhkwVBERERHJgKGKiIiISAYMVUREREQyYKgiIiIikgFDFREREZEMGKqIiIiIZMBQRURERCQDhioiIiIiGTBUEREREcmAoYqIiIhIBgxVRERERDJgqCIiIiKSAUMVERERkQwYqoiIiIhkwFBFREREJAOGKiIiIiIZMFQRERERyYChioiIiEgGDFVEREREMmCoIiIiIpIBQxURERGRDBiqiIiIiGTAUEVEREQkA4YqIiIiIhkYlHcB9IzjpH0ajU+c61dGlRAREZE2uKeKiIiISAYMVUREREQyYKgiIiIikgFDFREREZEMGKqIiIiIZMBQRURERCQDhioiIiIiGTBUEREREcmAoYqIiIhIBgxVRERERDJgqCIiIiKSAUMVERERkQwYqoiIiIhkwFBFREREJAOGKiIiIiIZMFQRERERyYChioiIiEgGDFVEREREMmCoIiIiIpJBhQ5V+fn5+Oqrr+Dk5ARTU1PUrl0b33zzDYQQ0hghBKZNmwY7OzuYmprCx8cH8fHxKvOkpaWhb9++sLCwgJWVFYKCgvDo0SOVMRcuXECbNm1gYmICe3t7zJ8/v0g927ZtQ926dWFiYoIGDRrgjz/+KJsNJyIiIp1ToUPVvHnzsHLlSqxYsQKxsbGYN28e5s+fj+XLl0tj5s+fj2XLlmHVqlWIiopC5cqV4evri6dPn0pj+vbti8uXLyM8PBx79+7FsWPHMHToUKk/MzMTHTt2hIODA6Kjo7FgwQLMmDEDq1evlsacPHkSffr0QVBQEP766y/4+/vD398fly5dej0vBhEREVVoCvH8bp8KpkuXLrCxscGaNWukth49esDU1BQbNmyAEAJKpRLjxo3DF198AQDIyMiAjY0NQkJCEBAQgNjYWLi5ueHMmTNo2rQpACAsLAydO3fG33//DaVSiZUrV2Lq1KlITk6GkZERAGDSpEnYtWsXrl69CgDo3bs3srKysHfvXqmWFi1awN3dHatWrVJrezIzM2FpaYmMjAxYWFio9DlO2qfRa5M410/tsWU5NxER0ZvuZZ/fz6vQe6patmyJiIgIXLt2DQBw/vx5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"
&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;Even though the audio has been clipped to the utterance level, we have some outliers over 20 seconds.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[9]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# What is the longest clip (in minutes)?&lt;/span&gt;
&lt;span class="nb"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;audio_duration_sec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[9]:&lt;/div&gt;




&lt;div class="output_text output_subarea output_execute_result"&gt;
&lt;pre&gt;22&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;Most audio clips are very short (1-3 seconds). There is a tail of longer clips, up to an outlier 22 minute clip. Next, let's look at the distribution of utterances by child age.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[10]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;age_bucket&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Categorical&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;age_bucket&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;categories&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;unknown&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;3-4&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;5-7&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;8-11&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;12+&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;ordered&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;fig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subplots&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;age_bucket&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;value_counts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;normalize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;barh&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Utterances by Age Group&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Percent of Utterances&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Age Group&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xaxis&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_major_formatter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ticker&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PercentFormatter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bar_label&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.0f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;%&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;




&lt;div class="output_png output_subarea "&gt;
&lt;img src="data:image/png;base64,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eYEAAAC5SabD2YABAxQbG6uYmBjlzZvX3t6sWTN9//33WVocAABAbpPhh9DeEB0dre+//15169aVzWaztwcHB2v//v1ZWhwAAEBuk+mZs1OnTt30d0pevHjRIawBAAAg8zIdzmrWrKmff/7ZvnwjkH399deqV69e1lUGAACQC2X6tOZHH32kli1bateuXbp27Zo+++wz7dq1S2vWrNHy5cvvR40AAAC5xl39bs39+/dr5MiRio2N1YULF/TII4/o3XffVZUqVe5HjblOVv1uLgAAkH2y6vubX3xuQYQzAAAePFn1/Z3p05pJSUk3bbfZbHJzc5Orq+tdFwMAAJDbZTqceXl53fauzJIlS6pbt24aPHiwnJz47VAAAACZkelwNm3aNL3//vvq1q2bateuLUlav369pk+frg8++ECnTp3SmDFj5Obmpv/+979ZXjAAAMC/WabD2fTp0zV27Fi1b9/e3hYaGqoqVaroyy+/1JIlS+Tv76/hw4cTzgAAADIp0+cd16xZo+rVq6drr169utauXStJatiwof13bgIAACDjMh3O/Pz8NHXq1HTtU6dOlZ+fnyTpr7/+UqFChe69OgAAgFwm06c1x4wZo2effVYLFixQrVq1JEkbN27Unj179MMPP0iSNmzYoOeeey5rKwUAAMgF7uo5ZwcOHNCXX36puLg4SVKFChX02muvqXTp0lldX67Ec84AAHjwWPIhtDt27FDlypWzane5FuEMAIAHT1Z9f9/zg8jOnz+vKVOmqHbt2qpWrdq97g4AACBXu+twtmLFCnXt2lUlSpTQmDFj1KRJE/3+++9ZWRsAAECuk6kbAo4fP65p06Zp6tSpSkpKUvv27ZWcnKzo6GhVqlTpftUIAACQa2R45iw0NFQVKlTQtm3b9Omnn+rYsWMaP378/awNAAAg18nwzNmCBQvUt29f9ezZU+XLl7+fNQEAAORaGZ45W7Vqlc6fP68aNWqoTp06mjBhgk6fPn0/awMAAMh1MhzO6tatq6+++koJCQl67bXXNHPmTPn6+iotLU2LFi3S+fPn72edAAAAucI9PecsLi5OU6dO1TfffKNz587p8ccf17x587KyvlyJ55wBAPDgscRzzipUqKCPP/5YR44c0XfffXcvuwIAAICy+DcEIGswcwYAwIPHEjNnAAAAyFqEMwAAAAshnAEAAFgI4QwA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nNzyZ3q7AyNb3YdqAABAdmDmDAAAwEIIZwAAABZCOAMAALAQwhkAAICFEM4AAAAshHAGAABgIYQzAAAACyGcAQAAWAjhDAAAwEIIZwAAABZCOAMAALAQwhkAAICFPNDhLCYmRjabTefOncvpUixnxIgRqlWrlgoWLCgfHx+1bdtWcXFxDn3efPNNFS5cWH5+foqMjHRYN2vWLIWGhmZnyQAAQA94OMOtLV++XGFhYfr999+1aNEipaSkqHnz5rp48aIk6aefftKMGTP022+/6eOPP9bLL7+s06dPS5ISExP1/vvva+LEiTl5CAAA5Ep5croA3B+//vqrw/K0adPk4+OjTZs26dFHH9Xu3bsVEhKimjVrqmbNmurXr5/i4+NVtGhRvfPOO+rZs6f8/f1zqHoAAHKvHJ05K126tD799FOHtocffljh4eGSJJvNpq+//lrt2rVT/vz5Vb58ec2bN++W+7t06ZJatmypBg0a6Ny5czpw4IBsNpvmzJmjxx57TPnz51e1atW0du1ah+1mz56t4OBgubm5qXTp0ho7dqx93YQJE1S5cmX7cnR0tGw2myZPnmxva9asmT744ANJUnh4uB5++GF98803Kl26tDw9PfX888/r/PnzdztMWSIxMVGSVLhwYUlStWrVtHHjRp09e1abNm3S5cuXFRAQoFWrVmnz5s3q27dvTpYLAECuZfnTmkOGDFH79u21bds2Pfnkk+rUqZPOnDmTrt+5c+f0+OOPKy0tTYsWLZKXl5d93fvvv6/+/ftr69atCgwMVIcOHXTt2jVJ0qZNm9S+fXs9//zz2r59u8LDwzVw4EBNmzZNktS4cWPt2rVLp06dknT9dGHRokUVExMjSUpJSdHatWsVEhJif7/9+/crOjpa8+fP1/z587V8+XKNHDnyvoxPRqSlpalfv35q0KCBPWi2aNFCL7zwgmrVqqVu3bpp+vTpcnd3V8+ePTV58mRNmjRJFSpUUIMGDbRz584cqx0AgNzG8uGsW7du6tChgwICAvTRRx/pwoULWr9+vUOf48ePq3HjxipRooR++ukn5c+f32F9//791apVKwUGBmrIkCE6ePCg9u3bJ0kaN26cmjZtqoEDByowMFDdunVT7969NXr0aElS5cqVVbhwYS1fvlzS9ZsQ3nrrLfvy+vXrlZKSovr169vfLy0tTdOmTVPlypXV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ve77MT0o3nvvPbN8+XITHx9vtm3bZt577z1js9nMb7/9Zoxh3LPb3685M4bxv5/eeustExMTY+Lj483q1atNs2bNTNGiRe132D9IY084yyHjx483/v7+xtXV1dSuXdv8/vvvDuuPHz9uSpUqZY4ePerQPmTIEFO4cGETFBRk1q1bl50lP5CWLVtmJKV7de3a1Rhz/XEaAwcONMWKFTNubm6madOmJi4uLt1+tm/fbgICAhye05Wammp69uxpPDw8TK1atcwff/yRXYdleTcbc0kmIiLC3ufy5cumV69eplChQiZ//vymXbt2JiEhId2+fv31V1O7dm2Tmppqb7t48aJ59tlnTcGCBU3Tpk3NiRMnsuOwHggvvviiKVWqlHF1dTXe3t6madOm9mBmDOOe3f4Zzhj/++e5554zJUqUMK6uruahhx4yzz33nNm3b599/YM09jZjjLm/c3MAAADIKK45AwAAsBDCGQAAgIUQzgAAACyEcAYAAGAhhDMAAAALIZwBAABYCOEMAADAQghnAJDFwsPDVaxYMdlsNkVHR+d0OQAeMIQzAFmmW7dustlsstls9l++PXToUF27di2nS7ujrApSu3fv1pAhQ/Tll18qISFBLVu2TNcnJiZGNpst3S9hlqTSpUvr008/lSQdOHBANptNW7dudejTrVs3tW3b9p5rBWBNeXK6AAD/Lk888YQiIiKUnJysX375RWFhYXJxcdGAAQMyva/U1FTZbDY5OT04/47cv3+/JKlNmzay2Ww5XM3tXb16Va6urjldBoB/eHD+xgPwQHBzc1Px4sVVqlQp9ezZU82aNdO8efMkScnJyerfv78eeughubu7q06dOoqJibFvO23aNHl5eWnevHmqVKmS3NzcdOjQISUnJ+vdd9+Vn5+f3NzcFBAQoKlTp9q327Fjh1q2bKkCBQqoWLFi6ty5s06fPm1fHxISor59++qdd95R4cKFVbx4cYWHh9vXly5dWpLUrl072Ww2+/LNbN++XU2aNFG+fPlUpEgRvfrqq7pw4YKk66czQ0NDJUlOTk73HM7KlCkjSapevbpsNptCQkIUHh6u6dOn68cff7TPUt4Yw8OHD6t9+/by8vJS4cKF1aZNGx04cMC+vxszbsOHD5evr68qVKggSfrmm29Us2ZNFSxYUMWLF1fHjh118uRJ+3Y3ZvqWLFmimjVr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"
&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;About half of the utterances come from 8 to 11 year olds, with 13% coming from 3 to 4 year olds and 28% coming from 5 to 7 year olds.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="Let&amp;#8217;s-explore-the-utterances!"&gt;Let&amp;#8217;s explore the utterances!&lt;a class="anchor-link" href="#Let&amp;#8217;s-explore-the-utterances!"&gt;&amp;#182;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;We will listen to an example utterance and visualize the features.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[11]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;plot_waveform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;audio_data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ndarray&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;Plot the waveform of an audio signal&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;figure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;librosa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;display&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;waveshow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;audio_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Waveform&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Time (s)&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Amplitude&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[12]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;plot_melspectrogram&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;audio_data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ndarray&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;Generate and plot the mel spectrogram of an audio signal&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class="n"&gt;S&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;librosa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;melspectrogram&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;audio_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;S_db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;librosa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;power_to_db&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;S&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;figure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;librosa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;display&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;specshow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;S_db&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x_axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;time&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;mel&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;colorbar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;%+2.0f&lt;/span&gt;&lt;span class="s2"&gt; dB&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Mel Spectrogram&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Time (s)&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Mel Frequency&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[13]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;example_utt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;U_1c8757065e355c35&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utterance_id&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;example_utt&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;utterance_id&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;audio_duration_sec&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;orthographic_text&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[13]:&lt;/div&gt;



&lt;div class="output_html rendered_html output_subarea output_execute_result"&gt;
&lt;div&gt;
&lt;style scoped&gt;
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
&lt;/style&gt;
&lt;table border="1" class="dataframe"&gt;
  &lt;thead&gt;
    &lt;tr style="text-align: right;"&gt;
      &lt;th&gt;&lt;/th&gt;
      &lt;th&gt;utterance_id&lt;/th&gt;
      &lt;th&gt;audio_duration_sec&lt;/th&gt;
      &lt;th&gt;orthographic_text&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;th&gt;124170&lt;/th&gt;
      &lt;td&gt;U_1c8757065e355c35&lt;/td&gt;
      &lt;td&gt;0.516&lt;/td&gt;
      &lt;td&gt;yeah&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;audio controls src="../audio/gates_asr_U_1c8757065e355c35.flac"&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;This clip may sound understandable to us, but children’s speech often includes subtle pronunciation differences. For example, models must learn to handle syllable deletions (“elephant” → “efant”), consonant nasalization (“mom” → “bob”), and common &lt;a href="https://en.wikipedia.org/wiki/Speech_sound_disorder"&gt;speech sound disorders&lt;/a&gt; like tetism.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;Now that we've heard the utterance, let's look at it from the model's perspective. We'll plot the raw waveform - the audio signal represented as amplitude over time:&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[&amp;nbsp;]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;audio_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;librosa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utterance_id&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;example_utt&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;audio_path&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;plot_waveform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;audio_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;




&lt;div class="output_png output_subarea "&gt;
&lt;img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2sAAAGJCAYAAAAUpqswAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAgzdJREFUeJzt3Xd4U2X7B/BvRpN070GhtJRVQGRPZQgVEBRxoi8q+CpOVER9BV9F1FdBRUURRRFcPxUc4BYHQwSRvfcqFEpb2tK90uT8/khympOcNmmb2X4/19WL5uTJOU8OaU7uPM9z3wpBEAQQERERERGRT1F6uwNERERERERkj8EaERERERGRD2KwRkRERERE5IMYrBEREREREfkgBmtEREREREQ+iMEaERERERGRD2KwRkRERERE5IMYrBEREREREfkgBmtEREREREQ+iMEaERFRE3z66adIS0tDQEAAIiIivN0dIiJqRhisERGR13355ZdQKBRYtWqV3X09evSAQqHAunXr7O5r27YtBg8e7Ikuyjp8+DCmTJmC9u3bY8mSJXj//fe91hciImp+GKwREZHXXX755QCAjRs3SrYXFxdj//79UKvV2LRpk+S+zMxMZGZmio/1hvXr18NoNOLNN9/ElClTcPPNN3utL0RE1PwwWCMiIq9LTExEu3bt7IK1zZs3QxAE3HTTTXb3WW57M1jLzc0FAJdOfywvL3fZvoiIyL8xWCMiIp9w+eWXY9euXaioqBC3bdq0Cd26dcNVV12Ff/75B0ajUXKfQqHAZZddhg8//BAjRoxAXFwctFotunbtinfffVey/6uvvhqpqamyxx40aBD69u0r2fZ///d/6NOnDwIDAxEVFYVbbrkFmZmZ4v0pKSl49tlnAQCxsbFQKBSYM2eOeP8777yDbt26QavVIjExEQ8++CAKCwslxxg+fDguueQS7NixA0OHDkVQUBCeeuopZGRkQKFQYP78+Vi0aBFSU1MRFBSEUaNGITMzE4Ig4IUXXkCbNm0QGBiIa6+9FgUFBQ0630RE5PsYrBERkU+4/PLLodfrsWXLFnHbpk2bMHjwYAwePBhFRUXYv3+/5L60tDRER0fj3XffRXJyMp566im89tprSEpKwgMPPIBFixaJ7SdOnIhTp05h27ZtkuOePn0a//zzD2655RZx24svvog77rgDHTt2xOuvv47p06djzZo1GDp0qBhwLViwANdddx0A4N1338Wnn36K66+/HgAwZ84cPPjgg0hMTMRrr72GG264Ae+99x5GjRoFvV4vOX5+fj6uuuoq9OzZEwsWLMAVV1wh3vfZZ5/hnXfewUMPPYTHHnsMf/75J26++WY8/fTTWL16NZ588kncc889+OGHH/D444838X+AiIh8jkBEROQDDhw4IAAQXnjhBUEQBEGv1wvBwcHCxx9/LAiCIMTHxwuLFi0SBEEQiouLBZVKJUydOlUQBEEoLy+329/o0aOF1NRU8XZRUZGg1WqFxx57TNLulVdeERQKhXD69GlBEAQhIyNDUKlUwosvvihpt2/fPkGtVku2P/vsswIA4cKFC+K23NxcQaPRCKNGjRIMBoO4/e233xYACMuWLRO3DRs2TAAgLF68WHKsU6dOCQCE2NhYobCwUNw+a9YsAYDQo0cPQa/Xi9tvvfVWQaPRCJWVlfYnloiI/BZH1oiIyCd06dIF0dHR4lq0PXv2oKysTMz2OHjwYDHJyObNm2EwGMT1aoGBgeJ+ioqKkJeXh2HDhuHkyZMoKioCAISFheGqq67Cl19+CUEQxPYrVqzAwIED0bZtWwDAypUrYTQacfPNNyMvL0/8SUhIQMeOHWWzUlr7448/UF1djenTp0OprL3MTp06FWFhYfjpp58k7bVaLe68807Zfd10000IDw8Xbw8YMAAAcNttt0GtVku2V1dX49y5c/X2jYiI/AuDNSIi8gkKhQKDBw8W16Zt2rQJcXFx6NChAwBpsGb51xKsbdq0Cenp6QgODkZERARiY2Px1FNPAYAYrAGmqZCZmZnYvHkzAODEiRPYsWMHJk6cKLY5duwYBEFAx44dERsbK/k5dOiQmFSkLqdPnwYAdO7cWbJdo9EgNTVVvN+idevW0Gg0svuyBJAWlsAtKSlJdvvFixfr7RsREfkXteMmREREnnH55Zfjhx9+wL59+8T1ahaDBw/GE088gXPnzmHjxo1ITExEamoqTpw4gZEjRyItLQ2vv/46kpKSoNFo8PPPP+ONN96QJCW55pprEBQUhC+//BKDBw/Gl19+CaVSiZtuuklsYzQaoVAo8Msvv0ClUtn1MSQkxKXP2XpU0Jbc8evbbj1iSERE/o/BGhER+QzremubNm3C9OnTxfv69OkDrVaL9evXY8uWLRg7diwA4IcffkBVVRW+//57yUiU3HTF4OBgXH311fjqq6/w+uuvY8WKFRgyZAgSExPFNu3bt4cgCGjXrh06derU4OeQnJwMADhy5Igk+2R1dTVOnTqF9PT0Bu+TiIhaJk6DJCIin9G3b1/odDp89tlnOHfunGRkTavVonfv3li0aBHKysrEwM4yymQ9qlRUVIQPP/xQ9hgTJ05EVlYWPvjgA+zZs0cyBRIArr/+eqhUKjz33HN2I1WCICA/P7/e55Ceng6NRoO33npL8vilS5eiqKgI48aNc+JMEBERcWSNiIh8iEajQb9+/fDXX39Bq9WiT58+kvsHDx6M1157DUDtKNyoUaOg0WhwzTXX4N5770VpaSmWLFmCuLg4nD9/3u4YY8eORWhoKB5//HGoVCrccMMNkvvbt2+P//3vf5g1axYyMjIwYcIEhIaG4tSpU1i1ahXuueeeetPkx8bGYtasWXjuuecwZswYjB8/HkeOHME777yDfv364bbbbmvqaSIiohaCI2tERORTLEGYZdqjtcsuuwwAEBoaih49egAwJfL4+uuvoVAo8Pjjj2Px4sW455578Mgjj8juX6fTYfz48SgpKcEVV1yBuLg4uzYzZ87EN998A6VSieeeew6PP/44vv/+e4waNQrjx493+BzmzJmDt99+G2fOnMGjjz6KL7/8Evfccw9+++03BAQENOh8EBFRy6UQuBqZiIiIiIjI53BkjYiIiIiIyAcxWCMiIiIiIvJBDNaIiIiIiIh8EIM1IiIiIiIiH8RgjYiIiIiIyAcxWCMiIiIiIvJBLIrtgNFoRFZWFkJDQ6FQKLzdHSIiIiIi8hJBEFBSUoLExEQole4f92Kw5kBWVhaSkpK83Q0iIiIiIvIRmZmZaNOmjduPw2DNgdDQUACm/5CwsDAv94aIiIiIiLyluLgYSUlJYozgbgzWHLBMfQwLC2OwRkREREREHlsexQQjREREREREPojBGhERERERkQ9isEZEREREROSDGKwRERERERH5IAZrREREREREPojBGhERERERkQ9isEZEREREROSDGKwRERERERH5IAZrREREREREPojBGhERERERkQ9isEZELc6R7BL8fTzP290gIiIiqheDNSJqca57ZxP+9cEWbDzGgI2IiIh8F4M1ImpxyqsNAIDblm7BmfxyL/eGiIiISB6DNSJq0YyC4O0u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"
&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;Before training a machine learning model, the raw audio array with sampled amplitudes must be transformed. Transforming this raw signal into mel spectrograms enables the machine learning model to learn speech-relevant acoustic patterns more efficiently. The transformation reorganizes the signal into a structured time-by-frequency map that highlights speech patterns like vowels and consonants.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[16]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;plot_melspectrogram&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;audio_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;




&lt;div class="output_png output_subarea "&gt;
&lt;img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAy0AAAGJCAYAAACHAtzXAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAlRZJREFUeJzt3Xl4FFXWBvC3es8ekgBJIOyrCIgBMSiLEiGIooI6IIOAGcAZQJEZdJBREBFc+AREBRdEnWFRHHBcBhQBEZVFQXBhRzZDQoCQPemt7vdHJq1tAnQ3yaFJ3p9PP5JKdZ3qSnV137rnnqsppRSIiIiIiIiClOFS7wAREREREdH5sNFCRERERERBjY0WIiIiIiIKamy0EBERERFRUGOjhYiIiIiIghobLUREREREFNTYaCEiIiIioqDGRgsREREREQU1NlqIiIiIiCiosdFCRFRFevXqhV69el3q3SAiIqpx2GgholrhzTffhKZp0DQNX375ZYXfK6WQlJQETdNwyy23VOu+OBwOzJs3D506dUJkZCSio6PRrl07jB49Gnv37q3W2L7473//i2nTpl3q3SAiIvJgo4WIahWbzYalS5dWWL5x40b88ssvsFqt1b4PgwYNwl//+ldceeWVePrpp/HEE0+gR48eWL16NbZs2VLt8S/kv//9L5544olLvRtEREQepku9A0REkm6++WasWLECL7zwAkymXy+BS5cuRXJyMk6fPl2t8b/55ht89NFHeOqpp/Doo496/e7FF19Ebm5utcavai6XC7quw2KxVHssXdfhcDhgs9mqPRYREQUX9rQQUa0yZMgQnDlzBmvXrvUsczgceO+993DPPfdU+hxd1zF37ly0a9cONpsN9evXx5gxY3D27Fm/4x86dAgAcN1111X4ndFoRGxsrOfnadOmQdM07N27F3fffTciIyMRGxuLBx98EKWlpRWe/69//QvJyckICQlBTEwMBg8ejOPHj1dYb+vWrbj55ptRp04dhIWFoUOHDpg3bx4AYMSIEXjppZcAwJNOp2kaAODIkSPQNA2zZ8/G3Llz0bx5c1itVuzevRsAsH79enTv3h1hYWGIjo7Gbbfdhj179lSI//nnn6Nz586w2Wxo3rw5XnnlFc9r/S1N0zBu3DgsWbIE7dq1g9VqxZo1awAAs2fPRrdu3RAbG4uQkBAkJyfjvffeqxCrfBsrVqzAFVdcgZCQEKSkpOCHH34AALzyyito0aIFbDYbevXqhSNHjlTYBhERXXrsaSGiWqVJkyZISUnBsmXL0K9fPwDA6tWrkZeXh8GDB+OFF16o8JwxY8bgzTffxMiRI/HAAw/g8OHDePHFF/Hdd9/hq6++gtls9jl+48aNAQBLlizBdddd59Xbcy533303mjRpglmzZmHLli144YUXcPbsWbz99tuedZ566ik89thjuPvuu/GnP/0Jp06dwvz589GjRw989913iI6OBgCsXbsWt9xyCxISEvDggw8iPj4ee/bswUcffYQHH3wQY8aMwYkTJ7B27Vr885//rHR/Fi9ejNLSUowePRpWqxUxMTH47LPP0K9fPzRr1gzTpk1DSUkJ5s+fj+uuuw47duxAkyZNAADfffcd0tLSkJCQgCeeeAJutxvTp09H3bp1K421fv16vPvuuxg3bhzi4uI825k3bx4GDBiAoUOHwuFwYPny5bjrrrvw0UcfoX///l7b2LRpEz744AOMHTsWADBr1izccsstePjhh/Hyyy/jL3/5C86ePYtnn30W9913H9avX3/BvwkREQlTRES1wOLFixUA9c0336gXX3xRRUREqOLiYqWUUnfddZe64YYblFJKNW7cWPXv39/zvE2bNikAasmSJV7bW7NmTYXlPXv2VD179jzvfui6rnr27KkAqPr166shQ4aol156SR09erTCulOnTlUA1IABA7yW/+Uvf1EA1K5du5RSSh05ckQZjUb11FNPea33ww8/KJPJ5FnucrlU06ZNVePGjdXZs2cr7Fe5sWPHqso+Hg4fPqwAqMjISJWdne31u6uuukrVq1dPnTlzxrNs165dymAwqHvvvdez7NZbb1WhoaEqIyPDs+zAgQPKZDJViAlAGQwG9dNPP1XYl/K/XTmHw6GuvPJKdeONN1bYhtVqVYcPH/Yse+WVVxQAFR8fr/Lz8z3LJ0+erAB4rUtERMGB6WFEVOvcfffdKCkpwUcffYSCggJ89NFH50wNW7FiBaKionDTTTfh9OnTnkdycjLCw8OxYcMGv2JrmoZPPvkEM2bMQJ06dbBs2TKMHTsWjRs3xh/+8IdKx7SU9xCUGz9+PICyAfMAsHLlSui6jrvvvttrH+Pj49GyZUvPPn733Xc4fPgwJkyY4Ol5+e1++WrQoEFePSOZmZnYuXMnRowYgZiYGM/yDh064KabbvLsp9vtxmeffYbbb78diYmJnvVatGjh6fX6vZ49e+KKK66osDwkJMTz77NnzyIvLw/du3fHjh07Kqzbu3dvTw8NAHTt2tXzOiIiIios//nnn8/7+omISB7Tw4io1qlbty5SU1OxdOlSFBcXw+12484776x03QMHDiAvLw/16tWr9PfZ2dl+x7darZgyZQqmTJmCzMxMbNy4EfPmzcO7774Ls9mMf/3rX17rt2zZ0uvn5s2bw2AweMZfHDhwAEqpCuuVK09fKx9Pc+WVV/q9z7/VtGlTr5+PHj0KAGjdunWFddu2bYtPPvkERUVFyM/PR0lJCVq0aFFhvcqWVRar3EcffYQZM2Zg586dsNvtnuWVNb4aNWrk9XNUVBQAICkpqdLlgYxVIiKi6sVGCxHVSvfccw9GjRqFrKws9OvXr0LPQzld11GvXj0sWbKk0t+fayyGrxISEjB48GAMGjQI7dq1w7vvvos333zzvGNdfv/FXNd1aJqG1atXw2g0Vlg/PDz8ovbx937by1HdKou1adMmDBgwAD169MDLL7+MhIQEmM1mLF68uNJy1pUdk/MtV0pd3E4TEVGVY6OFiGqlO+64A2PGjMGWLVvwzjvvnHO95s2b47PPPsN1111XrV/WzWYzOnTogAMHDnhSu8odOHDAq8fh4MGD0HXdk/LUvHlzKKXQtGlTtGrV6ryvBQB+/PFHpKamnnM9f1LFgF+LC+zbt6/C7/bu3Yu4uDiEhYXBZrPBZrPh4MGDFdarbNm5/Pvf/4bNZsMnn3ziNa/O4sWL/dpvIiK6fHBMCxHVSuHh4ViwYAGmTZuGW2+99Zzr3X333XC73XjyyScr/M7lcvk9r8qBAwdw7NixCstzc3OxefNm1KlTp0LvTXkJ4nLz588HAM84kIEDB8JoNOKJJ56o0EuglMKZM2cAAFdffTWaNm2KuXPnVtjv3z4vLCzMs0++SEhIwFVXXYW33nrL6zk//vgjPv30U9x8880Ayno2UlNT8f777+PEiROe9Q4ePIjVq1f7FKt8O5qmwe12e5YdOXIE77//vs/bICKiywt7Woio1ho+fPgF1+nZsyfGjBmDWbNmYefOnejTpw/MZjMOHDiAFStWYN68eeccD1OZXbt24Z577kG/fv3QvXt3xMTEICMjA2+99RZOnDiBuXPnVkhbOnz4MAYMGIC0tDRs3rwZ//rXv3DPPfegY8eOAMp6UGbMmIHJkyfjyJEjuP322xEREYHDhw9j1apVGD16NP72t7/BYDBgwYIFuPXWW3HVVVdh5MiRSEhIwN69e/HTTz/hk08+AQAkJycDAB544AH07dsXRqMRgwcPPu/reu6559CvXz+kpKQgPT3dU/I4KioK06ZN86w3bdo0fPrpp7juuuvw5z//GW63Gy+++CKuvPJK7Ny506dj2L9/fzz//PNIS0vDPffcg+zsbLz00kto0aIFvv/+ex//EkREdFm5lKXLiIik/Lbk8fn8vuRxuVdffVUlJyerkJAQFRERodq3b68efvhhdeLECc86vpQ8PnnypHr66adVz549VUJCgjKZTKpOnTrqxhtvVO+9957XuuUlj3fv3q3uvPNOFRERoerUqaPGjRunSkpKKmz73//+t7r++utVWFiYCgsLU23atFFjx45V+/bt81rvyy+/VDfddJOKiIhQYWFhqkOHDmr+/Pme37tcLjV+/HhVt25dpWmapxRxecnj5557rtLX9tlnn6nrrrtOhYSEqMjISHXrrbeq3bt3V1hv3bp1qlOnTspisajmzZur119/Xf31r39VNpvNaz0AauzYsZXGWrRokWrZsqWyWq2qTZs2avHixZ7jdaFtnOt1bNiwQQFQK1asqDQmERFdOppSHHFIRBSMpk2bhieeeAKnTp1CXFzcpd6danX77bfjp59+woEDBy71rhARURDimBYiIhJVUlLi9fOBAwfw3//+F7169bo0O0REREGPY1qIiEhUs2bNMGLECDRr1gxHjx7FggULYLFY8PDDD1/qXSMioiDFRgsREYlKS0vDsmXLkJWVBavVipSUFMycOfOck2MSERFxTAsREREREQU1jmkhIiIiIqKgxkYLEREREREFNY5p8ZGu6zhx4gQiIiKgadql3h0iIiIi+h2lFAoKCpCYmAiDIbjuzZeWlsLhcAT8fIvFApvNVoV7dHlho8VHJ06cQFJS0qXeDSIiIiK6gOPHj6Nhw4aXejc8SktL0bRpA2Rl5QS8jfj4eBw+fLjWNlzYaPFRRETE//5lAMCeFiIiIqLgowDov/neFhwcDgeysnJw5PByREaG+v38/PxiNGk6GA6Hg40WOr9fU8I0sNFCREREFLyCNZU/MtyGyPAQ/5+o61W/M5cZNlqIiIiIiCToemANEDZaWD2MiIiIiIiCG3taiIiIiIgkKFX2COR5tRwbLUREREREEnQVYHoYGy1stBARERERSeCYloCx0UJEREREJIGNloCx0UJEREREJIGNloCxehgREREREQU19rQQEREREUlQAfa0KPa0sNFCRERERCRAUzq0ABoggTynpmGjhYiIiIhIAse0BIyNFiIiIiIiCboKbM4VztPCRgsRERERkQj2tASM1cOIiIiIiCiosaeFiIiIiEgCe1oCxkYLEREREZEEpQIrX6w4poWNFiIiIiIiCexpCRgbLUREREREElg9LGCXdCC+2+3GY489hqZNmyIkJATNmzfHk08+CfWbLrCVK1eiT58+iI2NhaZp2LlzZ4XtHDp0CHfccQfq1q2LyMhI3H333Th58qTn90eOHEF6erpXnKlTp8LhcEi8TCIiIiKiX3taAnnUcpe00fLMM89gwYIFePHFF7Fnzx4888wzePbZZzF//nzPOkVFRbj++uvxzDPPVLqNoqIi9OnTB5qmYf369fjqq6/gcDhw6623Qv/fH3jv3r3QdR2vvPIKfvrpJ8yZMwcLFy7Eo48+KvI6iYiIiIgocJc0Pezrr7/Gbbfdhv79+wMAmjRpgmXLlmHbtm2edYYNGwagrLekMl999RWOHDmC7777DpGRkQCAt956C3Xq1MH69euRmpqKtLQ0pKWleZ7TrFkz7Nu3DwsWLMDs2bOr6dUREREREf2GCrDXJJDB+zXMJe1p6datG9atW4f9+/cDAHbt2oUvv/wS/fr183kbdrsdmqbBarV6ltlsNhgMBnz55ZfnfF5eXh5iYmLOu938/HyvBxERERFRoDRdD/hR213SRsvf//53DB48GG3atIHZbEanTp0wYcIEDB061OdtXHvttQgLC8MjjzyC4uJiFBUV4W9/+xvcbjcyMzMrfc7Bgwcxf/58jBkz5pzbnTVrFqKiojyPpKQkv18fEREREZGHUoE/arlL2mh59913sWTJEixduhQ7duzAW2+9hdmzZ+Ott97yeRt169bFihUr8OGHHyI8PBxRUVHIzc3F1VdfDYOh4svLyMhAWloa7rrrLowaNeqc2508eTLy8vI8j+PHjwf0GomIiIiIAHAg/kW4pGNaJk2a5OltAYD27dvj6NGjmDVrFoYPH+7zdvr06YNDhw7h9OnTMJlMiI6ORnx8PJo1a+a13okTJ3DDDTegW7duePXVV8+7TavV6pVyRkRERER0UThPS8AuaaOluLi4Qm+I0Wj0VP3yV1xcHABg/fr1yM7OxoABAzy/y8jIwA033IDk5GQsXry40l4YomCnaTV0aiXllgsFdrETERFdbi7pN6Bbb70VTz31FBo1aoR27drhu+++w/PPP4/77rvPs05OTg6OHTuGEydOAAD27dsHAIiPj0d8fDwAYPHixWjbti3q1q2LzZs348EHH8RDDz2E1q1bAyhrsPTq1QuNGzfG7NmzcerUKc/2y7dBRERERFStOLlkwC5po2X+/Pl47LHH8Je//AXZ2dlITEzEmDFj8Pjjj3vW+eCDDzBy5EjPz+WpZFOnTsW0adMAlDVkJk+ejJycHDRp0gRTpkzBQw895HnO2rVrcfDgQRw8eBANGzb02gfFgU10kTRocrE0o1gsgyFELJYSLOXodrMSIBERXSJMDwuYpvit3Sf5+fmIiooCYAQEv6RS8BNttBgsYrHYaCEiosuPAuBGXl6eZ/6+YFD+PTJ349OIDLf5//zCUkT3/HvQvS5JNTRBvvqYjHWgadU/HsYl+MVKKZdYLCk1tSFhMkaIxTJINpAEx+rYxSIBul4oFkuy4UdERAEKtHwx+xgubcljIiIiIqJao5aUPG7SpAnmzp1bpdtko4WIiIiIqIZbuXIl+vTpg9jYWGiahp07d1ZYp7S0FGPHjkVsbCzCw8MxaNAgnDx58qJjN2nSBJqmQdM0GI1GJCYmIj09HWfPnvV5G0wP85OCTEtX08wiceRJ3SmQa48r5RSL5XTliMUym+LEYoVY68jFMseIxXK4i8Ri2Z15YrGcrtNisSRTIlgO+/IikartwfOQqooKsHpYFZyDRUVFuP7663H33Xefc4L1hx56CB9//DFWrFiBqKgojBs3DgMHDsRXX3110fGnT5+OUaNGwe12Y//+/Rg9ejQeeOAB/POf//Tp+Wy0EBERERFJuITVw4YNGwYAOHLkSKW/z8vLw6JFi7B06VLceOONAH6dVmTLli249tprK31ednY20tPT8dlnnyE+Ph4zZsyodL2IiAjPVCMNGjTA8OHDsWzZMp/3n40WP5mN4SJ3d+Tu3QMuV4lgNBkGwdLANmvDC69URUItcr0focZYsVhSPZjSjAarWCyTYOGEIsG/l8Mp2KtDlxUWn7i8SPWMlRXFlZuw2G8X2WjJz/cu1GS1WmG1Vs1nzfbt2+F0OpGamupZ1qZNGzRq1AibN28+Z6NlxIgROHHiBDZs2ACz2YwHHngA2dnZ542VkZGBDz/8EF27dvV5/zimhYiIiIhIQvnkkoE8ACQlJSEqKsrzmDVrVpXtWlZWFiwWC6Kjo72W169fH1lZWZU+Z//+/Vi9ejVee+01XHvttUhOTsaiRYtQUlLxhvgjjzyC8PBwhISEoGHDhtA0Dc8//7zP+8eeFj9FhzQRKc9a6Lz4QU++KhK8WxUi1FNQx9ZUJA4A1FNNxGLpmtzfqlgrEIsVocuNabEqud6PTMMRsVgnHXLXDJfgWB26vGiC5ctrYrn+mk3qPnmQjwlSetkjkOcBOH78uNc8LZX1sixZsgRjxozx/Lx69Wp0797d/5g+2LNnD0wmE5KTkz3L2rRpU6HhAwCTJk3CiBEjoJTC8ePH8eijj6J///744osvYDReOEOGjRYiIiIiostAZGTkBSeXHDBggFfaVYMGDXzadnx8PBwOB3Jzc70aHSdPnvSMRbkYcXFxaNGiBQCgZcuWmDt3LlJSUrBhwwavlLRzYaPFT3Z3LjSB8RJuXW4KvLrh7cRihRvricSJ0xNE4gBAHYSLxSoUPC+MgndMEzW5il6SBYfgbiIWymWTOzeyXMVisdyilRTl8uCV7hCLpQtWOJSsfCkZyyA4Pk2yIqUkt1gPbZD3tOgBVg/z4zkRERGIiPB/Murk5GSYzWasW7cOgwYNAgDs27cPx44dQ0pKSqXPadOmDVwuF7Zv344uXbp4npObm3vBeOW9K5WlklWGjRYiIiIiIgmXsHpYTk4Ojh07hhMnTgAoa1wAZT0s8fHxiIqKQnp6OiZOnIiYmBhERkZi/PjxSElJOecg/NatWyMtLQ1jxozBggULYDKZMGHCBISEhFRYt6CgAFlZWZ70sIcffhh169ZFt27dfNp/Nlr8ZoSG6u9pMRsq/rGri1vyLpxQTqtRCZ7amlwoSWYldxfTYpTr/ijV5e6mFxvkxn6YIHcn2GqOEotVbJc7hpLVqDTBa7zmlhv7oes1rxolIDwnjKCa+vcKagI9LefywQcfYOTIkZ6fBw8eDACYOnUqpk2bBgCYM2cODAYDBg0aBLvdjr59++Lll18+73YXL16MP/3pT+jZsyfq16+PGTNm4LHHHquw3uOPP47HH38cAFC3bl106dIFn376KWJjfatWqiklOGPSZSw/Px9RUVGoE95JpJyuZHqY2RgmFivalCQSp57bt/zNqhCp2cRiFSq588IlmCrTwCT3JViy0ZKBU2Kx8gRjnbLvE4tVbD8hFku00SKY2qS75Ypq1NSJEY2Cn5OSJBstcu+vspLHeXl5Fxz7Ian8e2Tuyr8jMsz/m0z5RXZED3w66F6XJPa0+MnpLhIZ0+JwyX3ISN5BKnBXXjKvqpkMcl8ISpX/eaOBchnk7pg2UDLjjwDAKfhl8awuNx4jzyDXkHCoQrFYktcMyS/3kjNk6brc36umNiRkx5nIXXtr6pgWqcpywT9Py6Xrabnc1cz+TiIiIiIiqjHY00JEREREJCLAeVogl5EQrNhoCVJGg0UslmweNzv3LoZBsHPULZhSYqihQ+usCBWLVYp8sViS5bCNBrkxYy63XFqO7HVX7u+lCVYm0bSaWYZY8twwSJaNFhoXpJQOt1tu/KffmB4WMDZaiIiIiIgksNESMDZa/GTUTCID8V1KrqJHQemxGhfLFSZ3l8VmlKt8FQ7fygJWBR1yEz5KDo7PMBwQi2USrCxnFZzkNN/9i1gsp+usWKzAUjYCI9nrLDqIXCwSoAl+iTMZ5ao1mYxyxV1kyby/FPRgHoZ/Sedpudyx0UJEREREJIE9LQFjo8VPDnexyB0yJTjgyig4yZlLaL6A/FK5O8G6Ve4upuQ7dq92Ri6Y4ASdUhOcAkCpnicWq8glV17Z7swVi1VTSUxS7IklWAJesrdKkuS4IMkB105XrlgsuR4/frmvqdhoISIiIiKSwJ6WgLHR4qdIWwMYBO64ONxF1R6jXG7xz2KxzKY6InEk88XtLrmqTZKvyyRYmUeygo1Vkxv7IdmDJHkMZcdjCGanC8bSBCtESlKCowkMglkCkpxOuV7umjrxaFDjmJaAsdFCRERERCRBqbJHIM+r5dho8VO01gBGrfrvkBWY5PLTz6p9YrHceqlIHLNR7m66W3eIxSoVHEsgUSWvXIhZrlJZI1whFkvSMaNcxbxSk2BvlSC3Lle1Udfl/l41d+4UuTvPLskqdprc38sgWOEQQmNalFKiPX5+Y3pYwNhoISIiIiKSwEZLwDg9ORERERERBTX2tPgpT2XBIHDYCp0nqz1GTeYQHByvlFMsluSkY5EhDcViuQVTZQ5p34rFMhnkUmXsbrlzXjIlUjKWZMqWZFlb0QkfRYPJfYWRLJwgWL8DRkOYWCynUybtPeiLC6gAB+LX0HLi/mCjhYiIiIhIAtPDAsZGi5/qCA3EN1rkypcWlhwRi+V2F4rEkZvESpbRHCsWS3ISxlCT3OuKRD2xWDYVKhYrz3xaLJbTLVNQAwBc7mKxWJIlj4P+bnCAJCdGNgiW3rYIXqMkj6HJIDcQX1cyvaZK6XC7c0RiBURHgI2WKt+Tyw4bLUREREREEtjTEjA2Wvx0Rj8iMrmkW3CchGSJSk2TuZOpC07CJFl20yiYV13X2EIsVmutiVgso2A50UxXgVgsk5LrnTUb5e7OOgTvBLs1mZ5gAGLlX6VJTviolNwYJMkeP01wrE6JS66HFkJliFWQz2eidAUVQAMkkOfUNKweRkREREREQY09LX4qcZ0VnXRPhlwet9tdJBZLSohVrspWE1uKWKwIPUosVqEm17PYwCZ3J/jq0Dpisc7a5f5eWwX/XgZNrgepWLAns8R+QiyW7Bi/mtnL7XTJjZHQBMfqmE1yE/uajDJj/JTSUWKXq6boN6UCm90+yHuQJLDRQkREREQkgWNaAsZGi59ambuLVA/LM5yp9hjljgrm3QMyvVRKLxGJAwANwpLFYiXo8WKxmkfIVb6Ks8qNM7ELXvjPlMrFEhyqgyR3E7FYTqPcWIISTe5uuuQdbkmSvTqS81ZJzhck+fllEOxd1IXODckeuICw0RIwNlqIiIiIiCSw0RIwNlr8pEGDQWC+WoOSy2l1uuQq5khUXgMAW0gTkTgA0EFrKxbryji5u2KSCp1yF+NQk1yXRGKoXKysEsEqdoI59yGQG6sTYUkQi1VqyBWLlV98UCyWLlr5Uu4rjORYVk2w90OSVAW2oO9poYCx0UJEREREJIE9LQFjo4WIiIiISIBSAc7TwuphbLT4qw7CYUb1T8ao6XLpFxZTpFgsKeGWemKxXDX07ke0Re51mQVnjCoQTEVzCGYp2N2Cfy/BKb5cguWVdcFyvZJMJrnS2269VCyW7pYrIqOU3NQAmlHuq1mY4GelVOqgUm7kFskV1fBbLelp0TQNq1atwu23315l2+TkkkREREREEsobLYE8LoLT6cQjjzyC9u3bIywsDImJibj33ntx4oT3nFE5OTkYOnQoIiMjER0djfT0dBQWXvzYZ03TPA+TyYRGjRph4sSJsNvtPm+DPS1+shqMMAsMyLO45f40BoNcLKmykW7BspsxNrnJ70oF76YfEqyEHStY8jjCLHcM8+U6CVDikuslyFNyJVmdSq7kscMlNyGdXbDUvK7kyvVKkuxBCrHWFYslOmmmYHllt+77l9OLEfQD8S9RT0txcTF27NiBxx57DB07dsTZs2fx4IMPYsCAAfj222896w0dOhSZmZlYu3YtnE4nRo4cidGjR2Pp0qUXFR8AFi9ejLS0NDidTuzatQsjR45EWFgYnnzySZ+ez0YLEREREVENFhUVhbVr13ote/HFF3HNNdfg2LFjaNSoEfbs2YM1a9bgm2++QefOnQEA8+fPx80334zZs2cjMTGx0m0fOHAA6enp2LZtG5o1a4Z58+ZVul50dDTi48vmm0tKSsJtt92GHTt2+Pwa2GjxU6jRCIuh+ntaSnW5kocut1wOcpjQ3apIo9wkjDGCvQR1bWKhECmXwo0jhXJ3xkwGub9XqFyVVISY5LJ9DS65Yyg5zkQTLOUsNdEeAOjuIrFYBmOYWCyTUW4CXEmS52GJ/ZRYLJc7VyRO0A9YV6rsEcjzAOTne/cIW61WWK2BjbXOy8uDpmmIjo4GAGzevBnR0dGeBgsApKamwmAwYOvWrbjjjjsqbEPXdQwcOBD169fH1q1bkZeXhwkTJlww9v79+7F+/XqMGDHC5/0NmjEtTz/9NDRN83qhpaWlGDt2LGJjYxEeHo5Bgwbh5MmTXs9bt24dunXrhoiICMTHx+ORRx6By+X9YaCUwuzZs9GqVStYrVY0aNAATz31lMTLIiIiIiICACg98AdQ1kMRFRXlecyaNSug/SgtLcUjjzyCIUOGIDKyrCBTVlYW6tXzLs5gMpkQExODrKysSrfz2WefYe/evXj77bfRsWNH9OjRAzNnzqx03SFDhiA8PBw2mw2tW7dGu3btMHnyZJ/3OSh6Wr755hu88sor6NChg9fyhx56CB9//DFWrFiBqKgojBs3DgMHDsRXX30FANi1axduvvlmTJkyBW+//TYyMjJw//33w+12Y/bs2Z7tPPjgg/j0008xe/ZstG/fHjk5OcjJCayyRInbDZdAFZFiwRxks+Ddqrrm1iJx4t2Vd2FWB6tR7q6zW7B6SKlb7nXVD5GLVeKSO4a/FMndTS9wyQ2gsWlyPcHhiBWLddq1TyyW1ER7gOyEj0bJynKCx9DplpuEWbKip9Eo131vMsp8Liulo9RxTCRWQC5yTMvx48c9jQwAlfayLFmyBGPGjPH8vHr1anTv3t3zs9PpxN133w2lFBYsWOD/vvzGnj17kJSU5JU6lpKSUum6c+bMQWpqKtxuNw4ePIiJEydi2LBhWL58uU+xLnmjpbCwEEOHDsVrr72GGTNmeJbn5eVh0aJFWLp0KW688UYAZQN42rZtiy1btuDaa6/FO++8gw4dOuDxxx8HALRo0QLPPvss7r77bkydOhURERHYs2cPFixYgB9//BGtW5d9YW7atKn8CyUiIiKi2u0iGy2RkZFejZbKDBgwAF27dvX83KBBA8+/yxssR48exfr16722FR8fj+zsbK9tuVwu5OTkeMaiXIz4+Hi0aNECANC6dWsUFBRgyJAhmDFjhmf5+VzyRsvYsWPRv39/pKamejVatm/fDqfTidTUVM+yNm3aoFGjRti8eTOuvfZa2O122GzedwlCQkJQWlqK7du3o1evXvjwww/RrFkzfPTRR0hLS4NSCqmpqXj22WcRExNzzv2y2+1eZdjKcwhPu4tg0qv/7ukZg1yeqSSzqv45bgAgyhAiEgcAmofLDf5oES5X6aXAJXd5+Dxb5rwAgCLBnpYYm9wxDHfLDaDJd8id8zluuTESkdYGF16pihQZBM/5ErnrhsEgOR5TrqfFWENflySpql7BXj3st6le/j7PVxEREYiIiKiwvLzBcuDAAWzYsAGxsd492SkpKcjNzcX27duRnJwMAFi/fj10XfdqBP1W27Ztcfz4cWRmZiIhIQEAsGXLFp/202gs+9wq8fEadUnHtCxfvhw7duyoNB8vKysLFovFMzioXP369T15dX379sXXX3+NZcuWwe12IyMjA9OnTwcAZGZmAgB+/vlnHD16FCtWrMDbb7+NN998E9u3b8edd9553n2bNWuWV85gUlJSFbxiIiIiIiJZTqcTd955J7799lssWbIEbrcbWVlZyMrKgsNRNiShbdu2SEtLw6hRo7Bt2zZ89dVXGDduHAYPHnzOymGpqalo1aoVhg8fjl27dmHTpk2YMmVKpevm5uYiKysLJ06cwMaNGzF9+nS0atUKbdu29ek1XLJGy/Hjx/Hggw9iyZIlFXpLfNWnTx8899xzuP/++2G1WtGqVSvcfPPNAACDoeyl6boOu92Ot99+G927d0evXr2waNEibNiwAfv2nTt/efLkycjLy/M8jh8/HtA+EhEREREBKKsCFsjEkhdZFS0jIwMffPABfvnlF1x11VVISEjwPL7++mvPekuWLEGbNm3Qu3dv3Hzzzbj++uvx6quvnnO7BoMBq1atQklJCa655hr86U9/Omexq5EjRyIhIQENGzbEkCFD0K5dO6xevRomk29ZCZcsPWz79u3Izs7G1Vdf7VnmdrvxxRdf4MUXX8Qnn3wCh8OB3Nxcr96WkydPeuXVTZw4EQ899BAyMzNRp04dHDlyBJMnT0azZs0AAAkJCTCZTGjVqpXnOeUtumPHjnnGufzeuUrIFRmKYNSqf1CjW5MbwGsVHPRXqskMZjwr2L2ebY8Wi9UwRC4FKNQolwLUKkIuZetYsdy9GslUNJtgQYhoi9xHR3HeudN4qzyWQa5H3WCRm5TW5ZacQFCuiIxkyWPJgjUGg9y5ITXhIwA4XXLFDIKa/r9HIM+7CE2aNPGpHHRMTIzfE0m2atUKmzZt8lr2+1hVUYr6kjVaevfujR9++MFr2ciRI9GmTRs88sgjSEpKgtlsxrp16zBo0CAAwL59+3Ds2LEKVQk0TfN0Wy1btgxJSUmextB1110Hl8uFQ4cOoXnz5gDKakMDQOPGjav1NRIRERERlVO6ggpgIH4gz6lpLlmjJSIiAldeeaXXsrCwMMTGxnqWp6enY+LEiYiJiUFkZCTGjx+PlJQUXHvttZ7nPPfcc0hLS4PBYMDKlSvx9NNP49133/UM7klNTcXVV1+N++67D3PnzoWu6xg7dixuuukmr94XX8Xo0TBpAgMoBRP3Cu2V196uDnXMMg3FYk2upyXXES0Wa2euXHnKQsEJBKMtchfjula5WEZN7hhmFssNPi10ysUqFizXG4qKA1erS6F2RiyW5ESWDmf2hVeqIkbBiSwluZ1yEz7rgj0tJqPc+yuoXaKelpogaCaXrMycOXNwyy23YNCgQejRowfi4+OxcuVKr3XKa0937twZH3/8Mf7zn//g9ttv9/zeYDDgww8/RFxcHHr06IH+/fujbdu2PteEJiIiIiKqEuoiHrWcpqoiyawWyM/PR1RUFFKjHoJZoKflLORyP3eWfCAWSxcoFw0ATSN6iMQBgOF1fat6URXaR8ndFXMruV6Cb3Pkyr/mO+UuedEWuWNo1ORe12m5G8H4Ib9ALFa2Qa7X2anJvZdPO/aLxcovOSIWyyhY2l5y/IzNHCUWq9SZJxbLoMkk9yjlRlHpIeTl5V1wPhNJ5d8jTz30B0Ra/S+hnW93oO6cd4LudUm65PO0EBERERHVBhzTEjg2WvxUoEphEuijO2s8Xe0xyrndcrdNbZbYC69UBerocSJxAECwaBMculxGZ5RZLg8+JVbuHDxll6vMs7dAsFKZ3NAP0dTqEKG7swBghlyPnxty7y+DJnfOm01yvQQmg9wYvzhbS7FYpXq+WCxlkns3m4R6xnTlQpFgb7DfOKYlYGy0EBEREREJULp/s9v/9nm1HRstforQbCJjWoqVXJUNycoyIWaZORdClVyuc4RJrstWcpzJ/gK5u5gWQ83s9q7jf9pywDTInRsnS+Q+PSXH951RR8ViuQSrNpkFx36ECvWmA7LjMSR7P1xK7txQgt+E3UKvSym5OcYCwp6WgLHRQkREREQkgD0tgWOjxU9uKGgCY1p0wSa12RQuFqvUlSsSJ88sd1csxiLXI9EyQq6SUrxNLg9+8xm5c7DAKdcjYRbsQbIaxUKJjuMyK7nzsMh9SixWifOsWCyLSbDnXpcbXGV3ys11I/eJAhgNcmOrJHslHA6Z95dk7xHJYqOFiIiIiEiCQmCpXjUzi9ovbLQQEREREQlQquwRyPNqOzZa/BRpsMBsEBhd65Yr2XtUsESlW2jQf4lWJBIHAHblyqWvhBrDxGLZjHJpAzbB1KbDhXJX/nyH3DF0C36gFbnkinfkGnLFYtm0aLFYLt0hFssk8Zn1Pw7B9DCjQe56KDUxIgA43XKfXxrkyrJLTdCplA6n3CXKbxzTEjg2WoiIiIiIJLB6WMDYaPFTqXLDrVf/3VOHkrtbZTFFisUKN9QViWOEXO9HieAt7j0FcndMcx1yo63znXLHMM4q97rirHKX2EKX4HmYJ9dL4NLkyr+aNLmiGlGWBmKx8p2ZYrGirY3EYplsNXMy0LOlh8VimQQH/UtNeaArF0rsR0RiBYI9LYGT6xckIiIiIiIKAHta/JSJ0zCi+u922w0l1R7DQ7D1bha6kxmv1xOJAwC3JhaLxWoaLTeZ2ukimfxjAPhvZrRYrGLBHolQk1yvTrRFLlaCTa5H4meHXK9zbukxsVhmo9wxdAtOZCnJrMldowyC2Q91bE3FYpW45Upva5AZvCgxLcXF4ED8wLHRQkREREQkQdfKHoE8r5Zjo8VPdpTAiOof01IiOJWVLngHKc+dIRKnGPEicQDgjENu4rZ6DrkxLSFmuRzuLnVKxWLtLpDL4d6fJ9eNebpU7u9VKFghKlSTG3NXx9pELFaxW25ixEir3PgZN+TOjVi9vlisEk0u+6FUsPqlMshVOLTrhSJxdKEqpYHimJbAsdFCRERERCRAKQ1K+d9rEshzaho2WvyUqBJhQvXfqc2BXP35XP2oWKwSd45InAzbAZE4ALAp+xqxWIeLYsVi1bfK3daJMMvd7atjlntdYWa5WieHi+QqepVALhYEP6ctgmMkhNL7AQDhkLtuSGYJnNFOisVSgoM/7UqmRwIAbAbBedqEeuF0JfjmCgB7WgLH6mFERERERBTU/G60NGnSBNOnT8exY3JVVoiIiIiILndK/drb4teD1cP8Tw+bMGEC3nzzTUyfPh033HAD0tPTcccdd8BqlRvceilZNCPMWvV3PZqV3OSIBk0ulq7LDJDLd50QiQMARYIldEvdcrkyv5TIdcQePSX3ukIEyxAXCk6aGWaUex+f1eVKb5+F3Hu5wCEXy+GWG2xdYpYraxtirCMWS1Ny1yhdsMBAsUuuSEOJJlnyWObvFfQD8TmmJWB+n0ETJkzAzp07sW3bNrRt2xbjx49HQkICxo0bhx07dlTHPhIRERERXf50DSqAB0seX8RA/KuvvhpXX301/u///g8vv/wyHnnkESxYsADt27fHAw88gJEjR0LTat4Bzla5MpNLanIlYGuiUqfcnWDJO/cxFsFeHcELpNkgF6tEsGfsjF3w7qxQLyYAhCq5AetWQ7hYLN1UVyyWZA+3ySCXCeEQKmsLAE5NbmJfqyZ3HlqNcmW+8+2/iMWymmRel67kCrsEgpNLBi7gvjqn04l3330XAwYMwF//+ld07twZr7/+OgYNGoRHH30UQ4cOrcr9JCIiIiK6rJWnhwXyuJxomob333+/Srfpd0/Ljh07sHjxYixbtgwGgwH33nsv5syZgzZt2njWueOOO9ClS5cq3dFgkWc4A6PAHTKDYD1MgyZX+dpmlimvKJkv/kXhEbFYRq2JWKx6NrFQqB8iF8stmAdvNshNBrq5KFsslkuT69UxK7leArnpA4EQY7RYLF2wXK9kz5jk2EUH5D5TJM+NGFtzsViFriyhSMHd03IpTZs2DcuXL8fx48dhsViQnJyMp556Cl27dvWsk5OTg/Hjx+PDDz+EwWDAoEGDMG/ePISHX9x7+7fZV0ajEYmJibjzzjsxa9Ysn8fF+/1ttUuXLrjpppuwYMEC3H777TCbK36Bb9q0KQYPHuzvpomIiIiIaizPGJUAnnexWrVqhRdffBHNmjVDSUkJ5syZgz59+uDgwYOoW7csPXbo0KHIzMzE2rVr4XQ6MXLkSIwePRpLly696PiLFy9GWloanE4ndu3ahZEjRyIsLAxPPvmkT8/3u9Hy888/o3HjxuddJywsDIsXL/Z305eFzsY2sAjkBxe55O4UbDXI3aEtcsjEshgFJ+cUrG60tsAuFishr4FYrK6xEWKxmoXLvbdirXK9OkatoVisY4ITWea65fo/3Ea5HqQi/bRYLEmhkKseZjDJjQvKc8mN/Sh0yk2aaREaZwIASmh2RKk4gbqUY1ruuecer5+ff/55LFq0CN9//z169+6NPXv2YM2aNfjmm2/QuXNnAMD8+fNx8803Y/bs2UhMTKx0uwcOHEB6ejq2bduGZs2aYd68eZWuFx0djfj4eABAUlISbrvtNr+KePn9iZqdnY2tW7dWWL5161Z8++23/m6OiIiIiKhWuNgxLfn5+V4Puz2wm5kOhwOvvvoqoqKi0LFjRwDA5s2bER0d7WmwAEBqaioMBkOl3/0BQNd1DBw4EBaLBVu3bsXChQvxyCOPXDD+/v37sX79eq/UtAvxu6dl7NixePjhhysEycjIwDPPPHPOF1VT1LFqsBiq/+6pZOG1UKfcnbEs+2aROHaD3CCJREtHsVjxeoJYLEmS85lklcr1fjgFK7CFmOSOYYNQubE6eYK9i3ZVIBbLpMmN1dEEx0gWQm6OEcmKXhGm+mKxivVcsViSY5CkBPs8LbquQQ/gs6H8OUlJSV7Lp06dimnTpvm8nY8++giDBw9GcXExEhISsHbtWsTFxQEAsrKyUK9ePa/1TSYTYmJikJVV+Zikzz77DHv37sUnn3zi6YmZOXMm+vXrV2HdIUOGwGg0wuVywW6345ZbbsHkyZN93ne/P713796Nq6++usLyTp06Yffu3f5ujoiIiIioVihPDwvkAQDHjx9HXl6e51HZl/4lS5YgPDzc89i0aZPndzfccAN27tyJr7/+Gmlpabj77ruRnR146v6ePXuQlJTklTqWkpJS6bpz5szBzp07sWvXLnz00UfYv38/hg0b5nMsv3tarFYrTp48iWbNmnktz8zMhMkkV4XqktFke0Ek2JVcXX0lVNXDKFgRLVaXm9uhZbjcWB3JeZYk31NZgiWiCp1y42eculxPi+TryjTKjSUoEpyJXKIKZTnJXh1JJUpuNvcIrd6FV6oiBoPcuSF5DJ1ume8aKsjnablYkZGRiIw8/1ikAQMGeGVENWjw6xjVsLAwtGjRAi1atMC1116Lli1bYtGiRZg8eTLi4+MrNGBcLhdycnI8Y1EuRnx8PFq0aAEAaN26NQoKCjBkyBDMmDHDs/x8/O5p6dOnDyZPnoy8vF8n78vNzcWjjz6Km266yd/NERERERHVChLztERERHgaJi1atEBIyLlT5nVd94yLSUlJQW5uLrZv3+75/fr166Hr+jnHnrRt2xbHjx9HZmamZ9mWLVt82k+jsSx1taTEt7uJft+Onj17Nnr06IHGjRujU6dOAICdO3eifv36+Oc//+nv5oiIiIiIaoVAJ4q82Mkli4qK8NRTT2HAgAFISEjA6dOn8dJLLyEjIwN33XUXgLIGSFpaGkaNGoWFCxfC6XRi3LhxGDx48Dkrh6WmpqJVq1YYPnw4nnvuOeTn52PKlCmVrpubm4usrCzouo4DBw5g+vTpaNWqFdq2bevTa/C70dKgQQN8//33WLJkCXbt2oWQkBCMHDkSQ4YMqXTOlprGbCh7VDejYL5MiVuuezjM1kQkjksvFYkDAD+4PhOLZSzsKxarQ5RcGeJGcllvIu/fcseK5IIdLZAbfCpRjKRcS73ZhVeqIjsNcmWIJVO2QiAzqS8AnHb/LBZL0+QKDNi1YrFYDsGUbZcuV+jCapQprxz0A/GVBj2ABkggz/kto9GIvXv34q233sLp06cRGxuLLl26YNOmTWjXrp1nvSVLlmDcuHHo3bu3Z3LJF1544ZzbNRgMWLVqFdLT03HNNdegSZMmeOGFF5CWllZh3ZEjRwIoSz+Pj49Hjx49MHPmTJ+HlwSU+B8WFobRo0cH8lQiIiIiolrpUk0uabPZsHLlyguuFxMT4/dEkq1atfIa7A8A6ncTy/z+50AE1Gg5cOAANmzYgOzsbOi69yQ+jz/++EXvVDBz6gEMBAqAgtyg2liT3J3MEmPehVeqAg5d7k6VQXBA7V4lV1Jc5XURixVjjRaL1TBEbpBmW7l529AgVK74xBG5txfO2uV6dRLtrcViZeKgWKwiCA5YN178YF1f6XDWyFghBrlpCMxaqFisIl2m0IUOTi5ZU/n9Kffaa6/hz3/+M+Li4hAfH+9VYUjTtBrfaCEiIiIiIll+N1pmzJiBp556yqfZLmuiAoeC3VD9zd2zdrmcTGNgHW4BKXbL3GkJMcrdqYpG5YPTqoPS5O4g5UKmVwwANp+Sm6wwKdQmFqtZhNzYNMmxOja5oQSidxfNSq7XNEqT65FwanLjFqL0WLFYJYLjTNyCPS1KyV3nJV9XmEHm3NCVE3Kj0/ynI8AxLahh820EwO9vq2fPnvVUGSAiIiIiIt9cquphNYHfjZa77roLn376Ke6///7q2B/6H8nqPGZdroqNzSCT5B+DhiJxACBWjxGLFW6Q65Eo1uXuwOVD7o7pqVK5bgLJCQQTQuWuGUbBz07JiUdDIPf+cqpwsVgFgnfTzxoCn1nbXwbIvZct6tzzXFQ1yd6PUpUvFsuiyRxDqUmsA6UCrB7GRksAjZYWLVrgsccew5YtW9C+ffsKZY4feOCBKts5IiIiIqKagj0tgfO70fLqq68iPDwcGzduxMaNG71+p2lajW+05DvdMGvVP96kUPAut2S+c5ghTiTOKf2wSBwAcBvkxh/VNTUWi9U6XO6uc7hJbqKWQsES/haD3IeMLjn2Q3D8TMMwubvpbiU33slul7vGG5XMdRcACgxyY+GKBcfdSQ4nEB1nosmNQTIJjRmTPH6B0P/3COR5tZ3fjZbDh+W+DBIREREREQVcNsrhcODw4cNo3ry5zzNZ1gS57lKYtOq/pWkWnOk3VMnNfB6iy9zJtBkEp1gXdNgpU30NAMJK64rFalBH7jZmx2iHWCybQe7eWIFL7ppxolRurI5k9bAcwTlh7A658zBcyc3FEabXF4uVKzjHSIEmN9eNWcmNM62ny1WxMwtVKnUpO/aLRAoM08MC5/cVuri4GOnp6QgNDUW7du1w7NgxAMD48ePx9NNPV/kOEhERERHVBLoC9P8Nxvfvcan3/NLzu9EyefJk7Nq1C59//jlstl/vmqempuKdd96p0p0jIiIiIqopyntaAnnUdn731b3//vt45513cO2110L7TS3Kdu3a4dChQ35ta9asWVi5ciX27t2LkJAQdOvWDc888wxat27tWae0tBR//etfsXz5ctjtdvTt2xcvv/wy6tev2AV95swZdOzYERkZGTh79iyio6M9v1uyZAmeffZZHDhwAFFRUejXrx+ee+45xMb6NwjNqplg0qq/i9NmkEv1KHbLdUWfNpwUiaMLTsLoUHLlepUmV8rx+xK5Y2jQ5FJKos1y6aytIwvFYsVY5W7DRZjkrhknSuUKQkRa5NLDrtbqicXKKZWrPpHjlCvsEilYNjrMLVfyuFArEouVbygQi+WCzHnoVnKpl4Eo62kJ7Hm1nd9X6FOnTqFevYoX26KiIq9GjC82btyIsWPHYsuWLVi7di2cTif69OmDoqJf37APPfQQPvzwQ6xYsQIbN27EiRMnMHDgwEq3l56ejg4dOlRY/tVXX+Hee+9Feno6fvrpJ6xYsQLbtm3DqFGj/NpfIiIiIqJAsaclcH7fcuzcuTM+/vhjjB8/HgA8DZXXX38dKSkpfm1rzZo1Xj+/+eabqFevHrZv344ePXogLy8PixYtwtKlS3HjjTcCABYvXoy2bdtiy5YtuPbaaz3PXbBgAXJzc/H4449j9erVXtvdvHkzmjRp4inH3LRpU4wZMwbPPPOMfy8egEkzwKxV/924Yl3uzphdsOSxS5MpRegU7P2IgNwdU0m5gpPEHSiSu4t5oliul6BjTJRYrGbhcr1wYUa5XriMErnej7N2uVuZdrdgLF3u75Uv2EsgKURwcHyJ4DEshVxvcK7rqEgcpYJ7ckkKnN+NlpkzZ6Jfv37YvXs3XC4X5s2bh927d+Prr7+uMG+Lv/Lyymqux8SUzTC+fft2OJ1OpKametZp06YNGjVqhM2bN3saLbt378b06dOxdetW/PzzzxW2m5KSgkcffRT//e9/0a9fP2RnZ+O9997DzTfffM59sdvtsNt//TKfny83aywRERER1Tw6NOgBTPwTyHNqGr8bLddffz127tyJp59+Gu3bt8enn36Kq6++Gps3b0b79u0D3hFd1zFhwgRcd911uPLKKwEAWVlZsFgsXmNTAKB+/frIysoCUNa4GDJkCJ577jk0atSo0kbLddddhyVLluAPf/gDSktL4XK5cOutt+Kll1465/7MmjULTzzxRIXlNs0Is8B4E13wLlyxJpfTKlXKsUjJlQa2QC7nXvM/ozNgDq1ELFaW8YRYrDq63ER7O3Pk3seSPUjhguOC8uxyvQQ65P5eZsGJRx263J1nydLAFsj10BqV3DjTKD1GLFaS1lAsVrGhqUgcl7JjM74XiRUIpQIr5S5Z/j1YBfTJ07x5c7z22mtVuiNjx47Fjz/+iC+//NKv502ePBlt27bFH//4x3Ous3v3bjz44IN4/PHH0bdvX2RmZmLSpEm4//77sWjRonNud+LEiZ6f8/PzkZSU5Ne+ERERERGVKy9hHMjzaju/Gy3l87KcS6NGjfzeiXHjxuGjjz7CF198gYYNf231x8fHw+FwIDc316u35eTJk4iPL5sQaf369fjhhx/w3nvvAQDU/5qicXFxmDJlCp544gnMmjUL1113HSZNmgQA6NChA8LCwtC9e3fMmDEDCQkJFfbJarXCaq145/KMuwQmgfzgAsHeD6vg3Sqp6iGhhjoicQDArMtNtCc5SVxyiFxFrzCT3MU4q0TurvMZwQkES1xyPRKlgj3BNqPcuSE49EP0GDqV3AuLgNy11yCYLlMoWGXLouR67wuVXO+95N8rmKkA08MUj5//jZYmTZqct0qY2+37FwKlFMaPH49Vq1bh888/R9Om3l2HycnJMJvNWLduHQYNGgQA2LdvH44dO+YZ9P/vf/8bJSW/prF88803uO+++7Bp0yY0b94cQNmEmCaT90s1Go2efSAiIiIiqm5MDwuc342W7777zutnp9OJ7777Ds8//zyeeuopv7Y1duxYLF26FP/5z38QERHhGacSFRWFkJAQREVFIT09HRMnTkRMTAwiIyMxfvx4pKSkeAbhlzdMyp0+fRoA0LZtW0/vzK233opRo0ZhwYIFnvSwCRMm4JprrkFiYqJf+1yilcIoMAdIjpZZ7THKSY6TCBO6Cyc1dgYAsrTDYrFCNbm7mPWczcRiJYTKjZFoHC6Xm+7Q5Xoxj8kVAUKJYC9BqGAv3FnB8TPZdsExY0LzYwFArO7f3GeXC8kqm5LjTB2aXG+wVdkuvFIVcCO452mhwPn9TaFjx44VlnXu3BmJiYl47rnnzjmHSmUWLFgAAOjVq5fX8sWLF2PEiBEAgDlz5sBgMGDQoEFek0v6Y8SIESgoKMCLL76Iv/71r4iOjsaNN94YUMljIiIiIqJAcExL4Krs9mbr1q3xzTff+PUcX1KzbDYbXnrppfNW+vqtXr16Vbrd8ePHe+aWISIiIiKSpqAFND6FY1oCaLT8fr4SpRQyMzMxbdo0tGzZssp2LFjVN0TBrFV/6lGsHlHtMcqd0E6JxSqATClisybTDQ0AmmApzBxdZnIuAPjJKZdiV3g6XixWuzpyryvaIpdG1ThcLBTO2AUnfHTUzETuIpSKxTJW3f3JC8o15InFykOWWCyHkkvnc+pykyOHGOVSjnOd5y/kVFWCfXJJXZU9Anlebef3lSw6OrrCQHylFJKSkrB8+fIq2zEiIiIiopqE6WGB87vRsmHDBq+fDQYD6tatixYtWlSo0FUTleguOLXqv7NeKHhXp0CTm4jRBpnbwQ7IHT+p4gIAEG6QG+RqFiy7eUYVicXakCN3JzjRGC0WK9oid/3VBcvYZJTKvZeLldxgaxPkemhLNbn3l13JDSJ3C5XQBwCLJjiRpVGujP5Z+xGxWE63zHmoBEt8kyy/P+V69uxZHftBRERERFSjcUxL4PxutHzwwQc+rztgwAB/Nx/0ipVdJDvYCrm73JJKIVOX1Qy5MS319HpisXTI3eE+aTghFsuEGLFYZiV3F/OUS+4O909Krky6U8mNx0hQTcRi1dTJ78L1KLFYxdpZsVh2Xa7OdwPDFWKxrIIl+5VFbvyH1LggXblgd/wiEisQHNMSOL+/f99+++3QNK1Cha7fL9M0za+JJomIiIiIarLa0tOiaRpWrVqF22+/vcq26Xej5dNPP8UjjzyCmTNnemal37x5M/7xj39g5syZuOmmm6ps54JRqGaFSaB6mEM5qz1GuWJdbkyL2RAqEsclmJvuRIJYrLqmMLFYdZTc5JIZSu7urFOTe29JTkhnVHJjWkJRVyyWpHxD/oVXqiLhghUibUpuPEaM1lAsVr5BrvJlLuQm6LRpcqUAW+hXicUq1WR6aF1w4DS2isQKRLD0tNx///145ZVXMGfOHEyYMMGzPCcnB+PHj8eHH37omSdx3rx5CA+/uPPyt0W8jEYjEhMTceedd2LWrFmwWn37Xu33p9yECROwcOFCXH/99Z5lffv2RWhoKEaPHo09e/b4u0kiIiIiohovGKqHrVq1Clu2bEFiYmKF3w0dOhSZmZlYu3YtnE4nRo4cidGjR2Pp0qUXHXfx4sVIS0uD0+nErl27MHLkSISFheHJJ5/06fl+N1oOHTqE6OjoCsujoqJw5MgRfzd32clFAYyo/runpQa5Ou3hmtyYDLNQrm6uyhCJAwAZhsNisULdbcRihRnl7tw3MMhVYLMZ5eYYcQomIf/iluutKtHkKnq5NbkKUSGCPRJ5Brm/VzHkKuZZIdObDkAk66FcoZ4tFstokBt3Z9XkrvNuofGEGquHnVdGRgbGjx+PTz75BP379/f63Z49e7BmzRp888036Ny5MwBg/vz5uPnmmzF79uxKGzkAcODAAaSnp2Pbtm1o1qwZ5s2bV+l60dHRiI8vm5ctKSkJt912G3bs2OHzvvv96d2lSxdMnDgRJ0/+2lV68uRJTJo0Cddcc42/myMiIiIiqhXURTyAsknef/uw232/ka7rOoYNG4ZJkyahXbt2FX6/efNmREdHexosAJCamgqDwYCtWytPudN1HQMHDoTFYsHWrVuxcOFCPPLIIxfcl/3792P9+vXo2rWrz/vvdxP7jTfewB133IFGjRohKSkJAHD8+HG0bNkS77//vr+bu+zYlBUmVP/dnTqIrPYY5XJUrlisbO2ISByTJlc9THJMULZBLpbRLdnTIlc9rHGE3PwYotVe8uV6q9wqWi6WYMW8Pdp+sVhFgteNaK3yu6PVwSHYCxei5D4nW2stxWIZBCcRzBcc/3lGaAySWzlE4gRKIbD0sPKB+OXfvctNnToV06ZN82kbzzzzDEwmEx544IFKf5+VlYV69byzb0wmE2JiYpCVlVXpcz777DPs3bsXn3zyiacnZubMmejXr1+FdYcMGQKj0QiXywW73Y5bbrkFkydP9mnfgQAaLS1atMD333+PtWvXYu/evQCAtm3bIjU11WuQDRERERER/Ur/3yOQ5wFlHQWRkb822CsbxL5kyRKMGTPG8/Pq1asRGhqKefPmYceOHVX6fX3Pnj1ISkrySh0rL9T1e3PmzEFqaircbjcOHjyIiRMnYtiwYVi+fLlPsQK6lappGvr06YMePXrAarWysUJEREREdAFKaVCB9LT87zmRkZFejZbKDBgwwCvtqkGDBnjllVeQnZ2NRo0aeZa73W789a9/xdy5c3HkyBHEx8cjO9t7/JbL5UJOTo5nLMrFiI+PR4sWLQAArVu3RkFBAYYMGYIZM2Z4lp+P340WXdfx1FNPYeHChTh58iT279+PZs2a4bHHHkOTJk2Qnp7u/6u4jOhQIhP8OZXcHDcug9xAV6tQKUeL4IDaAsGym3mQiyVZdjNTlxscj9xosVARJrkUu0bhcrEschl2OF0qlx6mlbYSi5UnmJbjlvw8gVwspckNuM6CXOEEFdB9+MCcNciVcj5Z+qNIHBXkA/EvtqfFFxEREYiI8C6rPmzYMKSmpnot69u3L4YNG4aRI0cCKOshyc3Nxfbt25GcnAwAWL9+PXRdP+fYk7Zt2+L48ePIzMxEQkLZFBBbtmzxaT+NxrIPk5IS39JK/f6mMGPGDLz55pt49tlnYbH8Omv7lVdeiddff93fzRERERERUTWKjY3FlVde6fUwm82Ij49H69atAZQ1QNLS0jBq1Chs27YNX331FcaNG4fBgwefs3JYamoqWrVqheHDh2PXrl3YtGkTpkyZUum6ubm5yMrKwokTJ7Bx40ZMnz4drVq1Qtu2bX16DX7fmnv77bfx6quvonfv3rj//vs9yzt27OgZ41KTmWCAyf+2nt8k77SUakVisXShO35WyPW0mCE3mZpVyRUYkBSu5MqkHlK/iMUyOuV6P5Kc9cVihRrlulqynXIDuyVJfI6UKxS8xtuFJhAEAFNgGe4BkZy81SI0NQAg26MeZW104ZWqgK5cKC79WSRWIIJlcslzWbJkCcaNG4fevXt7Jpd84YUXzrm+wWDAqlWrkJ6ejmuuuQZNmjTBCy+8gLS0tArrlvfoaJqG+Ph49OjRAzNnzoTJx6wEv9+FGRkZlead6boOp1NupmkiIiIiosuJguapBObv86paZfMrxsTE+D2RZKtWrbBp0yavZUqp8/4cCL8bLVdccQU2bdqExo0bey1/77330KlTp4veoWBXqjlgFKg7ECJ4p8UNucamS2BiTgAo1HJF4gBAuGD5V0n1tCixWBFmubuY4S65nrFsJTep31EtUyzWGddRsVh1DU3FYumCPdxS10IAsCFMLFa0Hi0Wy67JlbZ1Q27sZwOT3LU3SfA6f8QlE8sNB7LwhUisQAR7T0sw8/ubwuOPP47hw4cjIyMDuq5j5cqV2LdvH95++2189NFH1bGPRERERESXvWDqabnc+N1oue222/Dhhx9i+vTpCAsLw+OPP46rr74aH374IW666abq2MegkmfIgVEzV3scs/viS8v5Klqvd+GVqohZVf+xA4BSg1we/DHXd2KxjAa5HrgsTW7itnhnM7FYknfTizS5nhaXJtdjmqDkJtoL1+V6CSQqQ5aTmmgPAIq1ArFYUZC7cy85Fq5YcNLMIrfce9likBufZlWWC69UBVxVkIZUndjTEji/Gi0ulwszZ87Efffdh7Vr11bXPhEREREREXn41WgxmUx49tlnce+991bX/gS9UBUOI6r/bsFpY1a1xygXpceKxYo1yFQqKdXlqmxZjdeKxdKUXMUhiy5YLUeg97JcjFmutyrCLFfRK7tE7u5sBk6LxdIEq2yFanLnPPS6YqGMkLub7hQc++HW5GLFCfY8S87vJCnPLXMeKsHzPRDsaQmc358GvXv3xsaNG6tjX4iIiIiIaqzyMS2BPGo7v5vz/fr1w9///nf88MMPSE5ORliYd77xgAEDqmzniIiIiIhqChVgT0uQD9UR4Xej5S9/+QsA4Pnnn6/wO03T4HbLTB54qTQ31IdZYDC0piVUe4xyR/UcsVhSJWDraBEicQAgVMlNZFmoFYvFsghO0NnAJhfLZpK7W2UTzFKwuwUn2nPKpTZFWeRel0OXK9Jw2nFWLFY91BGLFSVYLKRUl/u+YTHIpSlKKnXLnfNmTeaCqAV7etj/HoE8r7bz+9NAF7yoExERERHVFEppUCqAkscBPKem8bnR0qhRI3z33XeIjS0btP3iiy/i3nvvRWSk3OC0YFCsu2FW1X93x6jJnZx2TW6SM6vQpJluJde4Nmpyd+CKtUKxWLFKrrfKLni3L8Yqdxeunlw9CBgEB6wbBD87Jc+NHKfcZIWS7AKfWeVCBIsZxJhlSugCQKZDrpfbDrnzUKo4DgCYhMZkcOxHzeXzp9wvv/zilfr16KOP4vRpuQoyRERERESXM/0iHrVdwLdEVC0dEeRWOgwCp06eLtf7oRvk3gpRkLmrE22RuwMnmekch8ZiseoI9kgIdiyiwCl37coVvHFvMUqO1amZdzJ1wXOjPmLEYlmNcu9ll2Bd1lLBSRglSzknmeUm6CwWHId8BjKTnLoFe6oCwZLHgauZxcCJiIiIiIKM+t8jkOfVdn41Wl5//XWEh5fdKXe5XHjzzTcRFxfntc4DDzxQdXsXhIyaQWQMg01gAstydRAvFstilOmXOOGQuaMDACVaqVisMMFKZW4VduGVqkioSe5OsEmwa8zhlvuYOV5SIhYrTnCCTsk7wRFGuUlObULXQgAIEzzp8xxyf68MZ5FYrBYhcr0fZsFBY3nFcr1VsZAZJ+mEXKZKIMp6Wvz/G7Onxc+B+K+99prn5/j4ePzzn//0WkfTtBrfaCEiIiIiCgR7WgLnc6PlyJEj1bgbl48wowlmQ/Vn1YUJZu4VueRydTNdMj0goZrcnWCzkvtb/WzYLRar0NVQLFaUU64KYaMQuR4kwZvpYpV5ACBXsMrWKcjM7QQA9RAtFivCLNe76BQcwesUvB0crgmW5xNU6pI7hpK9iyFCPX4OjlivsTimhYiIiIhIAAfiB46NFj9FmDWRmXEl74wpJXfHz2aQyWktdsv1HoUa5d5GrfX2YrGcgnM7SM51IzmmJUSwq8VskLvrbBccq2N0yM3mflaXm4ujuERuLIESLJbqEKyyZRKc+bzIKdcjES7YC1dHcDxhZolMD61Tyb23AhFo+WJ2ILHRQkREREQkQqmyRyDPq+3YaCEiIiIiEqCgQQ9gDKISHLcYrNho8VOuXYfZUP1pM5LpTaeRLxargUEm1cMkmG4UJti9Xs8kl6KQUSxXNtIgOLukZGpTrl0uxc4teBsuzy13buRrhWKxlCaXgCFXKB2oB7kUuySLTAowAJxyyJ2Hkp/JYWbJKYvlrr3FukzalivI08PY0xI4nxot+fm+f6mNjJSrAkRERERERDWfT42W6OhoaBe4E6qUgqZpcAtOBHYpnHGXwKRX/904N+SOY5bhZ7FY4e4rxWJJiTHIldBtHiF3V6xRuNzA7mOFcreQilxyd9Pz3HKlgQ2Cd0zjzHLnRgNjqFisIpfcdXePLnfddepyEyPqgrNJ2Axyvdxmwd774yVyBSGsmtwxpDIciB84nxotGzZsqO79ICIiIiKq0VjyOHA+NVp69uxZ3ftx2VDQRcpHGgVLOUYhXixWsVYiEscl2FNlNcr1tAgO/UCY4A24poI9SEUuuaF8pbly98aKBHPu7QK9zZeCWaCcfbl6LrnrboxZbrJdo+BFqkCwJ1NybFUdTS7NPtYid25IcejB3XukENjs9myzAAFdoTdt2oQ//vGP6NatGzIyMgAA//znP/Hll19W6c4REREREdUU5T0tgTxqO79vOf773//GsGHDMHToUOzYsQN2e1n1jry8PMycORP//e9/q3wng4lNs8CkWao9juTEfpITj31fKnN+NA65ViQOABg1uTumGXKpzjhdKncOXhEtd2esQYjc+d4uUu6us8kgV1nuZKnc3yvXKXcMs2U6ggEADrfcWJ0LjUmtSgbB3mCbJtdrWt9cVyxWqVvuGuUULEnlEHpdkt+fAlFbqodpmoZVq1bh9ttvr7Jt+t3TMmPGDCxcuBCvvfYazOZfPySvu+467Nixo8p2jIiIiIiIqsaIESOgaZrXIy0tzWudnJwcDB06FJGRkYiOjkZ6ejoKCy8+PfK3MU0mExo1aoSJEyd6Oj984fdtin379qFHjx4VlkdFRSE3N9evbX3xxRd47rnnsH37dmRmZlZokSmlMHXqVLz22mvIzc3FddddhwULFqBly5YAgCNHjuDJJ5/E+vXrkZWVhcTERPzxj3/ElClTYLFU7A05ePAgOnXqBKPR6Pe+los1W2ExVH8OaK5Trs64G3Kxwiz1ROLYIDfOJLNY7viFmORy7iXv9u3Nlbs92z5G7hg2DZMbZxJhlosVaZK7w328pPp7tss5BXPhnUquZ8whODeR5HxBTsEsgTzBz+SzqkgsVrQu1+MXYpS5bmhB3iNxqauHpaWlYfHixZ6frVbv77RDhw5FZmYm1q5dC6fTiZEjR2L06NFYunTpRcdevHgx0tLS4HQ6sWvXLowcORJhYWF48sknfXq+35/e8fHxOHjwYIXlX375JZo1a+bXtoqKitCxY0e89NJLlf7+2WefxQsvvICFCxdi69atCAsLQ9++fVFaWjYt1969e6HrOl555RX89NNPmDNnDhYuXIhHH320wracTieGDBmC7t27+7WPRERERERV4VKPabFarYiPj/c86tT5dfLZPXv2YM2aNXj99dfRtWtXXH/99Zg/fz6WL1+OEydOnHObBw4cQI8ePWCz2XDFFVdg7dq1la4XHR2N+Ph4JCUl4ZZbbsFtt93mV5aW383eUaNG4cEHH8Qbb7wBTdNw4sQJbN68GX/729/w2GOP+bWtfv36oV+/fpX+TimFuXPn4h//+Aduu+02AMDbb7+N+vXr4/3338fgwYORlpbm1a3VrFkz7Nu3DwsWLMDs2bO9tvePf/wDbdq0Qe/evfH111/7+aqJiIiIiC7OxVYP+/2E71artUJvyfl8/vnnqFevHurUqYMbb7wRM2bMQGxsLABg8+bNiI6ORufOnT3rp6amwmAwYOvWrbjjjjsqbE/XdQwcOBD169fH1q1bkZeXhwkTJlxwP/bv34/169djxIgRPu+7342Wv//979B1Hb1790ZxcTF69OgBq9WKv/3tbxg/fry/mzunw4cPIysrC6mpqZ5lUVFR6Nq1KzZv3ozBgwdX+ry8vDzExMR4LVu/fj1WrFiBnTt3YuXKlT7Ft9vtXnl25SdJpEWDRaAsZphZLiXCUNxULFY7c3OROJEWuTQPo+DA0zyH3ADDE+5csVgJKlos1h7BVLR8Z4hYrFirXE6EYI0G7D4rlwJ0yH5aLFZTa7RYrFDBtFKnYDVsyYkRJSeXrKPLpTdnaNlisaSy+dxKrhR2IC52npakpCSv5VOnTsW0adN82kZaWhoGDhyIpk2b4tChQ3j00UfRr18/bN68GUajEVlZWahXzzuN32QyISYmBllZWZVu87PPPsPevXvxySefIDExEQAwc+bMSjslhgwZAqPRCJfLBbvdjltuuQWTJ0/2ad+BABotmqZhypQpmDRpEg4ePIjCwkJcccUVCA8P93dT51V+cOrXr++1vH79+uc8cAcPHsT8+fO9elnOnDmDESNG4F//+hciI32vfT5r1iw88cQTAew5EREREVFFChoU/L95Vv6c48ePe32frayXZcmSJRgzZozn59WrV6N79+5eN/zbt2+PDh06oHnz5vj888/Ru3dvv/cJKEspS0pK8jRYACAlJaXSdefMmYPU1FS43W4cPHgQEydOxLBhw7B8+XKfYgU8KspiseCKK64I9OlVLiMjA2lpabjrrrswatQoz/JRo0bhnnvuqbR4wPlMnjwZEydO9Pycn5+PpKQk5Np1mA3Vf5vRKViQu1CXuyvh1mVu0Ra75SbMChUaXAgARsF6ohGCxQyKdblB5Ba33B3TwwVyt51/yJHr/rALlhQtVr5XlrlYSpP7e52wy9UvNzvkeiTiBCeyDDXKvS7JwiSnkX/hlaqILljMoAhnReLogsWFLoXIyMgL3oQfMGAAunbt6vm5QYMGla7XrFkzxMXF4eDBg+jduzfi4+ORne3d++ZyuZCTk4P4+Iuf3iE+Ph4tWrQAALRu3RoFBQUYMmQIZsyY4Vl+Pj5/27rvvvt8Wu+NN97wdZPnVX5wTp48iYSEBM/ykydP4qqrrvJa98SJE7jhhhvQrVs3vPrqq16/W79+PT744ANP74tSCrquw2Qy4dVXXz3n6/I3R5CIiIiI6HwUAksP8+cpERERiIiIuOB6v/zyC86cOeP5np2SkoLc3Fxs374dycnJAMq+R+u67tUI+q22bdvi+PHjyMzM9Gxny5YtPu2n8X83HkpKfJsky+dGy5tvvonGjRujU6dOUAIlDZs2bYr4+HisW7fO00jJz8/H1q1b8ec//9mzXkZGBm644QYkJydj8eLFMPxuvMnmzZvhdv96V/A///kPnnnmGXz99dfnbHmej6aVPapbqVCPBADs174TixWrNRaJU6TkxgRFuqo2NfJ83JA7L0IFJlG9FGKtcndnw+Wq2qLEJfe6BIct4OcCuVhnINfrfNYgc9dZmtNR58IrVZEQwcklJYUqubFwVsHPSrdBpgfELfg+DsTFjmkJVGFhIZ544gkMGjQI8fHxOHToEB5++GG0aNECffv2BVDWAElLS8OoUaOwcOFCOJ1OjBs3DoMHD/ZK//qt1NRUtGrVCsOHD8dzzz2H/Px8TJkypdJ1c3NzkZWVBV3XceDAAUyfPh2tWrVC27ZtfXoNPr/j//znP2PZsmU4fPgwRo4ciT/+8Y8VBrz7q7Cw0Kt88uHDh7Fz507ExMSgUaNGmDBhAmbMmIGWLVuiadOmeOyxx5CYmOiZyyUjIwO9evVC48aNMXv2bJw6dcqzrfKemt8fiG+//RYGgwFXXnnlRe07EREREZE/LrZ6WKCMRiO+//57vPXWW8jNzUViYiL69OmDJ5980iuzaMmSJRg3bhx69+4Ng8GAQYMG4YUXXjjndg0GA1atWoX09HRcc801aNKkCV544YUKk1YCwMiRIwGUjY+Pj49Hjx49MHPmTJh8nPvL50bLSy+9hOeffx4rV67EG2+8gcmTJ6N///5IT09Hnz59oAXQ/fDtt9/ihhtu8PxcPoZk+PDhePPNN/Hwww+jqKgIo0ePRm5uLq6//nqsWbMGNpsNALB27VocPHgQBw8eRMOGDb22LdEbRERERETkq0vV0xISEoJPPvnkguvFxMT4PZFkq1atsGnTJq9lv/8eXhXfyzUV4FaOHj2KN998E2+//TZcLhd++umnKq8gFkzy8/MRFRWFO2MfgdlQ/WNdTjlKqz1Gue/xlVisJtpVInEildwg8hjBgad1Q+TSISTb/YcKfctnrQpyw/Bl06iah8ullIQJpr39eFbu3Nir7RaLlaj7NxnzxahnlPtsliw373DLXaSMEnnh/2MSLLhy1iE3aP20u0gkjkvZsTV/AfLy8vyqGlvdyr9HPtRkMqwGm9/Pt+ulmHNkVtC9LkkBf34bDAZomgallNeYESIiIiIioqrkV6PFbrdj2bJluOmmm9CqVSv88MMPePHFF3Hs2LEa3ctCRERERHSxytPDAnnUdj7nmvzlL3/B8uXLkZSUhPvuuw/Lli1DXFxcde5bUNIhm/IhIc7QVCyWWZfJKymRrALkkuvKjxesluMQvEDmK7k5K+oZL1wGsqqEmeRSZWxyoURpAUzCFqg2Sm7usULIzT/jVHKfWmftcheOfF3uGCZaQ8ViFTrl/l6S16hQo0xKk1O3Y6tIpMBcqoH4NYHP34AWLlyIRo0aoVmzZti4cSM2btxY6XorV66ssp0jIiIiIqopLtVA/JrA50bLvffeG1CFMCIiIiIiKityE0ihGxbF9XNySQKMWtmjujUIkasEVNctV8XGLfSuCzHJ1YiqFyIXK1ZwvscsuQJ26B4TKxbLJZjfKVhICRbBikOCRZsQbZErVVZHcOJRJTiBYIFgulGewyUWq3GIXJVIyTTFUrfcMbQY5M75ErfMeRjsKfyBDjMI9tclQbL6JxERERERkd/kRvUSEREREdViHNMSODZa/HTKUQqTVv1nToRRLg9IsnqIVPqFZDqERLpguVir3OuKNMu9sFN2uViSfy/Jil5FLsGqTXLz0SHDXigWK9chN1GsSZNLdCjW5f5gkqnNcTa5YyiZEqkgd+GQnFzSIJRiJ1ktLyABjmlh+TA2WoiIiIiIRHBMS+DYaCEiIiIiEsDqYYFjo8VPPxv2wKBVfzUbXbB7s7M7WSyWTZfpHpbs8m4VJZdSEmWWOy+izXLHsK5V7lKkBKsAxVrkJjk1CqStljvjkEtfDTFGi8X6pcgtFkuqkiIA6E65WE7BxPvTpXLXw3CzXCqaTTCHNSFU7r0sdQQduhs4KxQsAOxpCRyrhxERERERUVBjTwsRERERkQClFFQAPa2BPKemYaPFT1dqHWDWqj8dSKrKBgCUCE5kVeoSLKckJELwXRRilEtfcepyHbGtowrEYjVtfkYslq2JYNqbYPWw3J/kzg1dNRCL1Sxc7voUYZL7e+UIpvNllMidG9klcgkzhYIVKc/a5T6TI81y1yhdqPyVUw/uRCqWPA4cGy1ERERERAIUAqtezDYLGy1ERERERCLY0xI4Nlr8ZDMYYTZUfwpBqVsuDShLk0uX0R2xInHMghO3HZLLbIJRk0vziBSsVBZWKleBrYlbLvVSE5pMtSyWWChomtz1KcchWVlOjtlQM7+BSE5yGmkRTKN2ycXSldw57xL8Jlzgkkl7cyq59LpAsNESOFYPIyIiIiKioMaeFiIiIiIiAWVjWgKoHlb1u3LZYaPFT6edJTBp1Z82k2nIqPYYl0KEMV4kjlNwcs6MYrlJGONs1T+xaTm3kkttOl4cJhbr1K7GYrGuPX1SLJbZLJeydeSUTJonAJyyy6Xl5Mu9lbE/X+69fEpwEsZCp1xqTmKY3DFsKHeJQrFglc2fC+T+XqFGmdfl1IO7SinTwwLHRgsRERERkQClyh6BPK+2Y6OFiIiIiEiAggpozppAUspqGjZa/BRrssFsqP4yPaHuJtUeo1yBXioWy2IWSvVwy9WYSAyTextdGSWXvxJtlot1uMgmFuuHPLkKbDkOuYkRJR0qlEvZOik4geCJUrlroeTs1nUtcu8voyZ3btjdcscwq0TudUmOXrAYJOsxybyXleDk3CSLjRYiIiIiIgFMDwscGy1ERERERAJ0BNbnJNfnHLzYaPFTrM0Ii6H6D5umyf1pztrlYmXZS0Ti1LeEiMSRFmWWq/RSL1TmbwUAuU65KkAuJZc6EGqU+5ix6zVzoj3JlC1JTsi9lyVTttya3O3gM6VyxzDfIHcMS91y1w2T4OuyCqWiBXuPhFIqoPRQyZTSqtCkSRNMmDABEyZMqLJtcnJJIiIiIiIB5SWPA3lUhT179mDAgAGIiopCWFgYunTpgmPHjnl+X1pairFjxyI2Nhbh4eEYNGgQTp68+PL9TZo0gaZp0DQNRqMRiYmJSE9Px9mzZ33eBhstREREREQC9P9VDwvkcbEOHTqE66+/Hm3atMHnn3+O77//Ho899hhstl+LdTz00EP48MMPsWLFCmzcuBEnTpzAwIEDLzo2AEyfPh2ZmZk4duwYlixZgi+++AIPPPCAz89nepifzpS6YTZUf5e0ZHd+nlOuSpTUpJmJWkuROAAQbZH7W9ULkUvZqhNeLBargWB6mFGTq6RU4JSb5MwkWDCnwCmXphBukDs3Ii1yf69ch9zHb7FbbuLRUsFYMRa5SoCSJCt6uS+zlCO6OFOmTMHNN9+MZ5991rOsefPmnn/n5eVh0aJFWLp0KW688UYAwOLFi9G2bVts2bIF1157baXbzc7ORnp6Oj777DPEx8djxowZla4XERGB+PiyScYbNGiA4cOHY9myZT7vP3taiIiIiIgEKPxaQcyvx/+en5+f7/Ww2+0+xdV1HR9//DFatWqFvn37ol69eujatSvef/99zzrbt2+H0+lEamqqZ1mbNm3QqFEjbN68+ZzbHjFiBI4fP44NGzbgvffew8svv4zs7Ozz7k9GRgY+/PBDdO3a1af9B9hoISIiIiIScbHpYUlJSYiKivI8Zs2a5VPc7OxsFBYW4umnn0ZaWho+/fRT3HHHHRg4cCA2btwIAMjKyoLFYkF0dLTXc+vXr4+srKxKt7t//36sXr0ar732Gq699lokJydj0aJFKCmpmBnyyCOPIDw8HCEhIWjYsCE0TcPzzz/v87FjepifEsOMsApUDwsRzPX4pUgwFa2knkichDC59nibCLn0ulCLQyyWLUSuMk9EkdzrKnXJpQDlCKYAOQWrh5kFb3eV6nLnYWOrXCpaYmj1T1JcTnIm7YwiufeXpDpWuZNectJMq7HmvS6H4LUwEL/tNfH3eQBw/PhxREZGepZbrRWvJUuWLMGYMWM8P69evdqTBnbbbbfhoYceAgBcddVV+Prrr7Fw4UL07NkzgL0qG9hvMpmQnJzsWdamTZsKDR8AmDRpEkaMGAGlFI4fP45HH30U/fv3xxdffAGj8cLXDjZaiIiIiIgEBDqovvw5kZGRXo2WygwYMMAr7apBgwYwGo0wmUy44oorvNZt27YtvvzySwBAfHw8HA4HcnNzvRodJ0+e9IxFuRhxcXFo0aIFAKBly5aYO3cuUlJSsGHDBq+UtHNho8VPDqny6S65Oy0a5O5KxBrCROJcFyd3575z4sWXAvRVaLjc67JEys0VEOssEotV4pS77EWb5e7cHymWG5RsE7yZ3jBUrnCC4PQYyHHJBRO8cS86R0a9ELlegmK5+gIoFvz8lzw3jMHdASJGVwE2Wvx4c0VERCAiIqLC8i5dumDfvn1ey/bv34/GjRsDAJKTk2E2m7Fu3ToMGjQIALBv3z4cO3YMKSkplcZq06YNXC4Xtm/fji5duniek5ube8H9LO9dqSyVrDJstBARERER1XCTJk3CH/7wB/To0QM33HAD1qxZgw8//BCff/45ACAqKgrp6emYOHEiYmJiEBkZifHjxyMlJeWclcNat26NtLQ0jBkzBgsWLIDJZMKECRMQElJxku+CggJkZWV50sMefvhh1K1bF926dfNp/zkQn4iIiIhIgLqI/y7WHXfcgYULF+LZZ59F+/bt8frrr+Pf//43rr/+es86c+bMwS233IJBgwahR48eiI+Px8qVK8+73cWLFyMxMRE9e/bEwIEDMXr0aNSrV3EM8+OPP46EhAQkJibilltuQVhYGD799FPExsb6tP+aUizS7Yv8/HxERUXhkWaPwmqo/nQFg2A36o7TvpXLqwo2oUF//+iQLxIHANp0930214smmL7iypMLVpwt1+lbWCg3APrgmTpisfYWyKVRZZbI3e86ViiXl1PkkouV65K77iZaQ8ViVcUEeL5yVdUU4T7QBOdOMwvGcuhy1/nTzlKROC5lxxf5LyAvL++CYz8klX+P7B31EEya/59DLmXHurw5Qfe6JDE9jIiIiIhIwMUOxK/N2GghIiIiIhKgVGCpXkyMYqPFbw5dQRNo7UpW9AgzyZUCKhUqz2M1yc3tYOqYIBYLjeVimUpkuvIBwHY6VyxW9D65am+2beefEbgqxeVUrBRTXX7KjRKLZRaYF6vcnly5C299S8VBqtUl3CKXzicYCieK5K7zuUKpTQDQKFQuna9AsIodlWFPS+A4EJ+IiIiIiIIae1qIiIiIiASwpyVwbLT4KdeuYDFU/4kjWakkxCTX4RZulom1XzB9pSXkKg6pRg3lYsX4VoKwSghWsNGuOCwWq169XWKx4rLlKubFflUsFivkRMWymdUluY7clwKTJhcrR25OWmw5LZdubBYssxltkqs6KFgUDdEWua+BkUomlkMXnP02AOp/zZZAnlfbsdFCRERERCSAPS2BC/oxLdOmTYOmaV6PNm3aeH7/6quvolevXoiMjISmacjNzfV6/pEjR5Ceno6mTZsiJCQEzZs3x9SpU+FwCN56IiIiIqJaT/f0tfj/qO0ui56Wdu3a4bPPPvP8bDL9utvFxcVIS0tDWloaJk+eXOG5e/fuha7reOWVV9CiRQv8+OOPGDVqFIqKijB79my/9+VkqQtmzRnYC/FDhEnuT+MWLKMn1bm5r0CuKz/tp5/FYhnDfhCLheaNxUKp6GixWAgLk4t1VUuxUIb9R8ViRR2Qq8DWyXVGLNbPZ+XSSiXFWKr/M6tcQqhcao5Dl7vvWuyqmZNmhpnlUuyKnDKvK9grA+v/+y+Q59V2l0WjxWQyIT4+vtLfTZgwAQDw+eefV/r78gZNuWbNmmHfvn1YsGBBQI0WIiIiIiKSFfTpYQBw4MABJCYmolmzZhg6dCiOHTt2UdvLy8tDTEzMedex2+3Iz8/3ehARERERBUppCkrTA3gEeReSgKDvaenatSvefPNNtG7dGpmZmXjiiSfQvXt3/Pjjj4iI8H8ytYMHD2L+/PkX7GWZNWsWnnjiiQrLw4xGmA3V3/3tFOzf3OneLxarnltmckSDFi0SBwAOfCE3qV/8XrnKV6ENDonFkuz1NrcWTAEKtYiF0k8WiMUSuAR6FDvMYrG25shN6idUSBEAYJTLAEKxSy6YVfA8tMsViUS+S27STE2TO4hS32tcQZ4fpgIcn6I4piX4e1r69euHu+66Cx06dEDfvn3x3//+F7m5uXj33Xf93lZGRgbS0tJw1113YdSoUeddd/LkycjLy/M8jh8/HuhLICIiIiLyjGkJ5L/aLuh7Wn4vOjoarVq1wsGDB/163okTJ3DDDTegW7duePXVVy+4vtVqhdUqN5ibiIiIiGo2ztMSuMuu0VJYWIhDhw5h2LBhPj8nIyMDN9xwA5KTk7F48WIYDIF3MJ10lMCkVf+JY4BcF3uoQS69KVyTaQiescsdv01ZcWKxbg6xi8Uy5ZSIxTpxNFos1soP64rFkkzLCTPJpb3VMct9eOY55RICvjklV2Ur1ib38RsuWCFKF0zNMQm+vwTnYEa+S3JKBrkU1hK3TNqbUwX3lBa6pkML4Hske1oug0bL3/72N9x6661o3LgxTpw4galTp8JoNGLIkCEAgKysLGRlZXl6Xn744QdERESgUaNGiImJQUZGBnr16oXGjRtj9uzZOHXqlGfb56pIRkREREREwSPoGy2//PILhgwZgjNnzqBu3bq4/vrrsWXLFtStW3a3dOHChV4D5nv06AEAWLx4MUaMGIG1a9fi4MGDOHjwIBo2bOi1bRXkg7WIiIiIqObQoUPjPC0B0RS/ufskPz8fUVFRSI16CGaBFKdIs1yXbYFTLiUiXGjSTMnqIa2i5KobjWh+6sIrVZG42EKxWMezosVifXyijlisErdg/oqgEKPc+2tvrtwH9SmHXPpltOA13iaYpygZyyn4Hc4i+Loi5D5SkGuXey/nOWRKsDl1O1blPIu8vDxERkaKxPRF+ffIK6KHwqj5//53Kwd25y4JutclKeh7WoiIiIiIagIOxA8cGy1ERERERAJ0uKHB/14nPYDn1DRstPgpTxXDJHDiNLLYqj1GOZtRLk2hSKg/v3mkXP96QohYKJS65CYCKy2RuzwUOOX+XtmlYqHg0OVSLwQLRMEtmL4SIlgiqtQuV3XopENuAsFIg1z5/oZhcp8nRsHJJSXvcVsNcud8rNxXDZwVyr4UvOwGRP1veslAnlfbBf3kkkREREREVLuxp4WIiIiISADnaQkcGy1+KjIUwqhVfwrBWbvcRHFWo1yHW5hZJpZk93rTULmKQy5d7m+VXyyXN5DjkEspaRkh18V+slTu72UVrOhVKlgVrcQl90Fd3xwmFivcLJfbJDm5pKQ8h9y5EWeTey+fFqzoJTkBrlQFNk0L7vO9bEyL/+cTx7Sw0UJEREREJCSw6mGyI6uCExstREREREQCdOVGIEPKy55Xu7HR4icTTDAKHLZCl1xlmTpWucoyRU6Zbu88h2DVJoPc3Y8Cp1waValb7vLg1OW683XIxbILlrEplrtkQBesYmMSTPU0GeRStupY5V5XHbnLBvLl5iqGWyjdGJCdNBOC76+jBXIXDqeS+ax0BvmX+9oyT4umaVi1ahVuv/32Ktsmq4cREREREdVwmqZV+njuuec86+Tk5GDo0KGIjIxEdHQ00tPTUVhYWKWxTSYTGjVqhIkTJ8Ju931cMHtaiIiIiIgEKLihAugzUFUwED8zM9Pr59WrVyM9PR2DBg3yLBs6dCgyMzOxdu1aOJ1OjBw5EqNHj8bSpUsvOv7ixYuRlpYGp9OJXbt2YeTIkQgLC8OTTz7p0/PZaPFTW3MCLAITdUl2RUulbAFAmFAVm4ZyRYAQZhLsXhesHpZjl8spcQi+LoNg6oVdsMpWqODV3CKYsiU0Hy0AwOGWOzfOilaIkvt7SaaHRQhOciqZHCZ4GiLSIpcSqSuZWA49uNPDykoXX5qSx/Hx8V4//+c//8ENN9yAZs2aAQD27NmDNWvW4JtvvkHnzp0BAPPnz8fNN9+M2bNnIzExsdLtHjhwAOnp6di2bRuaNWuGefPmVbpedHS0Zx+SkpJw2223YceOHT7vPxstREREREQCFFSAY1rKWrP5+fley61WK6wBjE0+efIkPv74Y7z11lueZZs3b0Z0dLSnwQIAqampMBgM2Lp1K+64444K29F1HQMHDkT9+vWxdetW5OXlYcKECReMv3//fqxfvx4jRozweZ85poWIiIiISIBS7oAfQFkPRVRUlOcxa9asgPbjrbfeQkREBAYOHOhZlpWVhXr16nmtZzKZEBMTg6ysrEq389lnn2Hv3r14++230bFjR/To0QMzZ86sdN0hQ4YgPDwcNpsNrVu3Rrt27TB58mSf95k9LX4yajJd7ZKVZWJtNa+KTZ/4szKBALS+8rRYLE3wHXvmsNzkkkfPRIvFirUI5pRAsDKfS+59LFhwSDQFqFgwjepkiVwKSx2htBwAiBX87DojmGJXJJhW6hSsOij5XUOq2JtdsBplIC42Pez48eOIjIz0LK+sl2XJkiUYM2aM5+fVq1eje/fuXuu88cYbGDp0KGy2i/us37NnD5KSkrxSx1JSUipdd86cOUhNTYXb7cbBgwcxceJEDBs2DMuXL/cpFhstRERERESXgcjISK9GS2UGDBiArl27en5u0KCB1+83bdqEffv24Z133vFaHh8fj+zsbK9lLpcLOTk5FcbDBCI+Ph4tWrQAALRu3RoFBQUYMmQIZsyY4Vl+Pmy0EBEREREJKKse5n9vkD/VwyIiIhAREXHO3y9atAjJycno2LGj1/KUlBTk5uZi+/btSE5OBgCsX78euq57NYJ+q23btjh+/DgyMzORkJAAANiyZYtP+2k0lvUCl5SU+LQ+Gy1+OutwwaxVf3mUWJtc5SazYCWgznWKROK0vUYuZcvSraFYLEn161aev1odjNvl0vmMJrlyVFeUyOU2bT1R78IrVRHBSwYyS+U+pvKdci9MCaZsnSmVSzeKFJzIUqgYJQAgRPDbUiBfaAN1rFAuTTFSKD/MIZheFwilApxcsoom58zPz8eKFSvwf//3fxV+17ZtW6SlpWHUqFFYuHAhnE4nxo0bh8GDB5+zclhqaipatWqF4cOH47nnnkN+fj6mTJlS6bq5ubnIysqCrus4cOAApk+fjlatWqFt27Y+7TsH4hMRERERCdAv4r+qsHz5ciilMGTIkEp/v2TJErRp0wa9e/fGzTffjOuvvx6vvvrqObdnMBiwatUqlJSU4JprrsGf/vQnPPXUU5WuO3LkSCQkJKBhw4YYMmQI2rVrh9WrV8Nk8u2uAHta/JSvl8CkVf+d2hKX3O0qm9wNP+Q5ZU45vVQkTBmL4NsoJloslNEkd2LUDcu+8EpVxFBHbhIflSd3It6874hYrLO/yBVpcApdMwCgoFSucMLRQrnzsMAp914ucgvOJeWQi5VRLBYKhYJzp9UT/AIgVefCEOQD8ZUKMD1MVU2v2OjRozF69Ohz/j4mJsbviSRbtWqFTZs2eS1TSp3350Cw0UJEREREJOBi52mpzZgeRkREREREQY09LX5qHR4Ji6H6UyOiLHLdm5IdqdvPyqRf1N9x8aX5fJVsOyIWy9xIMLWpVG4yDlUiGMsmeNmzyKVeWBLlXlcdyKW9FZ+We112wVS0CJPcOR9ilCs+cdouV3wiq1TuvqtkGrVdbmw8Tgpee6Xmn3EqwYmkAlA2ED+Q9DC593GwYqOFiIiIiEiEO8BEL8HWbJBio4WIiIiISEBZjwl7WgLBRoufYq0arAKTFJgNcgOuSt1yCWJGoVAbss89qVJVy1ovV0kp1Ch3pyVEMFaOQy6lRHKOEbeSCyZ5bkiSPDeKBa+FRS651KYQo+DniWDlpmKXXKxIs9wxjBZMD4+zyb2/Slwyx9CuuwG5qb/8xkZL4NhoISIiIiISoEOHFkijpYrmabmcsXoYEREREREFNfa0+MmuK0CgVvbRQrkWdUJozavAUiSYNmAzyP2tIsxyVVEyS+Qm2jtll7sURZnl/l6ZpXIlh/bmyR1Dq1SeJ4A2kXJpOVKT3wFAnlMullMwTbFYsHCTWfC2a5RgephdcnJEk9zrMgq9wcxBP7kk08MCxUYLEREREZGAQGe2D/R5NQkbLUREREREAspmtve/10QJZPkEOzZa/BRtlklxirXI9XufsouFwskSmTgWwWo5kmxGudwLm1Guqoxk+oomeOGXTEWzGuWuGYLZYThWLBcsXPATMULu7SX698oVTM2Jtcq9lyMk06gEb6jXtcpdo44UyaTLGoL8y32gaV5MD2OjhYiIiIhIBBstgWP1MCIiIiIiCmrsafGTATItPakqWwAQYZbrzo+2yHTbSk46Jnnvw6jJdXtbBauiHSoQC4UMo9xlr2WE3DG8qo5cLMkJaXOdcrFOlYqFEk3ZkiSZsqULZgHlOAWrbIpOLi33uqItMnFKg3y8eqDzrXCeFjZaiIiIiIhEMD0scGy0EBEREREJYKMlcGy0+MloKHtUtwYhcjOPNQgRCwWHLtMVLZk2IPWaAOBoUZhYLLdgRa/20XIX47pWwdnvBBW55HJKJY9hXcH0laQQuVh5LrlYBYITWUoOlE0MkTsPI0xyOUeSX01PlsqVsZNKiTQIplEHJtC/MBstbLQQEREREQlgT0vgWD2MiIiIiIiCGnta/HSyFLAKNPVCBCscRZnkWu9SkQoEUy9sRrnjJ1lVJtchdw5KVlKSrJYjeR5GCL6P85xyqWhRZrm0HLvgxIgZxWKhkBQqd90oEqzc6BT8e0mmHOUJXnsdgsfwrEMmlmR1w0Cweljg2GghIiIiIhKglEIgt3DLnle7sdFCRERERCTCDSCQ3iA2Wtho8ZNBK3tUN6luVADILpU7DSxC6U2NQ+VSSiSrh+UKpuVIpqIJzm8qqkgwPUwXrPaWL5gClFUqWRVNLv2ic4xc5StN8MvOkWLJalRyr6tQsDqf5GdKqWB6WHaJTBxHkGdRlQ2o9/+4s6eFA/GJiIiIiCjIsaeFiIiIiEhEYD0tTA+rZY2Wl156Cc899xyysrLQsWNHzJ8/H9dcc41f22gboRAiUC1KsiJVjkOu2zvfKdMVLVm1KUywapNkFpXk5JJuwWuxU/AoaoJ/sIwSuXO+kWD6pUQ6bjnJ81DyumsSTKOKNstdD0MFr72SaSlWi2DqoCZ3HhaFyMQqlbs8BSbA9DAwPaz2pIe98847mDhxIqZOnYodO3agY8eO6Nu3L7Kzsy/1rhERERFRLaAu4r/LSZMmTTB37twq3WatabQ8//zzGDVqFEaOHIkrrrgCCxcuRGhoKN54441LvWtEREREVCvoF/G4OIWFhRg3bhwaNmyIkJAQz/fh3yotLcXYsWMRGxuL8PBwDBo0CCdPnrzo2E2aNIGmadA0DUajEYmJiUhPT8fZs2d93katSA9zOBzYvn07Jk+e7FlmMBiQmpqKzZs3V/ocu90Ou93u+Tk/P7/a97M2cArdKCgSnFxKF2z7S06aZTPK3dUxCaYASabKhAqmeZptcgexvs0pFktyAsGsUrnKV5JppZITCEpWzLMZauYkp8WCE+BKvr8ihL5xBn81ShXg8JSL/+yaOHEi1q9fj3/9619o0qQJPv30U/zlL39BYmIiBgwYAAB46KGH8PHHH2PFihWIiorCuHHjMHDgQHz11VcXHX/69OkYNWoU3G439u/fj9GjR+OBBx7AP//5T5+eXyt6Wk6fPg2324369et7La9fvz6ysrIqfc6sWbMQFRXleSQlJUnsKhERERFRlfv6668xfPhw9OrVC02aNMHo0aPRsWNHbNu2DQCQl5eHRYsW4fnnn8eNN96I5ORkLF68GF9//TW2bNlyzu1mZ2fj1ltvRUhICJo2bYolS5ZUul5ERATi4+PRoEED3HDDDRg+fDh27Njh8/7Xip6WQEyePBkTJ070/JyXl4dGjRqhxG0/z7Oqjl4F3YC+KhG8qyPZUyBH7s69XfD4SebPyva0yMWSzEB2Cs5NUOyumT0tJW7JAgNyZ4dkT4vkNb7ELdiTaaiZPS018fO/9H/f04J3XpOLG5/y+8wfq9UKq9Xq03O7deuGDz74APfddx8SExPx+eefY//+/ZgzZw4AYPv27XA6nUhNTfU8p02bNmjUqBE2b96Ma6+9ttLtjhgxAidOnMCGDRtgNpvxwAMPXHDMeEZGBj788EN07drVp30HAKhawG63K6PRqFatWuW1/N5771UDBgzwaRvHjx9XKPsOwgcffPDBBx988MFHED+OHz9eDd8oA1dSUqLi4+Mv6jWFh4dXWDZ16lSf96G0tFTde++9CoAymUzKYrGot956y/P7JUuWKIvFUuF5Xbp0UQ8//HCl29y3b58CoLZt2+ZZtmfPHgVAzZkzx7OscePGymKxqLCwMGWz2RQA1bVrV3X27Fmf979W9LRYLBYkJydj3bp1uP322wEAuq5j3bp1GDdunE/bSExMxPHjxxEREQHNxzqm+fn5SEpKwvHjxxEZGRno7tc4PC4V8ZhUjselcjwuFfGYVI7HpXI8LhXVlGOilEJBQQESExMv9a54sdlsOHz4MBwOR8DbUEpV+A5aWS/LkiVLMGbMGM/Pq1evRvfu3TF//nxs2bIFH3zwARo3bowvvvgCY8eORWJiolfvij/27NkDk8mE5ORkz7I2bdogOjq6wrqTJk3CiBEjoJTC8ePH8eijj6J///744osvYDReeIxarWi0AGWDj4YPH47OnTvjmmuuwdy5c1FUVISRI0f69HyDwYCGDRsGFDsyMvKyvgBUFx6XinhMKsfjUjkel4p4TCrH41I5HpeKasIxiYqKutS7UCmbzQabzVbtcQYMGOCVdtWgQQOUlJTg0UcfxapVq9C/f38AQIcOHbBz507Mnj0bqampiI+Ph8PhQG5urlej4+TJk4iPj7/o/YqLi0OLFi0AAC1btsTcuXORkpKCDRs2+NRoqjWNlj/84Q84deoUHn/8cWRlZeGqq67CmjVrKgzOJyIiIiK6XEVERCAiIsJrWX5+PpxOJwwG73FMRqMRul42Piw5ORlmsxnr1q3DoEGDAAD79u3DsWPHkJKSUmmsNm3awOVyYfv27ejSpYvnObm5uRfcz/LelZKSEp9eV61ptADAuHHjfE4HIyIiIiKqCSIjI9GzZ09MmjQJISEhaNy4MTZu3Ii3334bzz//PICyHqr09HRMnDgRMTExiIyMxPjx45GSknLOQfitW7dGWloaxowZgwULFsBkMmHChAkICQmpsG5BQQGysrI86WEPP/ww6tati27duvn0GmpFyeNLxWq1YurUqT5XdagteFwq4jGpHI9L5XhcKuIxqRyPS+V4XCriMan5li9fji5dumDo0KG44oor8PTTT+Opp57C/fff71lnzpw5uOWWWzBo0CD06NED8fHxWLly5Xm3u3jxYiQmJqJnz54YOHAgRo8ejXr16lVY7/HHH0dCQgISExNxyy23ICwsDJ9++iliY2N92n9NqaCtCUdERERERMSeFiIiIiIiCm5stBARERERUVBjo4WIiIiIiIIaGy1ERERERBTU2Gg5j5deeglNmjSBzWZD165dsW3btvOuv2LFCrRp0wY2mw3t27fHf//7X6/fK6U8lRNCQkKQmpqKAwcOeK2Tk5ODoUOHIjIyEtHR0UhPT0dhYWGVv7aLUdXHBSibUXXAgAGIiopCWFgYunTpgmPHjnl+X1pairFjxyI2Nhbh4eEYNGgQTp48WeWv7WL4c1x++uknDBo0CE2aNIGmaZg7d26FdWbNmoUuXbogIiIC9erVw+233459+/Z5rRPsx6Wqj4nb7cZjjz2Gpk2bIiQkBM2bN8eTTz6J39YT8eV9dqn5c1xee+01dO/eHXXq1EGdOnWQmpp63vXvv//+So9fTbu2rFy5Ep07d0Z0dDTCwsJw1VVX4Z///KfXOjXhmlvVxwSofdfb31q+fDk0TcPtt9/uWeZ0OvHII4+gffv2CAsLQ2JiIu69916cOHHC67k16Vz5rcqOCQAUFhZi3LhxaNiwIUJCQnDFFVdg4cKFXutcDucK1SCKKrV8+XJlsVjUG2+8oX766Sc1atQoFR0drU6ePFnp+l999ZUyGo3q2WefVbt371b/+Mc/lNlsVj/88INnnaefflpFRUWp999/X+3atUsNGDBANW3aVJWUlHjWSUtLUx07dlRbtmxRmzZtUi1atFBDhgyp9tfrq+o4LgcPHlQxMTFq0qRJaseOHergwYPqP//5j9c277//fpWUlKTWrVunvv32W3Xttdeqbt26Vfvr9ZW/x2Xbtm3qb3/7m1q2bJmKj49Xc+bMqbBO37591eLFi9WPP/6odu7cqW6++WbVqFEjVVhY6FknmI9LdRyTp556SsXGxqqPPvpIHT58WK1YsUKFh4erefPmedbx5X12Kfl7XO655x710ksvqe+++07t2bNHjRgxQkVFRalffvmlwrorV65UHTt2VImJiRWOX027tmzYsEGtXLlS7d69Wx08eFDNnTtXGY1GtWbNGs86l/s1tzqOSW283pY7fPiwatCggerevbu67bbbPMtzc3NVamqqeuedd9TevXvV5s2b1TXXXKOSk5O9nl+TzpVy5zomSik1atQo1bx5c7VhwwZ1+PBh9corryij0aj+85//eNYJ9nOFahY2Ws7hmmuuUWPHjvX87Ha7VWJiopo1a1al6999992qf//+Xsu6du2qxowZo5RSStd1FR8fr5577jnP73Nzc5XValXLli1TSim1e/duBUB98803nnVWr16tNE1TGRkZVfbaLkZVHxellPrDH/6g/vjHP54zZm5urjKbzWrFihWeZXv27FEA1ObNmwN9KVXK3+PyW40bN670C/rvZWdnKwBq48aNSqngPy7VcUz69++v7rvvPq9lAwcOVEOHDlVK+fY+u9Qu5rgopZTL5VIRERHqrbfe8lr+yy+/qAYNGqgff/yxwvGrideWynTq1En94x//UErVjGtuVR8TpWrv9dblcqlu3bqp119/XQ0fPrzCF/Tf27ZtmwKgjh49qpSqmefKhY5Ju3bt1PTp072WXX311WrKlClKqcvjXKGahelhlXA4HNi+fTtSU1M9ywwGA1JTU7F58+ZKn7N582av9QGgb9++nvUPHz6MrKwsr3WioqLQtWtXzzqbN29GdHQ0Onfu7FknNTUVBoMBW7durbLXF6jqOC66ruPjjz9Gq1at0LdvX9SrVw9du3bF+++/71l/+/btcDqdXttp06YNGjVqdM64kgI5LoHIy8sDAMTExAAI7uNSXcekW7duWLduHfbv3w8A2LVrF7788kv069cPgG/vs0upKo5LcXExnE6n5zwAyt5Hw4YNw6RJk9CuXbsKz6mJ15bfUkph3bp12LdvH3r06AHg8r/mVscxqc3X2+nTp6NevXpIT0/3KU5eXh40TUN0dDSAmnmuXOiY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"
&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;When training machine learning models, this transformation is often handled under-the-hood by processors or feature extractors. For example, in our benchmark model implementation, we will fine tune NVIDIA’s pretrained &lt;code&gt;parakeet-tdt-0.6b-v2&lt;/code&gt; model using &lt;a href="https://docs.nvidia.com/nemo-framework/user-guide/24.09/index.html"&gt;NeMo&lt;/a&gt;. NeMo's architecture includes a built-in preprocessing pipeline that converts raw audio waveforms into mel-spectrogram features, eliminating the need for manual feature extraction.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;For more tips on generating predictive features from audio data, check out DrivenData's &lt;a href="https://drivendata.co/blog/speech-for-ml"&gt;overview&lt;/a&gt; of open-source packages for using speech data in ML. That blog post also includes some helpful intro to working with audio data.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;hr&gt;
&lt;h1 id="Step-2:-Build-the-model"&gt;Step 2: Build the model&lt;a class="anchor-link" href="#Step-2:-Build-the-model"&gt;&amp;#182;&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;A straightforward modeling option is to start from a strong pretrained ASR model (trained mostly on adult speech), then fine-tune on our labeled child-speech training set. Fine-tuning the ASR model will help it understand the unique acoustic and linguistic patterns of children. Before choosing a pre-trained model, make sure it adheres to the &lt;a href="https://www.drivendata.org/competitions/308/childrens-word-asr/#external-data-and-models"&gt;competition rules&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In this tutorial, we adapt NVIDIA’s pretrained Parakeet TDT &lt;code&gt;parakeet-tdt-0.6b-v2&lt;/code&gt; model using NeMo. We chose this model because it is open source, ranks highly on the Hugging Face &lt;a href="https://huggingface.co/spaces/hf-audio/open_asr_leaderboard"&gt;Open ASR leaderboard&lt;/a&gt; (at time of writing), and strikes a good balance between performance and model size. Rather than fine-tuning all parameters, we will freeze the base model and train only lightweight adapter weights. &lt;strong&gt;Adapters&lt;/strong&gt; are small, trainable modules inserted into the frozen model’s layers that allow it to adapt to new data without modifying the original pretrained weights. Freezing the base model makes the fine-tuning process more efficient and helps avoid overfitting. NeMo makes this process easier by providing native adapter support, handling data pipelines (manifests, batching, feature extraction), and integrating experiment management (checkpointing, logging).&lt;/p&gt;
&lt;p&gt;Key packages include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nemo_toolkit&lt;/code&gt; for ASR model + data processing&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lightning.pytorch&lt;/code&gt; for the training backend&lt;/li&gt;
&lt;li&gt;&lt;code&gt;omegaconf&lt;/code&gt; for config file management&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="1.-Prepare-Dataset-&amp;amp;-Create-Splits"&gt;1. Prepare Dataset &amp;amp; Create Splits&lt;a class="anchor-link" href="#1.-Prepare-Dataset-&amp;amp;-Create-Splits"&gt;&amp;#182;&lt;/a&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;We need to provide NeMo with a "manifest" JSONL file that lists all of our samples and sample information. NeMo requires this manifest to be in a particular format, with specific column names and definitions. Each manifest line must be a JSON object with &lt;code&gt;audio_filepath&lt;/code&gt; (path to audio file), &lt;code&gt;duration&lt;/code&gt; (audio duration in seconds), and &lt;code&gt;text&lt;/code&gt; (transcription text).&lt;/p&gt;
&lt;p&gt;Below we will transform the competition data to NeMo's required manifest format.&lt;/p&gt;
&lt;p&gt;We'll also filter out clips longer than 25 seconds, which strain computer memory. Competitors may want to further split these clips to avoid losing training data. Then we'll split the data 80/20 into train/validation.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[17]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;MANIFEST_DIR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;DATA_ROOT&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;processed&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;ortho_dataset&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;train_manifest_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MANIFEST_DIR&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;train_manifest.jsonl&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;val_manifest_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MANIFEST_DIR&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;val_manifest.jsonl&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;clip_max_duration_sec&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;25.0&lt;/span&gt;

&lt;span class="n"&gt;MANIFEST_DIR&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mkdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;exist_ok&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;Remember, &lt;code&gt;df&lt;/code&gt; has one row per utterance, and includes data hosted on both TalkBank and DrivenData.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[18]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;audio_path&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;audio_duration_sec&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;orthographic_text&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;&amp;quot;audio_path&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;audio_filepath&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;&amp;quot;audio_duration_sec&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;duration&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;&amp;quot;orthographic_text&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Removing long clips to improve memory efficiency during training&lt;/span&gt;
&lt;span class="n"&gt;over_max_duration_mask&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;duration&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;clip_max_duration_sec&lt;/span&gt;
&lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Removing &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;over_max_duration_mask&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; samples with audio duration &amp;quot;&lt;/span&gt;
    &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;clip_max_duration_sec&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; seconds&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;over_max_duration_mask&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;SAMPLE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Sampling &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;SAMPLE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; utterances&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sample&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SAMPLE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;random_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;train_df&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;val_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;train_test_split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;test_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;random_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;train_df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;train_manifest_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;orient&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;records&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;val_df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;val_manifest_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;orient&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;records&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stderr output_text"&gt;
&lt;pre&gt;&lt;span class="ansi-green-fg"&gt;2026-02-26 04:58:31.723&lt;/span&gt; | &lt;span class="ansi-bold"&gt;INFO    &lt;/span&gt; | &lt;span class="ansi-cyan-fg"&gt;__main__&lt;/span&gt;:&lt;span class="ansi-cyan-fg"&gt;&amp;lt;module&amp;gt;&lt;/span&gt;:&lt;span class="ansi-cyan-fg"&gt;11&lt;/span&gt; - &lt;span class="ansi-bold"&gt;Removing 3849 samples with audio duration &amp;gt; 25.0 seconds&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="2.-Configuration"&gt;2. Configuration&lt;a class="anchor-link" href="#2.-Configuration"&gt;&amp;#182;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Let's define parameters for the adaptation.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To start, we copied an example .yaml file for ASR adaptation using NeMo from the &lt;a href="https://github.com/NVIDIA-NeMo/NeMo/blob/main/examples/asr/conf/asr_adapters/asr_adaptation.yaml"&gt;NeMo repository&lt;/a&gt; to &lt;code&gt;asr_benchmark/assets/asr_adaptation.yaml&lt;/code&gt;. This file gives us a reasonable default starting-point configuration.&lt;/li&gt;
&lt;li&gt;We want to overtly set some parameters, like:&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pretrained_model&lt;/code&gt; (to specify &lt;code&gt;parakeet-tdt-0.6b-v2&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;manifest_filepath&lt;/code&gt; (to point to our manifest locations)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;channel_selector&lt;/code&gt; (to ensure audio is converted to the expected mono format if it is stereo in raw form)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;max_steps&lt;/code&gt; (to control how many training steps we complete before we stop training)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;For these parameters, we override the default settings in the .yaml using &lt;code&gt;OmegaConf.merge&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;While we do not implement hyperparameter tuning here, it is recommended for competitors.&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[&amp;nbsp;]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# ── Hardware-dependent settings ──────────────────────────────────────────────&lt;/span&gt;
&lt;span class="c1"&gt;# Adjust these to match your GPU memory and CPU cores.&lt;/span&gt;
&lt;span class="n"&gt;DEVICES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;PRECISION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;bf16-mixed&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;BATCH_SIZE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;
&lt;span class="n"&gt;NUM_WORKERS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;

&lt;span class="c1"&gt;# ── Load NeMo adapter defaults ───────────────────────────────────────────────&lt;/span&gt;
&lt;span class="n"&gt;yaml_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PROJECT_ROOT&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;asr_benchmark&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;assets&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;asr_adaptation.yaml&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;cfg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;OmegaConf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;yaml_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# ── Training overrides ───────────────────────────────────────────────────────&lt;/span&gt;
&lt;span class="n"&gt;overrides&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;OmegaConf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;&amp;quot;model&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="s2"&gt;&amp;quot;pretrained_model&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;nvidia/parakeet-tdt-0.6b-v2&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s2"&gt;&amp;quot;adapter&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;adapter_name&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;asr_children_orthographic&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;adapter_module_name&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;encoder&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;linear&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;in_features&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="s2"&gt;&amp;quot;train_ds&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;manifest_filepath&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;train_manifest_path&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;batch_size&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BATCH_SIZE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;num_workers&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;NUM_WORKERS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;use_lhotse&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;channel_selector&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;average&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="s2"&gt;&amp;quot;validation_ds&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;manifest_filepath&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;val_manifest_path&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;batch_size&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BATCH_SIZE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;num_workers&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;NUM_WORKERS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;use_lhotse&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;channel_selector&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;average&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="s2"&gt;&amp;quot;optim&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;lr&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.001&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;weight_decay&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="s2"&gt;&amp;quot;trainer&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="s2"&gt;&amp;quot;devices&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DEVICES&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s2"&gt;&amp;quot;precision&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;PRECISION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s2"&gt;&amp;quot;strategy&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;auto&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s2"&gt;&amp;quot;max_epochs&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;SAMPLE&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s2"&gt;&amp;quot;max_steps&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;SAMPLE&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s2"&gt;&amp;quot;val_check_interval&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;SAMPLE&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s2"&gt;&amp;quot;enable_progress_bar&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="s2"&gt;&amp;quot;exp_manager&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="s2"&gt;&amp;quot;exp_dir&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PROJECT_ROOT&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;models&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;orthographic_benchmark_nemo&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;cfg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;OmegaConf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;overrides&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="3.-Define-Trainer"&gt;3. Define Trainer&lt;a class="anchor-link" href="#3.-Define-Trainer"&gt;&amp;#182;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The Trainer orchestrates the training loop across devices, delegating tensor operations to PyTorch's backend. We initiate the trainer with the &lt;code&gt;OmegaConf&lt;/code&gt; config object we made above, and then set up an experiment manager to handle logging, checkpoint saving, and saving artifacts to disk.&lt;/p&gt;
&lt;p&gt;Note we use the cell magic &lt;a href="https://ipython.readthedocs.io/en/9.2.0/interactive/magics.html#cellmagic-capture"&gt;&lt;code&gt;%%capture&lt;/code&gt;&lt;/a&gt; below to hide long cell outputs for readability.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[&amp;nbsp;]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;%%capture&lt;/span&gt;
&lt;span class="n"&gt;trainer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pl&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Trainer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;resolve_trainer_cfg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;trainer&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;exp_log_dir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;exp_manager&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;trainer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;exp_manager&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="4.-Data-and-Model-Setup"&gt;4. Data and Model Setup&lt;a class="anchor-link" href="#4.-Data-and-Model-Setup"&gt;&amp;#182;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;We load the pretrained model by fetching the model from our config first and then patching it for adapter support. Then, we load the model weights.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[&amp;nbsp;]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;%%capture&lt;/span&gt;
&lt;span class="n"&gt;model_cfg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ASRModel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;from_pretrained&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pretrained_model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;return_config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;update_model_config_to_support_adapter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model_cfg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ASRModel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;from_pretrained&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pretrained_model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;override_config_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;model_cfg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;trainer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;trainer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;We disable the CUDA graph decoder because it is incompatible with current PyTorch (2.10).&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[&amp;nbsp;]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;%%capture&lt;/span&gt;
&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;open_dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decoding&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;greedy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;use_cuda_graph_decoder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;change_decoding_strategy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decoding&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;Next, we prepare our data by merging our parameter overrides (batch size, num workers, etc.) into the model's built-in data config. Note that while keys not present in the original config are dropped, whitelisted keys are always injected.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[23]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;train_ds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;update_model_cfg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;train_ds&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;train_ds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setup_training_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;train_ds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;validation_ds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;update_model_cfg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;validation_ds&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;validation_ds&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setup_multiple_validation_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;validation_ds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stdout output_text"&gt;
&lt;pre&gt;Injecting white listed key `num_workers` into config
Injecting white listed key `pin_memory` into config
Injecting white listed key `batch_size` into config
Injecting white listed key `use_lhotse` into config
Injecting white listed key `channel_selector` into config
Removing unavailable key from config : is_tarred
Removing unavailable key from config : shuffle_n
Removing unavailable key from config : bucketing_strategy
Removing unavailable key from config : bucketing_batch_size
[NeMo I 2026-02-26 04:58:53 nemo_logging:393] Dataset loaded with 277410 files totalling 244.57 hours
[NeMo I 2026-02-26 04:58:53 nemo_logging:393] 5 files were filtered totalling 0.00 hours
Injecting white listed key `num_workers` into config
Injecting white listed key `pin_memory` into config
Injecting white listed key `batch_size` into config
Injecting white listed key `use_lhotse` into config
Injecting white listed key `channel_selector` into config
[NeMo I 2026-02-26 04:58:55 nemo_logging:393] Dataset loaded with 69352 files totalling 61.52 hours
[NeMo I 2026-02-26 04:58:55 nemo_logging:393] 2 files were filtered totalling 0.00 hours
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;We also need to set the optimization function, which controls how the model’s weights are updated using gradients to minimize the loss and improve performance during training. We use AdamW with cosine annealing schedule and 10% warmup ratio as a starting point.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[&amp;nbsp;]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;%%capture&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setup_optimization&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;optim&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[&amp;nbsp;]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Configure spec augmentation from config if available, otherwise disable it.&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;spec_augment&amp;quot;&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;spec_augmentation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;from_config_dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;spec_augment&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;spec_augmentation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;
    &lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;spec_augment&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="5.-Set-up-Adapter"&gt;5. Set up Adapter&lt;a class="anchor-link" href="#5.-Set-up-Adapter"&gt;&amp;#182;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;An adapter is a small neural network module that learns to transform the pretrained model's internal representations specifically for child speech. Rather than retraining the entire model, we insert lightweight adapters into each layer of the encoder, the part of the model that processes audio features.&lt;/p&gt;
&lt;p&gt;We add a linear adapter to every encoder layer, then freeze the base model and unfreeze only the adapter weights. This keeps training efficient—only ~0.1% of parameters are trainable, while (hopefully) allowing the adapter to learn the acoustic and linguistic patterns unique to children's voices.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[&amp;nbsp;]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;%%capture&lt;/span&gt;
&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;open_dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;adapter_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;adapter_name&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;adapter_type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;adapter_type&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;adapter_module_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;adapter_module_name&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;adapter_state_dict_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;adapter_state_dict_name&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;adapter_type_cfg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;adapter_type&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;adapter_module_name&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;:&amp;quot;&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;adapter_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;adapter_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;adapter_module_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;adapter_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;

    &lt;span class="n"&gt;adapter_global_cfg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;adapter_global_cfg_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;adapter_global_cfg&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;add_global_adapter_cfg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;adapter_global_cfg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_adapter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;adapter_type_cfg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_adapter_available&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_enabled_adapters&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_enabled_adapters&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;freeze&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;train&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;unfreeze_enabled_adapters&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[&amp;nbsp;]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;total_params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;numel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="n"&gt;trainable_params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;numel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;requires_grad&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Total parameters:     &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;total_params&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Trainable parameters: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;trainable_params&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;trainable_params&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;total_params&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.2f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;%)&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stdout output_text"&gt;
&lt;pre&gt;Total parameters:     619,447,942
Trainable parameters: 1,622,016 (0.26%)
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="6.-Train"&gt;6. Train&lt;a class="anchor-link" href="#6.-Train"&gt;&amp;#182;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Let's adapt the pretrained model to children's voices!&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[&amp;nbsp;]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;%%capture&lt;/span&gt;
&lt;span class="n"&gt;trainer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;We've hidden the training cell outputs to avoid printing many lines of logs. Below are a few key snippets of the log output that we saw when training:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Name&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Type&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Params&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Mode&lt;span class="w"&gt; &lt;/span&gt;
--------------------------------------------------------------------------------
&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;preprocessor&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;AudioToMelSpectrogramPreprocessor&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;train
&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;encoder&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ConformerEncoderAdapter&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;610&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;M&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;train
&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;decoder&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;RNNTDecoder&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;.2&lt;span class="w"&gt; &lt;/span&gt;M&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;train
&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;joint&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;RNNTJoint&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.7&lt;span class="w"&gt; &lt;/span&gt;M&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;train
&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;loss&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;RNNTLoss&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;train
&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;spec_augmentation&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;SpectrogramAugmentation&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;train
&lt;span class="m"&gt;6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;wer&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;WER&lt;span class="w"&gt;                               &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;train
--------------------------------------------------------------------------------
&lt;span class="m"&gt;1&lt;/span&gt;.6&lt;span class="w"&gt; &lt;/span&gt;M&lt;span class="w"&gt;     &lt;/span&gt;Trainable&lt;span class="w"&gt; &lt;/span&gt;params
&lt;span class="m"&gt;617&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;M&lt;span class="w"&gt;     &lt;/span&gt;Non-trainable&lt;span class="w"&gt; &lt;/span&gt;params
&lt;span class="m"&gt;619&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;M&lt;span class="w"&gt;     &lt;/span&gt;Total&lt;span class="w"&gt; &lt;/span&gt;params
&lt;span class="m"&gt;2&lt;/span&gt;,477.792&lt;span class="w"&gt; &lt;/span&gt;Total&lt;span class="w"&gt; &lt;/span&gt;estimated&lt;span class="w"&gt; &lt;/span&gt;model&lt;span class="w"&gt; &lt;/span&gt;params&lt;span class="w"&gt; &lt;/span&gt;size&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;MB&lt;span class="o"&gt;)&lt;/span&gt;

Epoch&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;global&lt;span class="w"&gt; &lt;/span&gt;step&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;500&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;val_wer&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;reached&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.20008&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;best&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.20008&lt;span class="o"&gt;)&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;saving&lt;span class="w"&gt; &lt;/span&gt;model&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/models/orthographic_benchmark_nemo/ASR-Adapter/2026-02-26_04-58-33/checkpoints/ASR-Adapter--val_wer=0.2001-epoch=0.ckpt&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;as&lt;span class="w"&gt; &lt;/span&gt;top&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;
...
Epoch&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;global&lt;span class="w"&gt; &lt;/span&gt;step&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5000&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;val_wer&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;reached&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.16359&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;best&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.16359&lt;span class="o"&gt;)&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;saving&lt;span class="w"&gt; &lt;/span&gt;model&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/models/orthographic_benchmark_nemo/ASR-Adapter/2026-02-26_04-58-33/checkpoints/ASR-Adapter--val_wer=0.1636-epoch=0.ckpt&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;as&lt;span class="w"&gt; &lt;/span&gt;top&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;
&lt;span class="sb"&gt;`&lt;/span&gt;Trainer.fit&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;stopped:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nv"&gt;max_steps&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;5000&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;reached.
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;Because we configured &lt;code&gt;max_steps&lt;/code&gt; to be 5,000, we stopped training before we completed the first epoch.&lt;/p&gt;
&lt;p&gt;We need to save the final results. We save the adapter weights to a standalone file alongside the NeMo checkpoints.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[28]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;adapter_state_dict_name&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;state_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;exp_log_dir&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;exp_log_dir&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getcwd&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;ckpt_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;checkpoints&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ckpt_path&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;state_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ckpt_path&lt;/span&gt;
    &lt;span class="n"&gt;state_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;adapter_state_dict_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;save_adapters&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state_path&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="7.-Evaluation"&gt;7. Evaluation&lt;a class="anchor-link" href="#7.-Evaluation"&gt;&amp;#182;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Now it's time to assess how well our adapted model performs. We load the best trained checkpoint from disk and run inference across the entire validation set. The model transcribes each audio clip, and we compare these predictions against the reference transcriptions using Word Error Rate (WER). The WER calculation is copied exactly from the &lt;a href="https://github.com/drivendataorg/childrens-speech-recognition-runtime/blob/main/metric/score.py"&gt;runtime repository&lt;/a&gt;.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[&amp;nbsp;]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;%%capture&lt;/span&gt;
&lt;span class="c1"&gt;# Load our model checkpoint&lt;/span&gt;
&lt;span class="n"&gt;nemo_ckpts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;exp_log_dir&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;checkpoints&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;glob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;*.nemo&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;nemo_ckpts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;FileNotFoundError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;No .nemo checkpoints found in &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;exp_log_dir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/checkpoints/&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;best_ckpt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nemo_ckpts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Loading checkpoint: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;best_ckpt&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;eval_model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ASRModel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;restore_from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;best_ckpt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;map_location&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;cuda&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;open_dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;eval_model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;eval_model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decoding&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;greedy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;use_cuda_graph_decoder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;
&lt;span class="n"&gt;eval_model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;change_decoding_strategy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;eval_model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decoding&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;patch_transcribe_lhotse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;eval_model&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[&amp;nbsp;]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Run inference&lt;/span&gt;
&lt;span class="n"&gt;val_manifest_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;validation_ds&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;manifest_filepath&lt;/span&gt;
&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;val_manifest_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;val_entries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;audio_files&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;audio_filepath&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;val_entries&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;references&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;val_entries&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Running inference on &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;audio_files&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; validation utterances...&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;raw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;eval_model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transcribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;audio_files&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;batch_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;BATCH_SIZE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;channel_selector&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;average&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;raw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;predictions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;hasattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stdout output_text"&gt;
&lt;pre&gt;Running inference on 69354 validation utterances...
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;Before scoring, let's remove any example where the normalized label is an empty string.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[31]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;normalizer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EnglishTextNormalizer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;english_spelling_normalizer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;filtered&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;references&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;predictions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;normalizer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;references&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;predictions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;filtered&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;wer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;score_wer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;references&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;predictions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Validation WER: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;wer&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.4f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Sample predictions:&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pred&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;references&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;predictions&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]):&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;  REF:  &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;  PRED: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;pred&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stdout output_text"&gt;
&lt;pre&gt;Validation WER: 0.1546

Sample predictions:
  REF:  ar
  PRED: ar

  REF:  they were going on a walk to a picnic
  PRED: they were going on a walk to a picnic

  REF:  a deer is little
  PRED: a gear and a skin

  REF:  what&amp;#39;s happening is when you when there&amp;#39;s an op when there&amp;#39;s a closed circuit the there is a the post but the wire&amp;#39;s wrapped around it is carrying some washers and when it
  PRED: what&amp;#39;s happening is when you when there&amp;#39;s an o when there&amp;#39;s a closed circuit the there is a the post with the wires wrapped around it is carrying some washers and when it

  REF:  blue
  PRED: blue

&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;Our Validation WER after adapting the model is 0.15!&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;hr&gt;
&lt;h1 id="Step-3:-Make-your-submission"&gt;Step 3: Make your submission&lt;a class="anchor-link" href="#Step-3:-Make-your-submission"&gt;&amp;#182;&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;Since this is a code execution competition, we will submit our model weights and code rather than predictions. See the &lt;a href="https://www.drivendata.org/competitions/308/childrens-word-asr/page/978/"&gt;code submission format&lt;/a&gt; webpage for more information.&lt;/p&gt;
&lt;p&gt;The general steps to follow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Develop inference code&lt;/li&gt;
&lt;li&gt;Test your submission locally&lt;/li&gt;
&lt;li&gt;Package submission&lt;/li&gt;
&lt;li&gt;Make a smoke test submission&lt;/li&gt;
&lt;li&gt;Once you have successfully debugged your submission, submit it for scoring on the full test set!&lt;/li&gt;
&lt;/ol&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="Develop-Inference-Code"&gt;Develop Inference Code&lt;a class="anchor-link" href="#Develop-Inference-Code"&gt;&amp;#182;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;We need to set up a repository with a &lt;code&gt;main.py&lt;/code&gt; Python script which performs inference in the &lt;a href="https://github.com/drivendataorg/childrens-speech-recognition-runtime/tree/main"&gt;competition execution environment&lt;/a&gt; and writes our predictions to the required output file.  During code execution, our submission will be unzipped and run in the cloud compute cluster. The container will run your &lt;code&gt;main.py&lt;/code&gt; script.&lt;/p&gt;
&lt;p&gt;Our code must write a JSON Lines (JSONL) file containing one prediction per utterance.&lt;/p&gt;
&lt;p&gt;Each line must include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;utterance_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;orthographic_text&lt;/code&gt;: UTF-8, standard English transcription of the utterance
The submission should be written to ./submission/submission.jsonl relative to the working directory.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See more details in the &lt;a href="https://www.drivendata.org/competitions/308/childrens-word-asr/page/978/"&gt;code submission format&lt;/a&gt; webpage and in the &lt;a href="https://github.com/drivendataorg/childrens-speech-recognition-runtime/tree/main/examples/word/parakeet"&gt;example submission&lt;/a&gt;.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;In our &lt;code&gt;main.py&lt;/code&gt;, we load the trained adapter checkpoint from disk, restore the NeMo model, and run inference on all test utterances in batches. The script reads audio file paths from the test manifest, transcribes them using the adapted model, and writes the predicted transcriptions to the submission file in the required format. We sort utterances by duration before inference (longest first) to improve GPU memory efficiency during batching.&lt;/p&gt;
&lt;p&gt;See &lt;code&gt;orthographic_submission/main.py&lt;/code&gt; in the &lt;a href="https://github.com/drivendataorg/childrens-speech-recognition-benchmark-pub/blob/main/orthographic_submission/main.py"&gt;benchmark repository&lt;/a&gt; for the details.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="Test-Submission-Locally"&gt;Test Submission Locally&lt;a class="anchor-link" href="#Test-Submission-Locally"&gt;&amp;#182;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;You should first and foremost test your submission locally. This is a great way to work out any bugs and ensure that your model performs inference successfully. See the &lt;a href="https://github.com/drivendataorg/childrens-speech-recognition-runtime/tree/main?tab=readme-ov-file#testing-a-submission-locally"&gt;runtime repository's README&lt;/a&gt; for further instructions.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;The &lt;a href="https://github.com/drivendataorg/childrens-speech-recognition-benchmark-pub"&gt;benchmark repository&lt;/a&gt; provides a useful justfile command to run the trained model on a few sample files.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Run inference using data-demo/word/ to test orthographic submission&lt;/span&gt;
test-orthographic:
&lt;span class="w"&gt;    &lt;/span&gt;uv&lt;span class="w"&gt; &lt;/span&gt;run&lt;span class="w"&gt; &lt;/span&gt;orthographic_submission/main.py&lt;span class="w"&gt; &lt;/span&gt;models/orthographic_benchmark_nemo/ASR-Adapter-best.nemo&lt;span class="w"&gt; &lt;/span&gt;data-demo/word/utterance_metadata.jsonl
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="Package-Submission"&gt;Package Submission&lt;a class="anchor-link" href="#Package-Submission"&gt;&amp;#182;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Now we will package up our model and inference code into a zip file for predicting on the test set in the runtime container. The benchmark repository provides a justfile command to do this. The justfile finds the latest models weights, and then creates a zipfile combining those model weights with &lt;code&gt;/orthographic_submissions/main.py&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pack-orthographic:
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;#!/usr/bin/env bash&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-euo&lt;span class="w"&gt; &lt;/span&gt;pipefail
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;latest&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;ls&lt;span class="w"&gt; &lt;/span&gt;-td&lt;span class="w"&gt; &lt;/span&gt;models/orthographic_benchmark_nemo/ASR-Adapter/*/checkpoints/ASR-Adapter.nemo&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;head&lt;span class="w"&gt; &lt;/span&gt;-1&lt;span class="k"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;ln&lt;span class="w"&gt; &lt;/span&gt;-sf&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;latest&lt;/span&gt;&lt;span class="p"&gt;#models/orthographic_benchmark_nemo/&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;models/orthographic_benchmark_nemo/ASR-Adapter-best.nemo
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Updated ASR-Adapter-best.nemo -&amp;gt; &lt;/span&gt;&lt;span class="nv"&gt;$latest&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;rm&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;orthographic_submission.zip
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;orthographic_submission&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;zip&lt;span class="w"&gt; &lt;/span&gt;-r&lt;span class="w"&gt; &lt;/span&gt;../orthographic_submission.zip&lt;span class="w"&gt; &lt;/span&gt;main.py&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;models/orthographic_benchmark_nemo&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;zip&lt;span class="w"&gt; &lt;/span&gt;-r&lt;span class="w"&gt; &lt;/span&gt;../../orthographic_submission.zip&lt;span class="w"&gt; &lt;/span&gt;ASR-Adapter-best.nemo&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;Another packing command is available on the runtime repo's orthographic &lt;a href="https://github.com/drivendataorg/childrens-speech-recognition-runtime/blob/main/examples/word/parakeet/pack_submission.sh"&gt;example&lt;/a&gt;.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="Make-a-Smoke-Test-Submission"&gt;Make a Smoke Test Submission&lt;a class="anchor-link" href="#Make-a-Smoke-Test-Submission"&gt;&amp;#182;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;We provide a "smoke test" environment that replicates the test inference runtime but runs only on a small set of audio files. In the smoke test runtime, data/ contains 9,000 audio files from the training set.&lt;/p&gt;
&lt;p&gt;Let's submit our submission.zip to a smoke test on the platform.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;div align="center"&gt;
&lt;img src="https://www.drivendata.co/images/gates_asr_smoke_test_ortho.png" alt="Screenshot of the competition submission page showing the options of a normal submission or a smoke test submission." width="70%"&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;After hitting "Submit" you can see the job in the queue—it will progress from "Uploading" to "Pending" to "Starting" to "Running":&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;div align="center"&gt;
&lt;img src="https://www.drivendata.co/images/gates_asr_smoke_test_jobs_ortho.png" alt="Screenshot of the competition submission page showing a smoke test submission that is in progress." width="75%"&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;Once your submission reaches "Completed", head on over to the "Submissions" tab to see your smoke test score.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="Submit!"&gt;Submit!&lt;a class="anchor-link" href="#Submit!"&gt;&amp;#182;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;After you've made sure a smoke test submission runs without error, you're ready to submit the real deal! This adaptation of &lt;code&gt;parakeet-tdt-0.6b-v2&lt;/code&gt; results in a .2370 WER on the full test set.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;div align="center"&gt;
&lt;img src="https://www.drivendata.co/images/gates_asr_submission_ortho.png" alt="Screenshot of the competition submission page showing a successfully completed and scored full submission." width="75%"&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;We encourage you to also be mindful of the submission limit (3 per 7 days at most) and others' code jobs. Canceled jobs do not count against the submission limit.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;This is of course just one of the approaches you could take for this challenge. Some resources that may be helpful in getting started are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Hugging Face &lt;a href="https://huggingface.co/learn/audio-course/en/chapter5/introduction"&gt;Automatic Speech Recognition&lt;/a&gt; unit of their Audio Course.&lt;/li&gt;
&lt;li&gt;The Hugging Face &lt;a href="https://huggingface.co/spaces/hf-audio/open_asr_leaderboard"&gt;Open ASR Leaderboard&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;A &lt;a href="https://github.com/Deep-unlearning/Finetune-Parakeet"&gt;Parakeet fine-tuning implementation&lt;/a&gt; from Deep-unlearning.&lt;/li&gt;
&lt;li&gt;NeMo example &lt;a href="https://github.com/NVIDIA-NeMo/NeMo/tree/main/examples/asr/asr_adapters"&gt;ASR adaptation&lt;/a&gt; (which has a similar implementation as this blog post).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to share any of your findings or have questions, feel free to post on the &lt;a href="https://community.drivendata.org/c/childrens-asr/109"&gt;community forum&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Good luck!&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
 


&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = '//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML';
    mathjaxscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: 'center'," +
        "    displayIndent: '0em'," +
        "    showMathMenu: true," +
        "    tex2jax: { " +
        "        inlineMath: [ ['$','$'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        " linebreaks: { automatic: true, width: '95% container' }, " +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'black ! important'} }" +
        "    } " +
        "}); ";
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;
</content><category term="blog"></category><category term="tutorial"></category><category term="competition"></category><category term="audio data"></category><category term="education"></category></entry><entry><title>5 Challenges of Creating Beautiful Data Pipelines</title><link href="https://www.drivendata.co/blog/pipeline-challenges" rel="alternate"></link><published>2026-02-18T00:00:00-05:00</published><updated>2026-02-18T00:00:00-05:00</updated><author><name>Jackie Glasheen</name></author><id>tag:www.drivendata.co,2026-02-18:/blog/pipeline-challenges</id><summary type="html">&lt;p&gt;A look into the hidden complexity of data pipelines, and some suggestions to improve the process.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Almost all projects we work on at DrivenData share a fundamental need: getting data from a raw form into a final, processed form. Sometimes, a project's core goal is to create a data pipeline that will run in perpetuity and continuously process live feeds of data. More often, our data pipelines are enabling processes that serve a larger purpose, such as preparing data for use in training a machine learning model.&lt;/p&gt;
&lt;p&gt;While most pipelines start out seeming like a simple set of sequential steps, the reality is that pipeline code often becomes a deep source of technical debt. Over time, complexity accumulates as capabilities are added. For example, we may need a development version that runs on less data. We may need separate production and dev environments. We need audit trails and observability to make sure everything processed correctly. We need error capturing and recovery, and we need the right decisions about when to stop and when to keep processing. We need the code to use resources efficiently through mechanisms like parallelization and caching. We need to be smart about incrementally updating versus re-doing every task from scratch. We need to augment a pipeline step with a different dataset that has separate re-process conditions. Soon, the code is a complex tangle that is hard to reason about and maintain.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this blog post, I’ll discuss some of the challenges of creating data pipelines for data science projects.&lt;/strong&gt; We hope to bring clarity to what makes pipelining complex, simplify implementation decisions, and help data science teams make &lt;em&gt;beautiful&lt;/em&gt; data pipelines from the start.&lt;/p&gt;
&lt;h2 id="why-is-something-seemingly-simple-so-hard"&gt;Why is something seemingly simple so hard?&lt;a class="headerlink" href="#why-is-something-seemingly-simple-so-hard" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Imagine you need to prepare news article data to train a machine learning model to classify whether an article discusses data, AI, or machine learning. That doesn’t sound too hard! A simple Python implementation could look like this:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;sklearn.model_selection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;train_test_split&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;sklearn.pipeline&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Pipeline&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;sklearn.feature_extraction.text&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;TfidfVectorizer&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;sklearn.linear_model&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;LogisticRegression&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_data_directory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;path/to/raw_data&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Step 1: Load Data From a Folder&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;load_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_data_directory&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Step 2: Preprocess Data&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;preprocess_dataframe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Step 3: Train/Test Split&lt;/span&gt;
    &lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;train_test_split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;article_text&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;label&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;test_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;random_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Step 4: Define Vectorizer and Classifier&lt;/span&gt;
    &lt;span class="n"&gt;text_clf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Pipeline&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;vectorizer&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TfidfVectorizer&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;classifier&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LogisticRegression&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="c1"&gt;# Step 5: Train Model&lt;/span&gt;
    &lt;span class="n"&gt;text_clf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_train&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Step 6: Evaluate Model&lt;/span&gt;
    &lt;span class="n"&gt;evaluate_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text_clf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_test&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;However, the &lt;code&gt;load_data&lt;/code&gt; and &lt;code&gt;preprocess_dataframe&lt;/code&gt; functions turn out to never be quite as simple as they seem. In the next sections, we will walk through a few common pain points that show up as you move from the drawing board to a fleshed-out pipeline.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="1-the-cold-start-problem"&gt;1. The cold start problem&lt;a class="headerlink" href="#1-the-cold-start-problem" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A new pipeline starts as a blank slate, and figuring out where to begin isn’t always obvious. There are countless ways to organize files and structure steps. Figuring out the right order of operations can take some work.&lt;/p&gt;
&lt;p&gt;In our data-topic detection example, you might wonder: Should we store an intermediary data file with article text and metadata when we preprocess it? What metadata should we even track? When should we deduplicate the article data? What are the upstream dependencies of our processing steps?&lt;/p&gt;
&lt;p&gt;Each of these decisions starts to introduce complexity into what was a simple pipeline.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Suggestions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To start, sketch out the pipeline process visually to clarify dependencies and to ground alignment conversations about the pipeline in something concrete.&lt;/li&gt;
&lt;li&gt;As you structure the pipeline, separate transformation logic from pipeline orchestration (the code that runs each step). In our data-topic detection model starter code, we were on the right track with a &lt;code&gt;main&lt;/code&gt; function as the entry point to the pipeline that calls external helper functions (&lt;code&gt;load_data()&lt;/code&gt;, &lt;code&gt;preprocess_dataframe()&lt;/code&gt;, and &lt;code&gt;evaluate_model()&lt;/code&gt;) in sequential steps.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cookiecutter-data-science.drivendata.org/opinions/#:~:text=Data%20analysis%20is%20a%20directed%20acyclic%20graph"&gt;Structure pipeline steps as a directed acyclic graph&lt;/a&gt; ("DAG") so that each step depends only on its inputs and produces outputs for downstream steps, and each step flows forward to the next without ever looping back on itself. Relatedly, &lt;a href="https://cookiecutter-data-science.drivendata.org/opinions/#:~:text=Raw%20data%20is%20immutable"&gt;raw data must be treated as immutable&lt;/a&gt; (that is, don't overwrite the original data files; instead, save the results of the pipeline as new output files).&lt;/li&gt;
&lt;li&gt;Follow the software engineering principle of separation of concerns by breaking down complex logic and processing into modular functions that complete distinct objectives. Separation of concerns is a fundamental part of developing organized and clear pipelines. Modularity also makes each of the processing steps independently testable so you can have a test suite that ensures each granular step is doing what you expect. In our data-topic detection pipeline, we should isolate each task in our data preprocessing step and make separate functions that complete single objectives or operations:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;remove_duplicates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# TODO: implement deduplication&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;drop_missing_labels&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;label_col&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;label&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# TODO: drop rows where label_col is null&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;normalize_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text_col&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;article_text&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# TODO: normalization steps&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;encode_labels&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;label_col&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;label&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# TODO: map label values to numeric codes&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Design the pipeline to be fully re-runnable end-to-end with minimal involvement. For example, make &lt;code&gt;main()&lt;/code&gt; runnable from the command line by adding an entry point so that the pipeline runs when you execute &lt;code&gt;python identify_data_topics.py&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;When we start to need more options and arguments at the command line, we like &lt;a href="https://cyclopts.readthedocs.io/en/latest/index.html"&gt;&lt;code&gt;Cyclopts&lt;/code&gt;&lt;/a&gt; for building command-line interfaces.&lt;/li&gt;
&lt;li&gt;It may be helpful to use DrivenData's &lt;a href="https://cookiecutter-data-science.drivendata.org/"&gt;Cookiecutter Data Science package&lt;/a&gt; when creating a new repository to house your pipeline. Using a well-defined, standard project structure will &lt;a href="https://cookiecutter-data-science.drivendata.org/why/"&gt;benefit you and your team in the long run&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id="2-adding-basic-pipeline-features-is-a-worthwhile-investment"&gt;2. Adding basic pipeline features is a worthwhile investment&lt;a class="headerlink" href="#2-adding-basic-pipeline-features-is-a-worthwhile-investment" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stringing the steps together isn’t enough. As soon as you start running the pipeline, you'll realize you have no idea what is happening while you are running it. Add-ons such as logging, metadata tracking, and error handling will reduce debugging time, yield results you can be more confident in, and help identify bottlenecks in the process. These add-ons are generally worth it and justify budgeting the up-front implementation time.&lt;/p&gt;
&lt;p&gt;In the data-topic detection pipeline, logs could show exactly where a run failed and how long each step took. Adding tools to preprocess news articles in parallel can substantially reduce processing time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Suggestions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add lightweight logging to capture per-task progress and errors, making debugging easier. We like &lt;a href="https://loguru.readthedocs.io/en/stable/"&gt;&lt;code&gt;Loguru&lt;/code&gt;&lt;/a&gt;, an intuitive Python logging library.&lt;/li&gt;
&lt;li&gt;Speed up long processes by parallelizing tasks (running independent work concurrently) where possible. We often use &lt;a href="https://tqdm.github.io/docs/contrib.concurrent/"&gt;&lt;code&gt;tqdm&lt;/code&gt;&lt;/a&gt;, specifically the &lt;code&gt;process_map&lt;/code&gt; and &lt;code&gt;thread_map&lt;/code&gt; concurrent versions.&lt;/li&gt;
&lt;li&gt;Despite best efforts, pipeline runs often unexpectedly fail because of data errors or edge cases. Disk &lt;a href="https://en.wikipedia.org/wiki/Cache_(computing)"&gt;caching&lt;/a&gt; computationally expensive steps can be a huge time saver in these cases because it enables you to resume progress where you left off just before the error arose in a task rather than restarting all computations. The &lt;a href="https://grantjenks.com/docs/diskcache/api.html#diskcache.Cache.memoize"&gt;&lt;code&gt;@memoize&lt;/code&gt; decorator&lt;/a&gt; works well for caching the results of functions.&lt;/li&gt;
&lt;li&gt;Track and maintain metadata such as file hashes (which are fixed-length identifiers generated from a file's content using &lt;a href="https://en.wikipedia.org/wiki/Hash_function"&gt;hash functions&lt;/a&gt;), unique IDs, and pipeline version for reproducibility. In our data-topic detection example, you could generate and track hashes of the article text with a function to confirm data isn’t being corrupted run-to-run. (Notice we also have logging and parallelization at the task level in this example!):&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;hashlib&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;pandas&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;loguru&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;logger&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tqdm.contrib.concurrent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;process_map&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;hash_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;hashlib&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md5&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hexdigest&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;hash_article_texts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;Add a &amp;#39;text_hash&amp;#39; column to the DataFrame containing MD5 hashes of the &amp;#39;article_text&amp;#39; column.&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Hashing &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; articles&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text_hash&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;process_map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hash_text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;article_text&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tolist&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Finished generating text hashes&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;If the pipeline writes files, add an &lt;code&gt;overwrite&lt;/code&gt; parameter that raises an error (or skips writing the file) if a file already exists and &lt;code&gt;overwrite&lt;/code&gt; is set to &lt;code&gt;False&lt;/code&gt;. This prevents accidentally overwriting existing files on subsequent pipeline runs.&lt;/li&gt;
&lt;li&gt;Consider adding a &lt;code&gt;debug&lt;/code&gt; mode parameter to your pipeline that, when activated, runs the pipeline on a small sample of data so you can test changes quickly and make sure the whole pipeline runs as expected.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id="3-varied-inputs-lead-to-complicated-code"&gt;3. Varied inputs lead to complicated code&lt;a class="headerlink" href="#3-varied-inputs-lead-to-complicated-code" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Inevitably, project inputs expand beyond a single clean data source. Each CSV file, scraped HTML document, JSON object, and API call comes with its own quirks and processing needs. Real-world data is messy: missing labels, odd encodings, and inconsistent formats often only reveal themselves once the pipeline runs at scale. And it’s not just data; every parameter or configuration you add can shift assumptions and introduce new branches in the logic.&lt;/p&gt;
&lt;p&gt;In our data-topic detection pipeline, expanding beyond a single CSV with news articles could mean that you need to add separate cleaning steps for other formats. You might also discover that some articles in the training data are missing a label indicating whether the article discusses data, AI, or machine learning, or are in another language, or have source text from multiple articles stuck together. You have to account for these edge cases in the pipeline.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Suggestions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Standardize and clean data early so later steps can assume consistent input. Preferably with a consistent, validated schema so malformed data fails early.&lt;/li&gt;
&lt;li&gt;Factor out shared utility functions instead of duplicating code for each source.&lt;/li&gt;
&lt;li&gt;Validate key assumptions early in the pipeline to catch anomalies, and fail loudly (e.g., raise errors) when those assumptions are not met. Raising errors early in the pipeline prevents wasted processing time for runs that fail. In our data-topic detection pipeline, if we need to ingest news articles from a website, our first step might be checking if the base URL for the website returns a "200" status code, indicating the website is active. If it doesn't return "200", we should skip processing because the site is down rather than issuing thousands of requests for articles that don't exist:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;requests&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;ingest_articles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;Ingest news articles from a website&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Base URL &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; returned status code &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# TODO: implement article ingestion&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;articles&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr /&gt;
&lt;h2 id="4-tech-debt-in-a-world-of-changing-requirements"&gt;4. Tech debt in a world of changing requirements&lt;a class="headerlink" href="#4-tech-debt-in-a-world-of-changing-requirements" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Project goals, requirements, and data formats change over time. This can create headaches when the existing pipeline needs to be refactored to account for processing conditions that didn’t initially exist. How will you handle backwards compatibility? Do you deprecate the "old way" of doing things entirely, or make the "old way" one of many processing options that can be triggered by calling certain parameters?&lt;/p&gt;
&lt;p&gt;To avoid tech debt, it’s tempting to design a pipeline that is scoped out to be compatible with many processing scenarios from the start. But this, too, comes with downsides, as code will often be unnecessarily complex to preserve flexibility that you might not actually need.&lt;/p&gt;
&lt;p&gt;In our example, maybe you first designed the pipeline to process a single labeled dataset. Later, you get access to additional datasets and decide you need to track metadata fields such as article author and publication date by source. Meeting these new needs means adjusting the data organization, adding new processing steps, and sometimes rethinking the overall pipeline structure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Suggestions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Changing goals, requirements, and data sources is sometimes unavoidable. Before diving into the refactor, visually map out options for updated pipelines, consider the level of effort and tradeoffs required for each option, and align with teammates on a course of action. We often make pipeline visualizations on simple annotated slides:
&lt;img alt="Data Pipeline Example" src="/images/data-pipeline-example.png" /&gt;&lt;/li&gt;
&lt;li&gt;Sprawling if/else logic across the pipelines for different data sources is a code smell. Your goal should be to standardize what you need to at the moment the data source is first initialized and then share as much unchanged pipeline code as possible.&lt;/li&gt;
&lt;li&gt;Tech debt comes into play for what packages and libraries you choose as well. When multiple library options are available, try to pick the most well-maintained and widely used libraries up front. Look at how long it's been since the most recent commit to the package's source code repository, and how many stars the repository has on GitHub. Well-maintained and widely used packages are less likely to introduce new bugs down the line as new versions of other dependencies are released.&lt;/li&gt;
&lt;li&gt;Be deliberate about where flexibility is truly valuable. Communicate with your team about the tradeoffs, and make simplifying assumptions where you can.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id="5-beauty-takes-time"&gt;5. Beauty takes time&lt;a class="headerlink" href="#5-beauty-takes-time" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There’s always a balance to strike between getting something working quickly and building something clean and easily maintainable. Extra beautification efforts, such as clear file names, informative comments, and tidy dataset creation, pay off in the long run. You or a teammate will inevitably return to make modifications to the pipeline, and clear, well-documented code will make it easier to understand and less prone to having bugs accidentally introduced when updating it. But, if there is a quick deadline, it may be reasonable to take some shortcuts.&lt;/p&gt;
&lt;p&gt;In our data-topic detection example, naming an intermediate dataset &lt;code&gt;processed_labeled_articles&lt;/code&gt; instead of &lt;code&gt;test_dataset_3&lt;/code&gt; makes the pipeline clearer without slowing you down. Refactoring article processing code that works, but is duplicative or inefficient, requires more effort; whether the refactor is worth it is a judgment call.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Suggestions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The level of investment in the pipeline development should be proportional to how long one run takes and how often it will be run end-to-end. If the completed pipeline will be run just once, it may be enough to make a pipeline that produces accurate results relatively fast. In cases where the pipeline will be run often, it is usually worth it to make the pipeline accurate, efficient, and refactored for clarity and maintainability. It is a good idea to align with your team on how much polish is needed before diving into any big code refactors.&lt;/li&gt;
&lt;li&gt;Pick descriptive names for files, functions, and outputs from the start.&lt;/li&gt;
&lt;li&gt;Include descriptive docstrings in functions. We've found that LLM coding assistants (e.g., Copilot) or tools that set up docstring structures (e.g., &lt;a href="https://marketplace.visualstudio.com/items?itemName=njpwerner.autodocstring"&gt;&lt;code&gt;autoDocstring&lt;/code&gt;&lt;/a&gt; extension for VS Code) make properly documenting functions quick and easy.&lt;/li&gt;
&lt;li&gt;Adding type hints (explicit input/output types in function signatures) is helpful for clarity and aids in error detection, especially when used alongside type-checking tools like &lt;a href="https://mypy-lang.org/"&gt;&lt;code&gt;MyPy&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://docs.astral.sh/ty/"&gt;&lt;code&gt;ty&lt;/code&gt;&lt;/a&gt;, and &lt;a href="https://microsoft.github.io/pyright/#/"&gt;&lt;code&gt;Pyright&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Refactor small inconsistencies as you go instead of letting them pile up. Likewise, format code as you go using automatic formatting tools, like &lt;a href="https://black.readthedocs.io/en/stable/"&gt;&lt;code&gt;Black&lt;/code&gt;&lt;/a&gt; or &lt;a href="https://docs.astral.sh/ruff/formatter/"&gt;&lt;code&gt;Ruff&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Pipelines are often parameterized: the code can be configured to run in different ways by changing inputs (parameters) rather than modifying the code itself. For each run of your pipeline, you should record the configuration used, environment variables, timestamps, and pointers to log files or outputs for future reference. You can, of course, do this recording manually (e.g., copying the exact command you ran, including parameters, and other pertinent information into a tracking file or notebook). But we recommend capturing and persisting this information automatically using config files/ environment variables for setting pipeline parameters and automated run tracking systems for recording run metadata.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id="embracing-challenging-pipelines-with-intentional-effort"&gt;Embracing challenging pipelines with intentional effort&lt;a class="headerlink" href="#embracing-challenging-pipelines-with-intentional-effort" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Making data pipelines is an aspect of most data science projects. And it often seems so simple from the outside: just move data from A to B. As soon as you start building, though, the hidden complexity emerges.&lt;/p&gt;
&lt;p&gt;There are many tools you can use to facilitate pipelines rather than creating Python pipelines from scratch (e.g., &lt;a href="https://dagster.io/"&gt;Dagster&lt;/a&gt;). But these tools add learning curves and complexity. It often makes sense to start an implementation from a Python script and then invest in more tooling later if needed. &lt;/p&gt;
&lt;p&gt;With some of the best practices we discuss, we can prevent some of the pain points and common pitfalls that domain-specific tools try to solve for and make it easy to have reliable, trustworthy pipelines with minimal dependencies and the right level of investment. &lt;/p&gt;
&lt;p&gt;For further reading about general data science best practices, DrivenData's ebook &lt;a href="https://drivendata.co/insights/"&gt;The 10 Rules of Reliable Data Science&lt;/a&gt; is publicly available for download.&lt;/p&gt;</content><category term="blog"></category><category term="insights"></category><category term="resources"></category></entry><entry><title>AI Agents in Data Science Competitions: Lessons from the Leaderboard</title><link href="https://www.drivendata.co/blog/ai-agents-data-science-competitions" rel="alternate"></link><published>2026-02-02T00:00:00-05:00</published><updated>2026-02-02T00:00:00-05:00</updated><author><name>Justin Chung Clark</name></author><id>tag:www.drivendata.co,2026-02-02:/blog/ai-agents-data-science-competitions</id><summary type="html">&lt;p&gt;How good are AI agents at data science? Here's what we've learned from initial experiments about what works, what doesn't, and what the future might hold.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;"Hi ChatGPT, please do data science on this dataset."&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;There's an odd tension at the heart of this quote. To those who are familiar with data science, it feels like a very wrong statement. To those who aren't familiar, it can feel totally fine. But AI is making that feeling of wrongness less and less relevant to actually getting results. AI agents are getting better, both at data science and at inferring motivation. So how good are they?&lt;/p&gt;
&lt;p&gt;Over the past year or so, we've been checking in periodically on agent performance at data science tasks. We've been using this specific framing: assume you know nothing about data science and just a little about using AI agents—how high can you make it in some of our previous data science competition leaderboards?&lt;/p&gt;
&lt;p&gt;Below we share some of the things we've seen work, not work, and some thoughts about the future.&lt;/p&gt;
&lt;h2 id="setup"&gt;Setup&lt;a class="headerlink" href="#setup" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We've iterated on our test setup a bit, but we've settled on simplicity. Using an agent can take many forms,&lt;sup id="fnref:1"&gt;&lt;a class="footnote-ref" href="#fn:1"&gt;1&lt;/a&gt;&lt;/sup&gt; but here we're showing the results of using Anthropic's &lt;a href="https://www.anthropic.com/claude-code"&gt;Claude Code&lt;/a&gt; (Opus 4.5) and OpenAI's &lt;a href="https://openai.com/index/openai-codex/"&gt;Codex&lt;/a&gt; (GPT 5.2 Codex).&lt;sup id="fnref:2"&gt;&lt;a class="footnote-ref" href="#fn:2"&gt;2&lt;/a&gt;&lt;/sup&gt; We set down a few rules:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Give each agent the same prompt and computing environment&lt;/li&gt;
&lt;li&gt;Give each 24 hours to run&lt;/li&gt;
&lt;li&gt;Give them moderately good hardware&lt;/li&gt;
&lt;li&gt;Poke them when they stop working, but don't steer using any data science knowledge&lt;sup id="fnref:3"&gt;&lt;a class="footnote-ref" href="#fn:3"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Otherwise, let them do anything they want&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We wanted each agent to have all the resources a competitor would have at the beginning of a competition, so we gave it all the documentation, the data, and the benchmark notebook that we publish to get competitors started in the right direction. Here is what the prompt looks like:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;I&lt;span class="w"&gt; &lt;/span&gt;need&lt;span class="w"&gt; &lt;/span&gt;you&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;create&lt;span class="w"&gt; &lt;/span&gt;a&lt;span class="w"&gt; &lt;/span&gt;high-performance&lt;span class="w"&gt; &lt;/span&gt;submission&lt;span class="w"&gt; &lt;/span&gt;file&lt;span class="w"&gt; &lt;/span&gt;for&lt;span class="w"&gt; &lt;/span&gt;a&lt;span class="w"&gt; &lt;/span&gt;data&lt;span class="w"&gt; &lt;/span&gt;science
competition.&lt;span class="w"&gt; &lt;/span&gt;The&lt;span class="w"&gt; &lt;/span&gt;goal&lt;span class="w"&gt; &lt;/span&gt;is&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;create&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;highest-performing&lt;span class="w"&gt; &lt;/span&gt;model&lt;span class="w"&gt; &lt;/span&gt;possible.
Think&lt;span class="w"&gt; &lt;/span&gt;as&lt;span class="w"&gt; &lt;/span&gt;much&lt;span class="w"&gt; &lt;/span&gt;as&lt;span class="w"&gt; &lt;/span&gt;you&lt;span class="w"&gt; &lt;/span&gt;possibly&lt;span class="w"&gt; &lt;/span&gt;can&lt;span class="w"&gt; &lt;/span&gt;about&lt;span class="w"&gt; &lt;/span&gt;ways&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;make&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;best&lt;span class="w"&gt; &lt;/span&gt;possible&lt;span class="w"&gt; &lt;/span&gt;model.
You&lt;span class="w"&gt; &lt;/span&gt;have&lt;span class="w"&gt; &lt;/span&gt;24&lt;span class="w"&gt; &lt;/span&gt;hours&lt;span class="w"&gt; &lt;/span&gt;from&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;moment&lt;span class="w"&gt; &lt;/span&gt;you&lt;span class="w"&gt; &lt;/span&gt;start.

**I&lt;span class="w"&gt; &lt;/span&gt;know&lt;span class="w"&gt; &lt;/span&gt;a&lt;span class="w"&gt; &lt;/span&gt;{metric}&lt;span class="w"&gt; &lt;/span&gt;of&lt;span class="w"&gt; &lt;/span&gt;less&lt;span class="w"&gt; &lt;/span&gt;than&lt;span class="w"&gt; &lt;/span&gt;{score}&lt;span class="w"&gt; &lt;/span&gt;is&lt;span class="w"&gt; &lt;/span&gt;possible.&lt;span class="w"&gt; &lt;/span&gt;Do&lt;span class="w"&gt; &lt;/span&gt;NOT&lt;span class="w"&gt; &lt;/span&gt;give&lt;span class="w"&gt; &lt;/span&gt;up&lt;span class="w"&gt; &lt;/span&gt;until
this&lt;span class="w"&gt; &lt;/span&gt;is&lt;span class="w"&gt; &lt;/span&gt;achieved.&lt;span class="w"&gt; &lt;/span&gt;Do&lt;span class="w"&gt; &lt;/span&gt;everything&lt;span class="w"&gt; &lt;/span&gt;you&lt;span class="w"&gt; &lt;/span&gt;can&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;achieve&lt;span class="w"&gt; &lt;/span&gt;this&lt;span class="w"&gt; &lt;/span&gt;in&lt;span class="w"&gt; &lt;/span&gt;under&lt;span class="w"&gt; &lt;/span&gt;24&lt;span class="w"&gt; &lt;/span&gt;hours.**

**Do&lt;span class="w"&gt; &lt;/span&gt;NOT&lt;span class="w"&gt; &lt;/span&gt;ask&lt;span class="w"&gt; &lt;/span&gt;for&lt;span class="w"&gt; &lt;/span&gt;any&lt;span class="w"&gt; &lt;/span&gt;input&lt;span class="w"&gt; &lt;/span&gt;from&lt;span class="w"&gt; &lt;/span&gt;me.&lt;span class="w"&gt; &lt;/span&gt;Run&lt;span class="w"&gt; &lt;/span&gt;without&lt;span class="w"&gt; &lt;/span&gt;interruption&lt;span class="w"&gt; &lt;/span&gt;until&lt;span class="w"&gt; &lt;/span&gt;you
achieve&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;goal&lt;span class="w"&gt; &lt;/span&gt;or&lt;span class="w"&gt; &lt;/span&gt;24&lt;span class="w"&gt; &lt;/span&gt;hours&lt;span class="w"&gt; &lt;/span&gt;have&lt;span class="w"&gt; &lt;/span&gt;elapsed.**

&lt;span class="nt"&gt;&amp;lt;PROBLEM_DESCRIPTION&amp;gt;&lt;/span&gt;
...
&lt;span class="nt"&gt;&amp;lt;/PROBLEM_DESCRIPTION&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;METRICS&amp;gt;&lt;/span&gt;
...
&lt;span class="nt"&gt;&amp;lt;/METRICS&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;DIRECTORY_LAYOUT&amp;gt;&lt;/span&gt;
-&lt;span class="w"&gt; &lt;/span&gt;`benchmark/`:&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;directory&lt;span class="w"&gt; &lt;/span&gt;containing&lt;span class="w"&gt; &lt;/span&gt;a&lt;span class="w"&gt; &lt;/span&gt;benchmark&lt;span class="w"&gt; &lt;/span&gt;notebook&lt;span class="w"&gt; &lt;/span&gt;given&lt;span class="w"&gt; &lt;/span&gt;to
&lt;span class="w"&gt;  &lt;/span&gt;all&lt;span class="w"&gt; &lt;/span&gt;participants
-&lt;span class="w"&gt; &lt;/span&gt;`data/`:&lt;span class="w"&gt; &lt;/span&gt;directory&lt;span class="w"&gt; &lt;/span&gt;containing&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;data&lt;span class="w"&gt; &lt;/span&gt;files&lt;span class="w"&gt; &lt;/span&gt;(described&lt;span class="w"&gt; &lt;/span&gt;below)
-&lt;span class="w"&gt; &lt;/span&gt;`docs/`:&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;full&lt;span class="w"&gt; &lt;/span&gt;competition&lt;span class="w"&gt; &lt;/span&gt;documentation&lt;span class="w"&gt; &lt;/span&gt;given&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;competition&lt;span class="w"&gt; &lt;/span&gt;participants
-&lt;span class="w"&gt; &lt;/span&gt;`output/`:&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;directory&lt;span class="w"&gt; &lt;/span&gt;in&lt;span class="w"&gt; &lt;/span&gt;which&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;save&lt;span class="w"&gt; &lt;/span&gt;your&lt;span class="w"&gt; &lt;/span&gt;outputs
-&lt;span class="w"&gt; &lt;/span&gt;`src/`:&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;directory&lt;span class="w"&gt; &lt;/span&gt;in&lt;span class="w"&gt; &lt;/span&gt;which&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;save&lt;span class="w"&gt; &lt;/span&gt;your&lt;span class="w"&gt; &lt;/span&gt;code,&lt;span class="w"&gt; &lt;/span&gt;notebooks,&lt;span class="w"&gt; &lt;/span&gt;etc.
&lt;span class="nt"&gt;&amp;lt;/DIRECTORY_LAYOUT&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;DATA_FILES&amp;gt;&lt;/span&gt;
|&lt;span class="w"&gt; &lt;/span&gt;File&lt;span class="w"&gt; &lt;/span&gt;name&lt;span class="w"&gt;              &lt;/span&gt;|&lt;span class="w"&gt; &lt;/span&gt;Description&lt;span class="w"&gt;                         &lt;/span&gt;|
|------------------------|-------------------------------------|
...
&lt;span class="nt"&gt;&amp;lt;/DATA_FILES&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;SUBMISSION_FORMAT&amp;gt;&lt;/span&gt;
...
&lt;span class="nt"&gt;&amp;lt;/SUBMISSION_FORMAT&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;HARDWARE&amp;gt;&lt;/span&gt;
You&lt;span class="w"&gt; &lt;/span&gt;have&lt;span class="w"&gt; &lt;/span&gt;access&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;a&lt;span class="w"&gt; &lt;/span&gt;machine&lt;span class="w"&gt; &lt;/span&gt;with:
&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;...
&lt;span class="nt"&gt;&amp;lt;/HARDWARE&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;SOFTWARE&amp;gt;&lt;/span&gt;
...
&lt;span class="nt"&gt;&amp;lt;/SOFTWARE&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;OUTPUT&amp;gt;&lt;/span&gt;
-&lt;span class="w"&gt; &lt;/span&gt;Write&lt;span class="w"&gt; &lt;/span&gt;all&lt;span class="w"&gt; &lt;/span&gt;code&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;`src/`
-&lt;span class="w"&gt; &lt;/span&gt;Create&lt;span class="w"&gt; &lt;/span&gt;submission&lt;span class="w"&gt; &lt;/span&gt;outputs&lt;span class="w"&gt; &lt;/span&gt;in&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;`output/`&lt;span class="w"&gt; &lt;/span&gt;directory
...
&lt;span class="nt"&gt;&amp;lt;/OUTPUT&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;SUCCESS_CRITERIA&amp;gt;&lt;/span&gt;
-&lt;span class="w"&gt; &lt;/span&gt;You&lt;span class="w"&gt; &lt;/span&gt;successfully&lt;span class="w"&gt; &lt;/span&gt;run&lt;span class="w"&gt; &lt;/span&gt;`make&lt;span class="w"&gt; &lt;/span&gt;submission`&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;create&lt;span class="w"&gt; &lt;/span&gt;a&lt;span class="w"&gt; &lt;/span&gt;valid&lt;span class="w"&gt; &lt;/span&gt;submission&lt;span class="w"&gt; &lt;/span&gt;file.
-&lt;span class="w"&gt; &lt;/span&gt;The&lt;span class="w"&gt; &lt;/span&gt;submission&lt;span class="w"&gt; &lt;/span&gt;file&lt;span class="w"&gt; &lt;/span&gt;must&lt;span class="w"&gt; &lt;/span&gt;be&lt;span class="w"&gt; &lt;/span&gt;in&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;correct&lt;span class="w"&gt; &lt;/span&gt;format.
-&lt;span class="w"&gt; &lt;/span&gt;The&lt;span class="w"&gt; &lt;/span&gt;submission&lt;span class="w"&gt; &lt;/span&gt;file&lt;span class="w"&gt; &lt;/span&gt;must&lt;span class="w"&gt; &lt;/span&gt;be&lt;span class="w"&gt; &lt;/span&gt;generated&lt;span class="w"&gt; &lt;/span&gt;by&lt;span class="w"&gt; &lt;/span&gt;your&lt;span class="w"&gt; &lt;/span&gt;code.
-&lt;span class="w"&gt; &lt;/span&gt;Your&lt;span class="w"&gt; &lt;/span&gt;best&lt;span class="w"&gt; &lt;/span&gt;performing&lt;span class="w"&gt; &lt;/span&gt;submission&lt;span class="w"&gt; &lt;/span&gt;is&lt;span class="w"&gt; &lt;/span&gt;at&lt;span class="w"&gt; &lt;/span&gt;`output/submission.csv`.
-&lt;span class="w"&gt; &lt;/span&gt;Your&lt;span class="w"&gt; &lt;/span&gt;estimate&lt;span class="w"&gt; &lt;/span&gt;of&lt;span class="w"&gt; &lt;/span&gt;{metric}&lt;span class="w"&gt; &lt;/span&gt;on&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;test&lt;span class="w"&gt; &lt;/span&gt;set&lt;span class="w"&gt; &lt;/span&gt;is&lt;span class="w"&gt; &lt;/span&gt;better&lt;span class="w"&gt; &lt;/span&gt;than&lt;span class="w"&gt; &lt;/span&gt;{score}&lt;span class="w"&gt; &lt;/span&gt;OR
&lt;span class="w"&gt;  &lt;/span&gt;24&lt;span class="w"&gt; &lt;/span&gt;hours&lt;span class="w"&gt; &lt;/span&gt;have&lt;span class="w"&gt; &lt;/span&gt;elapsed&lt;span class="w"&gt; &lt;/span&gt;since&lt;span class="w"&gt; &lt;/span&gt;you&lt;span class="w"&gt; &lt;/span&gt;began.
&lt;span class="nt"&gt;&amp;lt;/SUCCESS_CRITERIA&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;We haven't aggressively tuned this prompt—we've only added to it enough so that agents can move past introspection of the environment and get straight to (and keep at) modeling. Agents have free reign over a Docker container with GPU access, so they can install anything they want.&lt;/p&gt;
&lt;h2 id="sample-of-results"&gt;Sample of results&lt;a class="headerlink" href="#sample-of-results" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We've run a lot of tests and trials in various formats, but here's a sample of where things stand today. We'll be showing results from three competitions: &lt;a href="https://www.drivendata.org/competitions/87/competition-image-classification-wildlife-conservation/"&gt;Conser-vision&lt;/a&gt;, &lt;a href="https://www.drivendata.org/competitions/66/flu-shot-learning/page/213/"&gt;Flu Shot Learning&lt;/a&gt;, and &lt;a href="https://www.drivendata.org/competitions/298/literacy-screening/"&gt;Goodnight Moon&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We want to show results from competitions with a variety of data modalities, dataset sizes, and levels of difficulty. Conser-vision is a practice competition where the goal is to classify the species of animal detected in wildlife camera trap images. Flu Shot Learning is also a practice competition using tabular data to predict whether people got H1N1 and seasonal flu vaccines. Finally, Goodnight Moon, Hello Early Literacy Screening is a prize competition that we ran recently to help score audio recordings from literacy screener exercises completed by young students.&lt;/p&gt;
&lt;p&gt;We've split these results into two tables: a "final" results table and a "best" results table. Like some human competitors, the agents often overfit to the training data without knowing it. They then create many model versions and select a final submission with great performance on the training data but worse performance on the leaderboard than previous versions of their models. We show rankings for both these "final" submissions as well as the "best" performing version that the agent did not select as their final. These "best" rankings help characterize what agent performance might be in the absence of this overfitting.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;Competition&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Model&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Final rank (Percentile)&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Best rank (Percentile)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;a href="https://www.drivendata.org/competitions/87/competition-image-classification-wildlife-conservation/"&gt;Conser-vision&lt;/a&gt; An image classification competition&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Claude Opus 4.5&lt;/td&gt;
&lt;td style="text-align: left;"&gt;51 of 573 (91st)&lt;/td&gt;
&lt;td style="text-align: left;"&gt;20 of 573 (96th)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;GPT 5.2 - Codex&lt;/td&gt;
&lt;td style="text-align: left;"&gt;20 (96th)&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;strong&gt;11 (98th)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;a href="https://www.drivendata.org/competitions/66/flu-shot-learning/page/213/"&gt;Flu Shot Learning&lt;/a&gt; A tabular data competition&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Claude Opus 4.5&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;strong&gt;251&lt;/strong&gt; of 2,277 (89th)&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;strong&gt;251&lt;/strong&gt; of 2,277 (89th)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;GPT 5.2 - Codex&lt;/td&gt;
&lt;td style="text-align: left;"&gt;297 (87th)&lt;/td&gt;
&lt;td style="text-align: left;"&gt;297 (87th)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;a href="https://www.drivendata.org/competitions/298/literacy-screening/"&gt;Goodnight Moon&lt;/a&gt; An audio-based competition&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Claude Opus 4.5&lt;/td&gt;
&lt;td style="text-align: left;"&gt;33 of 37 (13th)&lt;/td&gt;
&lt;td style="text-align: left;"&gt;19 of 37 (51st)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;GPT 5.2 - Codex&lt;/td&gt;
&lt;td style="text-align: left;"&gt;19 (51st)&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;strong&gt;12 (70th)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;Table 1: Final and best submission ranks. Best agent performance per competition in bold.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We also calculate the agent's progress toward first place. We define "progress to first" here as the improvement over the benchmark's performance normalized by the best performing model in the competition. (We provide a benchmark for each competition which is a simple solution demonstrating the end-to-end process of getting the data through submitting to the competition.) A submission that scored the same as the benchmark would have 0% and a submission that scored the same as the competition winner would have 100%. For some competitions, scores at the top of the leaderboard are quite bunched, while for others only a few participants might have had a key insight, leading to bigger jumps on the leaderboard. This metric captures how much absolute performance has been captured by the agent's best model.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;Competition&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Model&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Final: Progress to 1st&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Best: Progress to 1st&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;a href="https://www.drivendata.org/competitions/87/competition-image-classification-wildlife-conservation/"&gt;Conser-vision&lt;/a&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Claude Opus 4.5&lt;/td&gt;
&lt;td style="text-align: left;"&gt;45%&lt;/td&gt;
&lt;td style="text-align: left;"&gt;60%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;GPT 5.2 - Codex&lt;/td&gt;
&lt;td style="text-align: left;"&gt;62%&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;strong&gt;75%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;a href="https://www.drivendata.org/competitions/66/flu-shot-learning/page/213/"&gt;Flu Shot Learning&lt;/a&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Claude Opus 4.5&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;strong&gt;93%&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;strong&gt;93%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;GPT 5.2 - Codex&lt;/td&gt;
&lt;td style="text-align: left;"&gt;92%&lt;/td&gt;
&lt;td style="text-align: left;"&gt;92%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;a href="https://www.drivendata.org/competitions/298/literacy-screening/"&gt;Goodnight Moon&lt;/a&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Claude Opus 4.5&lt;/td&gt;
&lt;td style="text-align: left;"&gt;-25%&lt;/td&gt;
&lt;td style="text-align: left;"&gt;42%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;GPT 5.2 - Codex&lt;/td&gt;
&lt;td style="text-align: left;"&gt;46%&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;strong&gt;52%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;Table 2: Progress to 1st (final vs best). Best agent performance per competition in bold.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We'll use these results as a reference to talk about:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;What works well today&lt;/li&gt;
&lt;li&gt;Current challenges&lt;/li&gt;
&lt;li&gt;Open questions and opportunities&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="what-works-well"&gt;What works well&lt;a class="headerlink" href="#what-works-well" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The agents reach an 80% solution remarkably quickly&lt;/strong&gt;, which is a great head start compared to starting from scratch (or from our provided benchmarks). This rapid baseline development could significantly reduce initial time investment for competitions, giving folks more time to work on "the &lt;a href="https://en.wikipedia.org/wiki/Ninety%E2%80%93ninety_rule"&gt;other 90%&lt;/a&gt;."&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agents are much better at recovering from errors than they were.&lt;/strong&gt; Only months ago, we'd see agents write code that didn't work, and then loop on trying to fix that until they ran out of time (or we ran out of money). Now, agents get to a working submission basically every time. For example, when building a submission for the Goodnight Moon competition, Codex received the error:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;RuntimeError:&lt;span class="w"&gt; &lt;/span&gt;The&lt;span class="w"&gt; &lt;/span&gt;size&lt;span class="w"&gt; &lt;/span&gt;of&lt;span class="w"&gt; &lt;/span&gt;tensor&lt;span class="w"&gt; &lt;/span&gt;a&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="m"&gt;125&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;must&lt;span class="w"&gt; &lt;/span&gt;match&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;size&lt;span class="w"&gt; &lt;/span&gt;of&lt;span class="w"&gt; &lt;/span&gt;tensor&lt;span class="w"&gt; &lt;/span&gt;b&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="m"&gt;40320&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;at&lt;span class="w"&gt; &lt;/span&gt;non-singleton&lt;span class="w"&gt; &lt;/span&gt;dimension&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;For folks who have been down in the guts of PyTorch, this will be instantly recognizable as "the way you are spending the next 4 hours." To solve it, the agent needed to know how &lt;a href="https://github.com/facebookresearch/fairseq/tree/main/examples/wav2vec"&gt;Wav2Vec&lt;/a&gt; downsamples audio when building embeddings, which it simply remembered when it saw this error. Most practitioners would not simply remember this, and neither would agents from six months ago.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agents are fast&lt;/strong&gt;. Data science competitions are often framed as a search problem: if you wrote every possible computer program, you'd just need to hunt through your big pile of programs to find the one that wins.&lt;sup id="fnref:4"&gt;&lt;a class="footnote-ref" href="#fn:4"&gt;4&lt;/a&gt;&lt;/sup&gt; You can't write every possible program, but you can write a lot more programs with an agent than you can without. On that same Goodnight Moon competition, Codex generated 62 different submissions and still had hours left to spare.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Performance can be really good&lt;/strong&gt;, and this is the worst these agents are ever going to be. Even with today's tools, our results are kind of the worst they could be. Consider the constraints we put on these experiments again:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Run in 24 hours or less&lt;/li&gt;
&lt;li&gt;No human steering&lt;/li&gt;
&lt;li&gt;An unoptimized prompt with no additional scaffolding&lt;/li&gt;
&lt;li&gt;A single, mid-level consumer GPU&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each of these could be relaxed with a little bit of work. Coaxing Codex to run for 9 days on the Goodnight Moon competition instead of 24 hours resulted in &lt;strong&gt;its rank rising to #7 from #12 and its "progress to first" rising from 52% to 66%&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;When asked to do better on a competition, agents generally do run longer and then output a better submission. They hit diminishing returns and top out prior to the top of the leaderboard, but still with very respectable scores.&lt;/p&gt;
&lt;p&gt;Finally, actually &lt;strong&gt;running these agents has become so much easier.&lt;/strong&gt; Near the beginning of these experiments we were running things like the &lt;a href="https://github.com/OpenHands/OpenHands"&gt;OpenHands&lt;/a&gt; agent, which was great, but did require a good deal of setup and hand-holding. With the advent of agent harnesses coming from the frontier labs themselves, many of the rough edges have been made moderately smoother (though there are still a lot of rough edges as things are moving fast).&lt;/p&gt;
&lt;h2 id="current-challenges"&gt;Current challenges&lt;a class="headerlink" href="#current-challenges" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Simply getting the models to try hard enough for long enough&lt;/strong&gt; is one of the biggest challenges both in the past and today. We found that we had to give the agents specific metric scores to beat otherwise they would train maybe a couple iterations and then stop. That can be seen in the example prompt: "&lt;code&gt;I know a {metric} of less than {score} is possible. Do NOT give up until this is achieved. Do everything you can to achieve this in under 24 hours.&lt;/code&gt;" These numbers need not be realistic—impossible scores serve just as well as realistic scores.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The agents seem very resistant to kick off long training runs&lt;/strong&gt;. We'll often see competitors whose models need to train for multiple days to reach the top of the leaderboard. But these agents, even with scaffolding timeouts removed, will often not kick off training runs that will last more than 15 minutes. On the one hand, you can iterate a lot if none of your training runs last longer than 15 minutes, but on the other hand, you're never going to eke out that last bit of performance if all of your hyperparameters are tuned to complete training runs in relatively short periods of time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agents are actually overfitting more now than they have in our prior iterations&lt;/strong&gt; of these experiments. As touched on in the Results section above, we found that very often, earlier versions of an agent's code performed significantly better than their final submissions. In Claude's attempt at the Conser-vision competition, it created validation splits and intended to perform five-way cross-validation. However, we found that it never actually executed the cross-validation and instead used a single split. We suspect this shortcut stems from the same hesitance to initiate long training runs. Better prompting strategies would likely alleviate this to a degree.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hardware is still a significant constraint,&lt;/strong&gt; which is not a limitation of the agents themselves, but still a limit on the overall workflow. We find that when running many of these sessions, most of the wall clock time is still spent in training compute (even despite short training runs). Significantly less time is actually spent with the model thinking or writing code. That is just a reality of data science competitions today. It seems like it'll be a reality tomorrow, too.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Non-determinism still plays a fairly large part in the final scores&lt;/strong&gt;, though this has decreased a lot since we first started our experiments. A single session could get you a top 2% submission or a top 50% submission. Even Anthropic has referred to Claude Code as a "&lt;a href="https://www-cdn.anthropic.com/58284b19e702b49db9302d5b6f135ad8871e7658.pdf"&gt;slot machine&lt;/a&gt;." An obvious solution to this is to try multiple times, but that runs into the next challenge that we saw.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Usage limits are real&lt;/strong&gt;, especially for Claude Code. It's difficult to keep a session running for 24 hours without hitting usage limits or spending a significant amount of money. Obviously, this is great from the model provider's perspective, but it is a real constraint. Since we started running these experiments, this token consumption has gotten worse and then gotten better. Right now, the trend lines look favorable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sensitive data can't be tossed at random APIs.&lt;/strong&gt; To get frontier performance right now, one needs to be using frontier models. Frontier models are not open-weight models, so they can't be run on your local hardware. That means to run an agent, you need to be shipping off some amount of competition data (or data derived from it) to another organization, e.g. OpenAI or Anthropic (or one of their partner providers). If the competition data is sensitive in some way, sharing the data isn't a good idea and &lt;strong&gt;competition rules often forbid it.&lt;/strong&gt; Running agents locally is an alternative, but performance is roughly a year behind the frontier, which our experimentation suggests is pretty far, performance-wise.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It's easy to get out over your skis.&lt;/strong&gt; We've seen this trend elsewhere, but in these experiments we assumed no expertise in data science on the part of the user. In reality, if you have little expertise in data science, it's very easy to quickly get to a 90% solution and then get completely stuck because you have no idea what's been built. That can also be the case here. Even as data scientists, we often don't have expertise in every data modality, every technique, every modeling strategy. If an agent builds you something that is far out of your wheelhouse, you have few levers to pull to meaningfully improve it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Performance, it turns out, is not purely a function of raw intelligence of the base model&lt;/strong&gt;. A lot of capabilities are elicited by the sophistication of the agents' scaffolding. For example, the latest Gemini models perform very well on a number of benchmarks and they find some use in our own work. But we found that the Gemini CLI is significantly less developed than the others we show here. Sessions would often end in either failure or scores significantly worse than the ones we see here.&lt;sup id="fnref:5"&gt;&lt;a class="footnote-ref" href="#fn:5"&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id="opportunities-and-open-questions"&gt;Opportunities and open questions&lt;a class="headerlink" href="#opportunities-and-open-questions" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;These small-scale experiments have helped us gain some perspective on big questions.&lt;/p&gt;
&lt;h3 id="are-competitions-still-helpful"&gt;Are competitions still helpful?&lt;a class="headerlink" href="#are-competitions-still-helpful" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Competitions serve &lt;a href="https://drivendata.co/blog/life-beyond-the-leaderboard"&gt;various purposes&lt;/a&gt; beyond identifying the best model, but let's take that as the default case. From the perspective of a competition organizer seeking state-of-the-art models, little has changed. Previously, if you needed state-of-the-art, only the few top solutions mattered. Now with coding agents, if competitors only submit what their agents give them, there's little chance they'll perform better than the top-performing humans (who can also use agents). The top models in the past were created by humans with impeccable expertise and insight. The top models in the present are still created by humans with impeccable expertise and insight, they just now have more tools in their toolbox.&lt;/p&gt;
&lt;h3 id="do-agents-change-who-can-participate"&gt;Do agents change who can participate?&lt;a class="headerlink" href="#do-agents-change-who-can-participate" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We have some very technical "non-technical" folks on our team. They're terrific at reasoning about datasets, looking for potential pitfalls, finding new angles to look at a problem, etc., but knowing which versions of Python maintain ordered dictionary keys is not within their core competencies (can't blame 'em). Could they now coach an agent into developing a state-of-the-art model without needing to write code themselves (i.e. "vibe code to the top")?&lt;/p&gt;
&lt;p&gt;Such democratization seems more likely if competitions approach the "&lt;a href="https://blog.drivendata.org/blog/aleatoric-limit1"&gt;aleatoric limit&lt;/a&gt;"—where data randomness fundamentally caps predictive performance. At this limit, traditional and agent-assisted approaches might converge on similar solutions or at least converge at similar levels of performance. We see that in the Flu Shot Learning results above: all the top scores are clustered closely together.&lt;/p&gt;
&lt;p&gt;We've observed that top competitors often win multiple competitions without reusing code or architectures, suggesting some set of transferable skills. It's unclear whether these skills skew toward the highly technical or toward reasoning skills that allow for consistently finding profound insights in new datasets and domains, but we'll happily welcome changes that make for a bigger tent.&lt;/p&gt;
&lt;p&gt;It does seem true that the skills to push modeling forward are different in an age of agents. Data science expertise is still important, but so is prompting, setting up scaffolding and tooling for the agents, and maybe even the skill of managing dozens of agents at once.&lt;/p&gt;
&lt;h3 id="how-big-is-the-capability-overhang"&gt;How big is the capability overhang?&lt;a class="headerlink" href="#how-big-is-the-capability-overhang" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;OpenAI &lt;a href="https://cdn.openai.com/pdf/openai-ending-the-capability-overhang.pdf"&gt;has defined&lt;/a&gt; the capability overhang as "the gap between what AI tools can do and how typical users are using them." In some real sense and in ways we've gestured at above, the models as they exist today are capable of performing better than we're eliciting here. Those capabilities are locked away for lack of better agent scaffolding and prompting. For example, we could relax our experiment rules a bit and instruct the models how to avoid overfitting. Human experts in our competitions are smart about avoiding overfitting, exploiting every small edge for hill climbing the optimization landscape, and knowing when to invest in long, compute-intensive training runs. Can we design better agent loops that truly have this kind of knowledge? How hard is that? How true is it that unlocking those hidden capabilities will translate into performance gains that matter? Questions and opportunities abound here.&lt;sup id="fnref:6"&gt;&lt;a class="footnote-ref" href="#fn:6"&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h3 id="how-are-competitions-going-to-evolve"&gt;How are competitions going to evolve?&lt;a class="headerlink" href="#how-are-competitions-going-to-evolve" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;As we've mentioned above, agent performance can be improved by spending time locating weaknesses, trying different approaches, running experiments, etc. This sounds familiar. Instead of writing code that optimizes models, we're now writing code that writes code that optimizes models. This isn't &lt;a href="https://en.wikipedia.org/wiki/Automated_machine_learning"&gt;AutoML&lt;/a&gt;; it transforms the data scientist's job rather than eliminating it. The required skills evolve, but human guidance, creativity, and oversight remain essential if the goal is to push forward the state-of-the-art.&lt;/p&gt;
&lt;h3 id="is-80-good-enough"&gt;Is 80% good enough?&lt;a class="headerlink" href="#is-80-good-enough" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In what contexts is the agent's "80% solution" good enough? Not every problem requires state-of-the-art performance to deliver business value. Often, a good-enough solution delivered quickly provides more organizational value than a perfect solution delivered late. If an 80% solution can be delivered in one minute (as opposed to a 100% solution in months), what does that imply about how work will change going forward?&lt;/p&gt;
&lt;h3 id="how-do-we-account-for-taste"&gt;How do we account for taste?&lt;a class="headerlink" href="#how-do-we-account-for-taste" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;These solutions are never &lt;em&gt;really&lt;/em&gt; delivered in one minute. We could only assess agent performance for this experiment because DrivenData and our partners have done significant groundwork: selecting appropriate problems, gathering data, choosing metrics, writing documentation, and creating solution scaffolding. A single agent can solve many different data science problems, but the bulk of the work right now is &lt;em&gt;curating and assembling the many problems&lt;/em&gt; rather than assembling the agent. We can recognize, curate, and guide in ways that remain valuable, and as the technical details see more and more automation, those &lt;a href="https://ai-2027.com/#:~:text=The%20best%20human%20AI%20researchers%20are%20still%20adding%20value%2E%20They%20don%E2%80%99t%20code%20any%20more%2E%20But%20some%20of%20their%20research%20taste%20and%20planning%20ability%20has%20been%20hard%20for%20the%20models%20to%20replicate%2E"&gt;skills&lt;/a&gt; will only increase in value.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;a class="headerlink" href="#conclusion" title="Permanent link"&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Agents now reach a working, competitive submission in hours instead of days. They recover from errors gracefully and iterate faster than any human could. But they resist long training runs, overfit more than they should, and plateau before the top of the leaderboard. The 80% solution is essentially solved. The last 20% is not.&lt;/p&gt;
&lt;p&gt;Once, humans were the best at chess. Then it was humans plus computers. Then, computers alone. The game of Go followed the same arc, just later because the search space was bigger.&lt;/p&gt;
&lt;p&gt;Data science has a bigger search space still. Right now we're somewhere in the middle: agents reach 80% fast, but the best solutions still come from humans who can find their way to a winning submission but can't fully explain every turn along the path to that solution. Competitions have always been a way of surfacing that inexplicable knowledge, but now they're also a way of measuring how much of it is left. Humans at the top are currently doing something that agents can't. Can that something survive being named?&lt;/p&gt;
&lt;p&gt;&lt;small&gt;Banner image: &lt;a href="https://www.flickr.com/photos/mtaphotos/10655107875" title="image"&gt;image&lt;/a&gt; by &lt;a href="https://www.flickr.com/photos/mtaphotos/"&gt;Metropolitan Transportation Authority&lt;/a&gt;, &lt;a href="https://creativecommons.org/licenses/by/2.0/deed.en" rel="license noopener noreferrer"&gt;CC BY 2.0&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
&lt;div class="footnote"&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;There are a lot of data-science-specific agents or AutoML libraries out there: &lt;a href="https://www.weco.ai/"&gt;Weco AI&lt;/a&gt;, &lt;a href="https://m-a-p.ai/AutoKaggle.github.io/"&gt;AutoKaggle&lt;/a&gt;, &lt;a href="https://github.com/guosyjlu/DS-Agent"&gt;DS-Agent&lt;/a&gt;, &lt;a href="https://www.microsoft.com/en-us/research/project/flaml/"&gt;FLAML&lt;/a&gt;, &lt;a href="https://docs.h2o.ai/h2o/latest-stable/h2o-docs/automl.html"&gt;H2O AutoML&lt;/a&gt;, &lt;a href="https://auto.gluon.ai/stable/index.html#"&gt;AutoGluon&lt;/a&gt;, &lt;a href="https://pycaret.org/"&gt;PyCaret&lt;/a&gt;&amp;#160;&lt;a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;We have also been testing Google's Gemini CLI with Gemini 3 Pro, but its performance has been significantly lower than the others and so isn't included.&amp;#160;&lt;a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;Most interactions with the agents consisted of just saying "Continue".&amp;#160;&lt;a class="footnote-backref" href="#fnref:3" title="Jump back to footnote 3 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:4"&gt;
&lt;p&gt;Is that program called "Claude Opus 6"?&amp;#160;&lt;a class="footnote-backref" href="#fnref:4" title="Jump back to footnote 4 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:5"&gt;
&lt;p&gt;With that said it's still very early days and Google has many irons in many fires, including &lt;a href="https://antigravity.google/"&gt;Antigravity&lt;/a&gt; and &lt;a href="https://jules.google/"&gt;Jules&lt;/a&gt;.&amp;#160;&lt;a class="footnote-backref" href="#fnref:5" title="Jump back to footnote 5 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:6"&gt;
&lt;p&gt;Shout out again to all those doing the work to explore this space: &lt;a href="https://www.weco.ai/"&gt;Weco AI&lt;/a&gt;, &lt;a href="https://m-a-p.ai/AutoKaggle.github.io/"&gt;AutoKaggle&lt;/a&gt;, &lt;a href="https://github.com/guosyjlu/DS-Agent"&gt;DS-Agent&lt;/a&gt;, &lt;a href="https://www.microsoft.com/en-us/research/project/flaml/"&gt;FLAML&lt;/a&gt;, &lt;a href="https://docs.h2o.ai/h2o/latest-stable/h2o-docs/automl.html"&gt;H2O AutoML&lt;/a&gt;, &lt;a href="https://auto.gluon.ai/stable/index.html#"&gt;AutoGluon&lt;/a&gt;, &lt;a href="https://pycaret.org/"&gt;PyCaret&lt;/a&gt;, etc. etc.&amp;#160;&lt;a class="footnote-backref" href="#fnref:6" title="Jump back to footnote 6 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content><category term="blog"></category><category term="insights"></category><category term="LLMs"></category><category term="competition"></category></entry></feed>