1conda env create -f environment.yml
2conda activate ToxiFrench
1import torch
2from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
3from peft import PeftModel
4import os
5
6base_model_name = "Qwen/Qwen3-4B"
7adapter_repo_id = "AxelDlv00/ToxiFrench"
8target_adapter = "SOAP-DWL-DPO"
9
10tokenizer = AutoTokenizer.from_pretrained(base_model_name, trust_remote_code=True)
11if tokenizer.pad_token is None:
12 tokenizer.pad_token = tokenizer.eos_token
13
14tokens = ["<think>", "</think>"]
15tokenizer.add_special_tokens({"additional_special_tokens": tokens})
16
17bnb_config = BitsAndBytesConfig(
18 load_in_4bit=True,
19 bnb_4bit_use_double_quant=True,
20 bnb_4bit_quant_type="nf4",
21 bnb_4bit_compute_dtype=torch.bfloat16
22)
23
24model = AutoModelForCausalLM.from_pretrained(
25 base_model_name,
26 quantization_config=bnb_config,
27 trust_remote_code=True,
28 device_map="auto"
29)
30
31tokenizer_vocab_size = len(tokenizer)
32model_embedding_size = model.get_input_embeddings().weight.size(0)
33
34if model_embedding_size != tokenizer_vocab_size:
35 print(f"Syncing vocab: {model_embedding_size} -> {tokenizer_vocab_size}")
36 model.resize_token_embeddings(tokenizer_vocab_size)
37
38model = PeftModel.from_pretrained(model, adapter_repo_id, subfolder=target_adapter)
39model.eval()
40
41text = "Je ne supporte plus ton comportement, tu es vraiment un idiot !"
42prompt = f"Message:\n{text}\n\nAnalyse:\n"
43inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
44
45with torch.no_grad():
46 outputs = model.generate(
47 **inputs,
48 max_new_tokens=512,
49 temperature=0.7,
50 do_sample=True,
51 repetition_penalty=1.1
52 )
53
54print(tokenizer.decode(outputs[0], skip_special_tokens=False))
1@misc{delaval2025toxifrench,
2 title={ToxiFrench: Benchmarking and Enhancing Language Models via CoT Fine-Tuning for French Toxicity Detection},
3 author={Axel Delaval and Shujian Yang and Haicheng Wang and Han Qiu and Jialiang Lu},
4 year={2025},
5 eprint={2508.11281},
6 archivePrefix={arXiv},
7 primaryClass={cs.CL}
8}