import os from montreal_forced_aligner.command_line.mfa import mfa_cli root_dir = r"D:\Data\experiments\alignment_benchmarking" mfa10_dir = r"D:\Data\models\1.0_archived" mfa20_dir = r"D:\Data\models\2.0_archived" mfa20a_dir = r"D:\Data\models\2.0.0a_archived" mfa21_dir = r"D:\Data\models\2.1_trained" mfa22_dir = r"D:\Data\models\2.2_trained" mfa30_dir = r"D:\Data\models\3.0_trained" mfa31_dir = r"D:\Data\models\3.1_trained" adapted_dir = r"D:\Data\models\adapted" trained22_dir = r"D:\Data\models\2.2_trained\buckeye" trained30_dir = r"D:\Data\models\3.0_trained\buckeye" mapping_directory = os.path.join( os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "mapping_files" ) corpus_directories = { "timit": r"D:\Data\speech\benchmark_datasets\timit\benchmark", "buckeye": r"D:\Data\speech\Buckeye\buckeye_corpus_benchmark", } reference_directories = { "timit": r"D:\Data\speech\benchmark_datasets\timit\reference", "buckeye": r"D:\Data\speech\Buckeye\buckeye_reference_alignments", } conditions = { "arpa_1.0": (os.path.join(mfa10_dir, "english.dict"), os.path.join(mfa10_dir, "english.zip")), "arpa_1.0_finetune": ( os.path.join(mfa10_dir, "english.dict"), os.path.join(mfa10_dir, "english.zip"), ), "arpa_1.0_adapted": ( os.path.join(mfa10_dir, "english.dict"), os.path.join(mfa10_dir, "english.zip"), ), "arpa_1.0_adapted_finetune": ( os.path.join(mfa10_dir, "english.dict"), os.path.join(mfa10_dir, "english.zip"), ), "arpa_2.0": ( os.path.join(mfa20_dir, "english_us_arpa.dict"), os.path.join(mfa20_dir, "english_us_arpa.zip"), ), "arpa_2.0a": ( os.path.join(mfa20a_dir, "english_us_arpa.dict"), os.path.join(mfa20a_dir, "english_us_arpa.zip"), ), "mfa_2.0": ( os.path.join(mfa20_dir, "english_us_mfa.dict"), os.path.join(mfa20_dir, "english_mfa.zip"), ), "mfa_2.0a": ( os.path.join(mfa20a_dir, "english_us_mfa.dict"), os.path.join(mfa20a_dir, "english_mfa.zip"), ), "mfa_2.1": ( os.path.join(mfa21_dir, "english_us_mfa.dict"), os.path.join(mfa21_dir, "english_mfa.zip"), ), "mfa_2.2": ( os.path.join(mfa22_dir, "english_us_mfa.dict"), os.path.join(mfa22_dir, "english_mfa.zip"), ), "mfa_3.0": ( os.path.join(mfa30_dir, "english_us_mfa.dict"), os.path.join(mfa30_dir, "english_mfa.zip"), ), "mfa_3.0_finetune": ( os.path.join(mfa30_dir, "english_us_mfa.dict"), os.path.join(mfa30_dir, "english_mfa.zip"), ), "mfa_3.1": ( os.path.join(mfa31_dir, "english_us_mfa.dict"), os.path.join(mfa31_dir, "english_mfa.zip"), ), "mfa_3.1_finetune": ( os.path.join(mfa31_dir, "english_us_mfa.dict"), os.path.join(mfa31_dir, "english_mfa.zip"), ), "mfa_3.1_adapted": ( os.path.join(mfa31_dir, "english_us_mfa.dict"), os.path.join(mfa31_dir, "english_mfa.zip"), ), "mfa_3.1_adapted_finetune": ( os.path.join(mfa31_dir, "english_us_mfa.dict"), os.path.join(mfa31_dir, "english_mfa.zip"), ), "arpa_3.0": ( os.path.join(mfa30_dir, "english_us_arpa.dict"), os.path.join(mfa30_dir, "english_us_arpa.zip"), ), "arpa_3.0_finetune": ( os.path.join(mfa30_dir, "english_us_arpa.dict"), os.path.join(mfa30_dir, "english_us_arpa.zip"), ), "arpa_3.0_adapted": ( os.path.join(mfa30_dir, "english_us_arpa.dict"), os.path.join(mfa30_dir, "english_us_arpa.zip"), ), "arpa_3.0_adapted_finetune": ( os.path.join(mfa30_dir, "english_us_arpa.dict"), os.path.join(mfa30_dir, "english_us_arpa.zip"), ), "trained_2.2": ( os.path.join(trained22_dir, "english_us_mfa.dict"), os.path.join(trained22_dir, "english_mfa.zip"), ), "trained_3.0": ( os.path.join(trained30_dir, "english_us_mfa.dict"), os.path.join(trained30_dir, "english_mfa.zip"), ), "arpa_2.2": ( os.path.join(mfa20a_dir, "english_us_arpa.dict"), os.path.join(mfa20a_dir, "english_us_arpa.zip"), ), "arpa_2.2_adapted": ( os.path.join(mfa20a_dir, "english_us_arpa.dict"), os.path.join(mfa20a_dir, "english_us_arpa.zip"), ), "arpa_2.2_adapted_finetune": ( os.path.join(mfa20a_dir, "english_us_arpa.dict"), os.path.join(mfa20a_dir, "english_us_arpa.zip"), ), } mapping_files = {} for k in conditions.keys(): for corpus in corpus_directories: if "arpa" in k: phone_set = "arpa" else: phone_set = "mfa" mapping_files[(k, corpus)] = os.path.join( mapping_directory, f"{phone_set}_{corpus}_mapping.yaml" ) if __name__ == "__main__": for condition, (dictionary_path, model_path) in conditions.items(): print(condition) for corpus, root in corpus_directories.items(): output_directory = os.path.join(root_dir, "alignments", condition, corpus) if os.path.exists(output_directory): continue if not os.path.exists(model_path): continue if not os.path.exists(dictionary_path): continue if "adapt" in condition: os.makedirs(adapted_dir, exist_ok=True) output_model_path = os.path.join( adapted_dir, f"{condition.replace('_finetune', '')}.zip" ) if not os.path.exists(output_model_path): command = [ "adapt", root, str(dictionary_path), str(model_path), str(output_model_path), "-j", "10", "--clean", "--no_debug", "--use_mp", "--use_cutoff_model", "--use_postgres", "--beam", "10", "--retry_beam", "40", ] print(command) mfa_cli(command, standalone_mode=False) model_path = output_model_path command = [ "align", root, dictionary_path, model_path, output_directory, "-j", "10", "--clean", "--no_debug", "--use_mp", "--use_cutoff_model", "--use_postgres", "--cleanup_textgrids", "--reference_directory", reference_directories[corpus], "--custom_mapping_path", mapping_files[(condition, corpus)], "--beam", "10", "--retry_beam", "40", ] if "finetune" in condition: command += ["--fine_tune"] print(command) mfa_cli(command, standalone_mode=False)