{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/less-peaky-and-more-accurate-ctc-forced","title":"Less Peaky and More Accurate CTC Forced Alignment by Label Priors","arxiv_id":"2406.02560","date":"2024-04-22","proceeding":null,"authors":["Ruizhe Huang","Xiaohui Zhang","Zhaoheng Ni","Li Sun","Moto Hira","Jeff Hwang","Vimal Manohar","Vineel Pratap","Matthew Wiesner","Shinji Watanabe","Daniel Povey","Sanjeev Khudanpur"],"abstract":"Connectionist temporal classification (CTC) models are known to have peaky output distributions. Such behavior is not a problem for automatic speech recognition (ASR), but it can cause inaccurate forced alignments (FA), especially at finer granularity, e.g., phoneme level. This paper aims at alleviating the peaky behavior for CTC and improve its suitability for forced alignment generation, by leveraging label priors, so that the scores of alignment paths containing fewer blanks are boosted and maximized during training. As a result, our CTC model produces less peaky posteriors and is able to more accurately predict the offset of the tokens besides their onset. It outperforms the standard CTC model and a heuristics-based approach for obtaining CTC's token offset timestamps by 12-40% in phoneme and word boundary errors (PBE and WBE) measured on the Buckeye and TIMIT data. Compared with the most widely used FA toolkit Montreal Forced Aligner (MFA), our method performs similarly on PBE/WBE on Buckeye, yet falls behind MFA on TIMIT. Nevertheless, our method has a much simpler training pipeline and better runtime efficiency. Our training recipe and pretrained model are released in TorchAudio.","url_abs":"https://arxiv.org/abs/2406.02560v3","url_pdf":"https://arxiv.org/pdf/2406.02560v3.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"less-peaky-and-more-accurate-ctc-forced","repo_url":"https://github.com/huangruizhe/audio","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"BSD-2-Clause"}}],"tasks":[{"task_slug":"automatic-speech-recognition-2","task_name":"Automatic Speech Recognition"},{"task_slug":"automatic-speech-recognition","task_name":"Automatic Speech Recognition (ASR)"},{"task_slug":"speech-recognition","task_name":"Speech Recognition"},{"task_slug":"speech-recognition-1","task_name":"speech-recognition"}],"methods":[{"method_slug":"dfa","method_name":"FA"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2406.02560","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2406.02560"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/huangruizhe/audio","reach":{"status":"ok","spdx":"BSD-2-Clause"}}],"summary":{"ran":3,"unverified":7},"by_repo_kind":{"official":{"samples":10,"ran":3,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"23bbafb2ef4c5399","entry":"deprecated","repo":"huangruizhe/audio","repo_kind":"official","path":"torchaudio/_internal/module_utils.py","file_url":"https://github.com/huangruizhe/audio/blob/HEAD/torchaudio/_internal/module_utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"23bbafb2ef4c5399"}},{"code_sha256_prefix":"25d33eba42f595af","entry":"eval_env","repo":"huangruizhe/audio","repo_kind":"official","path":"torchaudio/_internal/module_utils.py","file_url":"https://github.com/huangruizhe/audio/blob/HEAD/torchaudio/_internal/module_utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"25d33eba42f595af"}},{"code_sha256_prefix":"a62536e09f055a5f","entry":"fail_with_message","repo":"huangruizhe/audio","repo_kind":"official","path":"torchaudio/_internal/module_utils.py","file_url":"https://github.com/huangruizhe/audio/blob/HEAD/torchaudio/_internal/module_utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"a62536e09f055a5f"}},{"code_sha256_prefix":"2f32af51fe66d825","entry":"conv_tasnet_base","repo":"huangruizhe/audio","repo_kind":"official","path":"torchaudio/models/conv_tasnet.py","file_url":"https://github.com/huangruizhe/audio/blob/HEAD/torchaudio/models/conv_tasnet.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"2f32af51fe66d825"}},{"code_sha256_prefix":"57cb0e041c9b422c","entry":"get_labels","repo":"huangruizhe/audio","repo_kind":"official","path":".github/process_commit.py","file_url":"https://github.com/huangruizhe/audio/blob/HEAD/.github/process_commit.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"57cb0e041c9b422c"}},{"code_sha256_prefix":"9eaef367a8dc3018","entry":"get_pr_merger_and_number","repo":"huangruizhe/audio","repo_kind":"official","path":".github/process_commit.py","file_url":"https://github.com/huangruizhe/audio/blob/HEAD/.github/process_commit.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"9eaef367a8dc3018"}},{"code_sha256_prefix":"b5688413d6c546fb","entry":"hdemucs_high","repo":"huangruizhe/audio","repo_kind":"official","path":"torchaudio/models/_hdemucs.py","file_url":"https://github.com/huangruizhe/audio/blob/HEAD/torchaudio/models/_hdemucs.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"b5688413d6c546fb"}},{"code_sha256_prefix":"7d24e3eb5e1c5d98","entry":"hdemucs_low","repo":"huangruizhe/audio","repo_kind":"official","path":"torchaudio/models/_hdemucs.py","file_url":"https://github.com/huangruizhe/audio/blob/HEAD/torchaudio/models/_hdemucs.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"7d24e3eb5e1c5d98"}},{"code_sha256_prefix":"12cc644d5df7cb21","entry":"hdemucs_medium","repo":"huangruizhe/audio","repo_kind":"official","path":"torchaudio/models/_hdemucs.py","file_url":"https://github.com/huangruizhe/audio/blob/HEAD/torchaudio/models/_hdemucs.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"12cc644d5df7cb21"}},{"code_sha256_prefix":"087f9d0ce1b3f939","entry":"query_torchaudio","repo":"huangruizhe/audio","repo_kind":"official","path":".github/process_commit.py","file_url":"https://github.com/huangruizhe/audio/blob/HEAD/.github/process_commit.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"087f9d0ce1b3f939"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}