paint-brush
Wav2vec2 ile Çalışmak Bölüm 1: Otomatik Konuşma Tanıma için XLS-R'ye İnce Ayar Yapmakile@pictureinthenoise
2,245 okumalar
2,245 okumalar

Wav2vec2 ile Çalışmak Bölüm 1: Otomatik Konuşma Tanıma için XLS-R'ye İnce Ayar Yapmak

ile Picture in the Noise29m2024/05/04
Read on Terminal Reader

Çok uzun; Okumak

Bu kılavuz, otomatik konuşma tanıma ("ASR") için Meta AI'nın wav2vec2 XLS-R modeline ince ayar yapma adımlarını açıklamaktadır. Kılavuz, modele ince ayar yapmak için kullanılabilecek bir Kaggle Not Defterinin nasıl oluşturulacağına ilişkin adım adım talimatlar içerir. Model, Şili İspanyol veri kümesi üzerinde eğitilmiştir.
featured image - Wav2vec2 ile Çalışmak Bölüm 1: Otomatik Konuşma Tanıma için XLS-R'ye İnce Ayar Yapmak
Picture in the Noise HackerNoon profile picture
0-item
1-item

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:


  1. 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.
  2. 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.
  3. 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:


  1. Eğitim veri seti.
  2. 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.


  1. www.wandb.com adresinden WandB'de oturum açın.
  2. www.wandb.ai/authorize adresine gidin.
  3. 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


  1. Kaggle'da oturum açın.
  2. Yeni bir Kaggle Not Defteri oluşturun.
  3. 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.


  1. Kaggle Notebook ana menüsünde Eklentiler'e tıklayın.
  2. Açılır menüden Gizli'yi seçin.
  3. Etiket alanına WANDB_API_KEY etiketini girin ve değer için WandB API anahtarınızı girin.
  4. WANDB_API_KEY etiket alanının solundaki Eklendi onay kutusunun işaretli olduğundan emin olun.
  5. 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üphanesi load_metric yöntemini kullanmak için gerekli olan jiwer 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 ilgili Wav2Vec2* 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 ayarlanan NUM_LOAD_FROM_EACH_SET sabitini kullanarak bir liste dizin dosyası verilerini keser. Özellikle NUM_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 toplam 3200 ses örneğinin yükleneceği anlamına gelir. Tüm örnekleri yüklemek için NUM_LOAD_FROM_EACH_SET all dize değerine ayarlayın.
  • clean_text yöntemi , Adım 3.5'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.
  • 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 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 3.5'teki ORIG_SAMPLING_RATE sabiti tarafından yakalanır.
  • resample yöntemi, ses verilerini 48000 ila 16000 ö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 örneklerinin 48000 Hz'den 16000 Hz'ye altörneklenmesi gerekir. 16000 Hz, Adım 3.5'teki TGT_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 toplam 3200 örnek için sabit 1600 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] ve pad_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ça word_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 üzerinde get_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 olarak False olan return_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ğeri 1 .
  • 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ğer 16000 .
  • 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ğer 0.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ğer True . 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ğer True 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'deki tokenizer ve feature_extractor tek bir işlemcide birleştirir.

  • İşlemci yapılandırmasının, Wav2Vec2Processor sınıfı örneğinde save_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 ve all_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ın 48000 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ğeri 0.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 HuggingFace Trainer 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çin train_data ve valid_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ılan from_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 şekilde facebook/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ğerin mean 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 durumunda save_safetensors parametresi, ince ayarı yapılan modelin, safetensors formatını kullanmak yerine bir pickle dosyasına kaydedilmesi gerektiğini belirtir.
  • True olduğunda group_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 atanan TRAIN_BATCH_SIZE sabiti aracılığıyla 18 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 atanan EVAL_BATCH_SIZE sabiti aracılığıyla 10 ayarlanır.
  • num_train_epochs eğitim dönemlerinin sayısını ayarlar. Bu parametre, Adım 3.5'te atanan TRAIN_EPOCHS sabiti aracılığıyla 30 ayarlanır. Bu, eğitim sırasında toplam 4.800 adım anlamına gelir.
  • True olduğunda gradient_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ğerlendirmenin eval_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 istatistiklerinin logging_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ın save_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 atanan EVAL_STEPS sabiti aracılığıyla 100 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 atanan SAVE_STEPS sabiti aracılığıyla 3200 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 atanan LOGGING_STEPS sabiti aracılığıyla 100 ayarlanır.
  • learning_rate parametresi başlangıç öğrenme oranını ayarlar. Bu parametre, Adım 3.5'te atanan LEARNING_RATE sabiti aracılığıyla 1e-4 ayarlanır.
  • warmup_steps parametresi, öğrenme oranını 0'dan learning_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 atanan WARMUP_STEPS sabiti aracılığıyla 800 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 parametresi True 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.
  • tokenizer parametresi, processor.feature_extractor atanır ve girişleri her mini grubun maksimum uzunluktaki girişine otomatik olarak doldurmak için data_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.


  1. Kaggle Notebook'u NVIDIA GPU P100 hızlandırıcıyla çalışacak şekilde ayarlayın.

  2. Not defterini Kaggle'a teslim et.

  3. 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.


  1. Kaggle hesabınıza giriş yapın. Modeller > Yeni Model öğesine tıklayın.
  2. Model Başlığı alanına ince ayarlı modeliniz için bir başlık ekleyin.
  3. Model Oluştur'a tıklayın.
  4. Model detay sayfasına git seçeneğine tıklayın.
  5. Model Varyasyonları altında Yeni varyasyon ekle'ye tıklayın.
  6. Çerçeve seçme menüsünden Transformers'ı seçin.
  7. Yeni varyasyon ekle'yi tıklayın.
  8. İ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.
  9. 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.