Our training data filters output audio shorter than 3 seconds (unreliable predictions) and longer than 15 seconds (computation limitation)

August 10, 2025 · View on GitHub

Vox-Profile: A Speech Foundation Model Benchmark for Characterizing Diverse Speaker and Speech Traits

📄 [Preprint Paper]  |  🤗 [HuggingFace Models]   | 🚀 [Voxlect Project]  

In this repo, we present Vox-Profile, one of the first benchmarking efforts that systematically evaluate rich multi-dimensional speaker and speech traits from English-speaking voices. Our benchmark is presented below:

Our training data filters output audio shorter than 3 seconds (unreliable predictions) and longer than 15 seconds (computation limitation), so you need to cut your audio to a maximum of 15 seconds, 16kHz and mono channel

Download Repo

git clone git@github.com:tiantiaf0627/vox-profile-release.git

Installation

conda create -n vox_profile python=3.8
cd vox-profile-release
pip install -e .

Quick Example 1 - Whisper Large Narrow Accent

# Load libraries
import torch
import torch.nn.functional as F
from src.model.accent.whisper_accent import WhisperWrapper

# Label List
english_accent_list = [
    'East Asia', 'English', 'Germanic', 'Irish', 
    'North America', 'Northern Irish', 'Oceania', 
    'Other', 'Romance', 'Scottish', 'Semitic', 'Slavic', 
    'South African', 'Southeast Asia', 'South Asia', 'Welsh'
]
    
# Find device
device = torch.device("cuda") if torch.cuda.is_available() else "cpu"

# Load model from Huggingface
whisper_model = WhisperWrapper.from_pretrained("tiantiaf/whisper-large-v3-narrow-accent").to(device)
whisper_model.eval()

# Load data, here just zeros as the example
# Our training data filters output audio shorter than 3 seconds (unreliable predictions) and longer than 15 seconds (computation limitation)
# So you need to prepare your audio to a maximum of 15 seconds, 16kHz and mono channel
max_audio_length = 15 * 16000
data = torch.zeros([1, 16000]).float().to(device)[:, :max_audio_length]
whisper_logits, whisper_embeddings = whisper_model(data, return_feature=True)
    
# Probability and output
whisper_prob = F.softmax(whisper_logits, dim=1)
print(english_accent_list[torch.argmax(whisper_prob).detach().cpu().item()])
Eastern AsiaEnglishGermanicIrishNorth AmericaNorthern IrishOceaniaOtherRomanceScottishSemiticSlavicSouth AfricanSouth-eastern AsiaSouthern AsiaWelsh
Eastern Asia89.671.030.960.112.200.000.750.212.630.070.280.250.041.490.070.25
English0.1684.310.080.081.360.361.240.122.323.230.840.121.320.280.443.75
Germanic0.110.0065.760.000.110.000.005.9911.750.000.2316.050.000.000.000.00
Irish0.155.611.2147.048.500.302.580.308.9523.070.460.151.210.000.150.30
North America2.111.541.020.9067.930.001.980.389.730.385.380.642.431.983.520.06
Northern Irish0.000.000.000.000.0097.500.000.000.002.500.000.000.000.000.000.00
Oceania0.824.094.290.417.360.0064.620.2010.220.610.412.663.680.610.000.00
Other1.400.591.400.160.700.000.0580.993.540.002.427.040.480.270.540.43
Romance2.120.001.730.200.430.000.000.7089.080.001.294.150.000.230.070.00
Scottish0.005.180.0010.365.180.361.610.000.1875.540.180.000.890.000.180.36
Semitic31.540.000.050.000.000.000.000.1110.430.0057.350.370.000.110.050.00
Slavic0.830.005.820.000.000.000.005.5416.070.001.6670.080.000.000.000.00
South African0.004.002.000.004.500.008.502.502.001.500.000.0068.000.004.003.00
South-eastern Asia41.100.570.080.122.530.000.370.003.540.000.120.040.7349.121.670.00
Southern Asia0.620.221.020.040.660.000.090.316.160.001.020.180.620.0988.880.09
Welsh0.0026.890.000.200.200.000.200.200.103.580.100.000.820.000.0067.69

Quick Example 2 - WavLM Large Narrow Accent

# Load libraries
import torch
import torch.nn.functional as F
from src.model.accent.wavlm_accent import WavLMWrapper

# Label List
english_accent_list = [
    'East Asia', 'English', 'Germanic', 'Irish', 
    'North America', 'Northern Irish', 'Oceania', 
    'Other', 'Romance', 'Scottish', 'Semitic', 'Slavic', 
    'South African', 'Southeast Asia', 'South Asia', 'Welsh'
]
    
# Find device
device = torch.device("cuda") if torch.cuda.is_available() else "cpu"

# Load model from Huggingface
wavlm_model = WavLMWrapper.from_pretrained("tiantiaf/wavlm-large-narrow-accent").to(device)
wavlm_model.eval()

# Load data, here just zeros as the example
# Our training data filters output audio shorter than 3 seconds (unreliable predictions) and longer than 15 seconds (computation limitation)
# So you need to prepare your audio to a maximum of 15 seconds, 16kHz and mono channel
max_audio_length = 15 * 16000
data = torch.zeros([1, 16000]).float().to(device)[:, :max_audio_length]
wavlm_logits, wavlm_embeddings = wavlm_model(data, return_feature=True)
    
