paint-brush
wav2vec2 ile Çalışmak Bölüm 2 - İnce Ayarlı ASR Modellerinde Çıkarım Çalıştırmakile@pictureinthenoise
510 okumalar
510 okumalar

wav2vec2 ile Çalışmak Bölüm 2 - İnce Ayarlı ASR Modellerinde Çıkarım Çalıştırmak

ile Picture in the Noise11m2024/05/07
Read on Terminal Reader

Çok uzun; Okumak

Bu yardımcı kılavuz, ince ayarlı bir wav2vec2 XLS-R modelinde çıkarım yürütme adımlarını açıklamaktadır. "wav2vec2 ile Çalışmak Bölüm 1 - Otomatik Konuşma Tanıma için XLS-R'nin İnce Ayarlanması" kılavuzunu tamamlar. Kılavuz, çıkarım yapmak için kullanılabilecek bir Kaggle Not Defteri oluşturmaya ilişkin adım adım talimatlar sağlar.
featured image - wav2vec2 ile Çalışmak Bölüm 2 - İnce Ayarlı ASR Modellerinde Çıkarım Çalıştırmak
Picture in the Noise HackerNoon profile picture
0-item
1-item

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

  1. Kaggle'da oturum açın.
  2. Yeni bir Kaggle Not Defteri oluşturun.
  3. 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öntemi line_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'te SPECIAL_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'te NUM_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 bir torch.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'teki ORIG_SAMPLING_RATE sabiti tarafından yakalanır.
  • resample yöntemi, ses verilerini 48000 örnekleme oranından 16000 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 ve all_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!