{"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/word-segmentation-on-discovered-phone-units","title":"Word Segmentation on Discovered Phone Units with Dynamic Programming and Self-Supervised Scoring","arxiv_id":"2202.11929","date":"2022-02-24","proceeding":null,"authors":["Herman Kamper"],"abstract":"Recent work on unsupervised speech segmentation has used self-supervised models with phone and word segmentation modules that are trained jointly. This paper instead revisits an older approach to word segmentation: bottom-up phone-like unit discovery is performed first, and symbolic word segmentation is then performed on top of the discovered units (without influencing the lower level). To do this, I propose a new unit discovery model, a new symbolic word segmentation model, and then chain the two models to segment speech. Both models use dynamic programming to minimize segment costs from a self-supervised network with an additional duration penalty that encourages longer units. Concretely, for acoustic unit discovery, duration-penalized dynamic programming (DPDP) is used with a contrastive predictive coding model as the scoring network. For word segmentation, DPDP is applied with an autoencoding recurrent neural as the scoring network. The two models are chained in order to segment speech. This approach gives comparable word segmentation results to state-of-the-art joint self-supervised segmentation models on an English benchmark. On French, Mandarin, German and Wolof data, it outperforms previous systems on the ZeroSpeech benchmarks. Analysis shows that the chained DPDP system segments shorter filler words well, but longer words might require some external top-down signal.","url_abs":"https://arxiv.org/abs/2202.11929v2","url_pdf":"https://arxiv.org/pdf/2202.11929v2.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":"word-segmentation-on-discovered-phone-units","repo_url":"https://github.com/kamperh/dpdp_aernn","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"word-segmentation-on-discovered-phone-units","repo_url":"https://github.com/kamperh/vqwordseg","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"word-segmentation-on-discovered-phone-units","repo_url":"https://github.com/jasonppy/word-discovery","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"BSD-3-Clause"}}],"tasks":[{"task_slug":null,"task_name":"Acoustic Unit Discovery"},{"task_slug":"segmentation","task_name":"Segmentation"}],"methods":[{"method_slug":"contrastive-predictive-coding","method_name":"Contrastive Predictive Coding"},{"method_slug":"infonce","method_name":"InfoNCE"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2202.11929","atlas_url":"https://app.syntology.ai/?focus=2202.11929","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2202.11929"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+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/kamperh/dpdp_aernn","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/jasonppy/word-discovery","reach":{"status":"ok","spdx":"BSD-3-Clause"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/kamperh/vqwordseg","reach":null}],"summary":{"ran_draft_wrong":3,"ran":6,"ran_honours":4,"ran_fixture":2,"unverified":4},"by_repo_kind":{"official":{"samples":5,"ran":5,"repositories":2},"listed":{"samples":14,"ran":10,"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":"0f786c407fb1ee4c","entry":"swish","repo":"jasonppy/word-discovery","repo_kind":"listed","path":"models/utils.py","file_url":"https://github.com/jasonppy/word-discovery/blob/HEAD/models/utils.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":2,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"0f786c407fb1ee4c"}},{"code_sha256_prefix":"4d25be8ebf17fde1","entry":"bool_flag","repo":"jasonppy/word-discovery","repo_kind":"listed","path":"models/vit_utils.py","file_url":"https://github.com/jasonppy/word-discovery/blob/HEAD/models/vit_utils.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"4d25be8ebf17fde1"}},{"code_sha256_prefix":"5cf9b5e522af96d5","entry":"boundaries_to_intervals","repo":"kamperh/vqwordseg","repo_kind":"official","path":"eval_segmentation.py","file_url":"https://github.com/kamperh/vqwordseg/blob/HEAD/eval_segmentation.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5cf9b5e522af96d5"}},{"code_sha256_prefix":"2b5489053b222e00","entry":"clip_gradients","repo":"jasonppy/word-discovery","repo_kind":"listed","path":"models/vit_utils.py","file_url":"https://github.com/jasonppy/word-discovery/blob/HEAD/models/vit_utils.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"2b5489053b222e00"}},{"code_sha256_prefix":"8de801ce80b0728a","entry":"cls_attn_seg_feats","repo":"jasonppy/word-discovery","repo_kind":"listed","path":"save_seg_feats.py","file_url":"https://github.com/jasonppy/word-discovery/blob/HEAD/save_seg_feats.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"8de801ce80b0728a"}},{"code_sha256_prefix":"f2fd30826872a75d","entry":"cls_attn_seg_feats","repo":"jasonppy/word-discovery","repo_kind":"listed","path":"save_seg_feats_buckeye.py","file_url":"https://github.com/jasonppy/word-discovery/blob/HEAD/save_seg_feats_buckeye.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"f2fd30826872a75d"}},{"code_sha256_prefix":"361a6b24f11fc50a","entry":"cosine_scheduler","repo":"jasonppy/word-discovery","repo_kind":"listed","path":"models/vit_utils.py","file_url":"https://github.com/jasonppy/word-discovery/blob/HEAD/models/vit_utils.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":true,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"361a6b24f11fc50a"}},{"code_sha256_prefix":"55120f2026b56aa2","entry":"drop_path","repo":"jasonppy/word-discovery","repo_kind":"listed","path":"models/vision_transformer.py","file_url":"https://github.com/jasonppy/word-discovery/blob/HEAD/models/vision_transformer.py","link_basis":"harvester_set","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"55120f2026b56aa2"}},{"code_sha256_prefix":"ae600d378be4e580","entry":"force_align_seg_feats","repo":"jasonppy/word-discovery","repo_kind":"listed","path":"save_seg_feats.py","file_url":"https://github.com/jasonppy/word-discovery/blob/HEAD/save_seg_feats.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"ae600d378be4e580"}},{"code_sha256_prefix":"c2f0705ed8e6f7e6","entry":"gelu","repo":"jasonppy/word-discovery","repo_kind":"listed","path":"models/utils.py","file_url":"https://github.com/jasonppy/word-discovery/blob/HEAD/models/utils.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"c2f0705ed8e6f7e6"}},{"code_sha256_prefix":"5d99453f8b60341d","entry":"get_intervals_from_dir","repo":"kamperh/vqwordseg","repo_kind":"official","path":"eval_segmentation.py","file_url":"https://github.com/kamperh/vqwordseg/blob/HEAD/eval_segmentation.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5d99453f8b60341d"}},{"code_sha256_prefix":"54dbd7b3ecbb6448","entry":"get_intervals_from_dir","repo":"jasonppy/word-discovery","repo_kind":"listed","path":"buckeye_eval.py","file_url":"https://github.com/jasonppy/word-discovery/blob/HEAD/buckeye_eval.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"54dbd7b3ecbb6448"}},{"code_sha256_prefix":"6697d0657e11e88f","entry":"get_segmented_sentence","repo":"kamperh/dpdp_aernn","repo_kind":"official","path":"run_brent.py","file_url":"https://github.com/kamperh/dpdp_aernn/blob/HEAD/run_brent.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6697d0657e11e88f"}},{"code_sha256_prefix":"bdd3717607f29767","entry":"intervals_to_boundaries","repo":"kamperh/vqwordseg","repo_kind":"official","path":"eval_segmentation.py","file_url":"https://github.com/kamperh/vqwordseg/blob/HEAD/eval_segmentation.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"bdd3717607f29767"}},{"code_sha256_prefix":"77e3e9a881b530dc","entry":"neg_log_psuedo_geometric","repo":"kamperh/dpdp_aernn","repo_kind":"official","path":"run_brent.py","file_url":"https://github.com/kamperh/dpdp_aernn/blob/HEAD/run_brent.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"77e3e9a881b530dc"}},{"code_sha256_prefix":"05ead5734e7a624a","entry":"Margin_InfoNCE_loss","repo":"jasonppy/word-discovery","repo_kind":"listed","path":"models/utils.py","file_url":"https://github.com/jasonppy/word-discovery/blob/HEAD/models/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"05ead5734e7a624a"}},{"code_sha256_prefix":"35070d2f37830ca3","entry":"parse_faiss_specs","repo":"jasonppy/word-discovery","repo_kind":"listed","path":"run_kmeans.py","file_url":"https://github.com/jasonppy/word-discovery/blob/HEAD/run_kmeans.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"35070d2f37830ca3"}},{"code_sha256_prefix":"3aae9623741abc40","entry":"vit_small","repo":"jasonppy/word-discovery","repo_kind":"listed","path":"models/vision_transformer.py","file_url":"https://github.com/jasonppy/word-discovery/blob/HEAD/models/vision_transformer.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"3aae9623741abc40"}},{"code_sha256_prefix":"7d962f3bf8a0e816","entry":"vit_tiny","repo":"jasonppy/word-discovery","repo_kind":"listed","path":"models/vision_transformer.py","file_url":"https://github.com/jasonppy/word-discovery/blob/HEAD/models/vision_transformer.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"7d962f3bf8a0e816"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}