{"id":783,"date":"2026-10-16T18:33:51","date_gmt":"2026-10-16T21:33:51","guid":{"rendered":"https:\/\/yellowkode.com\/blog\/nemotron-pretraining-indic-v1-nvidia-ai4bharat\/"},"modified":"2026-10-16T18:33:51","modified_gmt":"2026-10-16T21:33:51","slug":"nemotron-pretraining-indic-v1-nvidia-ai4bharat","status":"publish","type":"post","link":"https:\/\/yellowkode.com\/blog\/nemotron-pretraining-indic-v1-nvidia-ai4bharat\/","title":{"rendered":"Nemotron-pretraining-Indic-v1: como a NVIDIA e o AI4Bharat geraram 2,8 trilh\u00f5es de tokens em 22 l\u00ednguas indianas"},"content":{"rendered":"<p>Dia 16 de outubro de 2026, NVIDIA e AI4Bharat (laborat\u00f3rio do IIT Madras) anunciaram no blog da Hugging Face o <strong>Nemotron-pretraining-Indic-v1<\/strong>, um corpus sint\u00e9tico de pr\u00e9-treinamento para 22 l\u00ednguas indianas, junto com o pipeline aberto que foi usado para constru\u00ed-lo. O release vem acompanhado de documenta\u00e7\u00e3o do NeMo Data Designer, o framework declarativo da NVIDIA para gera\u00e7\u00e3o de dados sint\u00e9ticos, e de uma vers\u00e3o espec\u00edfica do pipeline chamada Nemotron Bharat.<\/p>\n<p>Este artigo \u00e9 sobre o mecanismo: como um documento em ingl\u00eas vira texto de treinamento em hindi, bengali ou santali passando por tradu\u00e7\u00e3o, avalia\u00e7\u00e3o e reparo. N\u00e3o \u00e9 sobre quem est\u00e1 vencendo a corrida de LLM na \u00cdndia.<\/p>\n<h2>O fato, em n\u00fameros<\/h2>\n<p>O corpus tem aproximadamente 2,8 trilh\u00f5es de tokens, distribu\u00eddos em 34 configura\u00e7\u00f5es de l\u00edngua-script. S\u00e3o 2.601,0 bilh\u00f5es em script nativo e 224,6 bilh\u00f5es em romanizado (texto \u00edndico escrito em alfabeto latino, n\u00e3o tradu\u00e7\u00e3o para o ingl\u00eas). Doze l\u00ednguas t\u00eam as duas formas, dez l\u00ednguas t\u00eam s\u00f3 script nativo. A contagem usa o tokenizador do Gemma-4.<\/p>\n<p>Os documentos de origem v\u00eam do <strong>Nemotron-CC-v2<\/strong>, de 15 subconjuntos que cobrem web, matem\u00e1tica, c\u00f3digo, Q&#038;A e conte\u00fado especializado. Cada registro de sa\u00edda preserva o identificador do documento-fonte, o que permite auditar a proced\u00eancia de qualquer linha gerada.<\/p>\n<h2>Como o pipeline transforma ingl\u00eas em texto \u00edndico<\/h2>\n<p>A ideia central do pipeline \u00e9 simples de descrever e cheia de armadilhas na execu\u00e7\u00e3o: pegar um documento em ingl\u00eas, traduzir o documento inteiro (n\u00e3o frase a frase), avaliar a tradu\u00e7\u00e3o contra o original, e descartar ou reparar o que n\u00e3o passar num limiar de qualidade.<\/p>\n<p>Pensa no que uma editora faz quando contrata tradu\u00e7\u00e3o t\u00e9cnica. O tradutor entrega o cap\u00edtulo, o revisor compara com o original, marca onde a tradu\u00e7\u00e3o perdeu sentido, onde quebrou formata\u00e7\u00e3o de c\u00f3digo, onde a terminologia escorregou, e devolve pedindo corre\u00e7\u00e3o. Se o revisor d\u00e1 nota muito baixa, o cap\u00edtulo \u00e9 refeito; se \u00e9 razo\u00e1vel, vai com ajustes; se \u00e9 bom, publica. O pipeline faz exatamente isso, s\u00f3 que o tradutor e o revisor s\u00e3o LLMs e a opera\u00e7\u00e3o roda em escala de bilh\u00f5es de documentos. Onde a analogia quebra: na editora, revisor e tradutor s\u00e3o pessoas diferentes. Aqui, no fluxo das doze l\u00ednguas, o <em>mesmo<\/em> modelo faz tradu\u00e7\u00e3o e julgamento, o que o pr\u00f3prio relat\u00f3rio admite como limita\u00e7\u00e3o.<\/p>\n<h3>O fluxo das doze l\u00ednguas<\/h3>\n<p>Para bengali, gujarati, hindi, kannada, malayalam, marathi, nepali, odia, punjabi, tamil, telugu e urdu, o pipeline tem quatro est\u00e1gios implementados no NeMo Data Designer, usando o <strong>Gemma-4-31B-it<\/strong> como motor:<\/p>\n<ol>\n<li><strong>Tradu\u00e7\u00e3o documento-a-documento.<\/strong> O modelo recebe o documento inteiro, n\u00e3o frases isoladas. Os prompts separam explicitamente o que deve ser traduzido (prosa) do que deve ser preservado (c\u00f3digo, equa\u00e7\u00f5es, URLs, formata\u00e7\u00e3o). Traduzir o documento inteiro, em vez de frase a frase, permite que o modelo use contexto entre par\u00e1grafos, tabelas e equa\u00e7\u00f5es.<\/li>\n<li><strong>Avalia\u00e7\u00e3o contra o original.<\/strong> O mesmo modelo recebe original e tradu\u00e7\u00e3o, e aplica uma rubrica inspirada em <strong>MQM (Multidimensional Quality Metrics)<\/strong>. MQM \u00e9 um framework de avalia\u00e7\u00e3o de qualidade de tradu\u00e7\u00e3o que cobre dimens\u00f5es como acur\u00e1cia, flu\u00eancia, terminologia, conven\u00e7\u00e3o local, estilo, verdade, design e internacionaliza\u00e7\u00e3o, usado tanto para tradu\u00e7\u00e3o humana quanto autom\u00e1tica. A rubrica aqui cobre significado, flu\u00eancia, terminologia, estilo e formata\u00e7\u00e3o, e devolve uma nota de 0 a 100 (nota de rubrica, n\u00e3o porcentagem de acur\u00e1cia).<\/li>\n<li><strong>Reparo guiado por feedback.<\/strong> Se a nota \u00e9 abaixo de 75, o pr\u00f3prio feedback da avalia\u00e7\u00e3o \u00e9 usado como entrada para reescrever a tradu\u00e7\u00e3o, que \u00e9 reavaliada contra o mesmo limiar. Esse est\u00e1gio recuperou 438,4 bilh\u00f5es de tokens que teriam sido descartados.<\/li>\n<li><strong>Romaniza\u00e7\u00e3o em duas etapas.<\/strong> Para gerar texto \u00edndico em alfabeto latino, o pipeline n\u00e3o pede ao modelo &#8220;traduza esse ingl\u00eas direto para hindi romanizado&#8221;. Ele pega uma tradu\u00e7\u00e3o j\u00e1 aceita em script nativo e converte para latino, verificando o resultado contra o nativo. Em compara\u00e7\u00e3o humana inicial, essa separa\u00e7\u00e3o (traduzir primeiro, romanizar depois) produziu menos alucina\u00e7\u00e3o e menos ingl\u00eas residual do que gerar romanizado direto do ingl\u00eas.<\/li>\n<\/ol>\n<h3>O fluxo das dez l\u00ednguas<\/h3>\n<p>Para assamese, bodo, dogri, kashmiri, konkani, maithili, manipuri, sanskrit, santali e sindhi, o pipeline troca o tradutor. Em vez de Gemma-4, usa o <strong>Indic Translate<\/strong>, modelo de tradu\u00e7\u00e3o documento-a-documento da Bodhan AI (centro sem fins lucrativos incubado no IIT Madras) treinado para ingl\u00eas e as 22 l\u00ednguas indianas. O Gemma-4 continua como juiz, mas n\u00e3o h\u00e1 reescrita guiada por feedback; o que n\u00e3o passa dos 75 pontos \u00e9 descartado.<\/p>\n<p>Dois casos recebem tratamento especial. Documentos longos em santali s\u00e3o traduzidos em janelas sobrepostas e reconstitu\u00eddos. Para manipuri, a tradu\u00e7\u00e3o passa primeiro por script bengali e depois \u00e9 convertida para Meitei Mayek, o alfabeto nativo. Isso d\u00e1 uma pista do padr\u00e3o: quando o modelo n\u00e3o lida bem com o script nativo direto, o pipeline inventa uma rota intermedi\u00e1ria est\u00e1vel.<\/p>\n<h3>Por que o NeMo Data Designer importa aqui<\/h3>\n<p>O NeMo Data Designer substitui o ac\u00famulo de scripts e patches por uma declara\u00e7\u00e3o estruturada do que cada campo do dataset deve conter, como os campos dependem uns dos outros e quais checagens de qualidade precisam passar antes de um registro ser mantido. Cada coluna \u00e9 definida declarativamente, com tipos que v\u00e3o de texto e c\u00f3digo a sa\u00eddas estruturadas, imagens, embeddings e sampleadores estat\u00edsticos, e tipos adicionais podem ser introduzidos via plugins. \u00c9 esse sistema de plugins que permite o <strong>Nemotron Bharat<\/strong> existir como extens\u00e3o: ele adiciona prompts de tradu\u00e7\u00e3o e avalia\u00e7\u00e3o, reescrita opcional baseada em feedback, janelamento de documentos e remapeamento de script, sem mexer no n\u00facleo do framework.<\/p>\n<h2>O que isso significa na pr\u00e1tica<\/h2>\n<p>Carregar uma fatia do corpus para inspecionar \u00e9 curto. O exemplo abaixo pede o ID do reposit\u00f3rio, descobre os splits dispon\u00edveis e faz streaming de um registro sem baixar o corpus inteiro:<\/p>\n<pre><code>from datasets import get_dataset_split_names, load_dataset\n\ndataset_id = input(\"Repository ID from the dataset card: \").strip()\nconfig = \"hi-Deva-IN\" # hindi em devanagari\n\nsplits = get_dataset_split_names(dataset_id, config_name=config)\nprint(\"Available splits:\", splits)\n\ndata = load_dataset(dataset_id, name=config, split=splits[0], streaming=True)\nprint(next(iter(data)))\n<\/code><\/pre>\n<p>Os c\u00f3digos de configura\u00e7\u00e3o seguem o padr\u00e3o <code>lingua-Script-Regiao<\/code>. <code>hi-Deva-IN<\/code> \u00e9 hindi em devanagari, <code>hi-Latn-IN<\/code> \u00e9 hindi romanizado. Para quem for montar um estudo de treinamento, o pr\u00f3prio release recomenda comparar misturas num or\u00e7amento fixo de tokens e registrar as propor\u00e7\u00f5es natural\/sint\u00e9tico e nativo\/romanizado separadamente. Tamb\u00e9m vale lembrar que quando dois registros vieram do mesmo documento-fonte (traduzido para l\u00ednguas diferentes ou para scripts diferentes), eles n\u00e3o s\u00e3o independentes: montar held-out ignorando isso vaza informa\u00e7\u00e3o entre treino e valida\u00e7\u00e3o.<\/p>\n<p>J\u00e1 publiquei em livros, incluindo a s\u00e9rie <em>IA na Pr\u00e1tica<\/em>, sobre pipelines que combinam LLM-como-tradutor e LLM-como-juiz, e a parte que mais engana quem come\u00e7a \u00e9 essa: tratar gera\u00e7\u00e3o e aceita\u00e7\u00e3o como um passo s\u00f3. O plugin do Nemotron Bharat devolve candidatos e notas; a pol\u00edtica de filtragem \u00e9 sua. Se voc\u00ea carregar o corpus e usar direto, est\u00e1 confiando no limiar de 75 que a NVIDIA escolheu para o uso dela. Pode fazer sentido para pr\u00e9-treinamento geral e n\u00e3o fazer para seu dom\u00ednio.<\/p>\n<h2>Onde o pipeline quebra<\/h2>\n<p>A documenta\u00e7\u00e3o \u00e9 honesta sobre as limita\u00e7\u00f5es, e vale repetir aqui porque elas definem onde n\u00e3o usar como est\u00e1.<\/p>\n<p><strong>Tradutor e juiz s\u00e3o o mesmo modelo nas doze l\u00ednguas.<\/strong> Isso \u00e9 documentado no relat\u00f3rio. Um modelo tende a n\u00e3o enxergar seus pr\u00f3prios erros sistem\u00e1ticos. A valida\u00e7\u00e3o por amostragem humana ajuda, mas a cobertura varia por l\u00edngua.<\/p>\n<p><strong>Deduplica\u00e7\u00e3o \u00e9 por source-ID, n\u00e3o sem\u00e2ntica.<\/strong> Dois documentos de origem diferentes que falam a mesma coisa viram dois registros no corpus. Se seu objetivo \u00e9 diversidade real de conte\u00fado, voc\u00ea vai precisar de deduplica\u00e7\u00e3o sem\u00e2ntica por cima.<\/p>\n<p><strong>Tradu\u00e7\u00e3o n\u00e3o substitui texto nativo.<\/strong> O pr\u00f3prio release diz: tradu\u00e7\u00e3o amplia acesso ao material-fonte, mas n\u00e3o cobre conhecimento local nem contexto cultural. A recomenda\u00e7\u00e3o \u00e9 combinar o corpus com texto \u00edndico autoral e avaliar a mistura para o caso de uso.<\/p>\n<p><strong>A rubrica de 75 \u00e9 um corte de projeto.<\/strong> MQM originalmente \u00e9 um framework de anota\u00e7\u00e3o humana com erros maiores pesando 5 pontos e menores pesando 1 ponto, agregados por dimens\u00e3o. Aqui a implementa\u00e7\u00e3o \u00e9 LLM-como-juiz devolvendo nota direta. Alinhado com o esp\u00edrito, n\u00e3o com o procedimento can\u00f4nico.<\/p>\n<p><strong>Os ganhos de benchmark n\u00e3o isolam a contribui\u00e7\u00e3o do sint\u00e9tico.<\/strong> O release mostra que o Nemotron 3.5 Super VL ganhou entre 4,98 e 9,82 pontos percentuais em MILU, Indic MMLU-Pro, Indic ARC-Challenge, Indic ARC-Easy e Indic GSM8K depois do est\u00e1gio de continued pretraining \u00edndico. S\u00f3 que esse est\u00e1gio usou mistura de sint\u00e9tico e natural. O quanto veio de cada parte n\u00e3o est\u00e1 separado nos resultados publicados.<\/p>\n<p>Para dar contexto do custo de personaliza\u00e7\u00e3o que esse tipo de corpus toca: no Mentezinha, com retrieval por crian\u00e7a em produ\u00e7\u00e3o no Vertex AI, o que descobrimos \u00e9 que um \u00edndice por usu\u00e1rio multiplica custo de armazenamento e manuten\u00e7\u00e3o, e cria a pergunta de quando esquecer. Pr\u00e9-treinar modelo multil\u00edngue tem o mesmo tipo de pergunta em escala maior: cada l\u00edngua adicionada \u00e9 token or\u00e7ado, dado curado, benchmark avaliado. N\u00e3o \u00e9 s\u00f3 &#8220;ligar mais uma l\u00edngua&#8221;.<\/p>\n<h2>O que ainda n\u00e3o d\u00e1 para afirmar<\/h2>\n<p>O release \u00e9 um an\u00fancio: o pr\u00f3prio texto diz &#8220;releasing soon&#8221;. Enquanto escrevo, o dataset card e a licen\u00e7a n\u00e3o est\u00e3o p\u00fablicos para inspe\u00e7\u00e3o. Ent\u00e3o n\u00e3o d\u00e1 para afirmar qual licen\u00e7a permite qual uso comercial, qual \u00e9 a divis\u00e3o exata de splits, nem como o streaming vai se comportar com o volume completo.<\/p>\n<p>Tamb\u00e9m n\u00e3o h\u00e1, no material p\u00fablico, estudo controlado isolando a contribui\u00e7\u00e3o do corpus sint\u00e9tico nos ganhos de benchmark. O pr\u00f3prio release aponta que esse estudo (misturas de fontes, tamanho do pool sint\u00e9tico, cobertura de script) foi feito s\u00f3 para a primeira passada de dados aceitos nas doze l\u00ednguas. Avaliar o corpus completo, incluindo as reescritas recuperadas e as dez l\u00ednguas, \u00e9 marcado como pr\u00f3ximo passo.<\/p>\n<p>E a quest\u00e3o de longo prazo que ningu\u00e9m respondeu ainda: um modelo pr\u00e9-treinado em tradu\u00e7\u00e3o massiva de ingl\u00eas para hindi aprende hindi, ou aprende &#8220;hindi-que-parece-tradu\u00e7\u00e3o-de-ingl\u00eas&#8221;? Resposta prov\u00e1vel: depende da propor\u00e7\u00e3o de texto nativo na mistura. Mas isso \u00e9 hip\u00f3tese, n\u00e3o resultado publicado.<\/p>\n<h2>Como testar isso voc\u00ea mesmo<\/h2>\n<p>Um caminho pequeno para come\u00e7ar, assumindo que o corpus j\u00e1 esteja p\u00fablico quando voc\u00ea ler:<\/p>\n<ol>\n<li>Instale <code>datasets<\/code> da Hugging Face e <code>data-designer<\/code> da NVIDIA (<code>pip install data-designer<\/code>).<\/li>\n<li>Carregue uma configura\u00e7\u00e3o do corpus em modo streaming (como no snippet acima) e inspecione 50 registros em uma l\u00edngua que voc\u00ea consiga ler ou que algu\u00e9m pr\u00f3ximo consiga.<\/li>\n<li>Pegue 5 documentos em ingl\u00eas do seu pr\u00f3prio dom\u00ednio (t\u00e9cnico, jur\u00eddico, educacional, qualquer coisa que te interesse). Rode o plugin Nemotron Bharat do NeMo Data Designer apontando para esses documentos como fonte, com Gemma-4 ou outro modelo que voc\u00ea tenha endpoint.<\/li>\n<li>Inspecione o resultado: como ficou c\u00f3digo? Como ficou tabela? A terminologia do seu dom\u00ednio sobreviveu? Chame algu\u00e9m que fale a l\u00edngua-alvo nativamente para olhar junto. Essa parte \u00e9 insubstitu\u00edvel.<\/li>\n<li>Mude o limiar da rubrica (teste 60, 75, 85) e veja o que entra e o que sai. \u00c9 assim que voc\u00ea descobre se o corte padr\u00e3o serve para o seu uso.<\/li>\n<\/ol>\n<p>Se voc\u00ea sair desse exerc\u00edcio com uma opini\u00e3o informada sobre em qual est\u00e1gio o pipeline falha para o seu dom\u00ednio, aprendeu mais do que lendo qualquer resumo. Inclusive este.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Como o pipeline aberto da NVIDIA e do AI4Bharat traduz, avalia e repara documentos em ingl\u00eas para gerar 2,8 trilh\u00f5es de tokens em 22 l\u00ednguas indianas.<\/p>\n","protected":false},"author":2,"featured_media":782,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-783","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/posts\/783","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/comments?post=783"}],"version-history":[{"count":0,"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/posts\/783\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/media\/782"}],"wp:attachment":[{"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/media?parent=783"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/categories?post=783"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/tags?post=783"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}