基礎組件——Datasets
datasets基本使用
導入包
from datasets import *
加載數(shù)據(jù)
datasets = load_dataset("madao33/new-title-chinese")
datasets
DatasetDict({
train: Dataset({
features: ['title', 'content'],
num_rows: 5850
})
validation: Dataset({
features: ['title', 'content'],
num_rows: 1679
})
})
加載數(shù)據(jù)集合集中的某一項子集
boolq_dataset = load_dataset("super_glue", "boolq")
boolq_dataset
DatasetDict({
train: Dataset({
features: ['question', 'passage', 'idx', 'label'],
num_rows: 9427
})
validation: Dataset({
features: ['question', 'passage', 'idx', 'label'],
num_rows: 3270
})
test: Dataset({
features: ['question', 'passage', 'idx', 'label'],
num_rows: 3245
})
})
按照數(shù)據(jù)集劃分進行加載
dataset = load_dataset("madao33/new-title-chinese", split="train")
dataset
Dataset({
features: ['title', 'content'],
num_rows: 5850
})
dataset = load_dataset("madao33/new-title-chinese", split="train[10:100]")
dataset
Dataset({
features: ['title', 'content'],
num_rows: 90
})
dataset = load_dataset("madao33/new-title-chinese", split="train[:50%]")
dataset
Dataset({
features: ['title', 'content'],
num_rows: 2925
})
dataset = load_dataset("madao33/new-title-chinese", split=["train[:50%]", "train[50%:]"])
dataset
[Dataset({
features: ['title', 'content'],
num_rows: 2925
}),
Dataset({
features: ['title', 'content'],
num_rows: 2925
})]
查看數(shù)據(jù)集
datasets = load_dataset("madao33/new-title-chinese")
datasets
DatasetDict({
train: Dataset({
features: ['title', 'content'],
num_rows: 5850
})
validation: Dataset({
features: ['title', 'content'],
num_rows: 1679
})
})
查看某一個數(shù)據(jù)
datasets["train"][0]
{'title': '望海樓是危險的賭博',
'content': '近期妥善處理)'}
查看某一些數(shù)據(jù)
datasets["train"][:2]
{'title': ['望海樓是危險的賭博'],
'content': ['撒打發(fā)是',
'在推進“雙一流”高校建設進程中']}
查看列名
datasets["train"].column_names
['title', 'content']
查看列屬性
{'title': Value(dtype='string', id=None),
'content': Value(dtype='string', id=None)}
數(shù)據(jù)集劃分
可使用train_test_split
這個函數(shù)
dataset = datasets["train"]
dataset.train_test_split(test_size=0.1) # 按測試集比例為10%劃分
DatasetDict({
train: Dataset({
features: ['title', 'content'],
num_rows: 5265
})
test: Dataset({
features: ['title', 'content'],
num_rows: 585
})
})
對于分類任務,指定標簽字段,然后讓這個數(shù)據(jù)集均衡劃分標簽字段
dataset = boolq_dataset["train"]
dataset.train_test_split(test_size=0.1, stratify_by_column="label") # 分類數(shù)據(jù)集可以按照比例劃分
DatasetDict({
train: Dataset({
features: ['question', 'passage', 'idx', 'label'],
num_rows: 8484
})
test: Dataset({
features: ['question', 'passage', 'idx', 'label'],
num_rows: 943
})
})
數(shù)據(jù)選取與過濾
# 選取
datasets["train"].select([0, 1])
Dataset({
features: ['title', 'content'],
num_rows: 2
})
# 過濾
## 傳入一個lambda函數(shù),讓其只取含有中國的數(shù)據(jù)
filter_dataset = datasets["train"].filter(lambda example: "中國" in example["title"])
filter_dataset["title"][:5]
['世界探尋中國成功秘訣',
'信心來自哪里',
'世界減貧跑出加速度',
'和音矚目歷史交匯點',
'風采感染世界']
數(shù)據(jù)映射
def add_prefix(example):
example["title"] = 'Prefix: ' + example["title"]
return example
prefix_dataset = datasets.map(add_prefix) # 每個title數(shù)據(jù)前面添加了前綴
prefix_dataset["train"][:10]["title"]
['Prefix: 危險的',
'Prefix: 大力推進高校治理能力建設',
'Prefix: 堅持事業(yè)為上選賢任能',
'Prefix: “大朋友”的話兒記心頭',
'Prefix: 用好可持續(xù)發(fā)展這把“金鑰匙”',
'Prefix: 跨越雄關,我們走在大路上',
'Prefix: 脫貧奇跡彰顯政治優(yōu)勢',
'Prefix: 拱衛(wèi)億萬人共同的綠色夢想',
'Prefix: 育人育才',
'Prefix: 凈化網(wǎng)絡語言']
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
def preprocess_function(example, tokenizer=tokenizer):
model_inputs = tokenizer(example["content"], max_length=512, truncation=True)
labels = tokenizer(example["title"], max_length=32, truncation=True)
# label就是title編碼的結(jié)果
model_inputs["labels"] = labels["input_ids"]
return model_inputs
processed_datasets = datasets.map(preprocess_function) # 添加了分類標簽
processed_datasets
DatasetDict({
train: Dataset({
features: ['title', 'content', 'input_ids', 'token_type_ids', 'attention_mask', 'labels'],
num_rows: 5850
})
validation: Dataset({
features: ['title', 'content', 'input_ids', 'token_type_ids', 'attention_mask', 'labels'],
num_rows: 1679
})
})
processed_datasets = datasets.map(preprocess_function, batched=True) # 使用批處理
processed_datasets
DatasetDict({
train: Dataset({
features: ['title', 'content', 'input_ids', 'token_type_ids', 'attention_mask', 'labels'],
num_rows: 5850
})
validation: Dataset({
features: ['title', 'content', 'input_ids', 'token_type_ids', 'attention_mask', 'labels'],
num_rows: 1679
})
})
去除某一字段
processed_datasets = datasets.map(preprocess_function, batched=True, remove_columns=datasets["train"].column_names)
processed_datasets
DatasetDict({
train: Dataset({
features: ['input_ids', 'token_type_ids', 'attention_mask', 'labels'],
num_rows: 5850
})
validation: Dataset({
features: ['input_ids', 'token_type_ids', 'attention_mask', 'labels'],
num_rows: 1679
})
})
保存與加載
# 保存
processed_datasets.save_to_disk("./processed_data")
# 加載
processed_datasets = load_from_disk("./processed_data")
加載本地數(shù)據(jù)集
# 加載本地csv文件
dataset = load_dataset("csv", data_files="./ChnSentiCorp_htl_all.csv", split="train")
dataset
Dataset({
features: ['label', 'review'],
num_rows: 7766
})
dataset = Dataset.from_csv("./ChnSentiCorp_htl_all.csv")
dataset
Dataset({
features: ['label', 'review'],
num_rows: 7766
})
加載文件夾內(nèi)全部文件作為數(shù)據(jù)集
# 使用data_dir加載全部文件夾內(nèi)文件
dataset = load_dataset("csv", data_dir="./all_data/", split='train')
dataset
Dataset({
features: ['label', 'review'],
num_rows: 23298
})
# 使用data_files加載文件夾內(nèi)指定文件
dataset = load_dataset("csv", data_files=["./all_data/ChnSentiCorp_htl_all.csv", "./all_data/ChnSentiCorp_htl_all copy.csv"], split='train')
dataset
Dataset({
features: ['label', 'review'],
num_rows: 15532
})
通過其他方式讀取數(shù)據(jù),再將其轉(zhuǎn)換成datasets
import pandas as pd
data = pd.read_csv("./ChnSentiCorp_htl_all.csv")
data.head()
文章來源:http://www.zghlxwxcb.cn/news/detail-809173.html
dataset = Dataset.from_pandas(data)
dataset
Dataset({
features: ['label', 'review'],
num_rows: 7766
})
# List格式的數(shù)據(jù)需要內(nèi)嵌{},明確數(shù)據(jù)字段
data = [{"text": "abc"}, {"text": "def"}]
# data = ["abc", "def"]
Dataset.from_list(data)
Dataset({
features: ['text'],
num_rows: 2
})
通過自定義加載腳本加載數(shù)據(jù)集文章來源地址http://www.zghlxwxcb.cn/news/detail-809173.html
load_dataset("json", data_files="./cmrc2018_trial.json", field="data")
DatasetDict({
train: Dataset({
features: ['title', 'paragraphs', 'id'],
num_rows: 256
})
})
dataset = load_dataset("./load_script.py", split="train")
dataset
dataset[0]
{'id': 'TRIAL_800_QUERY_0',
'context': '基于《跑跑卡丁車》與《泡泡堂》上所開發(fā)的游戲,由韓國Nexon開發(fā)與發(fā)行。中國大陸由盛大游戲運營,這是Nexon時隔6年再次授予盛大網(wǎng)絡其游戲運營權。臺灣由游戲橘子運營。玩家以水槍、小槍、錘子或是水炸彈泡封敵人(玩家或NPC),即為一泡封,將水泡擊破為一踢爆。若水泡未在時間內(nèi)踢爆,則會從水泡中釋放或被隊友救援(即為一救援)。每次泡封會減少生命數(shù),生命數(shù)耗完即算為踢爆。重生者在一定時間內(nèi)為無敵狀態(tài),以踢爆數(shù)計分較多者獲勝,規(guī)則因模式而有差異。以2V2、4V4隨機配對的方式,玩家可依勝場數(shù)爬牌位(依序為原石、銅牌、銀牌、金牌、白金、鉆石、大師) ,可選擇經(jīng)典、熱血、狙擊等模式進行游戲。若游戲中離,則4分鐘內(nèi)不得進行配對(每次中離+4分鐘)。開放時間為暑假或寒假期間內(nèi)不定期開放,8人經(jīng)典模式隨機配對,采計分方式,活動時間內(nèi)分數(shù)越多,終了時可依該名次獲得獎勵。',
'question': '生命數(shù)耗完即算為什么?',
'answers': {'text': ['踢爆'], 'answer_start': [127]}}
到了這里,關于【HuggingFace Transformer庫學習筆記】基礎組件學習:Datasets的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!