giriiş
Bu , wav2vec2 ile Çalışmak Bölüm 1 - Otomatik Konuşma Tanıma için XLS-R'nin İnce Ayarı ("Bölüm 1 kılavuzu") ile ilgili yardımcı bir kılavuzdur. Meta AI'nın wav2vec2 XLS-R ("XLS-R") modeline Şili İspanyolcasında nasıl ince ayar yapılacağına dair Bölüm 1 kılavuzunu yazdım. Bu kılavuzu tamamladığınız ve kendi ince ayarlı XLS-R modelinizi oluşturduğunuz varsayılmaktadır. Bu kılavuz, Kaggle Notebook aracılığıyla ince ayarlı XLS-R modelinizde çıkarım yürütme adımlarını açıklayacaktır.
Ön Koşullar ve Başlamadan Önce
Kılavuzu tamamlamak için şunlara sahip olmanız gerekir:
- İspanyolca dili için ince ayarlı bir XLS-R modeli.
- Mevcut bir Kaggle hesabı .
- Python hakkında orta düzey bilgi.
- Kaggle Notebooks ile çalışma konusunda orta düzey bilgi.
- Makine öğrenimi kavramları hakkında orta düzeyde bilgi.
- ASR kavramlarına ilişkin temel bilgiler.
Çıkarım Defterini Oluşturmak
Adım 1 - Kaggle Ortamınızı Kurma
Adım 1.1 - Yeni Kaggle Not Defteri Oluşturma
- Kaggle'da oturum açın.
- Yeni bir Kaggle Not Defteri oluşturun.
- Not defterinin adı istenildiği gibi değiştirilebilir. Bu kılavuz
spanish-asr-inference
defteri adını kullanır.
Adım 1.2 - Test Veri Kümelerini Ekleme
Bu kılavuz, test verilerinin kaynağı olarak Peru İspanyolca Konuşma Veri Kümesini kullanır. Şili İspanyolcası Konuşma Veri Seti gibi, Perulu konuşmacılar veri seti de iki alt veri kümesinden oluşur: Perulu erkek konuşmacıların 2.918 kaydı ve Perulu kadın konuşmacıların 2.529 kaydı.
Bu veri kümesi Kaggle'a 2 ayrı veri kümesi olarak yüklendi:
Giriş Ekle seçeneğine tıklayarak bu veri kümelerinin her ikisini de Kaggle Not Defterinize ekleyin.
Adım 1.3 – İnce Ayarlı Modelin Eklenmesi
İnce ayarlı modelinizi wav2vec2 ile Çalışmak Bölüm 1 - Otomatik Konuşma Tanıma için XLS-R'yi Kaggle Modeli Olarak İnce Ayarlama kılavuzunun 4. Adımına kaydetmiş olmanız gerekir.
İnce ayarları yapılmış modelinizi Giriş Ekle seçeneğine tıklayarak Kaggle Notebook'unuza ekleyin.
Adım 2 – Çıkarım Defterini Oluşturmak
Aşağıdaki 16 alt adım, çıkarım defterinin 16 hücresinin her birini sırayla oluşturur. Bölüm 1 kılavuzundaki aynı yardımcı yöntemlerin çoğunun burada kullanıldığını göreceksiniz.
Adım 2.1 - HÜCRE 1: Paketlerin Kurulumu
Çıkarım not defterinin ilk hücresi bağımlılıkları yükler. İlk hücreyi şu şekilde ayarlayın:
### CELL 1: Install Packages ### !pip install --upgrade torchaudio !pip install jiwer
Adım 2.2 - HÜCRE 2: Python Paketlerini İçe Aktarma
İkinci hücre gerekli Python paketlerini içe aktarır. İkinci hücreyi şu şekilde ayarlayın:
### 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
Adım 2.3 - HÜCRE 3: WER Metriğinin Yüklenmesi
Üçüncü hücre HuggingFace WER değerlendirme metriğini içe aktarır. Üçüncü hücreyi şu şekilde ayarlayın:
### CELL 3: Load WER metric ### wer_metric = load_metric("wer")
- WER, ince ayarlı modelin test verileri üzerindeki performansını ölçmek için kullanılacaktır.
Adım 2.4 - HÜCRE 4: Sabitleri Ayarlama
Dördüncü hücre, not defterinin tamamında kullanılacak sabitleri ayarlar. Dördüncü hücreyi şu şekilde ayarlayın:
### 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
Adım 2.5 - HÜCRE 5: Dizin Dosyalarını Okumak, Metni Temizlemek ve Kelime Dağarcığı Oluşturmak için Yardımcı Yöntemler
Beşinci hücre, veri kümesi indeks dosyalarının okunmasının yanı sıra transkripsiyon metninin temizlenmesi ve test verilerinden rastgele bir örnek kümesi oluşturulmasına yönelik faydalı yöntemleri tanımlar. Beşinci hücreyi şu şekilde ayarlayın:
### 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
yöntemiline_index.tsv
veri kümesi indeks dosyasını okur ve ses dosyası adı ve transkripsiyon verilerini içeren listelerin bir listesini üretir, örneğin:
[ ["/kaggle/input/google-spanish-speakers-chile-male/clm_08421_01719502739", "Es un viaje de negocios solamente voy por una noche"] ... ]
-
clean_text
yöntemi , Adım 2.4'teSPECIAL_CHARS
atanan normal ifade tarafından belirtilen karakterlerin her metin transkripsiyonunu çıkarmak için kullanılır. Noktalama işaretleri de dahil olmak üzere bu karakterler, modeli ses özellikleri ve metin transkripsiyonları arasındaki eşlemeleri öğrenmek üzere eğitirken herhangi bir anlamsal değer sağlamadıkları için ortadan kaldırılabilir. -
get_random_samples
yöntemi , Adım 2.4'teNUM_LOAD_FROM_EACH_SET
sabiti tarafından belirlenen miktara sahip bir dizi rastgele test örneği döndürür.
Adım 2.6 - HÜCRE 6: Ses Verilerini Yüklemek ve Yeniden Örneklemek için Yardımcı Yöntemler
Altıncı hücre, ses verilerini yüklemek ve yeniden örneklemek için torchaudio
kullanan yardımcı program yöntemlerini tanımlar. Altıncı hücreyi şu şekilde ayarlayın:
### 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
yöntemi, belirtilen bir ses dosyasını yükler ve birtorch.Tensor
döndürür. Sesin örnekleme hızıyla birlikte ses verilerinin çok boyutlu matrisini tensor edin. Eğitim verilerindeki tüm ses dosyalarının örnekleme hızı48000
Hz'dir. Bu "orijinal" örnekleme hızı, Adım 2.4'tekiORIG_SAMPLING_RATE
sabiti tarafından yakalanır. -
resample
yöntemi, ses verilerini48000
örnekleme oranından16000
hedef örnekleme hızına alt örneklemek için kullanılır.
Adım 2.7 - HÜCRE 7: Test Verilerinin Okunması
Yedinci hücre, Adım 2.5'te tanımlanan read_index_file_data
yöntemini kullanarak erkek konuşmacıların kayıtları ve kadın konuşmacıların kayıtları için test veri indeks dosyalarını okur. Yedinci hücreyi şu şekilde ayarlayın:
### 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")
Adım 2.8 - HÜCRE 8: Rastgele Test Örneklerinin Listelerinin Oluşturulması
Sekizinci hücre, Adım 2.5'te tanımlanan get_random_samples
yöntemini kullanarak rastgele test örnekleri kümeleri oluşturur. Sekizinci hücreyi şu şekilde ayarlayın:
### 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)
Adım 2.9 - HÜCRE 9: Test Verilerini Birleştirme
Dokuzuncu hücre, erkek test örneklerini ve kadın test örneklerini tek bir listede birleştirir. Dokuzuncu hücreyi şu şekilde ayarlayın:
### CELL 9: Combine test data ### all_test_samples = random_test_samples_male + random_test_samples_female
Adım 2.10 - HÜCRE 10: Transkripsiyon Testinin Temizlenmesi
Onuncu hücre, her test veri örneği üzerinde yinelenir ve Adım 2.5'te tanımlanan clean_text
yöntemini kullanarak ilgili transkripsiyon metnini temizler. Onuncu hücreyi şu şekilde ayarlayın:
### 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])
Adım 2.11 - HÜCRE 11: Ses Verilerini Yükleme
On birinci hücre, all_test_samples
listesinde belirtilen her ses dosyasını yükler. Onbirinci hücreyi şu şekilde ayarlayın:
### 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] })
- Ses verileri bir
torch.Tensor
olarak döndürülür veall_test_data
bir sözlük listesi olarak saklanır. Her sözlük belirli bir örnek için ses verilerini, örnekleme hızını ve sesin metin transkripsiyonunu içerir.
Adım 2.12 - HÜCRE 12: Ses Verilerini Yeniden Örnekleme
On ikinci hücre, ses verilerini 16000
hedef örnekleme hızına yeniden örnekler. On ikinci hücreyi şu şekilde ayarlayın:
### 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]
Adım 2.13 - HÜCRE 13: Otomatik Konuşma Tanıma Ardışık Düzeninin Örneğinin Başlatılması
On üçüncü hücre, HuggingFace transformer
kütüphanesi pipeline
sınıfının bir örneğini başlatır. On üçüncü hücreyi şu şekilde ayarlayın:
### CELL 13: Initialize instance of Automatic Speech Recognition Pipeline ### transcriber = pipeline("automatic-speech-recognition", model = "YOUR_FINETUNED_MODEL_PATH")
model
parametresi, Adım 1.3'te Kaggle Notebook'a eklenen ince ayarlı modelinizin yoluna ayarlanmalıdır, örneğin:
transcriber = pipeline("automatic-speech-recognition", model = "/kaggle/input/xls-r-300m-chilean-spanish/transformers/hardy-pine/1")
Adım 2.14 - HÜCRE 14: Tahminlerin Oluşturulması
On dördüncü hücre, metin tahminleri oluşturmak için test verileri üzerinde önceki adımda başlatılan transcriber
çağırır. On dördüncü hücreyi şu şekilde ayarlayın:
### CELL 14: Generate transcriptions ### transcriptions = transcriber(all_test_data)
Adım 2.15 - HÜCRE 15: WER Metriklerinin Hesaplanması
On beşinci hücre, her tahmin için WER puanlarının yanı sıra tüm tahminler için genel bir WER puanı hesaplar. On beşinci hücreyi şu şekilde ayarlayın:
### 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)
Adım 2.16 - HÜCRE 16: WER Metriklerini Yazdırma
On altıncı ve son hücre, önceki adımdaki WER hesaplamalarını basitçe yazdırır. On altıncı hücreyi şu şekilde ayarlayın:
### CELL 16: Output WER metrics ### pd.set_option("display.max_colwidth", None) print(f"Overall WER: {wer}") print(df)
WER Analizi
Dizüstü bilgisayar, test verilerinin rastgele örnekleri üzerinde tahminler ürettiğinden, dizüstü bilgisayar her çalıştırıldığında çıktı değişecektir. Toplam 6 test örneği için NUM_LOAD_FROM_EACH_SET
3
ayarlandığı bir dizüstü bilgisayar çalıştırmasında aşağıdaki çıktı oluşturuldu:
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
Görüldüğü gibi model mükemmel bir iş çıkardı! Altıncı örnekte (indeks 5
) yalnızca bir hata yaptı ve septiembre
kelimesini setiembre
olarak yanlış yazdı. Elbette dizüstü bilgisayarı farklı test örnekleriyle ve daha da önemlisi daha fazla sayıda test örneğiyle yeniden çalıştırmak farklı ve daha bilgilendirici sonuçlar üretecektir. Bununla birlikte, bu sınırlı veriler, modelin İspanyolca'nın farklı lehçelerinde iyi performans gösterebileceğini, yani Şili İspanyolcası üzerinde eğitim aldığını ancak Peru İspanyolcasında iyi performans gösterdiğini gösteriyor.
Çözüm
wav2vec2 modelleriyle nasıl çalışılacağını yeni öğreniyorsanız, wav2vec2 ile Çalışmak Bölüm 1 - Otomatik Konuşma Tanıma için XLS-R İnce Ayarı kılavuzunun ve bu kılavuzun sizin için yararlı olduğunu umuyorum. Bahsedildiği gibi, Bölüm 1 kılavuzu tarafından oluşturulan ince ayarlı model son teknoloji ürünü değildir ancak yine de birçok uygulama için yararlı olduğu kanıtlanmalıdır. Mutlu bina!