Transformers documentation

Trình trích xuất đặc trưng

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

Trình trích xuất đặc trưng

Feature extractors tiền xử lý dữ liệu âm thanh thành định dạng phù hợp cho một model nhất định. Nó nhận tín hiệu âm thanh thô và chuyển đổi nó thành tensor có thể đưa vào model. Hình dạng của tensor phụ thuộc vào model, nhưng feature extractor sẽ tiền xử lý dữ liệu âm thanh một cách chính xác cho bạn dựa trên model bạn đang sử dụng. Feature extractors cũng bao gồm các phương thức cho padding, truncation và resampling.

Gọi from_pretrained() để tải feature extractor và cấu hình preprocessor từ Hub của Hugging Face hoặc thư mục cục bộ. Feature extractor và cấu hình preprocessor được lưu trong tệp preprocessor_config.json.

Truyền tín hiệu âm thanh, thường được lưu trữ trong array, vào feature extractor và đặt tham số sampling_rate bằng tần số lấy mẫu của mô hình âm thanh được huấn luyện trước. Điều quan trọng là tần số lấy mẫu của dữ liệu âm thanh phải khớp với tần số lấy mẫu của dữ liệu mà mô hình âm thanh được huấn luyện trước đã được huấn luyện trên đó.

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 trả về một đầu vào, input_values, sẵn sàng để mô hình sử dụng.

Hướng dẫn này sẽ giúp bạn tìm hiểu các lớp feature extractor và cách tiền xử lý dữ liệu âm thanh.

Các lớp trích xuất đặc trưng

Feature extractor của Transformers kế thừa từ lớp cơ sở SequenceFeatureExtractor, vốn là lớp con của FeatureExtractionMixin.

Có hai cách để bạn nạp một feature extractor, đó là AutoFeatureExtractor và một lớp feature extractor dành riêng cho mô hình.

AutoFeatureExtractor
feature extractor dành riêng cho model

API AutoClass tự động nạp bộ trích xuất đặc trưng đúng cho một mô hình nhất định.

Sử dụng from_pretrained() để tải bộ trích xuất đặc trưng.

from transformers import AutoFeatureExtractor

feature_extractor = AutoFeatureExtractor.from_pretrained("openai/whisper-tiny")

Tiền xử lý

Feature extractor kỳ vọng đầu vào dưới dạng tensor PyTorch có một hình dạng nhất định. Hình dạng đầu vào chính xác có thể thay đổi tùy thuộc vào mô hình âm thanh cụ thể mà bạn đang sử dụng.

Ví dụ, Whisper yêu cầu input_features phải là một tensor có hình dạng (batch_size, feature_size, sequence_length) trong khi Wav2Vec2 yêu cầu input_values phải là một tensor có hình dạng (batch_size, sequence_length).

Bộ trích xuất đặc tính tạo ra hình dạng đầu vào chính xác cho bất kỳ mô hình âm thanh nào bạn đang sử dụng.

Feature extractor cũng thiết lập tần số lấy mẫu (số giá trị tín hiệu âm thanh được lấy mỗi giây) của các tệp âm thanh. Tần số lấy mẫu của dữ liệu âm thanh của bạn phải khớp với tần số lấy mẫu của bộ dữ liệu mà mô hình được huấn luyện trước đã được huấn luyện trên đó. Giá trị này thường được cung cấp trong model card.

Tải một bộ dữ liệu và bộ trích xuất đặc trưng bằng 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")

Xem ví dụ đầu tiên từ tập dữ liệu và truy cập cột audio chứa array, tín hiệu âm thanh thô.

dataset[0]["audio"]["array"]
array([ 0.        ,  0.00024414, -0.00024414, ..., -0.00024414,
        0.        ,  0.        ])

Feature extractor tiền xử lý array thành định dạng đầu vào mong đợi cho một mô hình âm thanh cụ thể. Sử dụng tham số sampling_rate để thiết lập tần số lấy mẫu phù hợp.

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)]}

Đệm

Việc các độ dài chuỗi âm thanh khác nhau là một vấn đề vì Transformers yêu cầu tất cả các chuỗi phải có cùng độ dài để có thể được xử lý theo lô (batch). Các chuỗi có độ dài không đồng đều không thể được xử lý theo lô.

dataset[0]["audio"]["array"].shape
(86699,)

dataset[1]["audio"]["array"].shape
(53248,)

Padding thêm một token padding đặc biệt để đảm bảo tất cả các chuỗi có cùng độ dài. Feature extractor thêm 0 - được hiểu là im lặng - vào array để padding. Đặt padding=True để padding các chuỗi đến độ dài của chuỗi dài nhất trong 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,)

Cắt ngắn

Mô hình chỉ có thể xử lý các chuỗi có độ dài tối đa nhất định trước khi gặp lỗi.

Truncation là chiến lược để loại bỏ các token thừa khỏi một chuỗi nhằm đảm bảo chuỗi không vượt quá độ dài tối đa. Đặt truncation=True để cắt chuỗi xuống độ dài được chỉ định trong tham số 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,)

Lấy mẫu lại

Thư viện Datasets cũng có thể lấy mẫu lại dữ liệu âm thanh để khớp với tần số lấy mẫu mong đợi của mô hình âm thanh. Phương pháp này lấy mẫu lại dữ liệu âm thanh ngay khi chúng được nạp, có thể nhanh hơn so với việc lấy mẫu lại toàn bộ bộ dữ liệu tại chỗ.

Bộ dữ liệu âm thanh bạn đang làm việc có tần số lấy mẫu là 8kHz trong khi mô hình được huấn luyện trước kỳ vọng 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}

Gọi cast_column trên cột audio để lấy mẫu lại với tần số lấy mẫu 16kHz.

dataset = dataset.cast_column("audio", Audio(sampling_rate=16000))

Khi bạn tải mẫu dữ liệu, nó sẽ được lấy mẫu lại ở 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