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")
# 图像增强
# ...目前没有用到,可以之后再看