File size: 5,586 Bytes
d4a00b2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | #!/usr/bin/env python3
"""
Script para diversificar instruções em um dataset de treinamento.
Uso:
python diversify_instructions.py --input dataset.jsonl --output dataset_diversified.jsonl
"""
import json
import argparse
import random
from typing import List, Dict
# Variações de instruções para EDA
INSTRUCTION_VARIATIONS = [
"Realize uma Análise Exploratória de Dados (EDA) completa seguindo OBRIGATORIAMENTE os critérios estabelecidos.",
"Analise os dados fornecidos e realize uma EDA completa seguindo os critérios estabelecidos.",
"Faça uma Análise Exploratória de Dados seguindo OBRIGATORIAMENTE os critérios estabelecidos.",
"Realize uma análise exploratória completa dos dados seguindo os critérios estabelecidos.",
"Execute uma EDA detalhada dos dados fornecidos seguindo OBRIGATORIAMENTE os critérios estabelecidos.",
"Analise exploratoriamente o dataset seguindo os padrões estabelecidos.",
"Realize uma Análise Exploratória de Dados completa conforme os critérios estabelecidos.",
"Faça uma análise exploratória detalhada dos dados seguindo OBRIGATORIAMENTE os critérios estabelecidos.",
"Analise os dados de forma exploratória seguindo os critérios estabelecidos.",
"Realize uma EDA completa dos dados fornecidos seguindo OBRIGATORIAMENTE os critérios estabelecidos.",
"Execute uma Análise Exploratória de Dados seguindo os critérios estabelecidos.",
"Faça uma análise exploratória completa seguindo OBRIGATORIAMENTE os critérios estabelecidos.",
"Analise exploratoriamente os dados seguindo os padrões estabelecidos.",
"Realize uma EDA detalhada seguindo OBRIGATORIAMENTE os critérios estabelecidos.",
"Execute uma análise exploratória completa dos dados seguindo os critérios estabelecidos.",
]
def diversify_instructions(input_file: str, output_file: str, variations: List[str] = None) -> Dict:
"""
Diversifica as instruções em um dataset.
Args:
input_file: Caminho do arquivo de entrada
output_file: Caminho do arquivo de saída
variations: Lista de variações de instruções (opcional)
Returns:
Estatísticas da diversificação
"""
if variations is None:
variations = INSTRUCTION_VARIATIONS
examples = []
# Ler exemplos
print(f"📖 Lendo dataset: {input_file}")
with open(input_file, 'r', encoding='utf-8') as f:
for line in f:
if line.strip():
examples.append(json.loads(line))
print(f"✅ {len(examples)} exemplos carregados")
# Diversificar instruções
print(f"🔄 Diversificando instruções com {len(variations)} variações...")
stats = {
'total': len(examples),
'original_instructions': set(),
'new_instructions': set(),
'distribution': {}
}
for ex in examples:
original_instruction = ex.get('instruction', '')
stats['original_instructions'].add(original_instruction)
# Selecionar variação aleatória
new_instruction = random.choice(variations)
ex['instruction'] = new_instruction
stats['new_instructions'].add(new_instruction)
stats['distribution'][new_instruction] = stats['distribution'].get(new_instruction, 0) + 1
# Salvar dataset diversificado
print(f"💾 Salvando dataset diversificado: {output_file}")
with open(output_file, 'w', encoding='utf-8') as f:
for ex in examples:
f.write(json.dumps(ex, ensure_ascii=False) + '\n')
print(f"✅ Dataset salvo com sucesso!")
return stats
def print_stats(stats: Dict):
"""Imprime estatísticas da diversificação."""
print("\n" + "=" * 80)
print("ESTATÍSTICAS DA DIVERSIFICAÇÃO")
print("=" * 80)
print(f"Total de exemplos: {stats['total']}")
print(f"Instruções originais únicas: {len(stats['original_instructions'])}")
print(f"Instruções novas únicas: {len(stats['new_instructions'])}")
print(f"Diversidade: {len(stats['new_instructions'])/stats['total']*100:.1f}%")
print()
print("Distribuição das instruções:")
for instruction, count in sorted(stats['distribution'].items(), key=lambda x: x[1], reverse=True):
percentage = (count / stats['total']) * 100
print(f" • {count:4d} ({percentage:5.1f}%): {instruction[:60]}...")
print()
def main():
parser = argparse.ArgumentParser(
description='Diversifica instruções em um dataset de treinamento'
)
parser.add_argument(
'--input',
type=str,
required=True,
help='Arquivo de entrada (JSONL)'
)
parser.add_argument(
'--output',
type=str,
required=True,
help='Arquivo de saída (JSONL)'
)
parser.add_argument(
'--seed',
type=int,
default=42,
help='Seed para reprodutibilidade (padrão: 42)'
)
args = parser.parse_args()
# Definir seed para reprodutibilidade
random.seed(args.seed)
# Diversificar
stats = diversify_instructions(args.input, args.output)
# Imprimir estatísticas
print_stats(stats)
print("=" * 80)
print("✅ DIVERSIFICAÇÃO CONCLUÍDA!")
print("=" * 80)
print(f"\nArquivo gerado: {args.output}")
print("\n⚠️ IMPORTANTE: Revise alguns exemplos para garantir que a diversificação")
print(" não afetou a qualidade ou coerência dos dados.")
if __name__ == "__main__":
main()
|