five

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 ![Pipeline de construção do corpus](pipeline_diagram.png) ## 📊 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
5,000+
优质数据集
54 个
任务类型
进入经典数据集
二维码
社区交流群

面向社区/商业的数据集话题

二维码
科研交流群

面向高校/科研机构的开源数据集话题

数据驱动未来

携手共赢发展

商业合作