forked from idiap/coqui-ai-TTS
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathextend_vocab_ru.py
More file actions
88 lines (70 loc) · 4.95 KB
/
extend_vocab_ru.py
File metadata and controls
88 lines (70 loc) · 4.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import argparse
from tokenizers import Tokenizer
import os
def extend_tokenizer_variant3(args):
old_tokenizer_path = os.path.join("./checkpoints/XTTS_v2_orig", "vocab.json")
root_tokenizer_path = os.path.join(args.output_path, "XTTS_v2.0_original_model_files")
tokenizer_file_path = os.path.join(root_tokenizer_path, "vocab.json")
if not os.path.exists(old_tokenizer_path):
print(f"Ошибка: Файл токенизатора не найден по пути {old_tokenizer_path}")
print("Пожалуйста, убедитесь, что оригинальные файлы модели XTTS (включая vocab.json) загружены в эту директорию.")
return
print(f"Загрузка существующего токенизатора из {old_tokenizer_path}...")
tokenizer = Tokenizer.from_file(old_tokenizer_path)
tokens_to_add_default = [
"а́", "е́", "и́", "о́", "у́", "ы́", "э́", "ю́", "я́", # Строчные гласные с ударением
"А́", "Е́", "И́", "О́", "У́", "Ы́", "Э́", "Ю́", "Я́", # Заглавные гласные с ударением
" ́" # Отдельный знак ударения (U+0301 COMBINING ACUTE ACCENT)
# "мо́", "сло́г", "приве́т"
]
final_tokens_to_add = list(tokens_to_add_default)
# Добавляем токены из файла, если указан
if args.tokens_to_add_file and os.path.exists(args.tokens_to_add_file):
print(f"Чтение дополнительных токенов из файла: {args.tokens_to_add_file}")
with open(args.tokens_to_add_file, 'r', encoding='utf-8') as f:
additional_tokens_from_file = [line.strip() for line in f if line.strip()]
final_tokens_to_add.extend(additional_tokens_from_file)
print(f"Добавлено {len(additional_tokens_from_file)} токенов из файла.")
# Добавляем токены из аргументов командной строки
if args.tokens_to_add:
print(f"Добавление токенов из аргументов командной строки: {args.tokens_to_add}")
final_tokens_to_add.extend(args.tokens_to_add)
# Удаляем дубликаты и сортируем для консистентности (опционально, но полезно)
final_tokens_to_add = sorted(list(set(final_tokens_to_add)))
if not final_tokens_to_add:
print("Список токенов для добавления пуст. Никаких изменений не будет внесено.")
return
print(f"Текущий размер словаря: {tokenizer.get_vocab_size()}")
print(f"Токены для добавления ({len(final_tokens_to_add)} шт.): {final_tokens_to_add}")
num_added_tokens = tokenizer.add_tokens(final_tokens_to_add)
if num_added_tokens > 0:
print(f"Добавлено {num_added_tokens} новых токенов.")
print(f"Новый размер словаря: {tokenizer.get_vocab_size()}")
print(f"Сохранение обновленного токенизатора в {tokenizer_file_path}...")
tokenizer.save(tokenizer_file_path)
print("Токенизатор успешно обновлен и сохранен.")
else:
print("Новых токенов для добавления не найдено (возможно, они уже существуют в словаре).")
print("Файл токенизатора не изменен.")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Расширение словаря существующего XTTS токенизатора путем добавления новых токенов (Вариант 3).")
parser.add_argument(
"--output_path",
default=os.path.join("run", "training"),
type=str,
help="Путь до папки, содержащей подпапку XTTS_v2.0_original_model_files с файлом vocab.json."
)
parser.add_argument(
"--tokens_to_add_file",
type=str,
default=None,
help="Путь к файлу, где каждая строка - это токен для добавления (например, файл с гласными с ударениями)."
)
parser.add_argument(
"--tokens_to_add",
nargs="+", # Позволяет передавать несколько токенов: --tokens_to_add "мо́" "сло́г"
default=[],
help="Список токенов для добавления, передаваемых напрямую через командную строку."
)
args = parser.parse_args()
extend_tokenizer_variant3(args)