Spaces:
Sleeping
Sleeping
""" | |
Kiểm tra vocab trước khi pretraining hoặc fine-tuning mô hình lớn (LLM hoặc Speech). | |
Mục tiêu: Đảm bảo bộ vocab bao phủ đầy đủ token của Tiếng Việt. | |
""" | |
import os | |
# Định nghĩa đường dẫn file vocab | |
PRETRAINED_VOCAB_PATH = "data/Emilia_ZH_EN_pinyin/vocab.txt" | |
DATASET_VOCAB_PATH = "data/your_training_dataset/vocab_your_dataset.txt" | |
OUTPUT_VOCAB_PATH = "data/your_training_dataset/vocab.txt" | |
def load_vocab(file_path: str) -> list: | |
""" | |
Đọc danh sách token từ file vocab. | |
Args: | |
file_path (str): Đường dẫn đến file vocab. | |
Returns: | |
list: danh sách các token trong file. | |
""" | |
if not os.path.exists(file_path): | |
raise FileNotFoundError(f"File không tồn tại: {file_path}") | |
with open(file_path, "r", encoding="utf8") as file: | |
return [line.replace("\n", "") for line in file] | |
def save_vocab(file_path: str, vocab: list): | |
""" | |
Lưu danh sách token vào file vocab. | |
Args: | |
file_path (str): Đường dẫn file đầu ra. | |
vocab (list): Danh sách token cần lưu. | |
""" | |
with open(file_path, "w", encoding="utf8") as file: | |
file.writelines(f"{token}\n" for token in vocab) | |
def process_vocab(): | |
""" | |
Kiểm tra và mở rộng vocab nếu cần thiết. | |
""" | |
# Load vocab từ file | |
tokens_pretrained = load_vocab(PRETRAINED_VOCAB_PATH) | |
tokens_your_dataset = load_vocab(DATASET_VOCAB_PATH) | |
# Tìm token trong dataset nhưng không có trong pretrained | |
tokens_missing = [] | |
for token in tokens_your_dataset: | |
if token not in tokens_pretrained: | |
tokens_missing.append(token) | |
print(f"Số token thiếu trong vocab pretrained: {len(tokens_missing)}") | |
# Tạo vocab mới và lưu lại | |
new_vocab = tokens_pretrained + list(tokens_missing) | |
save_vocab(OUTPUT_VOCAB_PATH, new_vocab) | |
print(f"Vocab mới đã được lưu tại {OUTPUT_VOCAB_PATH}, tổng số token: {len(new_vocab)}") | |
if __name__ == "__main__": | |
process_vocab() |