Sistema para avaliação de traduções e equivalência semântica usando modelos de linguagem locais via Ollama.
- Integração com Ollama: Usa modelos LLM locais para avaliação
- Múltiplos tipos de avaliação: Tradução, equivalência semântica, qualidade
- Processamento em lote: Avalia múltiplos pares de sentenças simultaneamente
- Processamento de datasets CSV: Carrega e processa arquivos CSV automaticamente
- Concorrência controlada: Gerencia múltiplas instâncias de modelos
- Logging detalhado: Debug e monitoramento de operações
- Tratamento robusto de erros: Retry automático e fallbacks
- Exportação de resultados: Salva resultados diretamente no CSV com colunas adicionais
-
Ollama instalado e rodando:
# Instalar Ollama (se não estiver instalado) curl -fsSL https://ollama.ai/install.sh | sh # Iniciar o servidor Ollama ollama serve
-
Modelos baixados:
# Exemplos de modelos recomendados ollama pull llama2 ollama pull mistral ollama pull codellama -
Dependências Python:
pip install aiohttp python-dotenv pandas
- Clone ou baixe o projeto
- Instale as dependências:
pip install -r requirements.txt
- Certifique-se de que o Ollama está rodando:
ollama serve
Execute o script principal:
python main.pyO sistema irá:
- Testar a conexão com o Ollama
- Listar modelos disponíveis
- Permitir configurar modelos e instâncias
- Oferecer opções de entrada:
- Adicionar pares manualmente
- Processar dataset CSV
- Processar pares adicionados
- Processar e mostrar resultados
Veja o arquivo exemplo_uso.py para exemplos de como usar o sistema programaticamente:
from main import OllamaClient, JudgerSystem, SentencePair, ModelConfig
# Inicializar cliente
client = OllamaClient(base_url="http://localhost:11434")
judger = JudgerSystem(client)
# Criar par de sentenças
pair = SentencePair(
source_text="Hello, how are you?",
target_text="Olá, como você está?",
source_language="en",
target_language="pt"
)
# Fazer julgamento
result = await judger.judge_sentence_pair(pair, "llama2", "translation")O sistema suporta processamento automático de datasets CSV:
from main import CSVProcessor, JudgerSystem, ModelConfig
# Carregar dataset CSV
processor = CSVProcessor("meu_dataset.csv")
processor.load_csv()
# Configurar colunas e idiomas
processor.validate_columns("texto_original", "texto_traduzido")
processor.set_languages("en", "pt")
# Converter para pares de sentenças
sentence_pairs = processor.get_sentence_pairs()
# Processar com modelo
configs = [ModelConfig(name="llama2", instances=2)]
results = await judger.batch_judgment(sentence_pairs, configs, "translation")
# Salvar resultados no CSV
processor.save_results(results, "resultados.csv")O CSV deve ter pelo menos duas colunas com os textos a serem avaliados:
texto_original,texto_traduzido
Hello, how are you?,Olá, como você está?
Good morning!,Bom dia!
Thank you very much.,Muito obrigado.
Após o processamento, o CSV será expandido com as seguintes colunas:
- resultado: "Correto" ou "Incorreto"
- explicacao: Explicação detalhada do julgamento
- confianca: Score de confiança (0.0-1.0)
- modelo: Nome do modelo usado
- timestamp: Data e hora do processamento
- Verifica precisão da tradução
- Considera fluência e adequação cultural
- Identifica erros gramaticais e de contexto
- Foca no significado, não na tradução literal
- Considera diferentes formas de expressar a mesma ideia
- Avalia preservação da intenção comunicativa
- Analisa qualidade linguística de ambas as sentenças
- Considera gramática, clareza, naturalidade
- Avalia adequação ao contexto
Crie um arquivo .env (opcional):
OLLAMA_URL=http://localhost:11434client = OllamaClient(
base_url="http://localhost:11434", # URL do Ollama
max_concurrent_requests=4, # Máximo de requisições simultâneas
timeout=60 # Timeout em segundos
)- Verifique se o Ollama está rodando:
ollama serve - Confirme a URL: padrão é
http://localhost:11434 - Verifique firewall/proxy
- Liste modelos:
ollama list - Baixe um modelo:
ollama pull llama2
- Teste o modelo:
ollama run llama2 - Verifique se há memória suficiente
- Tente um modelo menor
- Ative modo debug para ver respostas detalhadas
- O sistema tem fallback para respostas não estruturadas
O sistema inclui logging detalhado:
- INFO: Operações principais e status
- WARNING: Problemas recuperáveis
- ERROR: Falhas críticas
- DEBUG: Detalhes técnicos (ativar com modo debug)
Para contribuir:
- Faça fork do projeto
- Crie uma branch para sua feature
- Implemente e teste
- Submeta um pull request
Este projeto está sob licença MIT. Veja o arquivo LICENSE para detalhes.
main.py: Sistema principal com todas as funcionalidadesexemplo_uso.py: Exemplos de uso programáticoexemplo_csv.py: Exemplo de processamento de CSVteste_rapido.py: Script de teste rápidoexemplo_dataset.csv: Dataset de exemplo para testesrequirements.txt: Dependências do projetoREADME.md: Esta documentação
Para problemas ou dúvidas:
- Verifique a seção de solução de problemas
- Ative o modo debug para mais informações
- Teste com o arquivo
exemplo_dataset.csvfornecido - Execute
python teste_rapido.pypara verificar a instalação - Abra uma issue no repositório