YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
Model Card: qwen-python-slm v2
Visão geral
qwen-python-slm é um modelo de linguagem pequeno (SLM) especializado em gerar código para o ecossistema de Engenharia de Dados, Data Science, Machine Learning, Deep Learning, LLMs, Agentes de IA, DataOps e MLOps.
Esta é a versão 2 do modelo, um ajuste fino (SFT com QLoRA) do Qwen/Qwen2.5-Coder-1.5B-Instruct, mantendo a arquitetura de 1,5 bilhão de parâmetros e adicionando adaptadores LoRA treinados para responder a instruções técnicas de dados/IA em Python, SQL e PySpark.
- Tipo de modelo: Causal LM para geração de código
- Idioma: Português (instruções) + código multilíngue (Python/SQL/PySpark)
- Licença: Apache 2.0
- Formatos disponíveis:
- Pesos completos (merged, FP16) no Hugging Face Hub
- GGUF quantizado em Q4_K_M para uso local via Ollama / llama.cpp / Continue.dev
Uso pretendido
- Geração de scripts Python para ETL/ELT, análise de dados e ML.
- Escrita de consultas SQL compatíveis com SQLite/PostgreSQL.
- Geração de código PySpark para processamento distribuído.
- Prototipagem de agentes de IA com LangChain, LlamaIndex, CrewAI etc.
- Automação de pipelines de MLOps/DataOps (Airflow, dbt, MLflow).
- Uso educacional e produtividade de desenvolvedores de dados.
Não recomendado para: produção crítica sem revisão humana; geração de código com dados sensíveis sem validação de segurança; substituição de engenheiros especialistas.
Comandos de linguagem
O modelo reconhece prefixos no prompt para forçar a linguagem/domínio desejado:
/python Código Python genérico
/sql Consultas SQL
/pyspark Código PySpark
/ml Machine Learning (scikit-learn, PyTorch, etc.)
/llm LLMs e fine-tuning (transformers, peft, vLLM, etc.)
/agent Agentes de IA (LangChain, LlamaIndex, CrewAI, etc.)
/dataops Pipelines/DataOps/MLOps (Airflow, dbt, MLflow, etc.)
Exemplo:
ollama run thiago_lange/qwen-python-slm "/sql Liste os 10 produtos mais vendidos no último trimestre."
Detalhes do treinamento
- Modelo base:
Qwen/Qwen2.5-Coder-1.5B-Instruct - Técnica: Supervised Fine-Tuning (SFT) com QLoRA (4-bit NF4)
- Versão: v2
- Tamanho de contexto: 2048 tokens
- Hardware de treino: NVIDIA GeForce RTX 5050 (8 GB VRAM)
- Hiperparâmetros LoRA:
r = 32alpha = 64dropout = 0.05- Módulos alvo:
q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj
- Hiperparâmetros de treino:
- Batch size efetivo: 32 (1 × 32 gradient accumulation)
- Learning rate: 2e-4
- Max steps: 1500
- Warmup steps: 75
- Otimizador:
paged_adamw_8bit
- Parâmetros treináveis: 36,9M (2,34% do total)
Dados de treino
Dataset final combinado: 141.838 amostras, com splits de treino/teste estratificados por fonte. A avaliação usa apenas os holdouts de teste, nunca os dados de treino.
- Dataset principal:
iamtarun/python_code_instructions_18k_alpaca(Python, filtrado por keywords de dados/IA) - Datasets Python extras:
flytech/python-codes-25k,m-a-p/CodeFeedback-Filtered-Instruction(filtrado para Python, subamostrado para 30k),datasets/python_docs_synthetic.json(2.500 amostras sintéticas) - Dataset SQL: combinação de
b-mc2/sql-create-context,numbersstation/NSText2SQL,shainalcon/synthetic-text-to-sqle queries sintéticas por dialeto (~48.600 amostras de treino) - Dataset PySpark: ~9.263 amostras sintéticas + 292 oficiais da documentação Spark
- Filtro de domínio: amostras são mantidas apenas se contiverem palavras-chave do ecossistema de dados/IA (pandas, sklearn, PyTorch, Spark, Airflow, MLflow, LangChain etc.)
- Prompt de sistema: engenheiro de dados/ML sênior, especializado em Python/SQL/PySpark para dados e IA.
Métricas de avaliação
Avaliação executada com src/evaluate.py (Python) e src/evaluate_extended.py (SQL e PySpark), 30 amostras por linguagem, usando exclusivamente os holdouts de teste (datasets/splits/*_test.json). Os dados de teste não foram vistos durante o treino, então as métricas refletem generalização.
| Métrica | Valor |
|---|---|
| Taxa de compilação Python válida | 96,67% |
| Taxa de execução Python sem erros | 43,33% |
| Taxa de parse SQL válido | 100,00% |
| Taxa de sintaxe PySpark válida | 100,00% |
| BLEU médio — Python | 0,144 |
| BLEU médio — SQL | 0,798 |
| BLEU médio — PySpark | 0,802 |
Observações:
- A queda na taxa de execução Python em relação à v1 (83,33%) é esperada: desta vez a avaliação usa holdout de teste real, não amostras do treino.
- Os erros de execução Python foram principalmente ambientais (biblioteca externa ausente como
bs4,tensorflow,mysql; arquivos CSV locais inexistentes; dados NLTK não baixados), não falhas de sintaxe. - SQL e PySpark são avaliados apenas por sintaxe/parse, já que a execução real exigiria banco de dados e cluster Spark.
- BLEU mede similaridade com a referência, não correção semântica.
Futuramente, recomenda-se adicionar pass@1 em benchmarks como HumanEval, MBPP e Spider/BIRD (SQL), com dados nunca vistos no treino.
Limitações
- O modelo foi treinado com recursos limitados (RTX 5050 8 GB, 1500 steps), então pode apresentar alucinações ou código não executável.
- SQL é validado sintaticamente, mas não executado contra um banco real — a semântica depende do schema fornecido.
- PySpark é tratado como Python; a execução real exige ambiente Spark configurado.
- O domínio é voltado para dados/IA; código fora desse escopo (frontend, mobile, etc.) pode ter qualidade inferior.
- O modelo pode reproduzir vieses presentes nos dados de treino.
Como usar
Ollama (GGUF)
ollama run thiago_lange/qwen-python-slm-v2 "/python Crie uma DAG do Airflow que baixe um CSV e salve no S3."
Transformers (pesos merged)
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "tel1980/qwen-python-slm-v2"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
messages = [
{"role": "system", "content": "Você é um engenheiro de dados e Machine Learning sênior."},
{"role": "user", "content": "/sql Liste os clientes com mais de 5 pedidos."},
]
inputs = tokenizer.apply_chat_template(messages, return_tensors="pt", add_generation_prompt=True).to(model.device)
outputs = model.generate(inputs, max_new_tokens=512, temperature=0.2)
print(tokenizer.decode(outputs[0][inputs.shape[1]:], skip_special_tokens=True))
Licença
Este modelo é distribuído sob a licença Apache 2.0, a mesma do modelo base Qwen2.5-Coder-1.5B-Instruct.
Citação
Se você usar este modelo em trabalhos acadêmicos, cite o modelo base:
@article{qwen2.5,
title={Qwen2.5 Technical Report},
author={Qwen Team},
journal={arXiv preprint arXiv:2409.12186},
year={2024}
}
Links
- Código-fonte:
https://github.com/tel1980/SLM_python - Pesos merged v2 (FP16):
https://huggingface.co/tel1980/qwen-python-slm-v2 - GGUF quantizado v2:
https://huggingface.co/tel1980/qwen-python-slm-v2-gguf - Versão anterior (v1):
https://huggingface.co/tel1980/qwen-python-slm
- Downloads last month
- -