Datasets documentation
Xây dựng và nạp
Xây dựng và nạp
Gần như mọi quy trình học sâu đều bắt đầu bằng việc tải một tập dữ liệu, khiến đây trở thành một trong những bước quan trọng nhất. Với 🤗 Datasets, có hơn 900 tập dữ liệu sẵn sàng để giúp bạn bắt đầu với tác vụ NLP của mình. Tất cả những gì bạn cần làm là gọi: load_dataset() để thực hiện bước đầu tiên. Hàm này thực sự là một cỗ máy đa năng theo mọi nghĩa vì nó xây dựng và tải mọi tập dữ liệu mà bạn sử dụng.
ELI5: load_dataset
Hãy bắt đầu với một giải thích đơn giản như đang nói với trẻ 5 tuổi.
Một tập dữ liệu là một thư mục chứa:
- Một số tệp dữ liệu ở định dạng phổ biến (JSON, CSV, Parquet, văn bản, v.v.)
- Một thẻ dữ liệu có tên
README.mdchứa tài liệu về bộ dữ liệu cũng như một phần đầu YAML để định nghĩa các thẻ và cấu hình của bộ dữ liệu
Hàm load_dataset() lấy bộ dữ liệu được yêu cầu từ cục bộ hoặc từ Hugging Face Hub. Hub là kho lưu trữ tập trung nơi lưu trữ tất cả các bộ dữ liệu và mô hình của Hugging Face.
Nếu tập dữ liệu chỉ chứa các tệp dữ liệu, thì load_dataset() sẽ tự động suy luận cách nạp các tệp dữ liệu dựa trên phần mở rộng của chúng (json, csv, parquet, tsfile, txt, v.v.). Bên trong, 🤗 Datasets sẽ sử dụng một DatasetBuilder phù hợp dựa trên định dạng tệp dữ liệu. Trong 🤗 Datasets, có một builder cho mỗi định dạng tệp dữ liệu:
- datasets.packaged_modules.text.Text cho văn bản
- datasets.packaged_modules.csv.Csv cho CSV và TSV
- datasets.packaged_modules.json.Json cho JSON và JSONL
- datasets.packaged_modules.parquet.Parquet cho Parquet
- datasets.packaged_modules.arrow.Arrow cho Arrow (định dạng tệp streaming)
- datasets.packaged_modules.sql.Sql cho các cơ sở dữ liệu SQL
- datasets.packaged_modules.tsfile.TsFile cho TsFile (dữ liệu chuỗi thời gian)
- datasets.packaged_modules.imagefolder.ImageFolder cho các thư mục ảnh
- datasets.packaged_modules.audiofolder.AudioFolder cho các thư mục âm thanh
Đọc phần Share để tìm hiểu thêm về cách chia sẻ một bộ dữ liệu.
🤗 Datasets tải các tệp dữ liệu từ URL gốc, tạo bộ dữ liệu và lưu trữ nó trong bảng Arrow trên ổ đĩa của bạn. Nếu bạn đã tải bộ dữ liệu trước đó, 🤗 Datasets sẽ tải lại nó từ bộ nhớ đệm để bạn không phải tải xuống lại.
Giờ đây, khi bạn đã có cái nhìn tổng quan về cách các bộ dữ liệu được xây dựng, hãy cùng tìm hiểu chi tiết hơn về cơ chế hoạt động của toàn bộ quy trình này.
Xây dựng bộ dữ liệu
Khi bạn tải một tập dữ liệu lần đầu tiên, 🤗 Datasets sẽ lấy tệp dữ liệu thô và xây dựng nó thành một bảng gồm các hàng và các cột có kiểu dữ liệu. Có hai lớp chính chịu trách nhiệm xây dựng một tập dữ liệu: BuilderConfig và DatasetBuilder.

BuilderConfig
BuilderConfig là lớp cấu hình của DatasetBuilder. BuilderConfig chứa các thuộc tính cơ bản sau về một tập dữ liệu:
| Thuộc tính | Mô tả |
|---|---|
name | Tên ngắn của bộ dữ liệu. |
version | Định danh phiên bản của bộ dữ liệu. |
data_dir | Lưu trữ đường dẫn đến thư mục cục bộ chứa các tệp dữ liệu. |
data_files | Lưu trữ đường dẫn đến các tệp dữ liệu cục bộ. |
description | Mô tả của bộ dữ liệu. |
Nếu bạn muốn thêm các thuộc tính bổ sung vào bộ dữ liệu của mình, chẳng hạn như nhãn lớp, bạn có thể kế thừa lớp BuilderConfig cơ sở. Có hai cách để gán giá trị cho các thuộc tính của một lớp BuilderConfig hoặc lớp kế thừa:
Cung cấp một danh sách các instance của lớp BuilderConfig (hoặc lớp con) được định nghĩa trước trong thuộc tính
DatasetBuilder.BUILDER_CONFIGS()của datasets.Khi bạn gọi load_dataset(), các đối số từ khóa không đặc thù cho phương thức sẽ được dùng để thiết lập các thuộc tính liên quan của lớp BuilderConfig. Điều này sẽ ghi đè lên các thuộc tính được định nghĩa trước nếu một cấu hình cụ thể đã được chọn.
Bạn cũng có thể đặt DatasetBuilder.BUILDER_CONFIG_CLASS thành bất kỳ lớp con tùy chỉnh nào của BuilderConfig.
DatasetBuilder
DatasetBuilder truy cập tất cả các thuộc tính bên trong BuilderConfig để xây dựng bộ dữ liệu thực tế.

