Este repositório fornece uma estrutura completa para predição de MOS (Mean Opinion Score) usando fusão de múltiplos embeddings de áudio (Semântico, Acústico, Timbre e Pitch). Siga este guia passo a passo para configurar e rodar seus experimentos.
O primeiro passo é extrair os 4 tipos de embeddings dos seus áudios .wav e gerar um CSV unificado.
Rode o script extract_all.py:
python extract_all.py -c "seu_dataset.csv" -b "F:/Git/Embeddings2" -i "pasta_dos_audios" -col "coluna_com_nome_do_arquivo" -o "embeddings/seu_dataset"Resultado:
- Uma pasta
embeddings/seu_dataset/contendo arquivos.pt(whisper, contentvec, speaker, f0). - Um novo arquivo
seu_dataset_with_embs.csvcom as colunaswhisper_path,contentvec_path,speaker_pathef0_pathapontando para os arquivos gerados.
Agora, avise o sistema onde está o CSV que você acabou de gerar. Edite o arquivo em configs/datasets/seu_dataset.yaml:
datasets:
name: "nome_do_dataset"
train:
metadata_path: "caminho/para/seu_dataset_train_with_embs.csv"
target_column: "mos"
val:
metadata_path: "caminho/para/seu_dataset_val_with_embs.csv"
target_column: "mos"
test:
metadata_path: "caminho/para/seu_dataset_test_with_embs.csv"
target_column: "mos"Você pode rodar um experimento isolado ou todos de uma vez.
Para rodar TODOS os experimentos de todas as abordagens:
python run_all.py -d configs/datasets/seu_dataset.yamlPara rodar apenas uma abordagem específica (ex: ab3):
python run_all.py -d configs/datasets/seu_dataset.yaml -p "configs/experiments/ab3/*.yaml"O run_all.py gerencia automaticamente dois arquivos CSV na raiz do projeto para você não se perder:
-
train_results.csv: Um "mapa" dos seus treinos.experiment_name: Nome do teste.config_path: Qual arquivo.yamlfoi usado.checkpoint_path: ONDE O MODELO FOI SALVO (caminho do.ckpt).training_time_sec: Quanto tempo demorou o treino.status: Se terminou com sucesso ou erro.
-
test_results.csv: O placar de performance (Evaluation).test_mse: Erro médio quadrático no teste.test_pearson/test_spearman: Métricas de correlação (quanto maior, melhor).val_spearman: Melhor métrica atingida durante a validação.
As configurações estão separadas em 5 abordagens fundamentais:
- AB1 (Single): Testa cada embedding sozinho (Whisper, F0, etc).
- AB2 (Cross): Testa a interação entre pares de embeddings (ex: Whisper + F0).
- AB3 (Ablation Concat): Estudo de importância via concatenação. Rodamos o "All" e depois "All-minus-one" para medir a perda de cada componente.
- AB4 (Reliability): Fusão dinâmica onde o modelo aprende a dar mais peso aos embeddings mais confiáveis para aquele áudio.
- AB5 (Transformer): Fusão profunda usando um Transformer Encoder, também seguindo a lógica de ablação.
- Extração:
transformers,speechbrain,torchcrepe,librosa. - Treino:
pytorch-lightning,omegaconf,pandas.
- Logs: Se ativado no
model.yaml, você pode acompanhar as curvas de perda em tempo real via WandB. - Checkpoints: Os modelos são salvos na pasta
checkpoints/. Use o caminho guardado notrain_results.csvpara carregar o modelo em produção ou inferência. - Adicionando Novos Embeddings: Basta criar o script de extração, adicionar a coluna no CSV via
extract_all.pye referenciar o nome da nova coluna no seu arquivo de experimento.yaml.