The NTNU System at the S&I Challenge 2025 SLA Open Track
Paper • 2506.05121 • Published
YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
Sistema de avaliação de pronúncia em português usando Wav2Vec2 para detecção de erros de pronúncia e feedback pedagógico.
Áudio do Aluno
│
▼
┌─────────────────────────────────────┐
│ Wav2Vec2 XLSR Phoneme Model │
│ facebook/wav2vec2-xlsr-53-espeak │
└─────────────────────────────────────┘
│
▼
Fonemas Falados (IPA)
│
│ Texto Esperado
│ │
│ ▼
│ ┌─────────────────────────┐
│ │ eSpeak-ng Phonemizer │
│ └─────────────────────────┘
│ │
│ ▼
│ Fonemas de Referência
│ │
▼ ▼
┌─────────────────────────────────────┐
│ Needleman-Wunsch Alignment │
│ (Alinhamento de Sequências) │
└─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ Detecção de Erros │
│ - Substituições │
│ - Deleções │
│ - Inserções │
└─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ Feedback Pedagógico │
│ - Score CEFR (A1-C2) │
│ - Erros por palavra │
│ - Dicas de articulação │
└─────────────────────────────────────┘
# macOS
brew install espeak-ng ffmpeg
# Ubuntu/Debian
sudo apt install espeak-ng ffmpeg
pip install -r requirements.txt
python tests/test_local.py
from src.pipeline import PronunciationAssessmentPipeline
# Inicializar pipeline
pipeline = PronunciationAssessmentPipeline()
# Avaliar pronúncia
result = pipeline.assess(
text="Bom dia",
audio_path="recording.wav"
)
# Ver resultados
print(f"Accuracy: {result.scores['accuracy']}%")
print(f"CEFR Level: {result.scores['cefr_level']}")
for feedback in result.feedback:
print(f"- {feedback}")
from src.audio_generator import PortugueseAudioGenerator
generator = PortugueseAudioGenerator()
# Gerar áudio de teste
audio = generator.generate_wav("O rato roeu a roupa")
print(f"Saved to: {audio.file_path}")
from src.phoneme_extractor import PortuguesePhonemeExtractor
extractor = PortuguesePhonemeExtractor()
result = extractor.extract_phonemes("recording.wav")
print(f"Phonemes: {result['phoneme_string']}")
| Modelo | Descrição | Uso |
|---|---|---|
multilingual_phoneme |
facebook/wav2vec2-xlsr-53-espeak-cv-ft | Reconhecimento de fonemas multilíngue (387 labels IPA) |
portuguese_asr |
lgris/wav2vec2-large-xlsr-open-brazilian-portuguese | ASR para português brasileiro |
O sistema calcula as seguintes métricas:
wav2vec2-portuguese-pronunciation/
├── src/
│ ├── __init__.py # Exports
│ ├── phoneme_extractor.py # Extração de fonemas via Wav2Vec2
│ ├── reference_phonemizer.py # Geração de fonemas via eSpeak
│ ├── alignment.py # Alinhamento Needleman-Wunsch
│ ├── audio_generator.py # Geração de áudio com gTTS
│ └── pipeline.py # Pipeline completo
├── tests/
│ └── test_local.py # Testes locais
├── data/
│ └── audio/ # Áudios gerados
├── requirements.txt
└── README.md
MIT License