mirror of
https://github.com/pese-git/simple-llm.git
synced 2026-01-23 21:14:17 +00:00
53 lines
2.0 KiB
Python
53 lines
2.0 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
"""
|
|||
|
|
Токенизация корпуса с CLI аргументами
|
|||
|
|
"""
|
|||
|
|
import os
|
|||
|
|
import argparse
|
|||
|
|
import pickle
|
|||
|
|
from pathlib import Path
|
|||
|
|
from simple_llm.tokenizer.optimize_bpe import OptimizeBPE
|
|||
|
|
|
|||
|
|
def main():
|
|||
|
|
parser = argparse.ArgumentParser()
|
|||
|
|
parser.add_argument('--corpus', type=str, required=True,
|
|||
|
|
help='Путь к директории с текстами')
|
|||
|
|
parser.add_argument('--tokenizer', type=str, required=True,
|
|||
|
|
help='Путь к файлу токенизатора')
|
|||
|
|
parser.add_argument('--output', type=str, required=True,
|
|||
|
|
help='Путь для сохранения токенизированных данных')
|
|||
|
|
parser.add_argument('--max-tokens', type=int, default=None,
|
|||
|
|
help='Максимальное количество токенов (для тестов)')
|
|||
|
|
args = parser.parse_args()
|
|||
|
|
|
|||
|
|
# Загрузка
|
|||
|
|
tokenizer = OptimizeBPE.load(args.tokenizer)
|
|||
|
|
corpus = []
|
|||
|
|
|
|||
|
|
print(f"Чтение текстов из {args.corpus}...")
|
|||
|
|
for file in Path(args.corpus).glob('*.txt'):
|
|||
|
|
corpus.append(file.read_text(encoding='utf-8'))
|
|||
|
|
|
|||
|
|
# Токенизация
|
|||
|
|
print("Токенизация...")
|
|||
|
|
all_tokens = []
|
|||
|
|
for text in corpus:
|
|||
|
|
tokens = tokenizer.encode(text)
|
|||
|
|
if args.max_tokens:
|
|||
|
|
tokens = tokens[:args.max_tokens]
|
|||
|
|
all_tokens.extend(tokens)
|
|||
|
|
|
|||
|
|
# Сохранение
|
|||
|
|
# Проверяем и создаем директорию для сохранения
|
|||
|
|
output_dir = os.path.dirname(args.output)
|
|||
|
|
if output_dir and not os.path.exists(output_dir):
|
|||
|
|
print(f"Создаем директорию: {output_dir}")
|
|||
|
|
os.makedirs(output_dir, exist_ok=True)
|
|||
|
|
|
|||
|
|
with open(args.output, 'wb') as f:
|
|||
|
|
pickle.dump(all_tokens, f)
|
|||
|
|
print(f"Сохранено {len(all_tokens)} токенов в {args.output}")
|
|||
|
|
|
|||
|
|
if __name__ == '__main__':
|
|||
|
|
main()
|