Madras1/corpus-ptbr-v1
收藏Hugging Face2026-03-08 更新2026-03-29 收录
下载链接:
https://hf-mirror.com/datasets/Madras1/corpus-ptbr-v1
下载链接
链接失效反馈官方服务:
资源简介:
---
language:
- pt
license: odc-by
multilinguality:
- monolingual
size_categories:
- 1M<n<10M
task_categories:
- text-generation
- fill-mask
- text-classification
- feature-extraction
- sentence-similarity
language_creators:
- machine-generated
- found
annotations_creators:
- machine-generated
source_datasets:
- allenai/c4
- HuggingFaceFW/fineweb-2
tags:
- portuguese
- pt-br
- brazilian-portuguese
- brasil
- português
- nlp
- pretraining
- pre-training
- llm
- language-model
- corpus
- text-corpus
- synthetic
- synthetic-data
- web-crawl
- c4
- fineweb
- fineweb2
- sbert
- quality-filtering
- data-curation
- gpt
- deepseek
- qwen
- 6b-tokens
- llama
- dataset
pretty_name: Corpus PT-BR v1 — 6.3B Tokens de Português Brasileiro
dataset_summary: >-
Corpus em Português Brasileiro com 8.4M documentos e 6.3B tokens para
pré-treinamento e fine-tuning de LLMs. Combina dados reais curados com SBERT e
uma camada sintética gerada por múltiplos LLMs com foco em diversidade.
configs:
- config_name: default
data_files:
- split: train
path: data/*.parquet
dataset_info:
features:
- name: text
dtype: string
- name: source
dtype: string
- name: subset
dtype: string
- name: word_count
dtype: int32
- name: char_count
dtype: int32
- name: language
dtype: string
splits:
- name: train
num_bytes: 19264102400
num_examples: 8399857
download_size: 19264102400
dataset_size: 19264102400
---
# 🇧🇷 Corpus PT-BR v1
Um corpus em **Português Brasileiro** voltado para **pré-treinamento e fine-tuning de LLMs**. Combina dados reais curados com uma camada sintética construída para ampliar a diversidade estilística, lexical e discursiva em português.
## 🔄 Visão Geral do Pipeline

## 📊 Estatísticas
| Métrica | Valor |
|---|---|
| **Total de documentos** | 8,399,857 |
| **Total de palavras** | ~4.84B |
| **Tokens estimados** | ~6.29B |
| **Tamanho (Parquet)** | ~17.9 GB |
| **Idioma** | Português Brasileiro (pt-br) |
| **Licença** | ODC-By 1.0 |
### Subsets
| Subset | Documentos | Palavras | Tokens (est.) |
|---|---|---|---|
| `real` | 6,813,702 | ~4.10B | ~5.33B |
| `synthetic` | 1,586,155 | ~739M | ~961M |
## 📂 Fontes
### Subset `real`
Dados de pretraining limpos e filtrados de fontes públicas:
| Fonte | Documentos | Descrição |
|---|---|---|
| `c4_pt` | 3,070,868 | Common Crawl (C4) — subset em português, limpo e deduplicado |
| `fineweb2_pt` | 3,742,834 | FineWeb2 — dados de alta qualidade filtrados para português |
### Subset `synthetic`
**1,586,155 documentos** gerados por LLMs de alta qualidade através de múltiplos pipelines:
| Pipeline | Arquivos | Documentos | Modelos |
|---|---|---|---|
| Geração Local (GPU) | `corpusgreat`, `corpusme`, `CORPUS1`, `corpus125m`, etc. | ~116K | Qwen 2.5 72B (4-bit) |
| API Batch (Streaming) | `synthetic_corpus_batch*`, `synthetic_corpus_chutes*` | ~132K | DeepSeek V3, Qwen3 235B |
| API Multi-Provider | `synthetic_corpus_openrouter*` | ~47K | Vários modelos |
| Mistral-based | `openstral*`, `bistral*` | ~245K | Mistral, Mixtral |
| Outros pipelines | `synthetic_corpus_gptoss*`, `mexe`, `ade`, `ede`, etc. | ~1.05M | Diversos |
> **Diversidade de estilos**: Artigos educativos, entrevistas, debates, FAQs, threads de Twitter, posts de LinkedIn, conversas de WhatsApp, podcasts, mesas redondas, tutoriais, reviews, newsletters, diálogos socráticos, e mais — gerados com **21+ system prompts** e **20 estilos de texto** diferentes.
## 🚀 Como Usar
```python
from datasets import load_dataset
# Carregar o corpus inteiro
ds = load_dataset("Madras1/corpus-ptbr-v1", split="train")
# Filtrar por subset
ds_real = ds.filter(lambda x: x["subset"] == "real")
ds_synthetic = ds.filter(lambda x: x["subset"] == "synthetic")
# Filtrar por fonte específica
ds_c4 = ds.filter(lambda x: x["source"] == "c4_pt")
ds_fineweb = ds.filter(lambda x: x["source"] == "fineweb2_pt")
# Exemplo de acesso
print(ds[0]["text"][:500])
print(f"Fonte: {ds[0]['source']}, Subset: {ds[0]['subset']}")
```
### Streaming (recomendado para datasets grandes)
```python
from datasets import load_dataset
# Streaming — não baixa tudo de uma vez
ds = load_dataset("Madras1/corpus-ptbr-v1", split="train", streaming=True)
for example in ds:
print(example["text"][:200])
break
```
## 🛠️ Metodologia Detalhada
### 1. Coleta de Dados Reais
| Fonte | Pipeline | Descrição |
|---|---|---|
| **C4 PT** | Common Crawl → C4 → filtro SBERT | Web crawl limpo e deduplicado, subset em português |
| **FineWeb2 PT** | FineWeb2 → filtro SBERT | Dados de alta qualidade curados pela HuggingFace, filtrados para português |
Esses dados de web crawl, embora pré-filtrados, ainda contêm muito ruído (spam, textos de baixa qualidade, conteúdo genérico). Por isso foram submetidos à **filtragem de qualidade com SBERT** (seção 3).
### 2. Geração de Dados Sintéticos
O pipeline de geração sintética foi projetado para maximizar **diversidade linguística e estilística**:
**Modelos utilizados:**
| Modelo | Tipo | Parâmetros | Modo | Destaque Multilíngue |
|---|---|---|---|---|
| **Qwen 2.5 72B** | Dense | 72B | Local (4-bit, H100) | 🟢 Suporte nativo a 29+ idiomas incl. PT |
| **Gemma 3 27B** | Dense | 27B | Local (H100) | 🟢 140+ idiomas; base do modelo GAIA PT-BR |
| **DeepSeek V3/V3.1/V3.2** | MoE | 671B (37B ativos) | API | 🟢 Treinado em 14.8T tokens multilíngues |
| **Qwen3 235B** | MoE | 235B (22B ativos) | API | 🟢 Suporte nativo a 29+ idiomas incl. PT |
| **Kimi K2 Instruct** | MoE | 1T (32B ativos) | API | 🟡 Forte em chinês/inglês, bom em PT |
| **GLM 4.5** | Dense | ~130B | API | 🟢 Suporte explícito a 26 idiomas incl. PT |
| **Llama 3 70B** | Dense | 70B | API | 🟢 PT é idioma oficial (8 idiomas, MGSM: 91.1) |
| **MiMo Flash V2** | MoE | — | API | 🟡 Líder em SWE-bench multilíngue |
| **Mistral / Mixtral** | MoE | 8x22B / 8x7B | API | 🟢 Forte em idiomas europeus incl. PT |
> **🌍 Por que esses modelos?** A seleção priorizou LLMs com **comprovada capacidade multilíngue e forte desempenho em português**, mesmo quando desenvolvidos por empresas chinesas ou americanas:
>
> - **Qwen 2.5** (Alibaba): Suporta oficialmente **29+ idiomas incluindo português**. Foi utilizado como LLM-judge para anotação de qualidade de documentos em português em pesquisas acadêmicas recentes. Em benchmarks de legal brasileiro, superou modelos mais novos.
> - **DeepSeek V3** (DeepSeek): Treinado em **14.8 trilhões de tokens** de dados multilíngues de alta qualidade. Listado entre os top modelos para português no Artificial Analysis.
> - **Llama 3** (Meta): **Português é um dos 8 idiomas oficialmente suportados**. Score de 91.1 no benchmark multilíngue MGSM — o mais alto da família Llama.
> - **GLM 4.5** (Zhipu AI): Pré-treinado em **26 idiomas incluindo português**. Reconhecido por desempenho equilibrado em idiomas europeus e asiáticos.
> - **Gemma 3** (Google): Suporta **140+ idiomas** no pré-treinamento.
> - **Kimi K2** (Moonshot AI): Excelente em raciocínio cross-lingual chinês-inglês, com boa transferência para português. Modelo de 1 trilhão de parâmetros.
> - **MiMo Flash V2** (Xiaomi): Líder em **SWE-bench Multilingual** entre modelos open-source. Forte em geração de código e texto em múltiplos idiomas.
>
> Essa diversidade de origens (🇨🇳 China, 🇺🇸 EUA, 🇫🇷 França, 🇪🇺 Europa) garante **variação estilística natural** no corpus — cada modelo imprime suas próprias nuances linguísticas ao português, enriquecendo a distribuição dos dados de treinamento.
**Diversidade de prompts:**
- **21+ system prompts** com personas distintas: professor universitário, jornalista científico, historiador, divulgador (estilo Átila Iamarino), escritor técnico, filósofo, contador de histórias, pensador crítico, entre outros
- **20 estilos de texto**: artigos educativos, entrevistas, debates, FAQs, threads de Twitter/X, posts de LinkedIn, conversas de WhatsApp, transcrições de podcast, mesas redondas, tutoriais, reviews, newsletters, diálogos socráticos, carrosséis de Instagram, posts de Reddit, e mais
- **Variação de temperatura** (0.5–0.9) para ampliar a diversidade lexical
- **Batch generation** com múltiplos temas por request para eficiência
#### 💰 Análise de Custos
Gerar **~961 milhões de tokens sintéticos** em escala é um desafio logístico e financeiro significativo.
**Custo estimado a preços de mercado (output tokens):**
| Modelo | Preço por 1M tokens (output) | Proporção estimada |
|---|---|---|
| DeepSeek V3/V3.2 | ~US$ 0.42 | Alta (modelo barato e potente) |
| MiMo Flash V2 | ~US$ 0.30 | Moderada |
| Qwen3 235B | ~US$ 1.20 | Moderada |
| Kimi K2 Instruct | ~US$ 2.00–3.00 | Baixa |
| GLM 4.5 | ~US$ 1.60 | Baixa |
| Llama 3 70B | ~US$ 0.40–0.80 | Baixa |
| Mistral/Mixtral | ~US$ 0.24–0.60 | Moderada |
| Modelos locais (Qwen 72B, Gemma 27B) | Custo de GPU (~US$ 2–3/h por H100) | Alta |
| Métrica | Valor |
|---|---|
| **Tokens sintéticos gerados** | ~961M |
| **Custo estimado a preço de mercado** | ~US$ 1.500–3.000 |
| **Custo real** | **Significativamente menor** |
**Estratégias de redução de custo:**
1. **Inferência local otimizada**: Modelos de 72B+ parâmetros rodando quantizados (4-bit) em GPUs NVIDIA H100, maximizando throughput por hora de GPU — custo por token drasticamente menor que APIs
2. **Arbitragem de APIs**: Uso estratégico de múltiplos provedores, aproveitando créditos gratuitos, promoções, e preços por volume
3. **Batch generation**: Múltiplos artigos gerados por request, maximizando tokens de output por chamada
4. **Diversificação de modelos**: Mix entre modelos caros (maior qualidade) e modelos baratos/gratuitos (volume), mantendo a qualidade média alta
> 💡 **Lição**: É possível construir datasets de escala industrial sem orçamento corporativo, combinando engenharia de inferência local com uso inteligente de APIs.
### 3. Filtragem de Qualidade dos Dados Reais com SBERT
Um dos diferenciais deste corpus é o pipeline de **filtragem de qualidade baseado em SBERT** (Sentence-BERT), aplicado aos **dados reais** (C4 e FineWeb2) para remover textos de baixa qualidade do web crawl. Os dados sintéticos, por serem gerados por LLMs de alta capacidade com prompts cuidadosamente projetados, já possuem qualidade inerente e não necessitam dessa filtragem.
#### 3.1. Rotulação Automática com LLM-as-a-Judge
Para treinar o modelo de qualidade, primeiro foi necessário criar um dataset rotulado. Em vez de rotulação manual (inviável para grandes volumes), foi utilizada a técnica **LLM-as-a-Judge**: um LLM de alta capacidade foi usado para **classificar automaticamente ~72K amostras de texto** em 3 níveis de qualidade:
| Classe | Label | Critério do LLM Judge | Exemplos |
|---|---|---|---|
| **Ouro** (2) | Alta qualidade | Bem escrito, informativo, coeso, estruturado | Artigos científicos, textos educativos |
| **Médio** (1) | Qualidade aceitável | Legível mas superficial ou genérico | Posts básicos, textos curtos |
| **Ruim** (0) | Baixa qualidade | Spam, incoerente, corrompido | Anúncios, textos sem sentido |
Essa abordagem é inspirada no pipeline do [FineWeb (HuggingFace, 2024)](https://huggingface.co/spaces/HuggingFaceFW/blogpost-fineweb-v1), que demonstrou a eficácia de **filtragem de qualidade baseada em modelos** para curar dados de web crawl em larga escala.
#### 3.2. Fine-Tuning do SBERT
Com os 72K textos rotulados pelo LLM, um modelo SBERT (`all-mpnet-base-v2`) foi fine-tunado para aprender a "textura" da qualidade textual.
O treinamento usou **pares estratégicos**:
| Tipo de Par | Textos | Label | Objetivo |
|---|---|---|---|
| **Positivo** | Ouro + Ouro | 1.0 | Aproximar textos de alta qualidade |
| **Hard Negative** | Ouro + Médio | 0.0 | Ensinar diferenças sutis de qualidade |
| **Easy Negative** | Ouro + Ruim | 0.0 | Ensinar diferenças óbvias (spam vs qualidade) |
**Configuração do treino:**
- Loss: **Cosine Similarity Loss**
- Avaliação: `EmbeddingSimilarityEvaluator` a cada 500 steps
- Warmup: 10% dos steps
- O melhor checkpoint é salvo automaticamente (`save_best_model=True`)
#### 3.3. Filtragem em Produção
O modelo treinado foi usado para filtrar os **dados reais (C4 + FineWeb2)** em escala:
```
┌─────────────────────────────────────────────────────────┐
│ 1. ANCHOR: Média dos embeddings de textos "Ouro" │
│ anchor_emb = mean(SBERT.encode(textos_ouro)) │
│ │
│ 2. SCORE: Para cada documento do C4/FineWeb2 │
│ score = cosine_sim(SBERT.encode(doc), anchor_emb) │
│ │
│ 3. DECISÃO: │
│ score ≥ threshold → ✅ Aprovado (alta qualidade) │
│ score < threshold → ❌ Rejeitado (spam/lixo) │
│ │
│ Threshold = média_ouro - 1σ (~84% dos textos bons) │
└─────────────────────────────────────────────────────────┘
```
O processamento em batch (batch_size=64 na GPU) permite filtrar milhões de textos com eficiência.
### 4. Processamento Final
- **Deduplicação por hash MD5** — remoção de duplicatas exatas em todo o corpus
- **Filtragem por tamanho** — mínimo de 50 caracteres e 10 palavras por documento
- **Normalização de schema** — todos os documentos convertidos para formato unificado
- **Conversão para Parquet** — formato otimizado com compressão Snappy
## 📋 Schema
Cada documento contém os seguintes campos:
| Campo | Tipo | Descrição |
|---|---|---|
| `text` | `string` | Conteúdo do documento |
| `source` | `string` | Fonte original do documento |
| `subset` | `string` | `"real"` ou `"synthetic"` |
| `word_count` | `int32` | Contagem de palavras |
| `char_count` | `int32` | Contagem de caracteres |
| `language` | `string` | `"pt-br"` |
## ⚠️ Limitações
- Dados sintéticos podem conter alucinações factuais
- O subset real herda possíveis vieses das fontes originais (C4, FineWeb2)
- Não há garantia de que todos os textos são factualmente corretos
- Estimativas de tokens são aproximadas (fator ~1.3x sobre contagem de palavras)
## 📜 Licença e Termos de Uso
O **Corpus PT-BR v1** é distribuído sob a licença **Open Data Commons Attribution License (ODC-By) v1.0**, herdada dos datasets que compõem sua base.
Entretanto, devido à natureza híbrida do corpus, aplicam-se termos específicos a cada subset:
1. **Subset `real` (C4 e FineWeb2)**: Liberados sob a licença **ODC-By 1.0**. Os usuários também estão sujeitos aos Termos de Uso do Common Crawl.
2. **Subset `synthetic`**: Os textos sintéticos foram gerados utilizando diversos LLMs (como Llama 3, Qwen, DeepSeek e Gemma). O uso destes dados sintéticos pode estar sujeito aos termos de uso ou licenças originais dos respectivos modelos geradores (ex: *Llama 3 Community License*, *Gemma Terms of Use*, etc.), que frequentemente estabelecem regras sobre o uso de seus outputs para trinar modelos comerciais concorrentes.
Para usos de pesquisa (Research), fine-tuning e aplicações não-massivas, o uso é amplamente encorajado e permitido pelas licenças base.
## 🧠 Sobre o Projeto
Este corpus é um dos produtos de uma infraestrutura de engenharia de dados para NLP em Português, desenvolvida ao longo de meses. A liberação pública do `corpus-ptbr-v1` inclui a documentação do dataset e scripts utilizados em partes do pipeline. O processo completo inclui:
- **Geração sintética em massa** — orquestração de múltiplos LLMs (locais e via API) com prompts diversificados, otimização de throughput, e controle de custos
- **Filtragem de qualidade** — modelo SBERT fine-tunado para classificar textos por qualidade, treinado com dados rotulados automaticamente via LLM-as-a-Judge
- **Datasets de rotulagem** — datasets auxiliares para tarefas de classificação, avaliação e curadoria de qualidade
- **Processamento em escala** — pipelines de deduplicação, normalização e conversão otimizados para datasets de bilhões de tokens
O `corpus-ptbr-v1` é o **primeiro dataset público** gerado a partir dessa infraestrutura, com outros projetos de dados em andamento.
## 👤 Autor
**Gabriel Yogi (MadrasLe)** — [HuggingFace](https://huggingface.co/Madras1)
---
提供机构:
Madras1



