آنچه در این مقاله میخوانید
چگونه دیتاست مناسب برای LLM بسازیم و تقسیمبندی کنیم؟
۸ آذر ۱۴۰۴
ساخت یک دیتاست برای آموزش مدلهای زبانی بزرگ (LLM) بیش از یک کار فنی ساده است، ایجاد دیتاست یک قدم مهم برای رسیدن به مدلهایی است که واقعا بتوانند زبان طبیعی را بفهمند و تولید کنند. از انتخاب منابع متن گرفته تا پاکسازی دادهها و تقسیمبندی مناسب، هر مرحله اهمیت خودش را دارد. همچنین رعایت تعادل بین اندازه و پیچیدگی دیتاست به مدل کمک میکند تا بهتر و سریعتر یاد بگیرد.
در این راهنما، به شما نشان خواهیم داد، چگونه یک دیتاست دستهبندی شده برای آموزش و اعتبارسنجی LLM بسازید. حتی اگر دیتاست اولیه کوچک باشد، همین پایه ساده میتواند منجر به ساخت مدلهای قویتر شود.
آنچه در این مقاله میخوانید:
- پیش نیازها برای آمادهسازی دیتاست برای LLM
- کد پایتون برای ساخت و آمادهسازی دیتاست
- جمع بندی

پیش نیازها برای آمادهسازی دیتاست برای LLM
- دانش پایه: آشنایی با مفاهیم مدلهای زبانی بزرگ (LLM) و تکنیکهای پیشپردازش دادهها.
- منابع داده: دسترسی به دیتاستهای یکدست، متنوع و مرتبط به فرمت متنی.
- ابزارها و کتابخانهها: نصب Python و کتابخانههایی مانند
pandasوnumpyو فریمورکهایی مانند TensorFlow یا PyTorch. - ذخیرهسازی و منابع محاسباتی: داشتن سخت افزار و فضای کافی برای پردازش و نگهداری دیتاستهای حجیم.
کسب و کار خود را با دسترسی به API هوش مصنوعی ارتقاء دهید.
✅ ارائه توکن رایگان ✅سازگاری با OpenAI SDK ✅ دسترسی به ۲۰ مدل زبانی بزرگ
خرید سرویس هوش مصنوعی
چندین منبع معتبر برای دسترسی به دیتاستهای مناسب برای آموزش و فاینتیون مدلهای زبانی بزرگ (LLM) وجود دارد. در ادامه به مهمترین آنها اشاره میکنیم:
Kaggle
Kaggle میزبان دیتاستهای متنوع در حوزهها و موضوعات مختلف است.شما میتوانید دیتاستهای مرتبط را با پردازش زبان طبیعی (NLP) پیدا کنید، شامل:
- دستهبندی متن (Text Classification)
- تحلیل احساسات (Sentiment Analysis)
- و بسیاری پروژههای دیگر
برای دسترسی به دیتاستها میتوانید به لینک زیر مراجعه کنید:
Hugging Face Datasets
Hugging Face مجموعه بزرگی از دیتاستها را ارائه میدهد که برای وظایف پردازش زبان طبیعی (NLP) آماده شدهاند. یکی از مزیتهای اصلی آنها، ادغام آسان با کتابخانه Transformers است که فرایند آموزش و فاین تیون مدلها را بسیار ساده میکند. برای دسترسی به دیتاستها میتوانید به لینک زیر مراجعه کنید:
Google Dataset Search
Google Dataset Search یک موتور جستجو ویژه است که به محققان کمک میکند دیتاستهای آنلاین و رایگان را پیدا کنند. شما میتوانید در این پلتفرم مجموعههای متنوعی از دیتاستها برای وظایف مدلسازی زبان پیدا کنید. برای دسترسی به دیتاستها به لینک زیر مراجعه کنید:
UCI Machine Learning Repository
اگرچه این منبع بهطور اختصاصی بر روی پردازش زبان طبیعی (NLP) تمرکز ندارد، UCI Machine Learning Repository مجموعهای از دیتاستهای متنوع را ارائه میدهد که میتوان از آنها برای مدلسازی زبان و وظایف مرتبط استفاده کرد. برای دسترسی به دیتاستها به لینک زیر مراجعه کنید:
UCI Machine Learning Repository
GitHub
GitHub میزبان تعداد زیادی ریپازیتوری است که شامل دیتاستهای متنوع برای کاربردهای مختلف، از جمله پردازش زبان طبیعی (NLP) میشوند. شما میتوانید با جستجو، دیتاستهای مرتبط با معماری مدل خاص خود را پیدا کنید. برای دسترسی به این دیتاستها به لینک زیر مراجعه کنید:
Common Crawl
Common Crawl یک سازمان غیرانتفاعی است که وب را خزیده و آرشیوها و دیتاستهای خود را بهصورت رایگان در اختیار عموم قرار میدهد. این منبع میتواند یک ابزار ارزشمند برای جمعآوری دادههای متنی جهت مدلسازی زبان باشد. برای دسترسی به دیتاستها به لینک زیر مراجعه کنید:
OpenAI Datasets
OpenAI بهصورت دورهای دیتاستهایی برای اهداف تحقیقاتی منتشر میکند. این دیتاستها معمولا شامل متنهای بزرگ و گسترده هستند که میتوان از آنها برای آموزش مدلهای زبانی بزرگ (LLM) استفاده کرد. برای دسترسی به دیتاستها به لینک زیر مراجعه کنید:
آموزش موازی سازی دادهها (Data Parallelism) در یادگیری عمیق را در مقاله زیر مطالعه کنید.
آموزش موازی سازی دادهها
کد پایتون برای ساخت و آمادهسازی دیتاست
برای کار با دیتاست و آمادهسازی آن جهت آموزش مدلهای زبانی بزرگ (LLM)، به چند ابزار و کتابخانه مهم نیاز داریم:
- Python: زبان اصلی پیادهسازی.
- pandas و numpy: برای مدیریت و پردازش دادهها.
- scikit-learn: برای تقسیم دیتاست (train/validation/test).
- datasets (Hugging Face): دسترسی به دیتاستهای آماده.
- PyTorch یا TensorFlow: برای آموزش مدلها.
۱. کار را با نصب پکیجهای موردنیاز شروع میکنیم.
import pandas as pd #for data processing, manipulation
import urllib.request #for downloading files from URLs zip file
import zipfile #to deal with zip file
import os #for dealing with the OS
from pathlib import Path #for working with file paths
۲. خطوط کد زیر به ما کمک میکنند دیتاست خام را دریافت کرده و آن را آمادهسازی کنیم.
# getting the zip file from the url
url = "https://archive.ics.uci.edu/static/public/228/sms+spam+collection.zip"
data_zip_path = "sms_spam_collection.zip"
data_extracted_path = "sms_spam_collection"
data_file_path = Path(data_extracted_path) / "SMSSpamCollection.tsv"
۳. در مرحله بعد، از دستور with هم برای باز کردن آدرس (URL) و هم برای باز کردن فایل محلی استفاده میکنیم.
# Downloading the file
with urllib.request.urlopen(url) as response:
with open(data_zip_path, "wb") as out_file:
out_file.write(response.read())
# Unzipping the file
with zipfile.ZipFile(data_zip_path, "r") as zip_ref:
zip_ref.extractall(data_extracted_path)
۴. کد زیر اطمینان حاصل میکند که فایل دانلودشده بهدرستی با پسوند .tsv ذخیره و نامگذاری شود.
# Add .tsv file extension
original_file_path = Path(data_extracted_path) / "SMSSpamCollection"
os.rename(original_file_path, data_file_path)
print(f"File downloaded and saved as {data_file_path}")
پس از اجرای موفقیتآمیز این کد، پیغامی با متن زیر دریافت میکنیم:
“File downloaded and saved as sms_spam_collection/SMSSpamCollection.tsv”
۵. سپس از کتابخانه pandas برای بارگذاری دیتاست ذخیرهشده و بررسی بیشتر دادهها استفاده کنید.
raw_text_df = pd.read_csv(data_file_path, sep="\t", header=None, names=["Label", "Text"])
raw_text_df.head()
print(raw_text_df["Label"].value_counts())
۶. اکنون بیایید با استفاده از pandas یک تابع تعریف کنیم تا یک دیتاست متعادل بسازیم.
ابتدا تعداد پیامهای spam را میشماریم، سپس بهطور تصادفی همان تعداد از پیامهای دیگر انتخاب میکنیم تا تعداد نمونهها با تعداد پیامهای spam همتراز شود.
def create_balanced_dataset(df):
# Count the instances of "spam"
num_spam_inst = raw_text_df[raw_text_df["Label"] == "spam"].shape[0]
# Randomly sample "ham' instances to match the number of 'spam' instances
ham_subset_df = raw_text_df[raw_text_df["Label"] == "ham"].sample(num_spam, random_state=123)
# Combine ham "subset" with "spam"
balanced_df = pd.concat([ham_subset_df, raw_text_df[raw_text_df["Label"] == "spam"]])
return balanced_df
balanced_df = create_balanced_dataset(raw_text_df)
بیایید با استفاده از value_counts تعداد پیامهای spam و ham را بررسی کنیم.
print(balanced_df["Label"].value_counts())
همانطور که مشاهده میکنید، دیتافریم اکنون متعادل شده است و تعداد پیامهای ham و spam برابر است (هرکدام ۷۴۷ نمونه).
#change the 'label' data to integer class
balanced_df['Label']= balanced_df['Label'].map({"ham":1, "spam":0})
۷. در مرحله بعد، یک تابع مینویسیم که دیتاست را بهطور تصادفی به مجموعههای آموزش (train)، آزمون (test) و اعتبارسنجی (validation) تقسیم کند.
def random_split(df, train_frac, valid_frac):
df = df.sample(frac = 1, random_state = 123).reset_index(drop=True)
train_end = int(len(df) * train_frac)
valid_end = train_end + int(len(df) * valid_frac)
train_df = df[:train_end]
valid_df = df[train_end:valid_end]
test_df = df[valid_end:]
return train_df,valid_df,test_df
train_df, valid_df, test_df = random_split(balanced_df, 0.7, 0.1)
در مرحله بعد، دیتاست را بهصورت محلی ذخیره میکنیم.
train_df.to_csv("train_df.csv", index=None)
valid_df.to_csv("valid_df.csv", index=None)
test_df.to_csv("test_df.csv", index=None)
مدل هوش مصنوعی چیست؟ کاربرد و انواع AI به زبان ساده
مدل هوش مصنوعی چیست؟
جمعبندی
ساخت یک مدل زبان بزرگ (LLM) کار نسبتاً پیچیدهای است. با این حال، با پیشرفتهای مداوم در حوزه هوش مصنوعی و ظهور فناوریهای جدید، مسیر این کار کمی سادهتر شده است. از پایهگذاری با الگوریتمهای قدرتمند گرفته تا تنظیم دقیق ابرپارامترها و مدیریت دیتاستهای عظیم، هر مرحله نقش حیاتی در ساخت مدلی دارد که بتواند متنهای انسانی را درک و تولید کند.