Transformers documentation

Ekstraktor fitur

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.23.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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.

Ada dua cara untuk memuat feature extractor, yaitu AutoFeatureExtractor dan kelas feature extractor yang spesifik untuk model tertentu.

AutoFeatureExtractor
feature extractor khusus model

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")

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}
Update on GitHub