Transformers documentation
Ekstraktor fitur
Ekstraktor fitur
Feature extractor memproses pra data audio ke dalam format yang benar untuk model tertentu. Komponen ini mengambil sinyal audio mentah dan mengubahnya menjadi tensor yang dapat diberikan ke model. Bentuk tensor bergantung pada model, tetapi feature extractor akan memproses pra data audio dengan benar untuk Anda berdasarkan model yang Anda gunakan. Feature extractor juga mencakup metode untuk padding, truncation, dan resampling.
Panggil from_pretrained() untuk memuat feature extractor dan konfigurasi preprocessor-nya dari Hub Hugging Face atau direktori lokal. Feature extractor dan konfigurasi preprocessor disimpan dalam file preprocessor_config.json.
Lewatkan sinyal audio, yang biasanya disimpan dalam array, ke feature extractor dan atur parameter sampling_rate ke sampling rate model audio pretrained. Penting untuk memastikan sampling rate data audio sesuai dengan sampling rate data yang digunakan untuk melatih model audio pretrained.
from transformers import AutoFeatureExtractor
feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base")
dataset = load_dataset("PolyAI/minds14", name="en-US", split="train")
processed_sample = feature_extractor(dataset[0]["audio"]["array"], sampling_rate=16000)
processed_sample
{'input_values': [array([ 9.4472744e-05, 3.0777880e-03, -2.8888427e-03, ...,
-2.8888427e-03, 9.4472744e-05, 9.4472744e-05], dtype=float32)]}Feature extractor mengembalikan input, input_values, yang siap diproses oleh model.
Panduan ini menjelaskan kelas feature extractor dan cara mempreprocess data audio.
Kelas ekstraktor fitur
Feature extractor pada Transformers mewarisi dari kelas dasar SequenceFeatureExtractor yang merupakan subclass dari FeatureExtractionMixin.
- SequenceFeatureExtractor menyediakan metode untuk pad() urutan hingga panjang tertentu guna menghindari panjang urutan yang tidak seragam.
- FeatureExtractionMixin menyediakan from_pretrained() dan save_pretrained() untuk memuat dan menyimpan feature extractor.
Ada dua cara untuk memuat feature extractor, yaitu AutoFeatureExtractor dan kelas feature extractor yang spesifik untuk model tertentu.
API AutoClass memuat secara otomatis feature extractor yang tepat untuk model tertentu.
Gunakan from_pretrained() untuk memuat feature extractor.
from transformers import AutoFeatureExtractor
feature_extractor = AutoFeatureExtractor.from_pretrained("openai/whisper-tiny")Setiap model audio pretrained memiliki feature extractor terkait yang spesifik untuk memproses data audio dengan benar. Saat Anda memuat feature extractor, konfigurasi feature extractor (ukuran fitur, panjang chunk, dll.) diambil dari preprocessor_config.json.
Feature extractor dapat dimuat langsung dari kelas spesifik modelnya.
from transformers import WhisperFeatureExtractor
feature_extractor = WhisperFeatureExtractor.from_pretrained("openai/whisper-tiny")Pra-pemrosesan
Feature extractor mengharapkan input sebagai tensor PyTorch dengan bentuk tertentu. Bentuk input yang tepat dapat bervariasi tergantung pada model audio spesifik yang Anda gunakan.
Sebagai contoh, Whisper mengharapkan input_features berupa tensor dengan bentuk (batch_size, feature_size, sequence_length) tetapi Wav2Vec2 mengharapkan input_values berupa tensor dengan bentuk (batch_size, sequence_length).
Feature extractor menghasilkan bentuk input yang benar untuk model audio apa pun yang Anda gunakan.
Feature extractor juga mengatur laju sampling (jumlah nilai sinyal audio yang diambil per detik) dari file audio. Laju sampling data audio Anda harus sesuai dengan laju sampling dataset yang digunakan untuk melatih model pretrained. Nilai ini biasanya diberikan di model card.
Muat dataset dan feature extractor dengan from_pretrained().
from datasets import load_dataset, Audio
from transformers import AutoFeatureExtractor
dataset = load_dataset("PolyAI/minds14", name="en-US", split="train")
feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base")Lihat contoh pertama dari dataset dan akses kolom audio yang berisi array, yaitu sinyal audio mentah.
dataset[0]["audio"]["array"]
array([ 0. , 0.00024414, -0.00024414, ..., -0.00024414,
0. , 0. ])Feature extractor memproses array menjadi format input yang diharapkan untuk model audio tertentu. Gunakan parameter sampling_rate untuk mengatur sampling rate yang sesuai.
processed_dataset = feature_extractor(dataset[0]["audio"]["array"], sampling_rate=16000)
processed_dataset
{'input_values': [array([ 9.4472744e-05, 3.0777880e-03, -2.8888427e-03, ...,
-2.8888427e-03, 9.4472744e-05, 9.4472744e-05], dtype=float32)]}Padding
Panjang sekuens audio yang berbeda merupakan masalah karena Transformers mengharapkan semua sekuens memiliki panjang yang sama agar dapat di-batch. Panjang sekuens yang tidak seragam tidak dapat di-batch.
dataset[0]["audio"]["array"].shape
(86699,)
dataset[1]["audio"]["array"].shape
(53248,)Padding menambahkan token padding khusus untuk memastikan semua urutan memiliki panjang yang sama. Feature extractor menambahkan 0 - yang diinterpretasikan sebagai keheningan - ke array untuk melakukan padding. Atur padding=True untuk melakukan padding pada urutan hingga panjang urutan terpanjang dalam batch.
def preprocess_function(examples):
audio_arrays = [x["array"] for x in examples["audio"]]
inputs = feature_extractor(
audio_arrays,
sampling_rate=16000,
padding=True,
)
return inputs
processed_dataset = preprocess_function(dataset[:5])
processed_dataset["input_values"][0].shape
(86699,)
processed_dataset["input_values"][1].shape
(86699,)Pemotongan
Model hanya dapat memproses urutan hingga panjang tertentu sebelum mengalami kegagalan.
Truncation adalah strategi untuk menghapus token berlebih dari sebuah urutan agar tidak melebihi panjang maksimum. Atur truncation=True untuk memotong urutan hingga panjang yang ditentukan oleh parameter max_length.
def preprocess_function(examples):
audio_arrays = [x["array"] for x in examples["audio"]]
inputs = feature_extractor(
audio_arrays,
sampling_rate=16000,
max_length=50000,
truncation=True,
)
return inputs
processed_dataset = preprocess_function(dataset[:5])
processed_dataset["input_values"][0].shape
(50000,)
processed_dataset["input_values"][1].shape
(50000,)Resampling
Perpustakaan Datasets juga dapat melakukan resampling data audio agar sesuai dengan laju sampling yang diharapkan oleh model audio. Metode ini melakukan resampling data audio secara langsung saat dimuat, yang dapat lebih cepat daripada melakukan resampling seluruh dataset secara in-place.
Dataset audio yang sedang Anda kerjakan memiliki laju sampling 8kHz, sedangkan model pretrained mengharapkan 16kHz.
dataset[0]["audio"]
{'path': '/root/.cache/huggingface/datasets/downloads/extracted/f507fdca7f475d961f5bb7093bcc9d544f16f8cab8608e772a2ed4fbeb4d6f50/en-US~JOINT_ACCOUNT/602ba55abb1e6d0fbce92065.wav',
'array': array([ 0. , 0.00024414, -0.00024414, ..., -0.00024414,
0. , 0. ]),
'sampling_rate': 8000}Panggil cast_column pada kolom audio untuk menaikkan laju sampling menjadi 16kHz.
dataset = dataset.cast_column("audio", Audio(sampling_rate=16000))Saat Anda memuat sampel dataset, sampel tersebut kini diresample ke 16kHz.
dataset[0]["audio"]
{'path': '/root/.cache/huggingface/datasets/downloads/extracted/f507fdca7f475d961f5bb7093bcc9d544f16f8cab8608e772a2ed4fbeb4d6f50/en-US~JOINT_ACCOUNT/602ba55abb1e6d0fbce92065.wav',
'array': array([ 1.70562416e-05, 2.18727451e-04, 2.28099874e-04, ...,
3.43842403e-05, -5.96364771e-06, -1.76846661e-05]),
'sampling_rate': 16000}