Feat: option for skipping invalid transcription
This commit is contained in:
@@ -15,6 +15,12 @@ from common.log import logger
|
|||||||
preprocess_text_config = config.preprocess_text_config
|
preprocess_text_config = config.preprocess_text_config
|
||||||
|
|
||||||
|
|
||||||
|
# Count lines for tqdm
|
||||||
|
def count_lines(file_path):
|
||||||
|
with file_path.open("r", encoding="utf-8") as file:
|
||||||
|
return sum(1 for _ in file)
|
||||||
|
|
||||||
|
|
||||||
@click.command()
|
@click.command()
|
||||||
@click.option(
|
@click.option(
|
||||||
"--transcription-path",
|
"--transcription-path",
|
||||||
@@ -34,6 +40,7 @@ preprocess_text_config = config.preprocess_text_config
|
|||||||
@click.option("--clean/--no-clean", default=preprocess_text_config.clean)
|
@click.option("--clean/--no-clean", default=preprocess_text_config.clean)
|
||||||
@click.option("-y", "--yml_config")
|
@click.option("-y", "--yml_config")
|
||||||
@click.option("--use_jp_extra", is_flag=True)
|
@click.option("--use_jp_extra", is_flag=True)
|
||||||
|
@click.option("--skip_invalid", is_flag=True)
|
||||||
def preprocess(
|
def preprocess(
|
||||||
transcription_path: str,
|
transcription_path: str,
|
||||||
cleaned_path: Optional[str],
|
cleaned_path: Optional[str],
|
||||||
@@ -45,14 +52,16 @@ def preprocess(
|
|||||||
clean: bool,
|
clean: bool,
|
||||||
yml_config: str, # 这个不要删
|
yml_config: str, # 这个不要删
|
||||||
use_jp_extra: bool,
|
use_jp_extra: bool,
|
||||||
|
skip_invalid: bool = False,
|
||||||
):
|
):
|
||||||
if cleaned_path == "" or cleaned_path is None:
|
if cleaned_path == "" or cleaned_path is None:
|
||||||
cleaned_path = transcription_path + ".cleaned"
|
cleaned_path = transcription_path + ".cleaned"
|
||||||
|
|
||||||
if clean:
|
if clean:
|
||||||
|
total_lines = count_lines(transcription_path)
|
||||||
with open(cleaned_path, "w", encoding="utf-8") as out_file:
|
with open(cleaned_path, "w", encoding="utf-8") as out_file:
|
||||||
with open(transcription_path, "r", encoding="utf-8") as trans_file:
|
with open(transcription_path, "r", encoding="utf-8") as trans_file:
|
||||||
for line in tqdm(trans_file, file=SAFE_STDOUT):
|
for line in tqdm(trans_file, file=SAFE_STDOUT, total=total_lines):
|
||||||
try:
|
try:
|
||||||
utt, spk, language, text = line.strip().split("|")
|
utt, spk, language, text = line.strip().split("|")
|
||||||
norm_text, phones, tones, word2ph = clean_text(
|
norm_text, phones, tones, word2ph = clean_text(
|
||||||
@@ -70,10 +79,18 @@ def preprocess(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(
|
if skip_invalid:
|
||||||
f"An error occurred while generating the training set and validation set, at line:\n{line}\nDetails:\n{e}"
|
logger.warning(
|
||||||
)
|
f"An error occurred while generating the training set and validation set, at line:\n{line}\nDetails:\n{e}"
|
||||||
raise
|
)
|
||||||
|
logger.warning(
|
||||||
|
"This line will be skipped from the training set and validation set."
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
logger.error(
|
||||||
|
f"An error occurred while generating the training set and validation set, at line:\n{line}\nDetails:\n{e}"
|
||||||
|
)
|
||||||
|
raise
|
||||||
|
|
||||||
transcription_path = cleaned_path
|
transcription_path = cleaned_path
|
||||||
spk_utt_map = defaultdict(list)
|
spk_utt_map = defaultdict(list)
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ def resample(model_name, normalize, trim, num_processes):
|
|||||||
return True, "Step 2, Success: 音声ファイルの前処理が完了しました"
|
return True, "Step 2, Success: 音声ファイルの前処理が完了しました"
|
||||||
|
|
||||||
|
|
||||||
def preprocess_text(model_name, use_jp_extra, val_per_lang):
|
def preprocess_text(model_name, use_jp_extra, val_per_lang, skip_invalid=False):
|
||||||
logger.info("Step 3: start preprocessing text...")
|
logger.info("Step 3: start preprocessing text...")
|
||||||
dataset_path, lbl_path, train_path, val_path, config_path = get_path(model_name)
|
dataset_path, lbl_path, train_path, val_path, config_path = get_path(model_name)
|
||||||
try:
|
try:
|
||||||
@@ -180,6 +180,8 @@ def preprocess_text(model_name, use_jp_extra, val_per_lang):
|
|||||||
]
|
]
|
||||||
if use_jp_extra:
|
if use_jp_extra:
|
||||||
cmd.append("--use_jp_extra")
|
cmd.append("--use_jp_extra")
|
||||||
|
if skip_invalid:
|
||||||
|
cmd.append("--skip_invalid")
|
||||||
success, message = run_script_with_log(cmd)
|
success, message = run_script_with_log(cmd)
|
||||||
if not success:
|
if not success:
|
||||||
logger.error(f"Step 3: preprocessing text failed.")
|
logger.error(f"Step 3: preprocessing text failed.")
|
||||||
@@ -265,6 +267,7 @@ def preprocess_all(
|
|||||||
use_jp_extra,
|
use_jp_extra,
|
||||||
val_per_lang,
|
val_per_lang,
|
||||||
log_interval,
|
log_interval,
|
||||||
|
skip_invalid=False,
|
||||||
):
|
):
|
||||||
if model_name == "":
|
if model_name == "":
|
||||||
return False, "Error: モデル名を入力してください"
|
return False, "Error: モデル名を入力してください"
|
||||||
@@ -285,7 +288,9 @@ def preprocess_all(
|
|||||||
success, message = resample(model_name, normalize, trim, num_processes)
|
success, message = resample(model_name, normalize, trim, num_processes)
|
||||||
if not success:
|
if not success:
|
||||||
return False, message
|
return False, message
|
||||||
success, message = preprocess_text(model_name, use_jp_extra, val_per_lang)
|
success, message = preprocess_text(
|
||||||
|
model_name, use_jp_extra, val_per_lang, skip_invalid
|
||||||
|
)
|
||||||
if not success:
|
if not success:
|
||||||
return False, message
|
return False, message
|
||||||
success, message = bert_gen(model_name) # bert_genは重いのでプロセス数いじらない
|
success, message = bert_gen(model_name) # bert_genは重いのでプロセス数いじらない
|
||||||
@@ -490,6 +495,10 @@ if __name__ == "__main__":
|
|||||||
maximum=1000,
|
maximum=1000,
|
||||||
step=10,
|
step=10,
|
||||||
)
|
)
|
||||||
|
skip_invalid = gr.Checkbox(
|
||||||
|
label="日本語処理でエラーが出たファイルは学習に使わない",
|
||||||
|
value=False,
|
||||||
|
)
|
||||||
gr.Markdown("学習時に特定の部分を凍結させるかどうか")
|
gr.Markdown("学習時に特定の部分を凍結させるかどうか")
|
||||||
freeze_EN_bert = gr.Checkbox(
|
freeze_EN_bert = gr.Checkbox(
|
||||||
label="英語bert部分を凍結",
|
label="英語bert部分を凍結",
|
||||||
@@ -599,6 +608,10 @@ if __name__ == "__main__":
|
|||||||
maximum=100,
|
maximum=100,
|
||||||
step=1,
|
step=1,
|
||||||
)
|
)
|
||||||
|
skip_invalid_manual = gr.Checkbox(
|
||||||
|
label="日本語処理でエラーが出たファイルは学習に使わない",
|
||||||
|
value=False,
|
||||||
|
)
|
||||||
with gr.Column():
|
with gr.Column():
|
||||||
preprocess_text_btn = gr.Button(value="実行", variant="primary")
|
preprocess_text_btn = gr.Button(value="実行", variant="primary")
|
||||||
info_preprocess_text = gr.Textbox(label="状況")
|
info_preprocess_text = gr.Textbox(label="状況")
|
||||||
@@ -661,6 +674,7 @@ if __name__ == "__main__":
|
|||||||
use_jp_extra,
|
use_jp_extra,
|
||||||
val_per_lang,
|
val_per_lang,
|
||||||
log_interval,
|
log_interval,
|
||||||
|
skip_invalid,
|
||||||
],
|
],
|
||||||
outputs=[info_all],
|
outputs=[info_all],
|
||||||
)
|
)
|
||||||
@@ -694,7 +708,12 @@ if __name__ == "__main__":
|
|||||||
)
|
)
|
||||||
preprocess_text_btn.click(
|
preprocess_text_btn.click(
|
||||||
second_elem_of(preprocess_text),
|
second_elem_of(preprocess_text),
|
||||||
inputs=[model_name, use_jp_extra_manual, val_per_lang_manual],
|
inputs=[
|
||||||
|
model_name,
|
||||||
|
use_jp_extra_manual,
|
||||||
|
val_per_lang_manual,
|
||||||
|
skip_invalid_manual,
|
||||||
|
],
|
||||||
outputs=[info_preprocess_text],
|
outputs=[info_preprocess_text],
|
||||||
)
|
)
|
||||||
bert_gen_btn.click(
|
bert_gen_btn.click(
|
||||||
|
|||||||
Reference in New Issue
Block a user