yannyoper commited on
Commit
cf6354c
·
verified ·
1 Parent(s): 1e67f57

Upload 2 files

Browse files
Files changed (2) hide show
  1. AI.py +35 -0
  2. generate_multilingual.py +61 -0
AI.py ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from transformers import T5Config, T5ForConditionalGeneration
3
+
4
+ def create_t5_3b_model(vocab_size: int = 32128) -> T5ForConditionalGeneration:
5
+ """
6
+ Создаёт encoder-decoder модель T5 с ~3 миллиардами параметров.
7
+ Параметры взяты из официальной спецификации T5-3B (v1.1).
8
+ """
9
+ config = T5Config(
10
+ vocab_size=vocab_size, # Размер словаря (как в оригинальном T5)
11
+ d_model=1024, # Размерность скрытого слоя
12
+ d_kv=128, # Размерность ключей/значений в attention
13
+ num_heads=32, # Количество голов внимания
14
+ num_layers=24, # Количество слоёв в encoder и decoder
15
+ d_ff=16384, # Размерность feed‑forward слоя
16
+ dropout_rate=0.1, # Вероятность dropout
17
+ feed_forward_proj="gated-gelu", # Тип проекции (T5 v1.1 использует gated‑GELU)
18
+ tie_word_embeddings=False, # Не связываем входные и выходные эмбеддинги (обычно False для T5)
19
+ # Дополнительные параметры можно оставить по умолчанию
20
+ )
21
+ model = T5ForConditionalGeneration(config)
22
+ return model
23
+
24
+ if __name__ == "__main__":
25
+ # Создаём модель
26
+ model = create_t5_3b_model()
27
+
28
+ # Выводим число параметров
29
+ num_params = model.num_parameters()
30
+ print(f"Модель содержит {num_params:,} параметров.")
31
+
32
+ # Сохраняем конфигурацию (и веса, если нужно)
33
+ model.config.save_pretrained("./t5-3b-config")
34
+ # model.save_pretrained("./t5-3b-random") # раскомментировать для сохранения весов (около 12 ГБ)
35
+ print("Конфигурация сохранена в папку ./t5-3b-config")
generate_multilingual.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import argparse
3
+ import multiprocessing as mp
4
+ from faker import Faker
5
+ import os
6
+ import random
7
+
8
+ def generate_chunk(chunk_id, num_examples, languages, output_dir, chunk_size=10000):
9
+ """
10
+ Генерирует чанк датасета.
11
+ Если languages — список, то для каждого примера случайно выбирается язык.
12
+ """
13
+ fakers = {lang: Faker(lang) for lang in languages}
14
+ filename = os.path.join(output_dir, f"chunk_{chunk_id:05d}.jsonl")
15
+ with open(filename, 'w', encoding='utf-8') as f:
16
+ for _ in range(num_examples):
17
+ lang = random.choice(languages)
18
+ fake = fakers[lang]
19
+ text = fake.paragraph(nb_sentences=random.randint(5, 15), variable_nb_sentences=True)
20
+ record = {"text": text, "language": lang}
21
+ f.write(json.dumps(record, ensure_ascii=False) + '\n')
22
+ return filename
23
+
24
+ def main():
25
+ parser = argparse.ArgumentParser(description="Генерация мультиязычного синтетического датасета в формате JSONL")
26
+ parser.add_argument("--total_examples", type=int, default=1_000_000,
27
+ help="Общее количество примеров (текстов) для генерации")
28
+ parser.add_argument("--languages", type=str, nargs='+', default=["en_US", "ru_RU", "zh_CN"],
29
+ help="Список локалей через пробел (например, en_US ru_RU zh_CN)")
30
+ parser.add_argument("--output_dir", type=str, default="./multilingual_dataset",
31
+ help="Директория для сохранения чанков")
32
+ parser.add_argument("--chunk_size", type=int, default=10000,
33
+ help="Количество примеров в одном файле-чанке")
34
+ parser.add_argument("--num_workers", type=int, default=4,
35
+ help="Количество параллельных процессов для генерации")
36
+ args = parser.parse_args()
37
+
38
+ os.makedirs(args.output_dir, exist_ok=True)
39
+
40
+ num_chunks = (args.total_examples + args.chunk_size - 1) // args.chunk_size
41
+ chunks = []
42
+ for i in range(num_chunks):
43
+ start = i * args.chunk_size
44
+ end = min(start + args.chunk_size, args.total_examples)
45
+ num_in_chunk = end - start
46
+ chunks.append((i, num_in_chunk, args.languages, args.output_dir, args.chunk_size))
47
+
48
+ pool = mp.Pool(processes=args.num_workers)
49
+ results = []
50
+ for chunk in chunks:
51
+ results.append(pool.apply_async(generate_chunk, chunk))
52
+ pool.close()
53
+ pool.join()
54
+
55
+ for r in results:
56
+ r.get()
57
+
58
+ print(f"Генерация завершена. Чанки сохранены в {args.output_dir}")
59
+
60
+ if __name__ == "main":
61
+ main()