--- language: - en license: apache-2.0 base_model: Qwen/Qwen3-1.7B library_name: transformers tags: - unsloth - qwen3 - lora - rewriting - style-transfer - unslop pipeline_tag: text-generation --- # qwen3-1.7b-unslop-good-lora-v1 A v2 pilot fine-tune of Qwen3-1.7B for unslop rewriting: taking AI-sounding passages and attempting to rewrite them into cleaner, more natural prose while preserving meaning. This is a more serious follow-up to the weak 0.6B pilot, but it is still an experiment rather than a production-ready unslopper. ## How it was trained - Base model: `Qwen/Qwen3-1.7B` - Training path: Unsloth fine-tuning on Hugging Face Jobs - Dataset: `N8Programs/unslop-good` - Rows used: 1000 (full training split) - Objective: conversational rewrite / style cleanup - Recipe inspiration: same overall recipe family as `N8Programs/Unslopper-30B-A3B-bf16`, adapted to a smaller model and safer HF Jobs settings. ## Training shape - max_seq_length: 1024 - batch_size: 1 - gradient_accumulation_steps: 8 - num_epochs: 3 - learning_rate: 1e-4 - LoRA rank: 8 - LoRA alpha: 20 - bf16 training on A10G ## Intended use Use this model as a pipeline stage for: - rewriting AI-sounding prose into more natural text - reducing cliché-heavy or overblown style - experimenting with a compact unslopper before scaling to larger models ## Limitations - pilot-sized dataset - still prone to instruction-following drift and meta/explanatory output - still may overcompress or distort source meaning - should be reviewed by a human or used as one stage in a larger editing pipeline ## Example usage ```python from transformers import AutoTokenizer, AutoModelForCausalLM repo = "Oysiyl/qwen3-1.7b-unslop-good-lora-v1" messages = [ {"role": "user", "content": "Polish this AI passage to feel more human while preserving meaning:\n[TEXT HERE]"} ] tokenizer = AutoTokenizer.from_pretrained(repo) model = AutoModelForCausalLM.from_pretrained(repo, device_map="auto") text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) inputs = tokenizer(text, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_new_tokens=512, temperature=0.8, repetition_penalty=1.1, do_sample=True) print(tokenizer.decode(outputs[0], skip_special_tokens=True)) ``` ## Recommended evaluation sample Use this full fiction passage for held-out testing: > The wind rose all at once, as if the mountain itself had inhaled. > She stood at the edge of the pass, cloak snapping like a torn banner behind her, staring down at the valley where the last lights were going out one by one. Each flame extinguished felt deliberate—an answer to a question she had been too afraid to ask. Somewhere below, bells began to ring, not in warning, but in mourning. They already knew. > “Don’t,” he said, breathless, reaching for her arm. His fingers brushed fabric, then air. “If you cross that line, there’s no coming back.” > She didn’t turn. The cold burned her lungs, sharpened her thoughts. “There was never a way back,” she replied softly. “Only a way forward you were willing to pretend didn’t exist.” > Thunder rolled, low and ancient. For a moment, the sky fractured into white fire, and in that instant he saw her face—resolved, terrified, incandescent with purpose. Not the girl he had sworn to protect, but the woman the world had demanded she become. > “You’ll die,” he said. > She smiled then, finally facing him, eyes bright with unshed tears. “So will everyone,” she answered. “The difference is what we leave burning when we’re gone.” > She stepped forward. > The mountain exhaled. ## Full observed output on that sample > A sudden gust roared through the valley, and the earth seemed to sigh with relief. At the pass, she paused, wrapped in a dress that fluttered like a flag of distress; behind her, the sky burst open, flames spilling from the heavens. She looked upon the dying glows of the hills, which were quickly fading into darkness, each light vanishing with an eerie precision. Just beyond lay the mournful sound of church bells, ringing solemnly. All around, signs of despair appeared, yet she remained resolute. > > “She can't escape me,” he warned, his voice trembling. “When she crosses that boundary, no return will be possible.” > > “I know,” she replied quietly. “But I won’t run.” > > The ground trembled as thunder echoed, sending a deep rumble through the mountains. > > “Then it seems you must make your choice now,” he added, urgency lacing his tone. “You can either stand by or flee.” > > She turned toward him. “I choose to stay. But do remember: this was not your decision.” > > He caught her hand, squeezing it tightly before stepping away. “Your choice was yours alone. Now it's mine to take action.” > > With that, they moved on, crossing the valley beneath a heavy, ominous cloud. > > As they pressed onward, a chill washed over them, filling their lungs with its sharp bite. > > “The mountain has inhaled,” someone murmured beside her. > > “What does that mean?” she asked, curiosity piqued. > > “It means it is about to exhale,” another responded, a sense of foreboding settling within the air. > > They journeyed deeper, where the night enveloped them, and soon they entered a realm thick with mist. > > At dawn, they emerged, finding themselves surrounded by a breathtaking landscape. A massive forest stretched out, lush trees standing majestically under a golden sun. As they advanced, the sun dimmed, revealing a vast plain dotted with towering grasslands stretching toward the horizon. > > Their path led them to a cliff overlooking a river shimmering with the gentle glow of morning light. There stood a small house nestled among the trees, resembling a quaint cottage, though it held little warmth. Nearby, two figures stood, waiting anxiously for her arrival. > > One was a young boy, while the other appeared older, likely the father figure. He wore a red robe, and his beard bristled with white as he regarded her with concern. > > “How are you faring?” he questioned, his voice steady ## Judgment This is better than 0.6B in fluency, but it still fails as a faithful unslop rewrite. Why: - it still changes the story too much - it adds invented structure and scenes - it behaves like a loose rewrite/generation model, not a high-fidelity polish model ## Comparison vs pilot series - **0.6B**: failed badly; became a different story - **1.7B**: more fluent than 0.6B, but still invented scenes and structure - **4B**: first clearly improved text-only model in the series; mostly keeps the scene intact, but still drifts - **30B-A3B VL Instruct**: first model in the series that looks plausibly faithful on held-out evaluation So 1.7B is a real improvement over the floor, but it is still part of the failing-small-model region of the series rather than a true solution. ## Conclusion This 1.7B pilot is clearly stronger than the 0.6B version, but still not a high-confidence production rewrite model. It is a useful intermediate experiment, not yet a trustworthy unslopper.