iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0

今天我們終於要再繼續寫程式了,沿續使用昨天的 poem_sentiment 這個 dataset。

Hugging Face Datasets Library

打開你的Azure Machine Learning 裡 Jupyter Notebook 吧!

  1. 如果沒有裝 Hugging Face Datasets 的 Library 的話,可以用這個指令來裝 pip install datasets
  2. 使用下面的程式碼,可以先來看資料的資訊。用load_dataset_builder 不會把資料下載下來。
from datasets import load_dataset_builder
ds_builder = load_dataset_builder("poem_sentiment")
  1. 接著使用使用下面兩欄程式碼,看資料的描述與feature。
print(ds_builder.info.description)
print(ds_builder.info.features)
  1. 如果覺得資料 OK 的話,就可以下載下來囉!
from datasets import load_dataset
sentiment = load_dataset("poem_sentiment")
  1. 接著看下這個資料長什麼樣
sentiment

會看到下列的資訊

DatasetDict({
    train: Dataset({
        features: ['id', 'verse_text', 'label'],
        num_rows: 892
    })
    validation: Dataset({
        features: ['id', 'verse_text', 'label'],
        num_rows: 105
    })
    test: Dataset({
        features: ['id', 'verse_text', 'label'],
        num_rows: 104
    })
})
  1. 接著我們可以來切資料
train_ds = sentiment["train"]
valid_ds = sentiment["validation"]
test_ds = sentiment["test"]
  1. 我們也可以用這種方式來切資料
dataset_train = load_dataset("rotten_tomatoes", split="train")
  1. 接著可以直接把 dataset 轉成 Pandas
import pandas as pd

sentiment.set_format(type="pandas")

df = sentiment["train"][:]

df.head(10)
  1. 我們可以使用int2str 來把 label 轉成文字。
def label_int2str(row):
	return sentiment["train"].features["label"].int2str(row)

df["label_name"] = df["label"].apply(label_int2str)
df.head(10)
  1. 我們也可以畫出圖片,來看看這個dataset 的 label 分佈。
import matplotlib.pyplot as plt

df["label_name"].value_counts().plot.barh()
plt.title("Poem Classes")
plt.show()
  1. 不要pandas 格式的話,可以這樣子改回來
sentiment.reset_format()


# 也可以把 pandas 處理過的轉成新的 dataset
from datasets import Dataset

label_name_dataset = Dataset.from_pandas(df)
label_name_dataset

  1. 可以這樣子 shuffle 資料
sentiment_train = sentiment["train"].shuffle(seed=5566).select(range(100))
  1. 也可以用 filter,來過濾資料,這裡用詩句的長度。
sentiment_filtered = sentiment.filter(lambda x: len(x["verse_text"]) > 30)
sentiment_filtered
  1. 當然常見的 map 也是有的,這裡我們把詩句轉成文字長度。注意這裡的batched=True,我們之後還會再見到它。
new_dataset = sentiment.map(
    lambda x: {"verse_text": [ len(o) for o in x["verse_text"] ] }, batched=True
)
new_dataset['test'][:3]

以上就是今天關於從 hub 取得 dataset 的基本操作啦!明天我們再來聊聊怎麼匯入自己的 dataset。


上一篇
# Day5-Hugging Face Hub Dataset
下一篇
# Day7-載入自己的 Dataset
系列文
變形金剛與抱臉怪---NLP 應用開發之實戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言