Có ba phương thức chính trong DatasetBuilder:
DatasetBuilder._info()chịu trách nhiệm định nghĩa các thuộc tính của dataset. Khi bạn gọidataset.info, 🤗 Datasets sẽ trả về thông tin được lưu trữ tại đây. Tương tự, Features cũng được chỉ định ở đây. Hãy nhớ rằng Features giống như bộ khung của dataset. Nó cung cấp tên và kiểu của từng cột.DatasetBuilder._split_generatortải hoặc lấy các tệp dữ liệu được yêu cầu, tổ chức chúng thành các split và định nghĩa các đối số cụ thể cho quá trình tạo. Phương thức này có một DownloadManager để tải tệp hoặc lấy chúng từ hệ thống tệp cục bộ của bạn. Bên trong DownloadManager, có phương thức DownloadManager.download_and_extract() nhận một từ điển chứa các URL trỏ đến các tệp dữ liệu gốc, và tải các tệp được yêu cầu. Các đầu vào được chấp nhận bao gồm: một URL hoặc đường dẫn duy nhất, hoặc một danh sách/từ điển các URL hoặc đường dẫn. Mọi tệp nén như các archive TAR, GZIP và ZIP sẽ được giải nén tự động.Sau khi các tệp được tải xuống, SplitGenerator sẽ tổ chức chúng thành các split. SplitGenerator chứa tên của split và các đối số từ khóa được truyền vào phương thức
DatasetBuilder._generate_examples. Các đối số từ khóa có thể cụ thể cho từng split và thường bao gồm ít nhất đường dẫn cục bộ đến các tệp dữ liệu của mỗi split.DatasetBuilder._generate_examplesđọc và phân tích các tệp dữ liệu cho một split. Sau đó, nó yield các ví dụ dataset theo định dạng được chỉ định trongfeaturestừDatasetBuilder._info(). Đầu vào củaDatasetBuilder._generate_examplesthực chất làfilepathđược cung cấp trong các tham số keyword của phương thức cuối cùng.Bộ dữ liệu được tạo bằng một trình tạo Python, không nạp toàn bộ dữ liệu vào bộ nhớ. Do đó, trình tạo có thể xử lý các bộ dữ liệu lớn. Tuy nhiên, trước khi các mẫu được tạo ra được ghi vào tệp bộ dữ liệu trên đĩa, chúng được lưu trong bộ đệm
ArrowWriter. Điều này có nghĩa là các mẫu được tạo ra được ghi theo từng lô. Nếu các mẫu trong bộ dữ liệu của bạn tiêu tốn nhiều bộ nhớ (hình ảnh hoặc video), hãy đảm bảo chỉ định một giá trị thấp cho thuộc tínhDEFAULT_WRITER_BATCH_SIZEtrong DatasetBuilder. Chúng tôi khuyến nghị không vượt quá kích thước 200 MB.
Duy trì tính toàn vẹn
Để đảm bảo một tập dữ liệu hoàn chỉnh, load_dataset() sẽ thực hiện một loạt các bài kiểm tra trên các tệp đã tải xuống để chắc chắn rằng mọi thứ đều có mặt. Nhờ đó, bạn sẽ không gặp bất kỳ bất ngờ nào khi tập dữ liệu bạn yêu cầu không được tạo ra như mong đợi. load_dataset() xác minh:
- Số lượng phần chia trong
DatasetDictđược tạo ra. - Số lượng mẫu trong mỗi phần chia của
DatasetDictđược tạo ra. - Danh sách các tệp đã tải xuống.
- Các mã kiểm tra SHA256 của các tệp đã tải xuống (mặc định là tắt).
Nếu bộ dữ liệu không vượt qua các bước xác minh, rất có thể tác giả của bộ dữ liệu đã thực hiện một số thay đổi trong các tệp dữ liệu.
Trong trường hợp này, một lỗi sẽ được phát ra để cảnh báo rằng tập dữ liệu đã thay đổi.
Để bỏ qua lỗi, cần chỉ định verification_mode="no_checks" trong load_dataset().
Mỗi khi bạn thấy một lỗi xác minh, hãy thoải mái mở một cuộc thảo luận hoặc pull request trong tab “Community” của tập dữ liệu tương ứng, để các kiểm tra tính toàn vẹn cho tập dữ liệu đó được cập nhật.
Bảo mật
Các kho dữ liệu trên Hub được quét để tìm phần mềm độc hại, xem thêm thông tin tại đây.
Update on GitHub