--- license: apache-2.0 base_model: google/gemma-4-E2B-it language: - pt - en tags: - creative-writing - fine-tuned - lora - peft - gemma - storytelling - escrita-criativa --- # Shikkaku — Creative Writing Assistant / Assistente de Escrita Criativa [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Base Model](https://img.shields.io/badge/Base%20Model-Gemma%204%20E2B-orange)](https://huggingface.co/google/gemma-4-E2B-it) [![Language](https://img.shields.io/badge/Language-PT%20%7C%20EN-green)]() --- ### 🚀 Formatos Alternativos Este modelo também está disponível quantizado em formato GGUF para execução local/Ollama em: 👉 **[Kruliel/shikkaku-gguf](https://huggingface.co/Kruliel/shikkaku-gguf)** --- ## 🇧🇷 Português ### O que é o Shikkaku? **Shikkaku** é um assistente de escrita criativa em Português, construído sobre o [Gemma 4 E2B](https://huggingface.co/google/gemma-4-E2B-it) da Google e especializado através de múltiplas rodadas de fine-tuning focadas em narrativa, análise textual e desenvolvimento criativo. O nome é uma referência a *Ningen Shikkaku* (人間失格 — *Desqualificado como Ser Humano*), obra seminal de Osamu Dazai. Assim como a obra explora a condição humana com honestidade brutal, o Shikkaku foi treinado para dar feedback direto, específico e real — sem elogios vazios, sem respostas genéricas. ### Para que serve? - **Análise de trechos:** identifica problemas de ritmo, diálogo, caracterização, show vs tell - **Feedback construtivo:** explica o que não funciona e por quê, com sugestões práticas - **Desenvolvimento criativo:** ajuda a desenvolver personagens, arcos narrativos, atmosfera - **Coaching de escrita:** orienta sobre técnicas literárias com fundamento narrativo - **Brainstorming:** sugere múltiplas direções criativas em vez de uma única resposta O modelo **não** foi treinado para responder sobre programação, matemática ou assuntos técnicos. ### Como foi treinado? Fine-tuning com LoRA/QLoRA usando [Unsloth](https://github.com/unslothai/unsloth) no Google Colab (GPU T4), em 4 rodadas progressivas: | Rodada | Dataset | Exemplos | Épocas | Objetivo | |--------|---------|----------|--------|----------| | 1 | [Nitral-AI/Creative_Writing-ShareGPT](https://huggingface.co/datasets/Nitral-AI/Creative_Writing-ShareGPT) | 800 | 2 | Base em escrita criativa de alta qualidade | | 2 | [euclaise/writingprompts](https://huggingface.co/datasets/euclaise/writingprompts) | 600 | 2 | Histórias humanas do r/WritingPrompts | | 3 | [theprint/TextAnalysis](https://huggingface.co/datasets/theprint/TextAnalysis) | 77 | 3 | Técnica literária e análise narrativa | | 4 | Dataset DZP (próprio) | 206 | 2 | Análise crítica de escrita em Português | A Rodada 4 com dataset próprio é o que define a voz e o estilo do modelo — respostas diretas, específicas, que ensinam algo concreto. ### Como usar? **Requisitos:** ```bash pip install transformers peft torch accelerate ``` **Código:** ```python from transformers import AutoTokenizer, AutoModelForCausalLM from peft import PeftModel import torch # Carregar modelo base base_model = AutoModelForCausalLM.from_pretrained( "google/gemma-4-E2B-it", torch_dtype=torch.float16, device_map="auto", ) tokenizer = AutoTokenizer.from_pretrained("google/gemma-4-E2B-it") # Carregar adaptadores Shikkaku model = PeftModel.from_pretrained(base_model, "Kruliel/shikkaku") # Conversa messages = [ { "role": "system", "content": "Você é um assistente especialista em escrita criativa. Seu foco é narrativa, personagens, emoção e estrutura dramática. Evite respostas genéricas — seja específico e construtivo." }, { "role": "user", "content": "Analise esse trecho: 'João estava com medo. Ele correu. O monstro era assustador.'" } ] inputs = tokenizer.apply_chat_template( messages, tokenize=True, add_generation_prompt=True, return_tensors="pt" ).to(model.device) outputs = model.generate( input_ids=inputs, max_new_tokens=300, temperature=0.8, do_sample=True, ) new_tokens = outputs[0][inputs.shape[1]:] print(tokenizer.decode(new_tokens, skip_special_tokens=True)) ``` ### Exemplo de conversa **Usuário:** Meu personagem principal não tem falhas. Como posso torná-lo mais humano sem deixá-lo fraco? **Shikkaku:** Personagens sem falhas geralmente são planos demais. A humanidade nasce da luta, não da perfeição. Para tornar seu personagem humano sem enfraquecê-lo, apresente falhas que tenham consequências reais e justas. Em vez de simplesmente dizer que ele é impulsivo, mostre como essa impulsividade prejudica relacionamentos importantes. Em vez de apenas dizer que ele é corajoso, mostre o custo emocional de cada ato corajoso. As falhas devem ser consistentes com a personalidade do personagem. Um personagem preguiçoso não pode ser heroico sem que isso custe algo significativo. O ponto crucial é a motivação — um personagem humano sempre age por motivações complexas, não apenas por virtude. ### Limitações - Modelo base de 2B parâmetros — respostas mais curtas e menos elaboradas que modelos maiores - Treinado principalmente para Português; respostas em inglês são funcionais mas menos refinadas - Dataset próprio de 206 exemplos — o estilo é consistente mas o vocabulário temático é limitado - Não tem conhecimento de eventos após agosto de 2025 (corte do Gemma 4) ### Licença Apache 2.0 — herdada do Gemma 4. Uso comercial permitido com atribuição. --- ## 🇺🇸 English ### What is Shikkaku? **Shikkaku** is a creative writing assistant in Portuguese, built on Google's [Gemma 4 E2B](https://huggingface.co/google/gemma-4-E2B-it) and specialized through multiple fine-tuning rounds focused on narrative craft, textual analysis, and creative development. The name references *Ningen Shikkaku* (人間失格 — *No Longer Human*), a seminal work by Osamu Dazai. Just as the novel explores the human condition with brutal honesty, Shikkaku was trained to give direct, specific, and real feedback — no empty praise, no generic responses. ### What can it do? - **Text analysis:** identifies issues with pacing, dialogue, characterization, show vs tell - **Constructive feedback:** explains what doesn't work and why, with practical suggestions - **Creative development:** helps develop characters, narrative arcs, atmosphere - **Writing coaching:** guides on literary techniques with narrative foundation - **Brainstorming:** suggests multiple creative directions instead of a single answer The model was **not** trained to answer questions about programming, mathematics, or technical subjects. ### Training Details Fine-tuned with LoRA/QLoRA using [Unsloth](https://github.com/unslothai/unsloth) on Google Colab (T4 GPU), in 4 progressive rounds: | Round | Dataset | Examples | Epochs | Goal | |-------|---------|----------|--------|------| | 1 | [Nitral-AI/Creative_Writing-ShareGPT](https://huggingface.co/datasets/Nitral-AI/Creative_Writing-ShareGPT) | 800 | 2 | High quality creative writing foundation | | 2 | [euclaise/writingprompts](https://huggingface.co/datasets/euclaise/writingprompts) | 600 | 2 | Human stories from r/WritingPrompts | | 3 | [theprint/TextAnalysis](https://huggingface.co/datasets/theprint/TextAnalysis) | 77 | 3 | Literary technique and narrative analysis | | 4 | DZP Dataset (custom) | 206 | 2 | Critical writing analysis in Portuguese | Round 4 with the custom dataset defines the model's voice and style — direct, specific responses that teach something concrete. ### How to use? **Requirements:** ```bash pip install transformers peft torch accelerate ``` **Code:** ```python from transformers import AutoTokenizer, AutoModelForCausalLM from peft import PeftModel import torch # Load base model base_model = AutoModelForCausalLM.from_pretrained( "google/gemma-4-E2B-it", torch_dtype=torch.float16, device_map="auto", ) tokenizer = AutoTokenizer.from_pretrained("google/gemma-4-E2B-it") # Load Shikkaku adapters model = PeftModel.from_pretrained(base_model, "Kruliel/shikkaku") # Chat messages = [ { "role": "system", "content": "Você é um assistente especialista em escrita criativa. Seu foco é narrativa, personagens, emoção e estrutura dramática. Evite respostas genéricas — seja específico e construtivo." }, { "role": "user", "content": [{"type": "text", "text": "How do I write a compelling villain?"}] } ] inputs = tokenizer.apply_chat_template( messages, tokenize=True, add_generation_prompt=True, return_tensors="pt" ).to(model.device) outputs = model.generate( input_ids=inputs, max_new_tokens=300, temperature=0.8, do_sample=True, ) new_tokens = outputs[0][inputs.shape[1]:] print(tokenizer.decode(new_tokens, skip_special_tokens=True)) ``` ### Limitations - 2B parameter base model — shorter and less elaborate responses than larger models - Primarily trained in Portuguese; English responses are functional but less refined - Custom dataset of 206 examples — style is consistent but thematic vocabulary is limited - No knowledge of events after August 2025 (Gemma 4 cutoff) ### License Apache 2.0 — inherited from Gemma 4. Commercial use permitted with attribution. --- *Shikkaku — "Desqualificado como Ser Humano" / "No Longer Human" — Osamu Dazai, 1948* *Built by [Kruliel](https://huggingface.co/Kruliel)*