giriiş
Meta AI, 2021'in sonunda wav2vec2 XLS-R'yi ("XLS-R") tanıttı. XLS-R, diller arası konuşma temsillerini öğrenmeye yönelik bir makine öğrenimi ("ML") modelidir; ve 128 dilde 400.000 saatten fazla kamuya açık konuşma sesiyle eğitildi. Piyasaya sürülmesinin ardından model, Meta AI'nin 53 dilde yaklaşık 50.000 saatlik konuşma sesiyle eğitilmiş XLSR- 53 diller arası modeli üzerinde bir sıçramayı temsil ediyordu.
Bu kılavuz, Kaggle Notebook kullanarak otomatik konuşma tanıma ("ASR") için XLS-R'ye ince ayar yapma adımlarını açıklamaktadır. Model, Şili İspanyolcasına ince ayar yapılacaktır, ancak XLS-R'ye istediğiniz farklı dillerde ince ayar yapmak için genel adımlar takip edilebilir.
İnce ayarlı model üzerinde çıkarım yapmak, bu kılavuzu iki bölümden ilki haline getiren yardımcı bir eğitimde açıklanacaktır. Bu ince ayar kılavuzu biraz uzun olduğundan, çıkarımlara özel ayrı bir kılavuz oluşturmaya karar verdim.
Mevcut bir ML geçmişine sahip olduğunuz ve temel ASR kavramlarını anladığınız varsayılmaktadır. Yeni başlayanlar yapım adımlarını takip etmekte/anlamakta zorlanabilirler.
XLS-R Hakkında Biraz Arka Plan
2020'de tanıtılan orijinal wav2vec2 modeli, 960 saatlik Librispeech veri kümesi konuşma sesi ve ~53.200 saatlik LibriVox veri kümesi konuşma sesi üzerinde önceden eğitildi. Piyasaya sürülmesinden sonra iki model boyutu mevcuttu: 95 milyon parametreli BASE modeli ve 317 milyon parametreli LARGE modeli.
Öte yandan XLS-R, 5 veri kümesindeki çok dilli konuşma sesiyle önceden eğitildi:
- VoxPopuli : Avrupa parlamentosundan 23 Avrupa parlamento konuşması dilinde toplam ~372.000 saatlik konuşma sesi.
- Çok Dilli Kitap Konuşması : Çoğunluğu (~44.000 saat) İngilizce olmak üzere, sekiz Avrupa dilinde toplam ~50.000 saatlik konuşma sesi.
- CommonVoice : 60 dilde toplam ~7.000 saatlik konuşma sesi.
- VoxLingua107 : YouTube içeriğine dayalı olarak 107 dilde toplam ~6.600 saatlik konuşma sesi.
- BABEL : 17 Afrika ve Asya dilinde, telefon konuşmasını temel alan toplam ~1.100 saatlik konuşma sesi.
3 adet XLS-R modeli bulunmaktadır: 300 milyon parametreli XLS-R (0,3B) , 1 milyar parametreli XLS-R (1B) ve 2 milyar parametreli XLS-R (2B) . Bu kılavuz XLS-R (0.3B) modelini kullanacaktır.
Yaklaşmak
Wav2vev2 modellerine nasıl ince ayar yapılacağına dair bazı harika yazılar var, belki de bu bir tür "altın standart"tır. Elbette buradaki genel yaklaşım diğer kılavuzlarda bulacağınız yaklaşımı taklit ediyor. Olacaksın:
- Ses verilerinin ve ilgili metin transkripsiyonlarının eğitim veri kümesini yükleyin.
- Veri kümesindeki metin transkripsiyonlarından bir sözcük dağarcığı oluşturun.
- Giriş verilerinden özellikler çıkaracak ve ayrıca metin transkripsiyonlarını etiket dizilerine dönüştürecek bir wav2vec2 işlemcisini başlatın.
- İşlenen giriş verilerinde wav2vec2 XLS-R'ye ince ayar yapın.
Ancak bu kılavuz ile diğerleri arasında üç temel fark vardır:
- Kılavuz, ilgili ML ve ASR kavramları hakkında çok fazla "satır içi" tartışma sunmamaktadır.
- Bireysel not defteri hücrelerindeki her alt bölüm, belirli hücrenin kullanımına/amacına ilişkin ayrıntıları içerecek olsa da, mevcut bir ML geçmişine sahip olduğunuz ve temel ASR kavramlarını anladığınız varsayılmaktadır.
- Oluşturacağınız Kaggle Notebook, üst düzey hücrelerde yardımcı yöntemleri düzenler.
- Pek çok ince ayar not defteri bir tür "bilinç akışı" tipi düzene sahip olma eğilimindeyken, ben tüm faydalı yöntemleri bir arada düzenlemeyi seçtim. Eğer wav2vec2'de yeniyseniz bu yaklaşımı kafa karıştırıcı bulabilirsiniz. Ancak tekrarlamak gerekirse, her hücreye ayrılmış alt bölümdeki her hücrenin amacını açıklarken açık olmak için elimden geleni yapıyorum. Eğer wav2vec2'yi yeni öğreniyorsanız, Düz İngilizce'de Otomatik Konuşma Tanıma için HackerNoon wav2vec2 makaleme hızlıca göz atmanız faydalı olabilir.
- Bu kılavuzda yalnızca ince ayar adımları açıklanmaktadır.
- Giriş bölümünde de belirtildiği gibi, oluşturacağınız ince ayarlı XLS-R modeli üzerinde çıkarımın nasıl çalıştırılacağına ilişkin ayrı bir yardımcı kılavuz oluşturmayı tercih ettim. Bu, kılavuzun aşırı uzun olmasını önlemek için yapıldı.
Ön Koşullar ve Başlamadan Önce
Kılavuzu tamamlamak için şunlara sahip olmanız gerekir:
- Mevcut bir Kaggle hesabı . Mevcut bir Kaggle hesabınız yoksa bir tane oluşturmanız gerekir.
- Mevcut bir Ağırlıklar ve Önyargılar hesabı ("WandB") . Mevcut bir Ağırlıklar ve Önyargılar hesabınız yoksa bir tane oluşturmanız gerekir.
- Bir WandB API anahtarı. WandB API anahtarınız yoksa buradaki adımları izleyin.
- Orta düzeyde Python bilgisi.
- 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.
Not defterini oluşturmaya başlamadan önce doğrudan aşağıdaki iki alt bölümü incelemeniz faydalı olabilir. Onlar tanımlar:
- Eğitim veri seti.
- Eğitim sırasında kullanılan Kelime Hata Oranı ("WER") ölçümü.
Eğitim Veri Kümesi
Giriş bölümünde belirtildiği gibi, XLS-R modeline Şili İspanyolcası üzerinde ince ayar yapılacaktır. Spesifik veri seti, Guevara-Rukoz ve diğerleri tarafından geliştirilen Şili İspanyolca Konuşma Veri Setidir . OpenSLR'den indirilebilir. Veri seti iki alt veri setinden oluşur: (1) Şilili erkek konuşmacılara ait 2.636 ses kaydı ve (2) Şilili kadın konuşmacılara ait 1.738 ses kaydı.
Her alt veri kümesi bir line_index.tsv
dizin dosyası içerir. Her indeks dosyasının her satırı, bir çift ses dosyası adı ve ilgili dosyadaki sesin transkripsiyonunu içerir, örneğin:
clm_08421_01719502739 Es un viaje de negocios solamente voy por una noche clm_02436_02011517900 Se usa para incitar a alguien a sacar el mayor provecho del dia presente
Kolaylık olması açısından Şili İspanyolca Konuşma Veri Kümesini Kaggle'a yükledim. Şilili erkek konuşmacıların kayıtları için bir Kaggle veri seti ve Şilili kadın konuşmacıların kayıtları için bir Kaggle veri seti bulunmaktadır. Bu Kaggle veri kümeleri, bu kılavuzdaki adımları izleyerek oluşturacağınız Kaggle Not Defteri'ne eklenecektir.
Kelime Hata Oranı (WER)
WER, otomatik konuşma tanıma modellerinin performansını ölçmek için kullanılabilecek bir ölçümdür. WER, bir metin tahmininin bir metin referansına ne kadar yakın olduğunu ölçen bir mekanizma sağlar. WER bunu 3 türdeki hataları kaydederek başarır:
ikameler (
S
): Tahmin, referanstaki benzer kelimeden farklı bir kelime içerdiğinde bir ikame hatası kaydedilir. Örneğin bu durum, tahminin referanstaki bir kelimeyi yanlış yazması durumunda ortaya çıkar.silmeler (
D
): Tahmin, referansta bulunmayan bir kelimeyi içerdiğinde bir silme hatası kaydedilir.eklemeler (
I
): Tahmin, referansta bulunan bir kelimeyi içermediğinde bir ekleme hatası kaydedilir.
Açıkçası, WER kelime düzeyinde çalışıyor. WER metriğinin formülü aşağıdaki gibidir:
WER = (S + D + I)/N where: S = number of substition errors D = number of deletion errors I = number of insertion errors N = number of words in the reference
İspanyolca'da basit bir WER örneği aşağıdaki gibidir:
prediction: "Él está saliendo." reference: "Él está saltando."
Bir tablo, tahmindeki hataların görselleştirilmesine yardımcı olur:
METİN | KELİME 1 | KELİME 2 | KELİME 3 |
---|---|---|---|
tahmin | Él | bu | saliendo |
referans | Él | bu | saltando |
| doğru | doğru | ikame |
Tahmin 1 değiştirme hatası, 0 silme hatası ve 0 ekleme hatası içeriyor. Bu örnek için WER şu şekildedir:
WER = 1 + 0 + 0 / 3 = 1/3 = 0.33
Kelime Hata Oranının bize hangi belirli hataların mevcut olduğunu söylemediği açık olmalıdır. Yukarıdaki örnekte WER, WORD 3'ün tahmin edilen metinde bir hata içerdiğini tanımlar ancak tahminde i ve e karakterlerinin yanlış olduğunu bize söylemez. Daha kesin hata analizi için Karakter Hata Oranı ("CER") gibi diğer ölçümler kullanılabilir.
İnce Ayar Not Defterini Oluşturma
Artık ince ayar not defterini oluşturmaya başlamaya hazırsınız.
- Adım 1 ve Adım 2, Kaggle Notebook ortamınızın kurulumunda size rehberlik eder.
- 3. Adım, dizüstü bilgisayarın kendisini oluştururken size yol gösterir. İnce ayar not defterinin 32 hücresini temsil eden 32 alt adım içerir.
- 4. Adım, dizüstü bilgisayarı çalıştırma, eğitimi izleme ve modeli kaydetme aşamalarında size yol gösterir.
Adım 1 - WandB API Anahtarınızı Alın
Kaggle Not Defteriniz, WandB API anahtarınızı kullanarak eğitim çalıştırma verilerini WandB'ye gönderecek şekilde yapılandırılmalıdır. Bunu yapmak için kopyalamanız gerekir.
-
www.wandb.com
adresinden WandB'de oturum açın. -
www.wandb.ai/authorize
adresine gidin. - Bir sonraki adımda kullanmak üzere API anahtarınızı kopyalayın.
Adım 2 - Kaggle Ortamınızı Kurma
Adım 2.1 - Yeni Kaggle Not Defteri Oluşturma
- Kaggle'da oturum açın.
- Yeni bir Kaggle Not Defteri oluşturun.
- Elbette defterin ismi istenildiği gibi değiştirilebilir. Bu kılavuz
xls-r-300m-chilean-spanish-asr
dizüstü bilgisayar adını kullanır.
Adım 2.2 - WandB API Anahtarınızı Ayarlama
WandB API anahtarınızı güvenli bir şekilde saklamak için bir Kaggle Sırrı kullanılacaktır.
- Kaggle Notebook ana menüsünde Eklentiler'e tıklayın.
- Açılır menüden Gizli'yi seçin.
- Etiket alanına
WANDB_API_KEY
etiketini girin ve değer için WandB API anahtarınızı girin. -
WANDB_API_KEY
etiket alanının solundaki Eklendi onay kutusunun işaretli olduğundan emin olun. - Bitti'yi tıklayın.
Adım 2.3 – Eğitim Veri Kümelerini Ekleme
Şili İspanyolcası Konuşma Veri Seti, Kaggle'a 2 farklı veri seti olarak yüklendi:
Bu veri kümelerinin her ikisini de Kaggle Not Defterinize ekleyin.
Adım 3 - İnce Ayar Not Defterini Oluşturma
Aşağıdaki 32 alt adım, ince ayar not defterinin 32 hücresinin her birini sırayla oluşturur.
Adım 3.1 - HÜCRE 1: Paketlerin Kurulumu
İnce ayar 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
- İlk satır
torchaudio
paketini en son sürüme yükseltir.torchaudio
ses dosyalarını yüklemek ve ses verilerini yeniden örneklemek için kullanılacaktır. - İkinci satır, daha sonra kullanılacak HuggingFace
Datasets
kütüphanesiload_metric
yöntemini kullanmak için gerekli olanjiwer
paketini yükler.
Adım 3.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 wandb from kaggle_secrets import UserSecretsClient import math import re import numpy as np import pandas as pd import torch import torchaudio import json from typing import Any, Dict, List, Optional, Union from dataclasses import dataclass from datasets import Dataset, load_metric, load_dataset, Audio from transformers import Wav2Vec2CTCTokenizer from transformers import Wav2Vec2FeatureExtractor from transformers import Wav2Vec2Processor from transformers import Wav2Vec2ForCTC from transformers import TrainingArguments from transformers import Trainer
- Muhtemelen bu paketlerin çoğuna zaten aşinasınızdır. Sonraki hücreler oluşturuldukça defterdeki kullanımları açıklanacaktır.
- HuggingFace
transformers
kütüphanesinin ve ilgiliWav2Vec2*
sınıflarının ince ayar için kullanılan işlevselliğin omurgasını sağladığını belirtmekte fayda var.
Adım 3.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")
- Daha önce de belirtildiği gibi WER, modelin değerlendirme/bekleme verileri üzerindeki performansını ölçmek için kullanılacaktır.
Adım 3.4 - HÜCRE 4: WandB'de oturum açma
Dördüncü hücre, Adım 2.2'de belirlenen WANDB_API_KEY
sırrınızı alır. Dördüncü hücreyi şu şekilde ayarlayın:
### CELL 4: Login to WandB ### user_secrets = UserSecretsClient() wandb_api_key = user_secrets.get_secret("WANDB_API_KEY") wandb.login(key = wandb_api_key)
- API anahtarı, Kaggle Notebook'u, eğitim çalıştırma verilerinin WandB'ye gönderileceği şekilde yapılandırmak için kullanılır.
Adım 3.5 - HÜCRE 5: Sabitleri Ayarlama
Beşinci hücre, not defterinin tamamında kullanılacak sabitleri ayarlar. Beşinci hücreyi şu şekilde ayarlayın:
### CELL 5: Constants ### # Training data TRAINING_DATA_PATH_MALE = "/kaggle/input/google-spanish-speakers-chile-male/" TRAINING_DATA_PATH_FEMALE = "/kaggle/input/google-spanish-speakers-chile-female/" EXT = ".wav" NUM_LOAD_FROM_EACH_SET = 1600 # Vocabulary VOCAB_FILE_PATH = "/kaggle/working/" SPECIAL_CHARS = r"[\d\,\-\;\!\¡\?\¿\।\'\'\"\–\'\:\/\.\“\”\৷\…\‚\॥\\]" # Sampling rates ORIG_SAMPLING_RATE = 48000 TGT_SAMPLING_RATE = 16000 # Training/validation data split SPLIT_PCT = 0.10 # Model parameters MODEL = "facebook/wav2vec2-xls-r-300m" USE_SAFETENSORS = False # Training arguments OUTPUT_DIR_PATH = "/kaggle/working/xls-r-300m-chilean-spanish-asr" TRAIN_BATCH_SIZE = 18 EVAL_BATCH_SIZE = 10 TRAIN_EPOCHS = 30 SAVE_STEPS = 3200 EVAL_STEPS = 100 LOGGING_STEPS = 100 LEARNING_RATE = 1e-4 WARMUP_STEPS = 800
- Dizüstü bilgisayar bu hücrede akla gelebilecek her sabiti ortaya çıkarmıyor. Sabitlerle temsil edilebilecek bazı değerler satır içi bırakılmıştır.
- Yukarıdaki sabitlerin çoğunun kullanımı apaçık olmalıdır. Olmayanlar için kullanımları aşağıdaki alt adımlarda açıklanacaktır.
Adım 3.6 - HÜCRE 6: Dizin Dosyalarını Okumak, Metni Temizlemek ve Kelime Dağarcığı Oluşturmak için Yardımcı Yöntemler
Altıncı hücre, veri kümesi indeks dosyalarını okumak (yukarıdaki Eğitim Veri Kümesi alt bölümüne bakın) ve aynı zamanda transkripsiyon metnini temizlemek ve sözcük dağarcığı oluşturmak için faydalı yöntemleri tanımlar. Altıncı hücreyi şu şekilde ayarlayın:
### CELL 6: Utility methods for reading index files, cleaning text, and creating vocabulary ### 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 truncate_training_dataset(dataset: list) -> list: if type(NUM_LOAD_FROM_EACH_SET) == str and "all" == NUM_LOAD_FROM_EACH_SET.lower(): return else: return dataset[:NUM_LOAD_FROM_EACH_SET] def clean_text(text: str) -> str: cleaned_text = re.sub(SPECIAL_CHARS, "", text) cleaned_text = cleaned_text.lower() return cleaned_text def create_vocab(data): vocab_list = [] for index in range(len(data)): text = data[index][1] words = text.split(" ") for word in words: chars = list(word) for char in chars: if char not in vocab_list: vocab_list.append(char) return vocab_list
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"] ... ]
-
truncate_training_dataset
yöntemi , Adım 3.5'te ayarlananNUM_LOAD_FROM_EACH_SET
sabitini kullanarak bir liste dizin dosyası verilerini keser. ÖzellikleNUM_LOAD_FROM_EACH_SET
sabiti, her veri kümesinden yüklenmesi gereken ses örneklerinin sayısını belirtmek için kullanılır. Bu kılavuzun amaçları doğrultusunda, sayı1600
olarak ayarlanmıştır, bu da sonuçta toplam3200
ses örneğinin yükleneceği anlamına gelir. Tüm örnekleri yüklemek içinNUM_LOAD_FROM_EACH_SET
all
dize değerine ayarlayın. -
clean_text
yöntemi , Adım 3.5'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. -
create_vocab
yöntemi, temiz metin transkripsiyonlarından bir kelime dağarcığı oluşturur. Basitçe, temizlenmiş metin transkripsiyonları kümesindeki tüm benzersiz karakterleri çıkarır. Oluşturulan kelime dağarcığının bir örneğini Adım 3.14'te göreceksiniz.
Adım 3.7 - HÜCRE 7: Ses Verilerini Yüklemek ve Yeniden Örneklemek için Yardımcı Yöntemler
Yedinci hücre, ses verilerini yüklemek ve yeniden örneklemek için torchaudio
kullanan yardımcı program yöntemlerini tanımlar. Yedinci 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 3.5'tekiORIG_SAMPLING_RATE
sabiti tarafından yakalanır. -
resample
yöntemi, ses verilerini48000
ila16000
örnekleme oranından alt örneklemek için kullanılır. wav2vec2,16000
Hz'de örneklenen ses üzerinde önceden eğitilmiştir. Buna göre, ince ayar için kullanılan herhangi bir sesin aynı örnekleme hızına sahip olması gerekir. Bu durumda ses örneklerinin48000
Hz'den16000
Hz'ye altörneklenmesi gerekir.16000
Hz, Adım 3.5'tekiTGT_SAMPLING_RATE
sabiti tarafından yakalanır.
Adım 3.8 - HÜCRE 8: Eğitim İçin Veri Hazırlamaya Yönelik Faydalı Yöntemler
Sekizinci hücre, ses ve transkripsiyon verilerini işleyen yardımcı program yöntemlerini tanımlar. Sekizinci hücreyi şu şekilde ayarlayın:
### CELL 8: Utility methods to prepare input data for training ### def process_speech_audio(speech_array, sampling_rate): input_values = processor(speech_array, sampling_rate = sampling_rate).input_values return input_values[0] def process_target_text(target_text): with processor.as_target_processor(): encoding = processor(target_text).input_ids return encoding
-
process_speech_audio
yöntemi, sağlanan bir eğitim örneğinden giriş değerlerini döndürür. -
process_target_text
yöntemi, her metin transkripsiyonunu bir etiket listesi, yani sözlükteki karakterlere atıfta bulunan indekslerin bir listesi olarak kodlar. Adım 3.15'te örnek bir kodlama göreceksiniz.
Adım 3.9 - HÜCRE 9: Word Hata Oranını Hesaplamak için Yardımcı Yöntem
Dokuzuncu hücre, son faydalı yöntem hücresidir ve bir referans transkripsiyonu ile tahmin edilen bir transkripsiyon arasındaki Kelime Hata Oranını hesaplama yöntemini içerir. Dokuzuncu hücreyi şu şekilde ayarlayın:
### CELL 9: Utility method to calculate Word Error Rate def compute_wer(pred): pred_logits = pred.predictions pred_ids = np.argmax(pred_logits, axis = -1) pred.label_ids[pred.label_ids == -100] = processor.tokenizer.pad_token_id pred_str = processor.batch_decode(pred_ids) label_str = processor.batch_decode(pred.label_ids, group_tokens = False) wer = wer_metric.compute(predictions = pred_str, references = label_str) return {"wer": wer}
Adım 3.10 - HÜCRE 10: Eğitim Verilerinin Okunması
Onuncu hücre, Adım 3.6'da 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 eğitim veri indeksi dosyalarını okur. Onuncu hücreyi şu şekilde ayarlayın:
### CELL 10: Read training data ### training_samples_male_cl = read_index_file_data(TRAINING_DATA_PATH_MALE, "line_index.tsv") training_samples_female_cl = read_index_file_data(TRAINING_DATA_PATH_FEMALE, "line_index.tsv")
- Görüldüğü gibi eğitim verileri bu noktada cinsiyete özel iki liste halinde yönetiliyor. Veriler, kesme sonrasında Adım 3.12'de birleştirilecektir.
Adım 3.11 - HÜCRE 11: Eğitim Verilerinin Kesilmesi
On birinci hücre, Adım 3.6'da tanımlanan truncate_training_dataset
yöntemini kullanarak eğitim veri listelerini kısaltır. Onbirinci hücreyi şu şekilde ayarlayın:
### CELL 11: Truncate training data ### training_samples_male_cl = truncate_training_dataset(training_samples_male_cl) training_samples_female_cl = truncate_training_dataset(training_samples_female_cl)
- Bir hatırlatma olarak, Adım 3.5'te ayarlanan
NUM_LOAD_FROM_EACH_SET
sabiti, her veri kümesinden saklanacak örneklerin miktarını tanımlar. Bu kılavuzda toplam3200
örnek için sabit1600
olarak ayarlanmıştır.
Adım 3.12 - HÜCRE 12: Eğitim Örnekleri Verilerinin Birleştirilmesi
On ikinci hücre, kısaltılmış eğitim veri listelerini birleştirir. On ikinci hücreyi şu şekilde ayarlayın:
### CELL 12: Combine training samples data ### all_training_samples = training_samples_male_cl + training_samples_female_cl
Adım 3.13 - HÜCRE 13: Transkripsiyon Testinin Temizlenmesi
On üçüncü hücre, her bir eğitim veri örneği üzerinde yinelenir ve Adım 3.6'da tanımlanan clean_text
yöntemini kullanarak ilgili transkripsiyon metnini temizler. On üçüncü hücreyi şu şekilde ayarlayın:
for index in range(len(all_training_samples)): all_training_samples[index][1] = clean_text(all_training_samples[index][1])
Adım 3.14 - HÜCRE 14: Kelime Dağarcığı Oluşturma
On dördüncü hücre, önceki adımdaki temizlenmiş transkripsiyonları ve Adım 3.6'da tanımlanan create_vocab
yöntemini kullanarak bir sözcük dağarcığı oluşturur. On dördüncü hücreyi şu şekilde ayarlayın:
### CELL 14: Create vocabulary ### vocab_list = create_vocab(all_training_samples) vocab_dict = {v: i for i, v in enumerate(vocab_list)}
Kelime hazinesi, anahtar olarak karakterlerin ve değer olarak kelime dizinlerinin bulunduğu bir sözlük olarak depolanır.
Aşağıdaki çıktıyı üretmesi gereken
vocab_dict
yazdırabilirsiniz:
{'l': 0, 'a': 1, 'v': 2, 'i': 3, 'g': 4, 'e': 5, 'n': 6, 'c': 7, 'd': 8, 't': 9, 'u': 10, 'r': 11, 'j': 12, 's': 13, 'o': 14, 'h': 15, 'm': 16, 'q': 17, 'b': 18, 'p': 19, 'y': 20, 'f': 21, 'z': 22, 'á': 23, 'ú': 24, 'í': 25, 'ó': 26, 'é': 27, 'ñ': 28, 'x': 29, 'k': 30, 'w': 31, 'ü': 32}
Adım 3.15 - HÜCRE 15: Kelime Dağarcığına Kelime Sınırlayıcı Ekleme
On beşinci hücre, sözcük sınırlayıcı karakterini ekler |
kelime dağarcığına. On beşinci hücreyi şu şekilde ayarlayın:
### CELL 15: Add word delimiter to vocabulary ### vocab_dict["|"] = len(vocab_dict)
Kelime sınırlayıcı karakteri, metin transkripsiyonlarını bir etiket listesi olarak belirtirken kullanılır. Özellikle bir kelimenin sonunu tanımlamak için kullanılır ve Adım 3.17'de görüleceği gibi
Wav2Vec2CTCTokenizer
sınıfını başlatırken kullanılır.Örneğin, aşağıdaki liste Adım 3.14'teki sözcükleri kullanarak
no te entiendo nada
kodlamaz:
# Encoded text [6, 14, 33, 9, 5, 33, 5, 6, 9, 3, 5, 6, 8, 14, 33, 6, 1, 8, 1] # Vocabulary {'l': 0, 'a': 1, 'v': 2, 'i': 3, 'g': 4, 'e': 5, 'n': 6, 'c': 7, 'd': 8, 't': 9, 'u': 10, 'r': 11, 'j': 12, 's': 13, 'o': 14, 'h': 15, 'm': 16, 'q': 17, 'b': 18, 'p': 19, 'y': 20, 'f': 21, 'z': 22, 'á': 23, 'ú': 24, 'í': 25, 'ó': 26, 'é': 27, 'ñ': 28, 'x': 29, 'k': 30, 'w': 31, 'ü': 32, '|': 33}
- Doğal olarak ortaya çıkabilecek bir soru şudur: "Kelime sınırlayıcı karakterini tanımlamak neden gereklidir?" Örneğin, yazılı İngilizce ve İspanyolcada kelimelerin sonları boşluklarla işaretlenmiştir, dolayısıyla boşluk karakterini kelime sınırlayıcı olarak kullanmak basit bir mesele olmalıdır. İngilizce ve İspanyolcanın binlerce dil arasında yalnızca iki dil olduğunu unutmayın; ve tüm yazılı diller sözcük sınırlarını işaretlemek için boşluk kullanmaz.
Adım 3.16 - HÜCRE 16: Kelime Bilgilerini Dışa Aktarma
On altıncı hücre, kelimeleri bir dosyaya aktarır. On altıncı hücreyi şu şekilde ayarlayın:
### CELL 16: Export vocabulary ### with open(VOCAB_FILE_PATH + "vocab.json", "w", encoding = "utf8") as vocab_file: json.dump(vocab_dict, vocab_file)
- Kelime dosyası bir sonraki adım olan Adım 3.17'de
Wav2Vec2CTCTokenizer
sınıfını başlatmak için kullanılacaktır.
Adım 3.17 - HÜCRE 17: Tokenizer'ı Başlatın
On yedinci hücre, Wav2Vec2CTCTokenizer
örneğini başlatır. On yedinci hücreyi şu şekilde ayarlayın:
### CELL 17: Initialize tokenizer ### tokenizer = Wav2Vec2CTCTokenizer( VOCAB_FILE_PATH + "vocab.json", unk_token = "[UNK]", pad_token = "[PAD]", word_delimiter_token = "|", replace_word_delimiter_char = " " )
Belirteç, metin transkripsiyonlarını kodlamak ve bir etiket listesinin kodunu tekrar metne dönüştürmek için kullanılır.
tokenizer
,unk_token
atanmış[UNK]
vepad_token
atanmış[PAD]
ile başlatıldığını unutmayın; ilki, metin transkripsiyonlarında bilinmeyen belirteçleri temsil etmek için kullanılırken, ikincisi, farklı uzunluklarda transkripsiyon grupları oluştururken transkripsiyonları doldurmak için kullanılır. Bu iki değer tokenizer tarafından sözlüğe eklenecektir.Belirteç oluşturucunun bu adımda başlatılması aynı zamanda kelime dağarcığına sırasıyla cümlelerin başlangıcını ve sonunu ayırmak için kullanılan
<s>
ve/</s>
olmak üzere iki ek belirteç ekleyecektir.|
Adım 3.15'te karakter sözlüğüne eklememize uygun olarak kelimelerin sonunu belirlemek için boru sembolünün kullanılacağını yansıtmak üzere bu adımda açıkçaword_delimiter_token
atanır.|
sembol,word_delimiter_token
için varsayılan değerdir. Dolayısıyla bunun açıkça belirlenmesine gerek yoktu, ancak açıklık sağlamak adına böyle yapıldı.word_delimiter_token
olduğu gibi,replace_word_delimiter_char
açıkça tek bir boşluk atanmıştır ve bu da dikey çizgi simgesinin|
metin transkripsiyonlarındaki boşluk karakterlerini değiştirmek için kullanılacaktır. Boş alan,replace_word_delimiter_char
için varsayılan değerdir. Dolayısıyla bunun da açıkça belirlenmesine gerek yoktu, ancak açıklık sağlamak adına böyle yapıldı.tokenizer
üzerindeget_vocab()
yöntemini çağırarak tokenizer sözlüğünün tamamını yazdırabilirsiniz.
vocab = tokenizer.get_vocab() print(vocab) # Output: {'e': 0, 's': 1, 'u': 2, 'n': 3, 'v': 4, 'i': 5, 'a': 6, 'j': 7, 'd': 8, 'g': 9, 'o': 10, 'c': 11, 'l': 12, 'm': 13, 't': 14, 'y': 15, 'p': 16, 'r': 17, 'h': 18, 'ñ': 19, 'ó': 20, 'b': 21, 'q': 22, 'f': 23, 'ú': 24, 'z': 25, 'é': 26, 'í': 27, 'x': 28, 'á': 29, 'w': 30, 'k': 31, 'ü': 32, '|': 33, '<s>': 34, '</s>': 35, '[UNK]': 36, '[PAD]': 37}
Adım 3.18 - HÜCRE 18: Özellik Çıkarıcının Başlatılması
On sekizinci hücre Wav2Vec2FeatureExtractor
örneğini başlatır. On sekizinci hücreyi şu şekilde ayarlayın:
### CELL 18: Initialize feature extractor ### feature_extractor = Wav2Vec2FeatureExtractor( feature_size = 1, sampling_rate = 16000, padding_value = 0.0, do_normalize = True, return_attention_mask = True )
- Özellik çıkarıcı, bu kullanım durumunda elbette ses verileri olan giriş verilerinden özellikler çıkarmak için kullanılır. Her bir eğitim veri örneği için ses verilerini Adım 3.20'de yükleyeceksiniz.
-
Wav2Vec2FeatureExtractor
başlatıcısına iletilen parametre değerlerinin tümü, varsayılan olarakFalse
olanreturn_attention_mask
haricindeki varsayılan değerlerdir. Açıklık sağlamak amacıyla varsayılan değerler gösterilir/geçirilir. -
feature_size
parametresi, giriş özelliklerinin (yani ses verisi özelliklerinin) boyut boyutunu belirtir. Bu parametrenin varsayılan değeri1
. -
sampling_rate
, özellik çıkarıcıya ses verilerinin dijitalleştirilmesi gereken örnekleme hızını söyler. Adım 3.7'de tartışıldığı gibi wav2vec2,16000
Hz'de örneklenen ses üzerinde önceden eğitilir ve dolayısıyla bu parametre için varsayılan değer16000
. -
padding_value
parametresi, farklı uzunluklardaki ses örneklerini toplu olarak işlerken gerektiği gibi ses verilerini doldururken kullanılan değeri belirtir. Varsayılan değer0.0
. -
do_normalize
giriş verilerinin standart normal dağılıma dönüştürülmesi gerekip gerekmediğini belirtmek için kullanılır. Varsayılan değerTrue
.Wav2Vec2FeatureExtractor
sınıfı belgelerinde "[normalleştirmenin] bazı modellerin performansını önemli ölçüde artırmaya yardımcı olabileceği" belirtiliyor. -
return_attention_mask
parametreleri dikkat maskesinin geçirilip geçirilmeyeceğini belirtir. Bu kullanım durumu için değerTrue
olarak ayarlanmıştır.
Adım 3.19 - HÜCRE 19: İşlemcinin Başlatılması
On dokuzuncu hücre Wav2Vec2Processor
örneğini başlatır. On dokuzuncu hücreyi şu şekilde ayarlayın:
### CELL 19: Initialize processor ### processor = Wav2Vec2Processor(feature_extractor = feature_extractor, tokenizer = tokenizer)
Wav2Vec2Processor
sınıfı, sırasıyla Adım 3.17 ve Adım 3.18'dekitokenizer
vefeature_extractor
tek bir işlemcide birleştirir.İşlemci yapılandırmasının,
Wav2Vec2Processor
sınıfı örneğindesave_pretrained
yöntemi çağrılarak kaydedilebileceğini unutmayın.
processor.save_pretrained(OUTPUT_DIR_PATH)
Adım 3.20 - HÜCRE 20: Ses Verilerini Yükleme
Yirminci hücre, all_training_samples
listesinde belirtilen her ses dosyasını yükler. Yirminci hücreyi şu şekilde ayarlayın:
### CELL 20: Load audio data ### all_input_data = [] for index in range(len(all_training_samples)): speech_array, sampling_rate = read_audio_data(all_training_samples[index][0]) all_input_data.append({ "input_values": speech_array, "labels": all_training_samples[index][1] })
- Ses verileri bir
torch.Tensor
olarak döndürülür.Tensor veall_input_data
bir sözlük listesi olarak saklanır. Her sözlük, sesin metin transkripsiyonunun yanı sıra belirli bir örnek için ses verilerini içerir. -
read_audio_data
yönteminin ses verilerinin örnekleme hızını da döndürdüğünü unutmayın. Bu kullanım durumunda tüm ses dosyaları için örnekleme hızının48000
Hz olduğunu bildiğimizden, bu adımda örnekleme hızı göz ardı edilir.
Adım 3.21 - HÜCRE 21: all_input_data
Pandas DataFrame'e dönüştürme
Yirmi birinci hücre, verilerin işlenmesini kolaylaştırmak için all_input_data
listesini bir Pandas DataFrame'e dönüştürür. Yirmi birinci hücreyi şu şekilde ayarlayın:
### CELL 21: Convert audio training data list to Pandas DataFrame ### all_input_data_df = pd.DataFrame(data = all_input_data)
Adım 3.22 - HÜCRE 22: Ses Verilerinin ve Metin Transkripsiyonlarının İşlenmesi
Yirmi saniye hücresi, her ses verisi örneğinden özellikler çıkarmak ve her metin transkripsiyonunu bir etiket listesi olarak kodlamak için Adım 3.19'da başlatılan processor
kullanır. Yirmi ikinci hücreyi şu şekilde ayarlayın:
### CELL 22: Process audio data and text transcriptions ### all_input_data_df["input_values"] = all_input_data_df["input_values"].apply(lambda x: process_speech_audio(resample(x), 16000)) all_input_data_df["labels"] = all_input_data_df["labels"].apply(lambda x: process_target_text(x))
Adım 3.23 - HÜCRE 23: Giriş Verilerini Eğitim ve Doğrulama Veri Kümelerine Bölme
Yirmi üçüncü hücre , Adım 3.5'teki SPLIT_PCT
sabitini kullanarak all_input_data_df
DataFrame'i eğitim ve değerlendirme (doğrulama) veri kümelerine böler. Yirmi üçüncü hücreyi şu şekilde ayarlayın:
### CELL 23: Split input data into training and validation datasets ### split = math.floor((NUM_LOAD_FROM_EACH_SET * 2) * SPLIT_PCT) valid_data_df = all_input_data_df.iloc[-split:] train_data_df = all_input_data_df.iloc[:-split]
- Bu kılavuzda
SPLIT_PCT
değeri0.10
; bu, tüm girdi verilerinin %10'unun değerlendirme için tutulacağı ve verilerin %90'ının eğitim/ince ayar için kullanılacağı anlamına gelir. - Toplam 3.200 eğitim örneği olduğundan, 320 örnek değerlendirme için kullanılacak, geri kalan 2.880 örnek ise modele ince ayar yapmak için kullanılacaktır.
Adım 3.24 - HÜCRE 24: Eğitim ve Doğrulama Veri Kümelerini Dataset
Nesnelerine Dönüştürme
Yirmi dördüncü hücre, train_data_df
ve valid_data_df
DataFrames'ı Dataset
nesnelerine dönüştürür. Yirmi dördüncü hücreyi şu şekilde ayarlayın:
### CELL 24: Convert training and validation datasets to Dataset objects ### train_data = Dataset.from_pandas(train_data_df) valid_data = Dataset.from_pandas(valid_data_df)
Dataset
nesneleri, Adım 3.30'da göreceğiniz gibi HuggingFaceTrainer
sınıfı örnekleri tarafından tüketilir.Bu nesneler, veri kümesinin yanı sıra veri kümesiyle ilgili meta verileri de içerir.
Her iki
Dataset
nesnesinin meta verilerini görüntülemek içintrain_data
vevalid_data
yazdırabilirsiniz.
print(train_data) print(valid_data) # Output: Dataset({ features: ['input_values', 'labels'], num_rows: 2880 }) Dataset({ features: ['input_values', 'labels'], num_rows: 320 })
Adım 3.25 - HÜCRE 25: Önceden Eğitimli Modelin Başlatılması
Yirmi beşinci hücre, önceden eğitilmiş XLS-R (0,3) modelini başlatır. Yirmi beşinci hücreyi şu şekilde ayarlayın:
### CELL 25: Initialize pretrained model ### model = Wav2Vec2ForCTC.from_pretrained( MODEL, ctc_loss_reduction = "mean", pad_token_id = processor.tokenizer.pad_token_id, vocab_size = len(processor.tokenizer) )
-
Wav2Vec2ForCTC
çağrılanfrom_pretrained
yöntemi, belirtilen model için önceden eğitilmiş ağırlıkları yüklemek istediğimizi belirtir. -
MODEL
sabiti Adım 3.5'te belirtildi ve XLS-R (0.3) modelini yansıtacak şekildefacebook/wav2vec2-xls-r-300m
olarak ayarlandı. -
ctc_loss_reduction
parametresi, Bağlantıcı Zamansal Sınıflandırma ("CTC") kayıp fonksiyonunun çıkışına uygulanacak azaltma türünü belirtir. CTC kaybı, sürekli bir giriş (bu durumda ses verileri) ile bir hedef dizi (bu durumda metin transkripsiyonları) arasındaki kaybı hesaplamak için kullanılır. Değerinmean
olarak ayarlanmasıyla, bir grup girdinin çıktı kayıpları hedef uzunluklara bölünecektir. Daha sonra partinin ortalaması hesaplanır ve azalma, kayıp değerlerine uygulanır. -
pad_token_id
toplu işlem sırasında dolgu için kullanılacak belirteci belirtir. Adım 3.17'de belirteç başlatılırken[PAD]
kimlik ayarına ayarlanır. -
vocab_size
parametresi modelin kelime dağarcığı boyutunu tanımlar. Bu, Adım 3.17'de tokenizer'ın başlatılmasından sonraki sözcük boyutudur ve ağın ileri kısmındaki çıktı katmanı düğümlerinin sayısını yansıtır.
Adım 3.26 - HÜCRE 26: Dondurucu Özellik Çıkarıcı Ağırlıkları
Yirmi altıncı hücre, özellik çıkarıcının önceden eğitilmiş ağırlıklarını dondurur. Yirmi altıncı hücreyi şu şekilde ayarlayın:
### CELL 26: Freeze feature extractor ### model.freeze_feature_extractor()
Adım 3.27 - HÜCRE 27: Eğitim Argümanlarının Belirlenmesi
Yirmi yedinci hücre, Trainer
örneğine aktarılacak eğitim argümanlarını başlatır. Yirmi yedinci hücreyi şu şekilde ayarlayın:
### CELL 27: Set training arguments ### training_args = TrainingArguments( output_dir = OUTPUT_DIR_PATH, save_safetensors = False, group_by_length = True, per_device_train_batch_size = TRAIN_BATCH_SIZE, per_device_eval_batch_size = EVAL_BATCH_SIZE, num_train_epochs = TRAIN_EPOCHS, gradient_checkpointing = True, evaluation_strategy = "steps", save_strategy = "steps", logging_strategy = "steps", eval_steps = EVAL_STEPS, save_steps = SAVE_STEPS, logging_steps = LOGGING_STEPS, learning_rate = LEARNING_RATE, warmup_steps = WARMUP_STEPS )
-
TrainingArguments
sınıfı 100'den fazla parametreyi kabul eder. -
False
durumundasave_safetensors
parametresi, ince ayarı yapılan modelin,safetensors
formatını kullanmak yerine birpickle
dosyasına kaydedilmesi gerektiğini belirtir. -
True
olduğundagroup_by_length
parametresi, yaklaşık olarak aynı uzunluktaki örneklerin birlikte gruplanması gerektiğini belirtir. Bu, dolguyu en aza indirir ve eğitim verimliliğini artırır. -
per_device_train_batch_size
eğitim mini grubu başına örnek sayısını ayarlar. Bu parametre , Adım 3.5'te atananTRAIN_BATCH_SIZE
sabiti aracılığıyla18
ayarlanır. Bu, çağ başına 160 adım anlamına gelir. -
per_device_eval_batch_size
değerlendirme (bekletme) mini grubu başına örnek sayısını ayarlar. Bu parametre , Adım 3.5'te atananEVAL_BATCH_SIZE
sabiti aracılığıyla10
ayarlanır. -
num_train_epochs
eğitim dönemlerinin sayısını ayarlar. Bu parametre, Adım 3.5'te atananTRAIN_EPOCHS
sabiti aracılığıyla30
ayarlanır. Bu, eğitim sırasında toplam 4.800 adım anlamına gelir. -
True
olduğundagradient_checkpointing
parametresi, degrade hesaplamalarını kontrol ederek bellekten tasarruf etmenize yardımcı olur, ancak geriye doğru geçişlerin daha yavaş olmasına neden olur. -
evaluation_strategy
parametresi,steps
ayarlandığında, eğitim sırasında değerlendirmenineval_steps
parametresi tarafından belirtilen bir aralıkta gerçekleştirileceği ve günlüğe kaydedileceği anlamına gelir. -
logging_strategy
parametresi,steps
ayarlandığında, eğitim çalıştırma istatistiklerininlogging_steps
parametresi tarafından belirtilen bir aralıkta günlüğe kaydedileceği anlamına gelir. -
save_strategy
parametresi,steps
ayarlandığında, ince ayarı yapılmış modelin bir kontrol noktasınınsave_steps
parametresi tarafından belirtilen bir aralıkta kaydedileceği anlamına gelir. -
eval_steps
uzatma verilerinin değerlendirilmesi arasındaki adım sayısını ayarlar. Bu parametre, Adım 3.5'te atananEVAL_STEPS
sabiti aracılığıyla100
ayarlanır. -
save_steps
ince ayarı yapılmış modelin bir kontrol noktasının kaydedileceği adım sayısını ayarlar. Bu parametre, Adım 3.5'te atananSAVE_STEPS
sabiti aracılığıyla3200
ayarlanır. -
logging_steps
eğitim çalıştırma istatistiklerinin günlükleri arasındaki adım sayısını ayarlar. Bu parametre, Adım 3.5'te atananLOGGING_STEPS
sabiti aracılığıyla100
ayarlanır. -
learning_rate
parametresi başlangıç öğrenme oranını ayarlar. Bu parametre, Adım 3.5'te atananLEARNING_RATE
sabiti aracılığıyla1e-4
ayarlanır. -
warmup_steps
parametresi, öğrenme oranını 0'danlearning_rate
tarafından ayarlanan değere doğrusal olarak ısıtmak için gereken adım sayısını ayarlar. Bu parametre, Adım 3.5'te atananWARMUP_STEPS
sabiti aracılığıyla800
ayarlanır.
Adım 3.28 - HÜCRE 28: Veri Harmanlayıcı Mantığını Tanımlama
Yirmi sekizinci hücre, giriş ve hedef dizilerinin dinamik olarak doldurulması mantığını tanımlar. Yirmi sekizinci hücreyi şu şekilde ayarlayın:
### CELL 28: Define data collator logic ### @dataclass class DataCollatorCTCWithPadding: processor: Wav2Vec2Processor padding: Union[bool, str] = True max_length: Optional[int] = None max_length_labels: Optional[int] = None pad_to_multiple_of: Optional[int] = None pad_to_multiple_of_labels: Optional[int] = None def __call__(self, features: List[Dict[str, Union[List[int], torch.Tensor]]]) -> Dict[str, torch.Tensor]: input_features = [{"input_values": feature["input_values"]} for feature in features] label_features = [{"input_ids": feature["labels"]} for feature in features] batch = self.processor.pad( input_features, padding = self.padding, max_length = self.max_length, pad_to_multiple_of = self.pad_to_multiple_of, return_tensors = "pt", ) with self.processor.as_target_processor(): labels_batch = self.processor.pad( label_features, padding = self.padding, max_length = self.max_length_labels, pad_to_multiple_of = self.pad_to_multiple_of_labels, return_tensors = "pt", ) labels = labels_batch["input_ids"].masked_fill(labels_batch.attention_mask.ne(1), -100) batch["labels"] = labels return batch
- Eğitim ve değerlendirme giriş etiketi çiftleri, mini gruplar halinde Adım 3.30'da anlık olarak başlatılacak olan
Trainer
örneğine iletilir. Giriş dizileri ve etiket dizilerinin uzunluğu her mini grupta farklılık gösterdiğinden, bazı dizilerin hepsinin aynı uzunlukta olması için doldurulması gerekir. -
DataCollatorCTCWithPadding
sınıfı, mini toplu verileri dinamik olarak doldurur.padding
parametresiTrue
olarak ayarlandığında, daha kısa ses girişi özelliği dizilerinin ve etiket dizilerinin bir mini gruptaki en uzun diziyle aynı uzunluğa sahip olması gerektiğini belirtir. - Ses girişi özellikleri, Adım 3.18'de özellik çıkarıcı başlatılırken ayarlanan
0.0
değeriyle doldurulur. - Etiket girişleri ilk olarak Adım 3.17'de belirteç başlatılırken ayarlanan doldurma değeriyle doldurulur. Bu değerler
-100
ile değiştirilir, böylece WER metriği hesaplanırken bu etiketler dikkate alınmaz.
Adım 3.29 - HÜCRE 29: Veri Harmanlayıcı Örneğinin Başlatılması
Yirmi dokuzuncu hücre, önceki adımda tanımlanan veri derleyicinin bir örneğini başlatır. Yirmi dokuzuncu hücreyi şu şekilde ayarlayın:
### CELL 29: Initialize instance of data collator ### data_collator = DataCollatorCTCWithPadding(processor = processor, padding = True)
Adım 3.30 - HÜCRE 30: Eğitmenin Başlatılması
Otuzuncu hücre Trainer
sınıfının bir örneğini başlatır. Otuzuncu hücreyi şu şekilde ayarlayın:
### CELL 30: Initialize trainer ### trainer = Trainer( model = model, data_collator = data_collator, args = training_args, compute_metrics = compute_wer, train_dataset = train_data, eval_dataset = valid_data, tokenizer = processor.feature_extractor )
- Görüldüğü gibi
Trainer
sınıfı şu şekilde başlatılıyor:- Önceden eğitilmiş
model
Adım 3.25'te başlatıldı. - Veri harmanlayıcı Adım 3.29'da başlatıldı.
- Adım 3.27'de başlatılan eğitim argümanları.
- Adım 3.9'da tanımlanan WER değerlendirme yöntemi.
- Adım 3.24'teki
train_data
Dataset
nesnesi. - Adım 3.24'teki
valid_data
Dataset
nesnesi.
- Önceden eğitilmiş
-
tokenizer
parametresi,processor.feature_extractor
atanır ve girişleri her mini grubun maksimum uzunluktaki girişine otomatik olarak doldurmak içindata_collator
ile birlikte çalışır.
Adım 3.31 - HÜCRE 31: Modelin İnce Ayarının Yapılması
Otuz birinci hücre, modele ince ayar yapmak için Trainer
sınıfı örneğindeki train
yöntemini çağırır. Otuz birinci hücreyi şu şekilde ayarlayın:
### CELL 31: Finetune the model ### trainer.train()
Adım 3.32 - HÜCRE 32: İnce ayarlı modeli kaydedin
Otuz saniyelik hücre son defter hücresidir. Trainer
örneğinde save_model
yöntemini çağırarak ince ayarlı modeli kaydeder. Otuz ikinci hücreyi şu şekilde ayarlayın:
### CELL 32: Save the finetuned model ### trainer.save_model(OUTPUT_DIR_PATH)
Adım 4 - Modeli Eğitmek ve Kaydetmek
Adım 4.1 – Modelin Eğitimi
Artık dizüstü bilgisayarın tüm hücreleri oluşturulduğuna göre ince ayar yapmaya başlamanın zamanı geldi.
Kaggle Notebook'u NVIDIA GPU P100 hızlandırıcıyla çalışacak şekilde ayarlayın.
Not defterini Kaggle'a teslim et.
WandB hesabınızda oturum açarak ve ilgili koşuyu bularak egzersiz koşusu verilerini izleyin.
NVIDIA GPU P100 hızlandırıcıyı kullanarak 30'dan fazla dönemi kapsayan eğitim ~5 saat sürmelidir. Uzatma verilerindeki WER, eğitimin sonunda ~0,15'e düşmelidir. Bu son teknoloji ürünü bir sonuç olmasa da, ince ayarlı model birçok uygulama için hâlâ yeterince kullanışlıdır.
Adım 4.2 - Modeli Kaydetme
İnce ayarı yapılan model , Adım 3.5'te belirtilen OUTPUT_DIR_PATH
sabiti tarafından belirtilen Kaggle dizinine çıkarılacaktır. Model çıktısı aşağıdaki dosyaları içermelidir:
pytorch_model.bin config.json preprocessor_config.json vocab.json training_args.bin
Bu dosyalar yerel olarak indirilebilir. Ayrıca model dosyalarını kullanarak yeni bir Kaggle Modeli oluşturabilirsiniz. Kaggle Modeli, ince ayarlı model üzerinde çıkarım yapmak için yardımcı çıkarım kılavuzuyla birlikte kullanılacaktır.
- Kaggle hesabınıza giriş yapın. Modeller > Yeni Model öğesine tıklayın.
- Model Başlığı alanına ince ayarlı modeliniz için bir başlık ekleyin.
- Model Oluştur'a tıklayın.
- Model detay sayfasına git seçeneğine tıklayın.
- Model Varyasyonları altında Yeni varyasyon ekle'ye tıklayın.
- Çerçeve seçme menüsünden Transformers'ı seçin.
- Yeni varyasyon ekle'yi tıklayın.
- İnce ayarlı model dosyalarınızı Veri Yükleme penceresine sürükleyip bırakın. Alternatif olarak, bir dosya gezgini penceresi açmak ve ince ayarlı model dosyalarınızı seçmek için Dosyalara Gözat düğmesini tıklayın.
- Dosyalar Kaggle'a yüklendikten sonra Kaggle Modelini oluşturmak için Oluştur'a tıklayın.
Çözüm
wav2vec2 XLS-R'ye ince ayar yaptığınız için tebrikler! Modelin istediğiniz diğer dillerde ince ayarını yapmak için bu genel adımları kullanabileceğinizi unutmayın. Bu kılavuzda oluşturulan ince ayarlı model üzerinde çıkarım yapmak oldukça basittir. Çıkarım adımları bu kılavuza ayrı bir yardımcı kılavuzda özetlenecektir. Tamamlayıcı kılavuzu bulmak için lütfen HackerNoon kullanıcı adımı arayın.