Giới thiệu Đây là hướng dẫn đồng hành với ("hướng dẫn Phần 1"). Tôi đã viết hướng dẫn Phần 1 về cách tinh chỉnh mô hình của Meta AI bằng tiếng Tây Ban Nha ở Chile. Giả định rằng bạn đã hoàn thành hướng dẫn đó và đã tạo mô hình XLS-R được tinh chỉnh của riêng mình. Hướng dẫn này sẽ giải thích các bước để chạy trên mô hình XLS-R đã được tinh chỉnh của bạn thông qua . Làm việc với wav2vec2 Phần 1 - Tinh chỉnh XLS-R để nhận dạng giọng nói tự động wav2vec2 XLS-R ("XLS-R") suy luận Kaggle Notebook Điều kiện tiên quyết và trước khi bạn bắt đầu Để hoàn thành hướng dẫn, bạn sẽ cần phải có: Mẫu XLS-R đã được tinh chỉnh cho tiếng Tây Ban Nha. Một hiện có. tài khoản Kaggle Kiến thức trung cấp về Python. Kiến thức trung cấp về làm việc với Kaggle Notebooks. Kiến thức trung cấp về các khái niệm ML. Kiến thức cơ bản về các khái niệm ASR. Xây dựng sổ ghi chép suy luận Bước 1 - Thiết lập môi trường Kaggle của bạn Bước 1.1 - Tạo sổ tay Kaggle mới Đăng nhập vào Kaggle. Tạo Sổ tay Kaggle mới. Tên sổ ghi chép có thể thay đổi theo ý muốn. Hướng dẫn này sử dụng tên sổ ghi chép . spanish-asr-inference Bước 1.2 - Thêm bộ dữ liệu thử nghiệm Hướng dẫn này sử dụng làm nguồn dữ liệu thử nghiệm. Giống như , tập dữ liệu của người nói tiếng Peru cũng bao gồm hai tập dữ liệu phụ: 2.918 bản ghi âm của nam giới nói tiếng Peru và 2.529 bản ghi âm của nữ giới nói tiếng Peru. Tập dữ liệu giọng nói tiếng Tây Ban Nha Peru Tập dữ liệu giọng nói tiếng Tây Ban Nha ở Chile Tập dữ liệu này đã được tải lên Kaggle dưới dạng 2 tập dữ liệu riêng biệt: Bản ghi âm của nam giới Peru Bản ghi âm của nữ diễn giả Peru Thêm cả hai bộ dữ liệu này vào Sổ tay Kaggle của bạn bằng cách nhấp vào . Thêm đầu vào Bước 1.3 - Thêm mô hình đã tinh chỉnh Bạn nên lưu mô hình đã tinh chỉnh của mình trong của Hướng dưới dạng . Bước 4 dẫn Làm việc với wav2vec2 Phần 1 - Tinh chỉnh XLS-R cho Nhận dạng giọng nói tự động Mô hình Kaggle Thêm mô hình đã được tinh chỉnh vào Kaggle Notebook của bạn bằng cách nhấp vào . Thêm đầu vào Bước 2 - Xây dựng sổ ghi chép suy luận 16 bước phụ sau đây sẽ sắp xếp từng ô trong số 16 ô của sổ ghi chép suy luận theo thứ tự. Bạn sẽ nhận thấy rằng nhiều phương pháp hữu ích tương tự trong hướng dẫn Phần 1 cũng được sử dụng ở đây. Bước 2.1 - Ô 1: Cài đặt gói Ô đầu tiên của sổ ghi chép suy luận sẽ cài đặt các phần phụ thuộc. Đặt ô đầu tiên thành: ### CELL 1: Install Packages ### !pip install --upgrade torchaudio !pip install jiwer Bước 2.2 - Ô 2: Nhập gói Python Việc nhập ô thứ hai yêu cầu các gói Python. Đặt ô thứ hai thành: ### CELL 2: Import Python packages ### import re import math import random import pandas as pd import torchaudio from datasets import load_metric from transformers import pipeline Bước 2.3 - Ô 3: Đang tải số liệu WER Ô thứ ba nhập số liệu đánh giá HuggingFace WER. Đặt ô thứ ba thành: ### CELL 3: Load WER metric ### wer_metric = load_metric("wer") WER sẽ được sử dụng để đo lường hiệu suất của mô hình được tinh chỉnh trên dữ liệu thử nghiệm. Bước 2.4 - Ô 4: Đặt hằng số Ô thứ tư đặt các hằng số sẽ được sử dụng trong toàn bộ sổ ghi chép. Đặt ô thứ tư thành: ### CELL 4: Constants ### # Testing data TEST_DATA_PATH_MALE = "/kaggle/input/google-spanish-speakers-peru-male/" TEST_DATA_PATH_FEMALE = "/kaggle/input/google-spanish-speakers-peru-female/" EXT = ".wav" NUM_LOAD_FROM_EACH_SET = 3 # Special characters SPECIAL_CHARS = r"[\d\,\-\;\!\¡\?\¿\।\'\'\"\–\'\:\/\.\“\”\৷\…\‚\॥\\]" # Sampling rates ORIG_SAMPLING_RATE = 48000 TGT_SAMPLING_RATE = 16000 Bước 2.5 - Ô 5: Các phương pháp tiện ích để đọc tệp chỉ mục, làm sạch văn bản và tạo từ vựng Ô thứ năm xác định các phương thức tiện ích để đọc các tệp chỉ mục tập dữ liệu, cũng như để làm sạch văn bản phiên âm và tạo một tập hợp mẫu ngẫu nhiên từ dữ liệu thử nghiệm. Đặt ô thứ năm thành: ### CELL 5: Utility methods for reading index files, cleaning text, random indices generator ### def read_index_file_data(path: str, filename: str): data = [] with open(path + filename, "r", encoding = "utf8") as f: lines = f.readlines() for line in lines: file_and_text = line.split("\t") data.append([path + file_and_text[0] + EXT, file_and_text[1].replace("\n", "")]) return data def clean_text(text: str) -> str: cleaned_text = re.sub(SPECIAL_CHARS, "", text) cleaned_text = cleaned_text.lower() return cleaned_text def get_random_samples(dataset: list, num: int) -> list: used = [] samples = [] for i in range(num): a = -1 while a == -1 or a in used: a = math.floor(len(dataset) * random.random()) samples.append(dataset[a]) used.append(a) return samples Phương thức đọc tệp chỉ mục tập dữ liệu và tạo danh sách các danh sách có tên tệp âm thanh và dữ liệu phiên âm, ví dụ: read_index_file_data line_index.tsv [ ["/kaggle/input/google-spanish-speakers-chile-male/clm_08421_01719502739", "Es un viaje de negocios solamente voy por una noche"] ... ] Phương thức được sử dụng để loại bỏ từng phiên âm văn bản của các ký tự được chỉ định bởi biểu thức chính quy được gán cho trong . Những ký tự này, bao gồm cả dấu câu, có thể bị loại bỏ vì chúng không cung cấp bất kỳ giá trị ngữ nghĩa nào khi đào tạo mô hình để tìm hiểu ánh xạ giữa các tính năng âm thanh và bản chép lời văn bản. clean_text SPECIAL_CHARS Bước 2.4 Phương thức trả về một tập hợp các mẫu thử nghiệm ngẫu nhiên với số lượng được đặt theo hằng số trong . get_random_samples NUM_LOAD_FROM_EACH_SET Bước 2.4 Bước 2.6 - CELL 6: Các phương pháp tiện ích để tải và lấy mẫu lại dữ liệu âm thanh Ô thứ sáu xác định các phương thức tiện ích sử dụng để tải và lấy mẫu lại dữ liệu âm thanh. Đặt ô thứ sáu thành: torchaudio ### CELL 7: Utility methods for loading and resampling audio data ### def read_audio_data(file): speech_array, sampling_rate = torchaudio.load(file, normalize = True) return speech_array, sampling_rate def resample(waveform): transform = torchaudio.transforms.Resample(ORIG_SAMPLING_RATE, TGT_SAMPLING_RATE) waveform = transform(waveform) return waveform[0] Phương thức tải một tệp âm thanh được chỉ định và trả về một ma trận đa chiều của dữ liệu âm thanh cùng với tốc độ lấy mẫu của âm thanh. Tất cả các tệp âm thanh trong dữ liệu huấn luyện đều có tốc độ lấy mẫu là Hz. Tốc độ lấy mẫu "gốc" này được ghi lại bằng hằng số trong . read_audio_data torch.Tensor 48000 ORIG_SAMPLING_RATE Bước 2.4 Phương pháp được sử dụng để giảm tốc độ lấy mẫu dữ liệu âm thanh từ tốc độ lấy mẫu là xuống tốc độ lấy mẫu mục tiêu là . resample 48000 16000 Bước 2.7 - Ô 7: Đọc dữ liệu kiểm tra Ô thứ bảy đọc các tệp chỉ mục dữ liệu thử nghiệm cho bản ghi âm của loa nam và bản ghi âm của loa nữ bằng phương pháp được xác định trong . Đặt ô thứ bảy thành: read_index_file_data Bước 2.5 ### CELL 7: Read test data ### test_data_male = read_index_file_data(TEST_DATA_PATH_MALE, "line_index.tsv") test_data_female = read_index_file_data(TEST_DATA_PATH_FEMALE, "line_index.tsv") Bước 2.8 - Ô 8: Tạo danh sách các mẫu thử nghiệm ngẫu nhiên Ô thứ tám tạo các tập hợp mẫu thử nghiệm ngẫu nhiên bằng phương pháp được xác định ở . Đặt ô thứ tám thành: get_random_samples Bước 2.5 ### CELL 8: Generate lists of random test samples ### random_test_samples_male = get_random_samples(test_data_male, NUM_LOAD_FROM_EACH_SET) random_test_samples_female = get_random_samples(test_data_female, NUM_LOAD_FROM_EACH_SET) Bước 2.9 - Ô 9: Kết hợp dữ liệu thử nghiệm Ô thứ chín kết hợp các mẫu thử nghiệm nam và mẫu thử nghiệm nữ thành một danh sách duy nhất. Đặt ô thứ chín thành: ### CELL 9: Combine test data ### all_test_samples = random_test_samples_male + random_test_samples_female Bước 2.10 - CELL 10: Kiểm tra phiên mã sạch Ô thứ mười lặp lại từng mẫu dữ liệu thử nghiệm và xóa văn bản phiên mã liên quan bằng phương pháp được xác định trong . Đặt ô thứ mười thành: clean_text Bước 2.5 ### CELL 10: Clean text transcriptions ### for index in range(len(all_test_samples)): all_test_samples[index][1] = clean_text(all_test_samples[index][1]) Bước 2.11 - Ô 11: Đang tải dữ liệu âm thanh Ô thứ 11 tải từng tệp âm thanh được chỉ định trong danh sách . Đặt ô thứ mười một thành: all_test_samples ### CELL 11: Load audio data ### all_test_data = [] for index in range(len(all_test_samples)): speech_array, sampling_rate = read_audio_data(all_test_samples[index][0]) all_test_data.append({ "raw": speech_array, "sampling_rate": sampling_rate, "target_text": all_test_samples[index][1] }) Dữ liệu âm thanh được trả về dưới dạng và được lưu trữ trong dưới dạng danh sách từ điển. Mỗi từ điển chứa dữ liệu âm thanh cho một mẫu cụ thể, tốc độ lấy mẫu và bản phiên âm văn bản của âm thanh. torch.Tensor all_test_data Bước 2.12 - Ô 12: Lấy mẫu lại dữ liệu âm thanh Ô thứ mười hai lấy mẫu lại dữ liệu âm thanh theo tốc độ lấy mẫu mục tiêu là . Đặt ô thứ mười hai thành: 16000 ### CELL 12: Resample audio data and cast to NumPy arrays ### all_test_data = [{"raw": resample(sample["raw"]).numpy(), "sampling_rate": TGT_SAMPLING_RATE, "target_text": sample["target_text"]} for sample in all_test_data] Bước 2.13 - CELL 13: Khởi tạo phiên bản của đường dẫn nhận dạng giọng nói tự động Ô thứ mười ba khởi tạo một phiên bản của lớp thư viện HuggingFace. Đặt ô thứ mười ba thành: pipeline transformer ### CELL 13: Initialize instance of Automatic Speech Recognition Pipeline ### transcriber = pipeline("automatic-speech-recognition", model = "YOUR_FINETUNED_MODEL_PATH") Tham số phải được đặt thành đường dẫn đến mô hình đã tinh chỉnh được thêm vào Sổ tay Kaggle ở , ví dụ: model của bạn Bước 1.3 transcriber = pipeline("automatic-speech-recognition", model = "/kaggle/input/xls-r-300m-chilean-spanish/transformers/hardy-pine/1") Bước 2.14 - Ô 14: Tạo dự đoán Ô thứ mười bốn gọi trình được khởi tạo ở bước trước trên dữ liệu thử nghiệm để tạo dự đoán văn bản. Đặt ô thứ mười bốn thành: transcriber ### CELL 14: Generate transcriptions ### transcriptions = transcriber(all_test_data) Bước 2.15 - Ô 15: Tính chỉ số WER Ô thứ mười lăm tính điểm WER cho mỗi dự đoán cũng như điểm WER tổng thể cho tất cả các dự đoán. Đặt ô thứ mười lăm thành: ### CELL 15: Calculate WER metrics ### predictions = [transcription["text"] for transcription in transcriptions] references = [transcription["target_text"][0] for transcription in transcriptions] wers = [] for p in range(len(predictions)): wer = wer_metric.compute(predictions = [predictions[p]], references = [references[p]]) wers.append(wer) zipped = list(zip(predictions, references, wers)) df = pd.DataFrame(zipped, columns=["Prediction", "Reference", "WER"]) wer = wer_metric.compute(predictions = predictions, references = references) Bước 2.16 - Ô 16: In số liệu WER Ô thứ mười sáu và ô cuối cùng chỉ in các phép tính WER từ bước trước. Đặt ô thứ mười sáu thành: ### CELL 16: Output WER metrics ### pd.set_option("display.max_colwidth", None) print(f"Overall WER: {wer}") print(df) Phân tích WER Vì sổ ghi chép tạo ra các dự đoán trên các mẫu dữ liệu thử nghiệm ngẫu nhiên nên kết quả đầu ra sẽ thay đổi mỗi lần sổ ghi chép được chạy. Kết quả đầu ra sau đây được tạo khi chạy sổ ghi chép với được đặt thành cho tổng số 6 mẫu thử nghiệm: NUM_LOAD_FROM_EACH_SET 3 Overall WER: 0.013888888888888888 Prediction \ 0 quiero que me reserves el mejor asiento del teatro 1 el llano en llamas es un clásico de juan rulfo 2 el cuadro de los alcatraces es una de las pinturas más famosas de diego rivera 3 hay tres cafés que están abiertos hasta las once de la noche 4 quiero que me recomiendes una dieta pero donde uno pueda comer algo no puras verduras 5 cuántos albergues se abrieron después del terremoto del diecinueve de setiembre Reference \ 0 quiero que me reserves el mejor asiento del teatro 1 el llano en llamas es un clásico de juan rulfo 2 el cuadro de los alcatraces es una de las pinturas más famosas de diego rivera 3 hay tres cafés que están abiertos hasta las once de la noche 4 quiero que me recomiendes una dieta pero donde uno pueda comer algo no puras verduras 5 cuántos albergues se abrieron después del terremoto del diecinueve de septiembre WER 0 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.090909 Có thể thấy, người mẫu đã làm rất tốt! Nó chỉ mắc một lỗi với mẫu thứ sáu (chỉ số ), viết sai chính tả từ thành . Tất nhiên, việc chạy lại sổ ghi chép với các mẫu thử nghiệm khác nhau và quan trọng hơn là số lượng mẫu thử nghiệm lớn hơn sẽ tạo ra các kết quả khác nhau và nhiều thông tin hơn. Tuy nhiên, dữ liệu hạn chế này cho thấy mô hình có thể hoạt động tốt trên các phương ngữ khác nhau của tiếng Tây Ban Nha - tức là nó được đào tạo bằng tiếng Tây Ban Nha ở Chile nhưng dường như hoạt động tốt bằng tiếng Tây Ban Nha ở Peru. 5 septiembre setiembre Phần kết luận Nếu bạn mới học cách làm việc với các mô hình wav2vec2, tôi hy vọng rằng hướng dẫn và hướng dẫn này hữu ích cho bạn. Như đã đề cập, mô hình tinh chỉnh do hướng dẫn Phần 1 tạo ra không hoàn toàn hiện đại nhưng vẫn tỏ ra hữu ích cho nhiều ứng dụng. Chúc tòa nhà vui vẻ! Làm việc với wav2vec2 Phần 1 - Tinh chỉnh XLS-R để nhận dạng giọng nói tự động