File size: 2,862 Bytes
55bcd2b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import os
import torch
import pandas as pd
from datasets import Dataset, load_dataset
from transformers import (
    AutoTokenizer,
    AutoModelForSequenceClassification,
    TrainingArguments,
    Trainer,
    DataCollatorWithPadding
)

# 1. Configuration pour Colab / GPU
MODEL_NAME = "xlm-roberta-base" # Multilingue pour supporter le Français
OUTPUT_DIR = "./ai_results"
SAVE_DIR = "./ai_detector_model"

def train():
    # 2. Chargement des données
    # Sur Colab, vous pouvez charger directement depuis Hugging Face :
    # Exemple avec HC3 (Human-ChatGPT Comparison Corpus) en Français
    print("📥 Chargement du dataset HC3 (Français)...")
    dataset = load_dataset("Hello-SimpleAI/HC3", "french", split="train")
    
    # Transformation du format HC3 en classification binaire
    # HC3 a 'human_answers' et 'chatgpt_answers'
    # On va créer un dataset plat : [texte, label]
    texts = []
    labels = []
    for item in dataset:
        for ans in item['human_answers']:
            texts.append(ans)
            labels.append(0) # Humain
        for ans in item['chatgpt_answers']:
            texts.append(ans)
            labels.append(1) # AI
            
    df = pd.DataFrame({"text": texts, "label": labels})
    
    # Échantillonnage pour la démo Hackathon (rapide)
    MAX_SAMPLES = 5000
    if len(df) > MAX_SAMPLES:
        df = df.sample(MAX_SAMPLES, random_state=42).reset_index(drop=True)
    
    print(f"✅ Dataset prêt : {len(df)} exemples.")
    hf_dataset = Dataset.from_pandas(df)

    # 3. Tokenization
    tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)

    def preprocess_function(examples):
        return tokenizer(examples["text"], truncation=True, padding=True, max_length=512)

    tokenized_dataset = hf_dataset.map(preprocess_function, batched=True)

    # 4. Chargement du modèle
    model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME, num_labels=2)

    # 5. Arguments d'entraînement optimisés pour Colab (GPU)
    training_args = TrainingArguments(
        output_dir=OUTPUT_DIR,
        learning_rate=2e-5,
        per_device_train_batch_size=8,
        num_train_epochs=1,
        weight_decay=0.01,
        save_strategy="epoch",
        fp16=torch.cuda.is_available(), # Active l'accélération si GPU présent
        push_to_hub=False,
    )

    # 6. Trainer
    trainer = Trainer(
        model=model,
        args=training_args,
        train_dataset=tokenized_dataset,
        tokenizer=tokenizer,
        data_collator=DataCollatorWithPadding(tokenizer=tokenizer),
    )

    # 7. Lancement
    print("🚀 Début de l'entraînement sur Colab...")
    trainer.train()

    # 8. Sauvegarde
    model.save_pretrained(SAVE_DIR)
    tokenizer.save_pretrained(SAVE_DIR)
    print(f"✅ Modèle sauvegardé dans {SAVE_DIR}")

if __name__ == "__main__":
    train()