File size: 2,754 Bytes
01abc52
1d78aee
 
 
01abc52
1d78aee
 
 
 
 
01abc52
 
37674b5
 
 
1d78aee
01abc52
1d78aee
01abc52
1d78aee
01abc52
1d78aee
01abc52
1d78aee
 
 
01abc52
1d78aee
01abc52
1d78aee
 
 
01abc52
1d78aee
 
 
 
 
 
 
 
01abc52
1d78aee
 
 
 
01abc52
1d78aee
 
 
 
 
 
 
 
 
01abc52
1d78aee
 
 
01abc52
1d78aee
01abc52
1d78aee
 
 
 
 
01abc52
1d78aee
01abc52
1d78aee
01abc52
1d78aee
 
01abc52
37674b5
 
 
 
 
 
 
1d78aee
01abc52
1d78aee
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
---
language:
- fr
license: mit
tags:
- philosophy
- socratic
- french
- croissant-llm
base_model: croissantllm/CroissantLLMChat-v0.1
---

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![HuggingFace](https://img.shields.io/badge/🤗-Model-yellow)](https://huggingface.co/XenocodeRCE/Croissantine)

# 🎓 Croissantine

Modèle de langage français fine-tuné pour répondre aux questions dans un "style socratique".

## 📋 Description

Ce modèle est basé sur **CroissantLLM-v0.1** (1.3B paramètres) et fine-tuné avec **LoRA** sur 748 paires question-réponse philosophiques.

**Caractéristiques** :
- Répond par des questions pour stimuler la réflexion
- Explore plusieurs angles d'une même question

## 🚀 Utilisation

```python
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

# Charger le modèle
model_path = "XenocodeRCE/Croissantine"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(
    model_path,
    device_map="auto",
    torch_dtype=torch.bfloat16
)

# Générer une réponse
prompt = "Peut-on tout dire ?"
messages = [{"role": "user", "content": prompt}]
inputs = tokenizer.apply_chat_template(messages, return_tensors="pt").to(model.device)

outputs = model.generate(
    inputs,
    max_new_tokens=300,
    temperature=0.75,
    do_sample=True,
    top_p=0.9,
    repetition_penalty=1.05,
    no_repeat_ngram_size=3
)

response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)
```

## 📊 Entraînement

- **Méthode** : SFT avec LoRA (rank 16)
- **Quantization** : 4-bit NF4
- **Dataset** : 748 exemples
- **Loss finale** : 0.60
- **Epochs** : 7

## 💡 Exemple

**Question** : Peut-on tout dire ?

**Réponse** :
> Tout dire, sans risquer le ridicule ou la censure ? Le discours est-il une affaire privée où chacun est seul juge de ses paroles et de leurs conséquences ? Ou peut-il être un acte public qui engage tous les citoyens d'un pays ? Les limites du langage sont-elles celles que l'on croit : celle des autres, de soi-même, de l'histoire ? Et si on ne dit rien, est-ce vraiment parce qu'on n'a rien à dire ? Chacun doit décider pour lui-même ce qu'il veut entendre. Mais cela suppose-t-il d'être d'accord avec lui sur tout, y compris sur son propre sens des mots ? La parole vraie n'existe-t-elle qu'en partageant cette vérité au-delà de toute règle ?

## ⚠️ Limitations

- Modèle de 1.3B paramètres (performances limitées comparé aux modèles > 7B)
- Entraîné uniquement sur 748 exemples
- Fonctionne mieux sur les questions philosophiques classiques
- Peut générer des réponses parfois trop abstraites

## 📄 Licence

MIT