跳转至

Datasets

使用数据集

查看数据集信息

参考资料:DatasetInfo

  • 查看一些通用信息
from datasets import load_dataset_builder
ds_builder = load_dataset_builder("rotten_tomatoes")

print(ds_builder.info.description)     # 描述
print(ds_builder.info.features)        # 特征(X,y)
print(ds_builder.info.dataset_size)    # 数据集大小
  • 查看一些训练信息
from datasets import get_dataset_split_names
get_dataset_split_names("rotten_tomatoes") # ['train', 'validation', 'test']
  • 查看一些配置信息

部分数据集是有配置信息的,即该数据集下面有一堆数据子集

from datasets import get_dataset_config_names
configs = get_dataset_config_names("PolyAI/minds14")
print(configs)
# ['cs-CZ', 'de-DE', 'en-AU', 'en-GB', 'en-US', 'es-ES', 'fr-FR', 'it-IT', 'ko-KR', 'nl-NL', 'pl-PL', 'pt-PT', 'ru-RU', 'zh-CN', 'all']

读取数据集

from datasets import load_dataset

dataset = load_dataset("rotten_tomatoes")
dataset = load_dataset("rotten_tomatoes", split="train")
print(dataset)

# Dataset({
#     features: ['text', 'label'],
#     num_rows: 8530
# })

mindsFR = load_dataset("PolyAI/minds14", "fr-FR", split="train") 
# 有配置信息的一定要输入配置信息,否则报错

有些数据集非常庞大,可以选择加载部分数据

dataset = load_dataset("food101", split="train[:100]")

部分数据集需要参数来执行脚本:trust_remote_code=True

c4 = load_dataset("c4", "en", split="train", trust_remote_code=True)
get_dataset_config_names("c4", trust_remote_code=True)
get_dataset_split_names("c4", "en", trust_remote_code=True)

处理数据集

  • 索引和切片
dataset[0]["text"] # 前行后列,也可以单独输入行或者单独输入列标签
dataset[3:6] # 行切片
  • 预处理

官方参考文档:数据集预处理

- 对于文本,使用分词器(Tokenizer)将文本转换为一系列标记(tokens),并创建tokens的数字表示,将它们组合成张量。
- 对于语音和音频,使用特征提取器(Feature extractor)从音频波形中提取顺序特征并将其转换为张量。
- 图像输入使用图像处理器(ImageProcessor)将图像转换为张量。
- 多模态输入,使用处理器(Processor)结合了Tokenizer和ImageProcessor或Processor。

(1)音频数据预处理

from datasets import load_dataset, Audio
dataset = load_dataset("PolyAI/minds14", name="en-US", split="train")

# step1: 重采样,查看音频模型信息决定采样量

dataset = dataset.cast_column("audio", Audio(sampling_rate=16_000)) 
dataset[0]["audio"] 
# 每次调用audio列都会自动加载和重新采样音频文件
# {'array': array([ XXX ], dtype=float32),'path': 'XXX.wav','sampling_rate': 16000}

# step2: 特征提取

from transformers import AutoFeatureExtractor
feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base")
# 单条处理
audio_input = [dataset[0]["audio"]["array"]]
feature_extractor(audio_input, sampling_rate=16000)
# 批处理
audio_arrays = [x["array"] for x in examples["audio"]]
inputs = feature_extractor(
    audio_arrays,
    sampling_rate=16000,
    padding=True,
    max_length=100000,
    truncation=True,
)

(2)文本数据预处理

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-cased")

# 自定义数据的单条处理(编码与解码)
encoded_input = tokenizer("Do ...")
# {'input_ids': [...],       # 每个token对应的索引
#  'token_type_ids': [...],  # 存在多个序列时标识一个token属于哪个序列
#  'attention_mask': [...]}  # 是否应该关注一个token
tokenizer.decode(encoded_input["input_ids"]) 
# '[CLS] Do ... [SEP]'

# 自定义数据的批处理
batch_sentences = [
    "But what about second breakfast?",
    "Don't think he knows about second breakfast, Pip.",
    "What about elevensies?",
]
encoded_inputs = tokenizer(batch_sentences, 
                padding=True, truncation=True, return_tensors="pt")

# 数据集预处理
def tokenize_function(examples):
    return tokenizer(examples["text"], padding="max_length", truncation=True)
tokenized_datasets = dataset.map(tokenize_function, batched=True)

(3)图像数据预处理

from transformers import AutoImageProcessor
image_processor = AutoImageProcessor.from_pretrained("google/vit-base-patch16-224")

# 图像增强
# ...目前没有用到,可以之后再看