Qwen2.5-3B AI Text Humanizer (Merged)

A fine-tuned version of Qwen/Qwen2.5-3B-Instruct that rewrites AI-generated text to sound natural and human-written. This is the fully merged model โ€” the LoRA adapter weights have been baked directly into the base model, making it compatible with fast inference engines like vLLM.

โš ๏ธ This is a private model. You need a HuggingFace token with read access to load it.

Model Details

Property Value
Base model Qwen/Qwen2.5-3B-Instruct
Fine-tuning method QLoRA (r=64, ฮฑ=128)
Training dataset qwertyuiopasdfg/English_humanize (20k rows)
Adapter repo arshaan-nazir/qwen2.5-3b-humanizer-qlora
Model type Causal LM โ€” merged weights
Language English
License Apache 2.0

What It Does

Takes AI-generated text as input and rewrites it to:

  • Sound natural and conversational
  • Use contractions where appropriate
  • Vary sentence length and structure
  • Avoid stiff, formal phrasing
  • Preserve all original facts

How to Use

With Transformers

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

HF_TOKEN = "hf_YOUR_TOKEN_HERE"   # needs read access to this repo

print("Loading tokenizer...")
tokenizer = AutoTokenizer.from_pretrained(
    "arshaan-nazir/qwen2.5-3b-humanizer-merged",
    token=HF_TOKEN,
)

print("Loading model...")
model = AutoModelForCausalLM.from_pretrained(
    "arshaan-nazir/qwen2.5-3b-humanizer-merged",
    torch_dtype=torch.bfloat16,
    device_map="auto",
    token=HF_TOKEN,
)
model.eval()

SYSTEM = """You are a helpful editor.

Rewrite the input so it sounds natural, clear, and conversational while preserving every fact.
Rules:
- Vary sentence length and structure (mix short and long).
- Use contractions where natural.
- Avoid stiff/overly formal phrases.
- No bullet points, headings, or numbered lists.
- Keep paragraphs reasonable (no more than 5 sentences per paragraph).
- Output ONLY the rewritten text (no preamble, no labels).
"""

def humanize(text):
    msgs = [
        {"role": "system", "content": SYSTEM},
        {"role": "user",   "content": f"Rewrite the following so it sounds fully human-written.\n\nTEXT:\n{text}\n\nREWRITE:"}
    ]
    prompt    = tokenizer.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True)
    input_ids = tokenizer(prompt, return_tensors="pt").input_ids.to(model.device)

    with torch.no_grad():
        output = model.generate(
            input_ids,
            max_new_tokens=512,
            do_sample=True,
            temperature=0.75,
            top_p=0.92,
            repetition_penalty=1.08,
            eos_token_id=tokenizer.eos_token_id,
            pad_token_id=tokenizer.eos_token_id,
        )
    return tokenizer.decode(output[0, input_ids.shape[1]:], skip_special_tokens=True)

text = "The utilization of artificial intelligence has resulted in significant advancements."
print(humanize(text))

With vLLM (recommended โ€” fastest)

from vllm import LLM, SamplingParams
from transformers import AutoTokenizer

HF_TOKEN = "hf_YOUR_TOKEN_HERE"

tokenizer = AutoTokenizer.from_pretrained(
    "arshaan-nazir/qwen2.5-3b-humanizer-merged",
    token=HF_TOKEN,
)

llm = LLM(
    model="arshaan-nazir/qwen2.5-3b-humanizer-merged",
    dtype="bfloat16",
    gpu_memory_utilization=0.90,
    max_model_len=4096,
    enforce_eager=True,
)

sampling_params = SamplingParams(
    temperature=0.75,
    top_p=0.92,
    repetition_penalty=1.08,
    max_tokens=1024,
)

SYSTEM = """You are a helpful editor.

Rewrite the input so it sounds natural, clear, and conversational while preserving every fact.
Rules:
- Vary sentence length and structure (mix short and long).
- Use contractions where natural.
- Avoid stiff/overly formal phrases.
- No bullet points, headings, or numbered lists.
- Keep paragraphs reasonable (no more than 5 sentences per paragraph).
- Output ONLY the rewritten text (no preamble, no labels).
"""

text = "Your AI-generated text here..."

msgs = [
    {"role": "system", "content": SYSTEM},
    {"role": "user",   "content": f"Rewrite the following so it sounds fully human-written.\n\nTEXT:\n{text}\n\nREWRITE:"}
]

prompt  = tokenizer.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True)
outputs = llm.generate([prompt], sampling_params)
print(outputs[0].outputs[0].text.strip())

Recommended Inference Settings

Parameter Value
temperature 0.75
top_p 0.92
repetition_penalty 1.08
max_new_tokens 512โ€“1024

Training Details

  • Base model: Qwen/Qwen2.5-3B-Instruct
  • Method: QLoRA with 4-bit NF4 quantization during training
  • LoRA rank: 64, alpha: 128
  • Target modules: q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
  • Dataset: qwertyuiopasdfg/English_humanize โ€” 20k (input, output) pairs of AI-generated vs human-written text
  • Epochs: 3
  • Optimizer: paged_adamw_8bit
  • Learning rate: 2e-4 with cosine schedule

Difference from Adapter Repo

qwen2.5-3b-humanizer-qlora This repo
Type LoRA adapter only Fully merged model
Requires base model โœ… Yes โŒ No
vLLM compatible โŒ No โœ… Yes
Size ~120 MB ~6 GB
Load time Slower (loads base + adapter) Faster (single model)

Live Demo

Try it at: arshaan-nazir/ai-text-humanizer

Developer

arshaan-nazir โ€” HuggingFace Profile

Downloads last month
41
Safetensors
Model size
3B params
Tensor type
BF16
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for arshaan-nazir/qwen2.5-3b-humanizer-merged

Base model

Qwen/Qwen2.5-3B
Finetuned
(1476)
this model