Hub documentation

Pandas

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Pandas

Pandas๋Š” ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” Python ๋ฐ์ดํ„ฐ ๋ถ„์„ ํˆดํ‚ท์ž…๋‹ˆ๋‹ค. ์›๊ฒฉ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๋ฐ fsspec์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, Hugging Face ๊ฒฝ๋กœ(hf://)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Hub์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DataFrame ๋กœ๋“œ

๋กœ์ปฌ ํŒŒ์ผ ๋˜๋Š” Hugging Face Datasets์™€ ๊ฐ™์€ ์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Pandas๋Š” CSV, JSON, Parquet ๋“ฑ ๋‹ค์–‘ํ•œ ํฌ๋งท์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

>>> import pandas as pd
>>> df = pd.read_csv("path/to/data.csv")

Hugging Face์—์„œ ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๋ ค๋ฉด ๊ฒฝ๋กœ๊ฐ€ hf://๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, stanfordnlp/imdb ๋ฐ์ดํ„ฐ์…‹ ์ €์žฅ์†Œ์˜ ๊ฒฝ๋กœ๋Š” hf://datasets/stanfordnlp/imdb์ž…๋‹ˆ๋‹ค. Hugging Face์˜ ๋ฐ์ดํ„ฐ์…‹์—๋Š” ์—ฌ๋Ÿฌ Parquet ํŒŒ์ผ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Parquet ํŒŒ์ผ ํ˜•์‹์€ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์˜ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค๊ณ , ๋ฐ์ดํ„ฐ ๋ถ„์„ ์–ธ์–ด ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ณต์œ ๋ฅผ ์‰ฝ๊ฒŒ ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. plain_text/train-00000-of-00001.parquet ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

>>> import pandas as pd
>>> df = pd.read_parquet("hf://datasets/stanfordnlp/imdb/plain_text/train-00000-of-00001.parquet")
>>> df
                                                    text  label
0      I rented I AM CURIOUS-YELLOW from my video sto...      0
1      "I Am Curious: Yellow" is a risible and preten...      0
2      If only to avoid making this type of film in t...      0
3      This film was probably inspired by Godard's Ma...      0
4      Oh, brother...after hearing about this ridicul...      0
...                                                  ...    ...
24995  A hit at the time but now better categorised a...      1
24996  I love this movie like no other. Another time ...      1
24997  This film and it's sequel Barry Mckenzie holds...      1
24998  'The Adventures Of Barry McKenzie' started lif...      1
24999  The story centers around Barry McKenzie who mu...      1

Hugging Face ๊ฒฝ๋กœ ๋ฐ ๊ตฌํ˜„ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ HfFileSystem์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๋™์ผํ•œ hf:// ๊ฒฝ๋กœ๋„ Storage Buckets์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

>>> df = pd.read_parquet("hf://buckets/username/my-bucket/data.parquet")
>>> df.to_parquet("hf://buckets/username/my-bucket/output.parquet")

DataFrame ์ €์žฅ

to_csv/to_json/to_parquet๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ pandas DataFrame์„ ๋กœ์ปฌ ํŒŒ์ผ ๋˜๋Š” Hugging Face์— ์ง์ ‘ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Hugging Face์— DataFrames๋ฅผ ์ €์žฅํ•˜๋ ค๋ฉด ๋จผ์ € Hugging Face ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

hf auth login

๊ทธ ํ›„ ๋ฐ์ดํ„ฐ์…‹ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

from huggingface_hub import HfApi

HfApi().create_repo(repo_id="username/my_dataset", repo_type="dataset")

๋งˆ์ง€๋ง‰์œผ๋กœ, Pandas์—์„œ Hugging Face ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

import pandas as pd

df.to_parquet("hf://datasets/username/my_dataset/imdb.parquet")

# or write in separate files if the dataset has train/validation/test splits
df_train.to_parquet("hf://datasets/username/my_dataset/train.parquet")
df_valid.to_parquet("hf://datasets/username/my_dataset/validation.parquet")
df_test .to_parquet("hf://datasets/username/my_dataset/test.parquet")

Hugging Face์˜ Parquet ํŒŒ์ผ์€ ์ €์žฅ ํšจ์œจ์„ฑ์„ ๋†’์ด๊ณ , ๋‹ค์šด๋กœ๋“œ ๋ฐ ์—…๋กœ๋“œ๋ฅผ ๊ฐ€์†ํ™”ํ•˜๋ฉฐ, ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ์…‹ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ ํŽธ์ง‘์„ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

  • Parquet Content Defined Chunking์€ Hugging Face์˜ ์Šคํ† ๋ฆฌ์ง€ ๋ฐฑ์—”๋“œ์ธ Xet์— ์ตœ์ ํ™”๋œ Parquet์ž…๋‹ˆ๋‹ค. ์ฒญํฌ ๊ธฐ๋ฐ˜ ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ํ†ตํ•ด ์—…๋กœ๋“œ์™€ ๋‹ค์šด๋กœ๋“œ๋ฅผ ๊ฐ€์†ํ™”ํ•˜๋ฉฐ, ํšจ์œจ์ ์ธ ํŒŒ์ผ ํŽธ์ง‘์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • Page index๋Š” ์ŠคํŠธ๋ฆฌ๋ฐ ์‹œ ํ•„ํ„ฐ๋ฅผ ๊ฐ€์†ํ™”ํ•˜๊ณ , Dataset Viewer์™€ ๊ฐ™์€ ํ™˜๊ฒฝ์—์„œ ํšจ์œจ์ ์ธ ๋žœ๋ค ์•ก์„ธ์Šค๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

Pandas๋Š” ์ตœ์ ํ™”๋œ Parquet ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด ์ถ”๊ฐ€ ์ธ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:

import pandas as pd

df.to_parquet(
    "hf://datasets/username/my_dataset/imdb.parquet",
    # Optimize for Xet
    use_content_defined_chunking=True,
    write_page_index=True,
)

Content defined chunking(CDC)์€ Parquet writer๊ฐ€ ์ค‘๋ณต ๋ฐ์ดํ„ฐ๊ฐ€ ๋™์ผํ•˜๊ฒŒ chunk๋˜๊ณ  ์••์ถ•๋˜๋„๋ก ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋ฅผ chunkingํ•ฉ๋‹ˆ๋‹ค. CDC๊ฐ€ ์—†์œผ๋ฉด ํŽ˜์ด์ง€๊ฐ€ ์ž„์˜๋กœ chunking๋˜๋ฏ€๋กœ, ์••์ถ• ๋•Œ๋ฌธ์— ์ค‘๋ณต ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. CDC ๋•๋ถ„์— ์ค‘๋ณต ๋ฐ์ดํ„ฐ๊ฐ€ ํ•œ ๋ฒˆ๋งŒ ์—…๋กœ๋“œ ๋˜๋Š” ๋‹ค์šด๋กœ๋“œ๋˜๋ฏ€๋กœ, Hugging Face๋กœ์˜ Parquet ์—…๋กœ๋“œ ๋ฐ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๋” ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค.

Xet์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•˜์„ธ์š”.

Parquet์— Xet ์ค‘๋ณต ์ œ๊ฑฐ ํ™œ์šฉ

์ตœ์ ํ™”๋œ Parquet ํŒŒ์ผ์€ ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” Content Defined Chunking์œผ๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด Hugging Face์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ฒญํฌ๋ฅผ ๋‹ค์‹œ ์—…๋กœ๋“œํ•  ํ•„์š”๊ฐ€ ์—†์–ด ์—…๋กœ๋“œ ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๊ณ , I/O๋ฅผ ํฌ๊ฒŒ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ด ์ฝ”๋“œ๋Š” df์˜ ๋‚ด์šฉ์„ ์—…๋กœ๋“œํ•œ ํ›„ edited_df์˜ ๊ฒฝ์šฐ ๋ณ€๊ฒฝ๋œ ์ฒญํฌ๋งŒ ์—…๋กœ๋“œํ•˜๋ฏ€๋กœ ์—…๋กœ๋“œ ์†๋„๊ฐ€ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค:

import pandas as pd

df.to_parquet(
    "hf://datasets/username/my_dataset/imdb.parquet",
    # Optimize for Xet
    use_content_defined_chunking=True,
    write_page_index=True,
)

edited_df = ...  # e.g. with added/modified/removed rows or columns

edited_df.to_parquet(
    "hf://datasets/username/my_dataset/imdb.parquet",
    # Optimize for Xet
    use_content_defined_chunking=True,
    write_page_index=True,
)

Chunk์€ ์•ฝ 64kB์ด๋ฉฐ Parquet๋Š” ์ปฌ๋Ÿผ๋ณ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฏ€๋กœ, ์‹ค์ œ๋กœ Optimized Parquet ํŒŒ์ผ์„ ํŽธ์ง‘ํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค:

  • ์ƒˆ๋กœ์šด ์—ด์„ ์ถ”๊ฐ€ํ•˜๋ฉด -> ์ƒˆ๋กœ์šด ์—ด์˜ ์ฒญํฌ๋งŒ ์—…๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค
  • add/edit/delete a row -> ์ปฌ๋Ÿผ๋‹น ํ•˜๋‚˜์˜ chunk๊ฐ€ ์—…๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค

๊ทธ๋ฆฌ๊ณ  ์ด ์™ธ์—๋„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” Parquet ํ‘ธํ„ฐ์˜ ์ฒญํฌ๋„ ์—…๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€ ์‚ฌ์šฉ

์ด๋ฏธ์ง€ ์ด๋ฆ„ ๋˜๋Š” ๊ฒฝ๋กœ ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด ์žˆ๋Š” ํด๋”๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

Example 1:            Example 2:
folder/               folder/
โ”œโ”€โ”€ metadata.csv      โ”œโ”€โ”€ metadata.csv
โ”œโ”€โ”€ img000.png        โ””โ”€โ”€ images
โ”œโ”€โ”€ img001.png            โ”œโ”€โ”€ img000.png
...                       ...
โ””โ”€โ”€ imgNNN.png            โ””โ”€โ”€ imgNNN.png

์ด๋ฏธ์ง€ ๊ฒฝ๋กœ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

import pandas as pd

folder_path = "path/to/folder/"
df = pd.read_csv(folder_path + "metadata.csv")
for image_path in (folder_path + df["file_name"]):
    ...

๋ฐ์ดํ„ฐ์…‹์ด ์ง€์›๋˜๋Š” ๊ตฌ์กฐ(file_name ํ•„๋“œ๊ฐ€ ํฌํ•จ๋œ metadata.csv ๋˜๋Š” .jsonl ํŒŒ์ผ)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ์ด ๋ฐ์ดํ„ฐ์…‹์„ Hugging Face์— ์ €์žฅํ•˜๋ฉด Dataset Viewer์—์„œ Hugging Face์— ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์ด๋ฏธ์ง€๊ฐ€ ๋ชจ๋‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

from huggingface_hub import HfApi
api = HfApi()

api.upload_folder(
    folder_path=folder_path,
    repo_id="username/my_image_dataset",
    repo_type="dataset",
)

์ด๋ฏธ์ง€ ๋ฉ”์„œ๋“œ์™€ Parquet

pandas-image-methods๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฏธ์ง€ ์—ด์— PIL.Image ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋ฏธ์ง€์™€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜๋Š” ๋‹จ์ผ Parquet ํŒŒ์ผ๋กœ ๋ฐ์ดํ„ฐ์…‹์„ ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

import pandas as pd
from pandas_image_methods import PILMethods

pd.api.extensions.register_series_accessor("pil")(PILMethods)

df["image"] = (folder_path + df["file_name"]).pil.open()
df.to_parquet("data.parquet")

๋ชจ๋“  PIL.Image ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด

df["image"] = df["image"].pil.rotate(90)

Audios ์‚ฌ์šฉ

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ์˜ค๋””์˜ค์˜ ์ด๋ฆ„ ๋˜๋Š” ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ํ•„๋“œ๊ฐ€ ํฌํ•จ๋œ ํด๋”๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

Example 1:            Example 2:
folder/               folder/
โ”œโ”€โ”€ metadata.csv      โ”œโ”€โ”€ metadata.csv
โ”œโ”€โ”€ rec000.wav        โ””โ”€โ”€ audios
โ”œโ”€โ”€ rec001.wav            โ”œโ”€โ”€ rec000.wav
...                       ...
โ””โ”€โ”€ recNNN.wav            โ””โ”€โ”€ recNNN.wav

์Œ์„ฑ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

import pandas as pd

folder_path = "path/to/folder/"
df = pd.read_csv(folder_path + "metadata.csv")
for audio_path in (folder_path + df["file_name"]):
    ...

๋ฐ์ดํ„ฐ์…‹์ด ์ง€์›๋˜๋Š” ๊ตฌ์กฐ(file_name ํ•„๋“œ๊ฐ€ ํฌํ•จ๋œ metadata.csv ๋˜๋Š” .jsonl ํŒŒ์ผ)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ Hugging Face์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Hub Dataset Viewer์—์„œ๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์˜ค๋””์˜ค๋ฅผ ๋ชจ๋‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

from huggingface_hub import HfApi
api = HfApi()

api.upload_folder(
    folder_path=folder_path,
    repo_id="username/my_audio_dataset",
    repo_type="dataset",
)

์˜ค๋””์˜ค ๋ฉ”์„œ๋“œ์™€ Parquet

pandas-audio-methods๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋””์˜ค ์ปฌ๋Ÿผ์— soundfile ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์˜ค๋””์˜ค์™€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜๋Š” ๋‹จ์ผ Parquet ํŒŒ์ผ๋กœ ๋ฐ์ดํ„ฐ์…‹์„ ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

import pandas as pd
from pandas_audio_methods import SFMethods

pd.api.extensions.register_series_accessor("sf")(SFMethods)

df["audio"] = (folder_path + df["file_name"]).sf.open()
df.to_parquet("data.parquet")

librosa์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฆฌ์ƒ˜ํ”Œ๋ง์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

df["audio"] = [librosa.load(audio, sr=16_000) for audio in df["audio"]]
df["audio"] = df["audio"].sf.write()

Transformers ์‚ฌ์šฉ

transformers ํŒŒ์ดํ”„๋ผ์ธ์„ pandas DataFrame์— ์ ์šฉํ•˜์—ฌ ๋ถ„๋ฅ˜, ํ…์ŠคํŠธ ์ƒ์„ฑ, ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” ์ง„ํ–‰ ํ‘œ์‹œ์ค„์„ ์œ„ํ•ด tqdm๋ฅผ ์‚ฌ์šฉํ•œ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ œ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

Pipelines๋Š” tqdm ๊ฐ์ฒด๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์ง€ ์•Š์ง€๋งŒ, x for x in tqdm(...) ํ˜•ํƒœ์˜ Python ์ƒ์„ฑ๊ธฐ๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…์ŠคํŠธ ๋ถ„๋ฅ˜

from transformers import pipeline
from tqdm import tqdm

pipe = pipeline("text-classification", model="clapAI/modernBERT-base-multilingual-sentiment")

# Compute labels
df["label"] = [y["label"] for y in pipe(x for x in tqdm(df["text"]))]
# Compute labels and scores
df[["label", "score"]] = [(y["label"], y["score"]) for y in pipe(x for x in tqdm(df["text"]))]

ํ…์ŠคํŠธ ์ƒ์„ฑ

from transformers import pipeline
from tqdm import tqdm

pipe = pipeline("text-generation", model="Qwen/Qwen2.5-1.5B-Instruct")

# Generate chat response
prompt = "What is the main topic of this sentence ? REPLY IN LESS THAN 3 WORDS. Sentence: '{}'"
df["output"] = [y["generated_text"][1]["content"] for y in pipe([{"role": "user", "content": prompt.format(x)}] for x in tqdm(df["text"]))]
Update on GitHub