--- license: apache-2.0 language: - pt base_model: - Assaoka/Tucano2-qwen-0.5B-Brighter - Assaoka/Tucano2-qwen-0.5B-FinBERT - Assaoka/Tucano2-qwen-0.5B-Phrasebank - Assaoka/Tucano2-qwen-0.5B-GoEmotions pipeline_tag: text-generation library_name: transformers tags: - sentiment-analysis - slm - eniac-2026 - knowledge-accumulation - prior-alignment datasets: - ruanchaves/reli metrics: - f1 - accuracy model-index: - name: Tucano2-qwen-0.5b-Merge-ReLi-SA results: - task: type: text-generation name: Sentiment Analysis dataset: name: reli-sa-label type: ruanchaves/reli split: test metrics: - type: f1 value: 0.6975 name: Macro F1 - type: accuracy value: 0.8041 name: Accuracy --- # Tucano2-qwen-0.5b-Merge-ReLi-SA (Prior Model) Este é um modelo especialista em análise de sentimento em língua portuguesa, construído usando a estratégia **Knowledge Accumulation (Prior)**. O modelo foi inicialmente pre-mesclado (*merged*) com outros especialistas usando TIES Merge e, em seguida, sofreu ajuste fino (*fine-tuning*) no conjunto de dados **ruanchaves/reli**. Este desenvolvimento faz parte do artigo científico submetido ao **ENIAC 2026**: *"United Experts: Merging Small Language Models for Multi-Domain Sentiment Analysis in Portuguese"*. ## 📌 Detalhes do Modelo - **Modelos Base (Merge)**: - `Assaoka/Tucano2-qwen-0.5B-Brighter` - `Assaoka/Tucano2-qwen-0.5B-FinBERT` - `Assaoka/Tucano2-qwen-0.5B-Phrasebank` - `Assaoka/Tucano2-qwen-0.5B-GoEmotions` - **Tarefa**: Análise de Sentimentos (positivo, negativo, neutro, misto) em resenhas literárias em português após alinhamento sequencial por Knowledge Accumulation (Prior). - **Domínio**: Língua Portuguesa (PT-BR). - **Licença**: Apache 2.0. - **Estratégia**: Alinhamento sequencial via Knowledge Accumulation (Prior + Fine-tuning). ## 📊 Avaliação Completa (In-Domain & Out-Of-Domain) Métricas padronizadas (Macro F1 · Micro F1 · Accuracy · Hamming Loss) calculadas sobre o conjunto de teste completo de cada domínio. A coluna **Baseline** corresponde ao modelo base `Polygl0t/Tucano2-qwen-0.5B-Instruct` sem fine-tuning. | Dataset / Tarefa | Métrica | Valor | Baseline | | :--- | :--- | :---: | :---: | | **RELI-SA** | Macro F1
Micro F1
Accuracy
Hamming Loss | 69.75%
80.41%
80.41%
0.1959 | 30.66%
37.07%
37.07%
0.6293 | | **BRIGHTER** | Macro F1
Micro F1
Accuracy
Hamming Loss | 37.72%
52.88%
37.98%
0.1479 | 33.47%
38.07%
24.66%
0.2731 | | **FINBERT-PT-BR** | Macro F1
Micro F1
Accuracy
Hamming Loss | 22.45%
31.68%
31.68%
0.6832 | 54.77%
66.34%
66.34%
0.3366 | | **FINANCIAL-PHRASEBANK** | Macro F1
Micro F1
Accuracy
Hamming Loss | 30.73%
59.96%
59.96%
0.4004 | 38.13%
39.32%
39.32%
0.6068 | | **GO-EMOTIONS** | Macro F1
Micro F1
Accuracy
Hamming Loss | 19.73%
36.39%
33.34%
0.0496 | 7.59%
10.31%
6.08%
0.0720 | ## 🚀 Como utilizar o modelo (vLLM ou Transformers) O modelo responde a prompts estruturados com instruções do sistema em português. Exemplo real de inferência estruturada: ```python from transformers import AutoModelForCausalLM, AutoTokenizer model_id = "Assaoka/Tucano2-qwen-0.5b-Merge-ReLiSA" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto") messages = [ {"role": "system", "content": "Você é um classificador de sentimentos de resenhas de livros em português. Sua tarefa é analisar o texto fornecido pelo usuário e retornar um JSON válido no seguinte formato: {"sentimento": "positivo/negativo/neutro/misto"}. Responda APENAS com o JSON válido."}, {"role": "user", "content": "Resenha: Este livro é maravilhoso, a escrita é super fluida e envolvente, mas o final deixou a desejar."} ] prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) inputs = tokenizer(prompt, return_tensors="pt").to("cuda") outputs = model.generate(**inputs, max_new_tokens=100) print(tokenizer.decode(outputs[0], skip_special_tokens=True)) # Resposta esperada: {"sentimento": "misto"} ```