소개 이것은 ("1부 가이드")에 대한 동반 가이드입니다. 저는 칠레 스페인어로 Meta AI의 모델을 미세 조정하는 방법에 대한 Part 1 가이드를 작성했습니다. 귀하가 해당 가이드를 완료하고 자체적으로 미세 조정된 XLS-R 모델을 생성했다고 가정합니다. 이 가이드에서는 통해 미세 조정된 XLS-R 모델에서 실행하는 단계를 설명합니다. wav2vec2 작업 1부 - 자동 음성 인식을 위한 XLS-R 미세 조정 wav2vec2 XLS-R("XLS-R") Kaggle Notebook을 추론을 전제 조건 및 시작하기 전 가이드를 완료하려면 다음이 필요합니다. 스페인어용으로 미세 조정된 XLS-R 모델입니다. 기존 . Kaggle 계정 Python에 대한 중급 지식. Kaggle Notebook 작업에 대한 중급 지식. ML 개념에 대한 중급 지식. ASR 개념에 대한 기본 지식. 추론 노트북 구축 1단계 - Kaggle 환경 설정 1.1단계 - 새로운 Kaggle 노트북 만들기 캐글에 로그인하세요. 새로운 캐글 노트북을 만듭니다. 노트북 이름은 원하는 대로 변경할 수 있습니다. 이 가이드에서는 노트북 이름 사용합니다. spanish-asr-inference 1.2단계 - 테스트 데이터 세트 추가 이 가이드에서는 테스트 데이터의 소스로 사용합니다. 와 마찬가지로 페루 사용자 데이터세트도 2개의 하위 데이터세트로 구성됩니다. 즉, 페루 남성 사용자의 녹음 2,918개와 페루 여성 사용자의 녹음 2,529개입니다. 페루 스페인어 음성 데이터 세트를 칠레 스페인어 음성 데이터 세트 이 데이터 세트는 2개의 개별 데이터 세트로 Kaggle에 업로드되었습니다. 페루 남성 연설자의 녹음 페루 여성 연사의 녹음 를 클릭하여 이 두 데이터세트를 Kaggle Notebook에 추가합니다. 입력 추가 1.3단계 - 미세 조정된 모델 추가 가이드의 에서 미세 조정된 모델을 로 저장했어야 합니다. wav2vec2 작업 1부 - 자동 음성 인식을 위한 XLS-R 미세 조정 4단계 Kaggle 모델 를 클릭하여 미세 조정된 모델을 Kaggle Notebook에 추가하세요. 입력 추가 2단계 - 추론 노트북 구축 다음 16개 하위 단계는 추론 노트북의 16개 셀을 각각 순서대로 구축합니다. 여기에서는 파트 1 가이드의 동일한 유틸리티 방법이 많이 사용된다는 점을 알 수 있습니다. 2.1단계 - CELL 1: 패키지 설치 추론 노트북의 첫 번째 셀은 종속성을 설치합니다. 첫 번째 셀을 다음으로 설정합니다. ### CELL 1: Install Packages ### !pip install --upgrade torchaudio !pip install jiwer 2.2단계 - CELL 2: Python 패키지 가져오기 두 번째 셀은 필수 Python 패키지를 가져옵니다. 두 번째 셀을 다음과 같이 설정합니다. ### 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 2.3단계 - CELL 3: WER 측정항목 로드 세 번째 셀은 HuggingFace WER 평가 지표를 가져옵니다. 세 번째 셀을 다음과 같이 설정합니다. ### CELL 3: Load WER metric ### wer_metric = load_metric("wer") WER은 테스트 데이터에 대한 미세 조정 모델의 성능을 측정하는 데 사용됩니다. 2.4단계 - CELL 4: 상수 설정 네 번째 셀은 노트북 전체에서 사용될 상수를 설정합니다. 네 번째 셀을 다음과 같이 설정합니다. ### 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 2.5단계 - CELL 5: 색인 파일 읽기, 텍스트 정리 및 어휘 생성을 위한 유틸리티 방법 다섯 번째 셀은 데이터 세트 인덱스 파일을 읽고, 전사 텍스트를 정리하고, 테스트 데이터에서 무작위 샘플 세트를 생성하기 위한 유틸리티 방법을 정의합니다. 다섯 번째 셀을 다음과 같이 설정합니다. ### 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 메소드는 데이터 세트 인덱스 파일을 읽고 오디오 파일 이름 및 녹음 데이터가 포함된 목록 목록을 생성합니다. 예: 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"] ... ] 메소드는 에서 에 할당된 정규 표현식에 지정된 문자의 각 텍스트 전사를 제거하는 데 사용됩니다. 구두점을 포함한 이러한 문자는 오디오 기능과 텍스트 전사 간의 매핑을 학습하기 위해 모델을 교육할 때 의미론적 값을 제공하지 않으므로 제거할 수 있습니다. clean_text 2.4단계 SPECIAL_CHARS 메소드는 에서 상수 에 의해 설정된 수량으로 무작위 테스트 샘플 세트를 반환합니다. get_random_samples 2.4단계 NUM_LOAD_FROM_EACH_SET 2.6단계 - CELL 6: 오디오 데이터 로드 및 리샘플링을 위한 유틸리티 방법 여섯 번째 셀은 사용하여 오디오 데이터를 로드하고 리샘플링하는 유틸리티 메서드를 정의합니다. 여섯 번째 셀을 다음과 같이 설정합니다. 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] 메소드는 지정된 오디오 파일을 로드하고 오디오 샘플링 속도와 함께 오디오 데이터의 다차원 매트릭스를 반환합니다. 훈련 데이터의 모든 오디오 파일의 샘플링 속도는 입니다. 이 "원래" 샘플링 속도는 의 상수 에 의해 캡처됩니다. read_audio_data torch.Tensor 48000 2.4단계 ORIG_SAMPLING_RATE 방법은 오디오 데이터를 샘플링 레이트 에서 목표 샘플링 레이트 으로 다운샘플링하는 데 사용됩니다. resample 48000 16000 2.7단계 - CELL 7: 테스트 데이터 읽기 일곱 번째 셀은 에서 정의한 메소드를 이용하여 남성 화자의 녹음과 여성 화자의 녹음에 대한 테스트 데이터 인덱스 파일을 읽어온다. 일곱 번째 셀을 다음과 같이 설정합니다. Step 2.5 read_index_file_data ### 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") 2.8단계 - CELL 8: 무작위 테스트 샘플 목록 생성 여덟 번째 셀은 에서 정의된 메서드를 사용하여 무작위 테스트 샘플 세트를 생성합니다. 여덟 번째 셀을 다음과 같이 설정합니다. 2.5단계 get_random_samples ### 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) 2.9단계 - CELL 9: 테스트 데이터 결합 9번째 셀은 남성 테스트 샘플과 여성 테스트 샘플을 단일 목록으로 결합합니다. 9번째 셀을 다음과 같이 설정합니다. ### CELL 9: Combine test data ### all_test_samples = random_test_samples_male + random_test_samples_female 2.10단계 - CELL 10: 전사 테스트 청소 10번째 셀은 각 테스트 데이터 샘플을 반복하고 에서 정의된 메서드를 사용하여 관련 전사 텍스트를 정리합니다. 10번째 셀을 다음과 같이 설정합니다. 2.5단계 clean_text ### 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]) 2.11단계 - CELL 11: 오디오 데이터 로드 11번째 셀은 목록에 지정된 각 오디오 파일을 로드합니다. 11번째 셀을 다음과 같이 설정합니다. 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] }) 오디오 데이터는 로 반환되고 에 사전 목록으로 저장됩니다. 각 사전에는 특정 샘플에 대한 오디오 데이터, 샘플링 속도 및 오디오의 텍스트 전사가 포함되어 있습니다. torch.Tensor all_test_data 2.12단계 - CELL 12: 오디오 데이터 리샘플링 12번째 셀은 오디오 데이터를 목표 샘플링 레이트인 으로 리샘플링합니다. 12번째 셀을 다음과 같이 설정합니다. 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] 2.13단계 - CELL 13: 자동 음성 인식 파이프라인 인스턴스 초기화 13번째 셀은 HuggingFace 라이브러리 클래스의 인스턴스를 초기화합니다. 13번째 셀을 다음과 같이 설정합니다. transformer pipeline ### CELL 13: Initialize instance of Automatic Speech Recognition Pipeline ### transcriber = pipeline("automatic-speech-recognition", model = "YOUR_FINETUNED_MODEL_PATH") 매개변수는 에서 Kaggle Notebook에 추가된 조정 모델의 경로로 설정되어야 합니다. 예: model 1.3단계 미세 transcriber = pipeline("automatic-speech-recognition", model = "/kaggle/input/xls-r-300m-chilean-spanish/transformers/hardy-pine/1") 2.14단계 - CELL 14: 예측 생성 14번째 셀은 테스트 데이터에 대해 이전 단계에서 초기화된 호출하여 텍스트 예측을 생성합니다. 14번째 셀을 다음과 같이 설정합니다. transcriber ### CELL 14: Generate transcriptions ### transcriptions = transcriber(all_test_data) 2.15단계 - CELL 15: WER 측정항목 계산 15번째 셀은 각 예측에 대한 WER 점수뿐만 아니라 모든 예측에 대한 전체 WER 점수도 계산합니다. 15번째 셀을 다음과 같이 설정합니다. ### 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) 2.16단계 - CELL 16: WER 측정항목 인쇄 16번째이자 마지막 셀은 단순히 이전 단계의 WER 계산을 인쇄합니다. 16번째 셀을 다음과 같이 설정합니다. ### CELL 16: Output WER metrics ### pd.set_option("display.max_colwidth", None) print(f"Overall WER: {wer}") print(df) WER 분석 노트북은 테스트 데이터의 무작위 샘플에 대한 예측을 생성하므로 노트북이 실행될 때마다 출력이 달라집니다. 총 6개의 테스트 샘플에 대해 으로 설정한 노트북 실행 시 다음 출력이 생성되었습니다. 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 보시다시피 모델은 훌륭한 작업을 수행했습니다! 여섯 번째 샘플(인덱스 )에서는 라는 단어를 로 잘못 표기하는 오류가 한 번 있었습니다. 물론, 다양한 테스트 샘플, 더 중요한 것은 더 많은 수의 테스트 샘플을 사용하여 노트북을 다시 실행하면 더 다양하고 유익한 결과가 생성됩니다. 그럼에도 불구하고, 이 제한된 데이터는 모델이 다양한 스페인어 방언에서 잘 수행될 수 있음을 시사합니다. 즉, 칠레 스페인어로 훈련되었지만 페루 스페인어에서는 잘 수행되는 것으로 보입니다. 5 septiembre setiembre 결론 wav2vec2 모델 작업 방법을 배우는 중이라면 가이드와 이 가이드가 도움이 되었기를 바랍니다. 언급한 바와 같이, 1부 가이드에서 생성된 미세 조정 모델은 최신 기술은 아니지만 여전히 많은 응용 프로그램에 유용할 것으로 입증되었습니다. 행복한 건물! wav2vec2 작업 1부 - 자동 음성 인식을 위한 XLS-R 미세 조정