2026-04-04 : High-Variability Phonetic Training
Long time no see (once again). I haven't had an update here in a while for the same reason I gave last time: my progress had been steady with no major changes. I read and listen every day. I add sentences to Anki. There isn't too much flair.
But I did recently become interested in a topic called High-Variability Phonetic Training (HVPT). It's a type of minimal pair training that focuses on getting a variety of speakers varying in age, gender, dialect, etc. The research shows that HVPT improves your ability to perceive phonemes correctly. I became particularly interested because I find that my listening ability relies too much on context/knowledge rather than true phonetic understanding. For example, I still can't reliably tell ㄱ and ㅋ apart, because if I heard for example 기 or 키, the distinction is usually obvious based on context.
If you don't know what minimal pair training is and you also don't know Korean to understand my example above, an English language example could be L/R distinction for Japanese people. Japanese people learning English notoriously mix up their Ls and Rs, because they don't have anything resembling an L sound and their R sound is not quite like an English R. So an example of a minimal pair would be ("light", "right") - two valid words that have different meanings and only differ in one phoneme. So L/R minimal pair training for a Japanese person would be like: listen to audio clips from a corpus of people saying "light" or "right" - after each clip, you are presented with two buttons to choose which word you think it is - after making a choice, you get immediate feedback on if you were right or wrong.
Practically speaking for listening, phoneme distinction doesn't matter as much if you understand your target language well enough to distinguish based on context. Because if I said "turn off the ?ight", it doesn't matter if you heard an L or an R - you can intuit that it was "light" from context. But for speaking purposes, if you can't distinguish the sounds, how can you trust that you're even pronouncing them correctly?
When I first got interested in HVPT, I didn't know where to start because I didn't know how to cultivate a corpus of high-variability audio clips. It's easy to find some individual sound clips, but in order to avoid numerous pitfalls, you need a LOT of audio.
So I asked Google Gemini where I could find such a dataset, and it suggested building one out of an existing dataset called KsponSpeech. This is a dataset of 1,000+ hours of transcribed native Korean speech, in the form of sentences. It then built a pipeline to process those sentences into individual words, and created a local web app to test me on minimal pairs. Even with some failures in the pipeline (data quality issues), the result is a database of 1.5 million word clips. Pretty awesome.
In case anybody is interested in building a pipeline for a language they're learning, at a high level here's how it works:
- We use the grapheme-to-phoneme (G2P) functionality of the Montreal Forced Aligner (MFA) to generate a pronunciation dictionary for every word found in the corpus.
- MFA runs over the audio/transcript file pairs and tries to match up the words in the text with the spoken audio. This is the "alignment" step and the output is, for each audio clip, a TextGrid: a time-aligned annotation file containing tiers for words and phones.
- We look over the TextGrid files and extract words into individual audio clips. We also store an accompanying database entry pointing to the audio clip file with info such as the word, its onset jamo, its onset "base" for minimal pair matching (e.g. 길 and 킬 would have 일 stored as their "base", and we can use a query like
base = '일' and onset_jamo in ('ㄱ', 'ㅋ')to find minimal pairs), and similar info for vowels.
Some app-level details:
- It was important to adjust the random selection algorithm to make sure each "target phoneme" has an equal chance of showing up rather than being influenced by distribution of sounds in the corpus. By target phoneme, I mean like during a session of "ㄱ vs ㅋ vs ㄲ" or "L vs R" - each one of these sounds should have an equal probability of being the correct answer.
- I added a log of all answers so you can see your progress (correct answer %) per session over time, graphed on the web app.
- Note that it's inevitable that some % of the audio clips resulting from this audio pipeline come out poorly. I added a button to mark an audio clip as "bad" if it came out poorly (poorly aligned, too short, etc), which hides them forever (I was scared to add a hard delete, idk). I also added 50ms of padding to the audio clips for safety.