# Xử lý dữ liệu âm thanh

Hướng dẫn này trình bày các phương pháp cụ thể để xử lý các bộ dữ liệu âm thanh. Học cách:

- Tái lấy mẫu tần số lấy mẫu.
- Sử dụng [map()](/docs/datasets/v5.2.0/vi/package_reference/main_classes#datasets.Dataset.map) với các bộ dữ liệu âm thanh.

Để tìm hiểu cách xử lý bất kỳ loại tập dữ liệu nào, hãy xem hướng dẫn quy trình chung.

## Cast

Hàm [cast_column()](/docs/datasets/v5.2.0/vi/package_reference/main_classes#datasets.Dataset.cast_column) được dùng để chuyển đổi một cột sang một đặc trưng khác để giải mã. Khi bạn sử dụng hàm này với đặc trưng [Audio](/docs/datasets/v5.2.0/vi/package_reference/main_classes#datasets.Audio), bạn có thể lấy lại mẫu (resample) tần số lấy mẫu:

```py
>>> from datasets import load_dataset, Audio

>>> dataset = load_dataset("PolyAI/minds14", "en-US", split="train")
>>> dataset = dataset.cast_column("audio", Audio(sampling_rate=16000))
```

Các tệp âm thanh được giải mã và lấy mẫu lại theo thời gian thực, vì vậy lần tiếp theo bạn truy cập một ví dụ, tệp âm thanh sẽ được lấy mẫu lại ở 16kHz:

```py
>>> audio = dataset[0]["audio"]
<datasets.features._torchcodec.AudioDecoder object at 0x11642b6a0>
>>> audio = audio_dataset[0]["audio"]
>>> samples = audio.get_all_samples()
>>> samples.data
tensor([[ 0.0000e+00,  0.0000e+00,  0.0000e+00,  ...,  2.3447e-06,
         -1.9127e-04, -5.3330e-05]]
>>> samples.sample_rate
16000
```

  <img
    class="block dark:hidden"
    src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/datasets/resample.gif"
  />
  <img
    class="hidden dark:block"
    src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/datasets/resample-dark.gif"
  />

## Bản đồ

Hàm [map()](/docs/datasets/v5.2.0/vi/package_reference/main_classes#datasets.Dataset.map) giúp tiền xử lý toàn bộ bộ dữ liệu của bạn một lúc. Tùy thuộc vào loại mô hình bạn đang làm việc, bạn sẽ cần tải một [feature extractor](https://huggingface.co/docs/transformers/model_doc/auto#transformers.AutoFeatureExtractor) hoặc một [processor](https://huggingface.co/docs/transformers/model_doc/auto#transformers.AutoProcessor).

- Đối với các mô hình nhận dạng giọng nói được huấn luyện trước, hãy tải một bộ trích xuất đặc trưng và một bộ phân từ, sau đó kết hợp chúng trong một `processor`:

  ```py
  >>> from transformers import AutoTokenizer, AutoFeatureExtractor, AutoProcessor

  >>> model_checkpoint = "facebook/wav2vec2-large-xlsr-53"
  # after defining a vocab.json file you can instantiate a tokenizer object:
  >>> tokenizer = AutoTokenizer("./vocab.json", unk_token="[UNK]", pad_token="[PAD]", word_delimiter_token="|")
  >>> feature_extractor = AutoFeatureExtractor.from_pretrained(model_checkpoint)
  >>> processor = AutoProcessor.from_pretrained(feature_extractor=feature_extractor, tokenizer=tokenizer)
  ```

- Đối với các mô hình nhận dạng giọng nói đã được tinh chỉnh, bạn chỉ cần tải một `processor`:

  ```py
  >>> from transformers import AutoProcessor

  >>> processor = AutoProcessor.from_pretrained("facebook/wav2vec2-base-960h")
  ```

Khi bạn sử dụng [map()](/docs/datasets/v5.2.0/vi/package_reference/main_classes#datasets.Dataset.map) với hàm tiền xử lý của mình, hãy bao gồm cột `audio` để đảm bảo bạn thực sự đang lấy lại mẫu dữ liệu âm thanh:

```py
>>> def prepare_dataset(batch):
...     audio = batch["audio"]
...     batch["input_values"] = processor(audio.get_all_samples().data, sampling_rate=audio["sampling_rate"]).input_values[0]
...     batch["input_length"] = len(batch["input_values"])
...     with processor.as_target_processor():
...         batch["labels"] = processor(batch["sentence"]).input_ids
...     return batch
>>> dataset = dataset.map(prepare_dataset, remove_columns=dataset.column_names)
```

