File size: 3,800 Bytes
ace640b
 
 
 
 
 
96f87e4
ace640b
 
 
 
c23173c
 
1e38ef8
c23173c
 
 
 
 
 
 
 
 
 
1e38ef8
c23173c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1e38ef8
c23173c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1e38ef8
c23173c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1e38ef8
c23173c
1e38ef8
c23173c
 
1e38ef8
c23173c
 
 
 
 
 
 
 
 
 
 
 
 
 
1e38ef8
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
---
title: "Analyse de Sentiment Audio"
emoji: "🎤"
colorFrom: "purple"
colorTo: "indigo"
sdk: gradio
sdk_version: "4.44.1"
app_file: app_with_api.py
pinned: false
---

# Sentiment Audio

Ce projet propose un pipeline complet d'analyse de sentiment à partir de fichiers audio francophones, structuré en quatre composantes principales :

1. **Transcription audio**  
   - Modèle Wav2Vec2 (`jonatasgrosman/wav2vec2-large-xlsr-53-french`)  
   - Extraction de vecteurs audio puis décodage CTC
   
2. **Analyse de sentiment textuel**  
   - Modèle BERT multilingue (`nlptown/bert-base-multilingual-uncased-sentiment`)  
   - Fonction `analyze_sentiment(text)` retournant un label (`négatif`, `neutre`, `positif`) et sa confiance
   
3. **Interface utilisateur Gradio**  
   - Modes d'entrée : **enregistrement microphone** et **téléversement de fichier**  
   - Affichage de la transcription et du score de sentiment en temps réel  
   ![Interface Gradio](home.png)

4. **API REST FastAPI**  
   - Endpoint `/predict` pour soumettre un fichier audio  
   - Retour JSON `{ "transcription": ..., "sentiment": {label: confiance} }`  
   - Documentation interactive Swagger UI (`/docs`)  
   ![Documentation API](api.png)

---

## Structure du projet

```
sentiment_audio_tp/
├── hf_model/              # exports de modèles sauvegardés via save_pretrained
├── models/                # cache local HuggingFace (ignoré par Git)
├── src/
│   ├── __init__.py
│   ├── transcription.py   # SpeechEncoder (Wav2Vec2Model)
│   ├── sentiment.py       # TextEncoder + analyze_sentiment()
│   ├── multimodal.py      # Classifieur multimodal (fusion embeddings)
│   ├── inference.py       # CLI (audio → transcription + sentiment)
│   ├── app.py             # Interface Gradio
│   └── api.py             # Serveur FastAPI
├── requirements.txt       # Dépendances du projet
├── render.yaml            # Infra as code pour Render
└── README.md              # Ce document
```

---

## Installation

1. **Cloner le dépôt**  
   ```bash
   git clone <URL_DU_REPO>
   cd sentiment_audio_tp
   ```

2. **Configurer l'environnement**  
   ```bash
   python -m venv venv
   source venv/bin/activate   # macOS/Linux
   .\venv\Scripts\Activate.ps1  # Windows PowerShell
   ```

3. **Installer les dépendances**  
   ```bash
   pip install --upgrade pip
   pip install -r requirements.txt
   ```

---

## Utilisation

### CLI d'inférence

```bash
python src/inference.py chemin/vers/audio.wav
# Affiche la transcription et le résultat de sentiment
```

### Interface Gradio

```bash
python -m src.app
```

- Rendez-vous sur `http://127.0.0.1:7861/`  
- Choisissez **Enregistrement** ou **Upload**  
- Obtenez la transcription et le sentiment en temps réel

### API REST

```bash
uvicorn src.api:app --reload --host 0.0.0.0 --port 8000
```

- Swagger UI : `http://127.0.0.1:8000/docs`  
- Tester avec `curl` ou Postman :

  ```bash
  curl -X POST "http://127.0.0.1:8000/predict" \
       -F "file=@/chemin/vers/audio.wav"
  ```

---

## Cas d'usage

- **Prototype rapide** d'analyse de sentiment sur des appels clients, podcasts, interviews  
- **Outil de validation** pour analyses qualitatives de contenu audio  
- **Proof of Concept** pour architectures multimodales  
- **Service back-end** dans un chatbot vocal ou plateforme d'assistance

---

## Extension

- **Fine-tuning multimodal** : entraînement du classifieur fusion sur un dataset annoté  
- **Support de nouveaux formats** : MP3, FLAC…  
- **Tests et CI** : ajouter des tests `pytest` et pipelines CI/CD  
- **Déploiement** : Docker, Kubernetes, monitoring

---

## Licence

Licence **MIT** — libre d'utilisation, modification et redistribution.