# Probability and output
wavlm_prob = F.softmax(wavlm_logits, dim=1)
print(english_accent_list[torch.argmax(wavlm_prob).detach().cpu().item()])

Given that the Vox-Profile Benchmark paper is still under peer-review, we provide limited set of models and model weights before the review is concluded. But below are the models we currently put out.

WavLM-Large Models

Model NameDataPre-trained ModelUse LoRaLoRa Rank SizeOutputExample Code
wavlm-large-sex-ageCommonVoice+Timit+Voxceleb (age enriched)wavlm-largeYes16Sex (2-class) / Age (0-1)*100 YearsExample
wavlm-large-broader-accentSee Paper (11 Datasets)wavlm-largeYes16North American / British / Other (3-class)Example
wavlm-large-narrow-accentSee Paper (11 Datasets)wavlm-largeYes16See exampleExample
wavlm-large-voice-qualityParaSpeechCapswavlm-largeYes16See exampleExample
wavlm-large-influencySEP28K+FluencyBankwavlm-largeYes16Fluent/Disfluent (Specified Disfluency Types)Example
wavlm-large-categorical-emotionMSP-Podcastwavlm-largeNoNA8 Emotions + OtherExample
wavlm-large-dim-emotionMSP-Podcastwavlm-largeNoNAArousal/Valence/DominanceExample

Whisper-Large V3 Models

Model NameDataPre-trained ModelUse LoRaLoRa Rank SizeOutputExample Code
whisper-large-v3-broader-accentSee Paper (11 Datasets)whisper-large v3Yes16North American / British / Other (3-class)Example
whisper-large-v3-narrow-accentSee Paper (11 Datasets)whisper-large v3Yes16See exampleExample
whisper-large-v3-voice-qualityParaSpeechCapswhisper-large v3Yes16See exampleExample
whisper-large-v3-influencySEP28K+FluencyBankwhisper-large v3Yes16Fluent/Disfluent (Specified Disfluency Types)Example
whisper-large-v3-categorical-emotionMSP-Podcastwhisper-large v3Yes168 Emotions + OtherExample
whisper-large-v3-dim-emotionMSP-Podcastwhisper-large v3NoNAArousal/Valence/DominanceExample

Labeling Scheme

In Vox-Profile, we experiments with over 15 publicly available datasets to predict static traits (speaker age, speaker sex, speaker accent, and voice quality) and dynamic traits (speech emotion, speech flow, and speech expressiveness) in different recording conditions and elicitation settings (e.g., read, spontaneous, and conversational speech). Our labeling taxonomy is described below:

Enabling Versatile Speech Applications with Vox-Profile

Our Vox-Profile can be used as a fundamental component to support a versatile speech applications.

1. Speech Model Performance Analysis

We generate speaker and speech traits for existing datasets and investigate whether these generated labels can lead to the same insights as using the ground truth trait information in analyzing the speech model performances. For example, in the results below, we identify that regardless of grouping by groud truth traits or traits inferred by Vox-Profile, the ASR performance trends remain the same across different traits.

2. Automated Evaluation Tool for Speech Generation Tasks

We demonstrate the utility of Vox-Profile as an evaluation tool for speech generation tasks by comparing two representative models: FreeVC and VALLE-X. As shown in Table below, the accent prediction scores and the cosine similarity for the synthesized samples from FreeVC suggest greater similarity to the source speaker’s accent than to the reference speaker. In contrast, the scores for VALLE-X indicate closer alignment with the reference speaker’s accent in most conditions. These findings are consistent with previous studies, which report that FreeVC has limited capability in replicating the accentual features of the reference speaker compare to VALLE-X.

3. Generating Synthetic Speaking Style Prompt

Vox-Profile provides a more extensive and varied set of traits, including speech flow, arousal, valence, and speaker age. Moreover, computational models of Vox-Profile output probabilistic predictions for each trait, enabling more nuanced and confidence sensitive descriptions. For example, a Scottish accent prediction with a probability of 0.9 can be described as having a distinct Scottish accent.

Human-evaluation results comparing synthetic speaking style prompts from Vox-Profile and human-annotated speaking style prompts from ParaSpeechCaps suggest that this group of human raters shows similar preference levels for both synthetic and human-annotated speaking style prompts. Specifically, they favor the emotion, age, and speech flow descriptions generated by Vox-Profile over those from ParaSpeechCaps.

❌ Exemplar Out-of-Scope Use

  • Clinical or diagnostic applications
  • Surveillance
  • Privacy-invasive applications
  • No commercial use

If you like our work or use the models in your work, kindly cite the following. We appreciate your recognition!

@article{feng2025vox,
  title={Vox-Profile: A Speech Foundation Model Benchmark for Characterizing Diverse Speaker and Speech Traits},
  author={Feng, Tiantian and Lee, Jihwan and Xu, Anfeng and Lee, Yoonjeong and Lertpetchpun, Thanathai and Shi, Xuan and Wang, Helin and Thebaud, Thomas and Moro-Velazquez, Laureano and Byrd, Dani and others},
  journal={arXiv preprint arXiv:2505.14648},
  year={2025}
}