File size: 3,462 Bytes
8a1a95a
 
 
 
13cef53
8a1a95a
13cef53
771feaa
13cef53
 
8a1a95a
 
 
 
 
 
 
 
771feaa
8a1a95a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
771feaa
8a1a95a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
771feaa
8a1a95a
 
771feaa
8a1a95a
 
 
 
 
 
 
 
 
 
 
 
771feaa
8a1a95a
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
89
90
91
92
93
94
95
import os
import shutil
from espnet2.bin.tts_train import TTSTrainer
from espnet2.tasks.tts import TTSTask
from datasets import load_dataset
import yaml

# تحميل بيانات sada2022 من Hugging Face Datasets
dataset = load_dataset("m6011/sada2022")

# تقسيم البيانات إلى تدريب وتحقق
train_data = dataset['train']
valid_data = dataset['test']

# إنشاء ملفات البيانات المطلوبة
os.makedirs('data/train', exist_ok=True)
os.makedirs('data/valid', exist_ok=True)

# حفظ البيانات في ملفات نصية (wav.scp و text)
with open('data/train/wav.scp', 'w', encoding='utf-8') as wav_scp, \
     open('data/train/text', 'w', encoding='utf-8') as text_file:
    for idx, sample in enumerate(train_data):
        wav_path = sample['audio']['path']
        transcription = sample['ProcessedText']
        utt_id = f'train_{idx}'
        wav_scp.write(f'{utt_id} {wav_path}\n')
        text_file.write(f'{utt_id} {transcription}\n')

with open('data/valid/wav.scp', 'w', encoding='utf-8') as wav_scp, \
     open('data/valid/text', 'w', encoding='utf-8') as text_file:
    for idx, sample in enumerate(valid_data):
        wav_path = sample['audio']['path']
        transcription = sample['ProcessedText']
        utt_id = f'valid_{idx}'
        wav_scp.write(f'{utt_id} {wav_path}\n')
        text_file.write(f'{utt_id} {transcription}\n')

# تحميل إعدادات التدريب الافتراضية من ESPnet
config_path = 'conf/train.yaml'
os.makedirs('conf', exist_ok=True)

# إعدادات التدريب
config = {
    'output_dir': 'exp/tts_fastspeech2',
    'token_type': 'char',
    'fs': 16000,
    'lang': 'ar',  # تحديد اللغة العربية
    'train_data_path_and_name_and_type': [
        ('data/train/wav.scp', 'speech', 'sound'),
        ('data/train/text', 'text', 'text')
    ],
    'valid_data_path_and_name_and_type': [
        ('data/valid/wav.scp', 'speech', 'sound'),
        ('data/valid/text', 'text', 'text')
    ],
    'token_list': 'tokens.txt',
    'init_param': None,
    # يمكنك إضافة المزيد من الإعدادات هنا
}

with open(config_path, 'w', encoding='utf-8') as f:
    yaml.dump(config, f, allow_unicode=True)

# توليد قائمة التوكينات (الأحرف) من البيانات
def generate_token_list(text_files, output_file):
    tokens = set()
    for text_file in text_files:
        with open(text_file, 'r', encoding='utf-8') as f:
            for line in f:
                _, text = line.strip().split(' ', 1)
                tokens.update(list(text))
    tokens = sorted(tokens)
    with open(output_file, 'w', encoding='utf-8') as f:
        for token in tokens:
            f.write(f'{token}\n')

# توليد قائمة التوكينات (tokens.txt)
generate_token_list(['data/train/text', 'data/valid/text'], 'tokens.txt')

# إعداد التدريب
train_args = [
    '--config', 'conf/train.yaml',
    '--use_preprocessor', 'true',
    '--token_type', 'char',
    '--bpemodel', None,
    '--train_data_path_and_name_and_type', 'data/train/wav.scp,speech,sound',
    '--train_data_path_and_name_and_type', 'data/train/text,text,text',
    '--valid_data_path_and_name_and_type', 'data/valid/wav.scp,speech,sound',
    '--valid_data_path_and_name_and_type', 'data/valid/text,text,text',
    '--output_dir', 'exp/tts_fastspeech2',
]

# بدء عملية التدريب
TTSTask.main(train_args)