تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

چگونه با JSON مدل‌ های هوش مصنوعی را فاین‌ تیون کنیم؟ (راهنمای گام‌ به‌ گام)


۲۵ مرداد ۱۴۰۴

فاین‌تیونینگ (Fine-tuning) فرآیندی در یادگیری ماشین است که طی آن، پارامترهای یک مدل از پیش آموزش‌دیده (pretrained) به‌صورت هدفمند و با استفاده از یک مجموعه‌داده کوچک و تخصصی، دوباره به‌روزرسانی می‌شوند. در این روش، به‌جای آموزش از صفر، دانش کلی و تعمیم‌یافته‌ی مدل بر پایه‌ی داده‌های عمومی حفظ شده و برای انجام وظایف خاص، مانند طبقه‌بندی متون، پاسخ‌گویی در حوزهٔ پزشکی یا تحلیل احساسات در یک صنعت مشخص، تخصصی می‌شود. فاین‌تیون خصوصاً در مدل‌های زبان بزرگ (LLMs) مثل GPT کاربرد فراوان دارد. یکی از روش‌های مؤثر برای مدیریت پارامترهای فاین‌تیون، استفاده از فایل‌های JSON (JavaScript Object Notation) است. JSON یک فرمت ساختاریافته، سبک و خوانا است که امکان ذخیره‌سازی تنظیمات مدل و هایپرپارامترها را فراهم می‌کند و به سازماندهی، استفاده مجدد و تکرارپذیری تنظیمات در آزمایش‌های مختلف کمک می‌کند.

اگر قصد دارید یک مدل زبانی مثل GPT را برای کاربرد خاصی شخصی‌سازی کنید، نیاز به فاین‌تیون دارید. در این مقاله از لیارا یاد می‌گیرید که چگونه با فرمت JSON، داده‌های خود را آماده کرده و برای آموزش مدل‌های هوش مصنوعی استفاده کنید.

چگونه با JSON مدل‌های هوش مصنوعی را فاین‌تیون کنیم؟ (راهنمای گام‌ به‌ گام)

آنچه در این مقاله می‌خوانید:

  • پیش‌نیازهای فاین‌تیون با JSON
  • چرا فاین‌تیون با JSON؟
  • کتابخانه JSONFormer چیست؟
  • کاربرد jsonify در Flask
  • ساخت فایل JSON برای فاین‌تیون
  • بارگذاری پارامترها از JSON در پایتون
  • فاین‌تیون مدل یادگیری ماشین با JSON
  • مقایسه JSON، YAML و Dict پایتون
  • جمع بندی
  • سوالات متداول
کسب و کار خود را با دسترسی به API هوش مصنوعی ارتقاء دهید. 
✅ ارائه توکن رایگان ✅سازگاری با OpenAI SDK ✅ دسترسی به ۲۰ مدل زبانی بزرگ
خرید سرویس هوش مصنوعی

پیش‌نیازهای فاین‌تیون با JSON

قبل از شروع فرآیند فاین‌تیون مدل‌های یادگیری ماشین، با استفاده از JSON، مطمئن شوید که با موارد زیر آشنایی کافی دارید:

  • آشنایی پایه با یادگیری ماشین: درک مفاهیم اصلی مانند آموزش مدل (Training)، تنظیم دقیق یا فاین‌تیون (Fine-tuning) و ارزیابی عملکرد مدل (Evaluation).
  • تسلط بر ساختار JSON: بهتر است ساختار فایل‌های JSON که شامل جفت‌های کلید-مقدار (Key-Value-Pairs)، داده‌های تودرتو (Nesting) و اصول فرمت‌دهی صحیح را بدانید.
  • مهارت در Python و کتابخانه‌های یادگیری ماشین از جمله، TensorFlow، PyTorch یا Scikit-learn
  • تجربه در پیش‌پردازش داده‌ها: قابلیت پاک‌سازی، فرمت‌دهی و تبدیل مجموعه داده‌های JSON به قالب مناسب برای آماده‌سازی و آموزش مدل‌ها را یاد گرفته باشید.
  • در صورت نیاز به GPU یا زیرساخت ابری دسترسی داشته باشید.(اختیاری)

چرا فاین‌تیون با JSON؟

پیش از ورود به جزئیات، بهتر است به چند مزیت کلیدی JSON برای فاین تیون کردن مدل‌های یادگیری ماشین اشاره کنیم:

ذخیره‌سازی هایپرپارامترها برای فاین‌تیونینگ: هایپرپارامترها، تنظیماتی هستند که نحوه آموزش مدل را تعیین می‌کنند، مثل سرعت یادگیری یا تعداد دفعات تکرار آموزش. اگر این تنظیمات را مستقیما داخل کد قرار دهیم، هر بار که بخواهیم تغییرشان دهیم، باید کد را ویرایش کنیم که کار زما‌ن‌بر و پرخطایی است.

استفاده از JSON این محدودیت‌ها را از بین می‌برد:

  • به آسانی می‌توان مقادیر را بدون تغییر در کد اصلی تغییر داد.
  • امکان تکرار دقیق همان تنظیمات در دفعات بعدی آموزش فراهم می‌شود.
  • پیکربندی‌ها از کد جدا می‌شوند و نگهداری پروژه آسان‌تر خواهد بود.

در کد زیر، نحوه استفاده از JSON برای تنظیم هایپرپارامترها را مشاهده می‌کنید.

{
  "learning_rate": 0.001,
  "batch_size": 32,
  "num_epochs": 10,
  "optimizer": "adam",
  "dropout_rate": 0.2,
  "early_stopping": true
}
برای شناخت بهتر تفاوت های RAG و Fine-tuning مقاله زیر را می‌توانید مطالعه کنید.
RAG یا Fine-tuning؟

بارگذاری فایل JSON در پایتون

در جریان تست مدل‌های یادگیری ماشین، معمولا تنظیمات مختلفی بررسی می‌شود و در این شرایط ذخیره کردن هایپرپارامترها در قالب JSON بسیار کاربردی است، زیرا بدون نیاز به تغییر در کد اصلی می‌توان این تنظیمات را مدیریت کرد. کتابخانه‌هایی مانند json در پایتون، کار خواندن و نوشتن فایل‌های JSON را به‌صورت ساده و بدون دردسر انجام می‌دهد. در کد زیر نحوه بارگذاری تنظیمات هایپرپارامترها از یک فایل JSON در پایتون نشان داده شده است.

import json

# Load JSON file
with open("hyperparameters.json", "r") as file:
    config = json.load(file)

# Use hyperparameters
learning_rate = config["learning_rate"]
batch_size = config["batch_size"]

خودکارسازی تنظیم هایپرپارامترها با JSON: JSON در روش‌هایی مانند جستجوی شبکه‌ای (Grid Search) و بهینه‌سازی بیزی (Bayesian Optimization)، برای تعریف هایپرپارامترهای مختلف استفاده می‌شود.

مثال: فایل JSON برای جستجوی هایپرپارامترها

{
  "experiments": [
    {"learning_rate": 0.001, "batch_size": 32, "optimizer": "adam"},
    {"learning_rate": 0.0005, "batch_size": 64, "optimizer": "sgd"},
    {"learning_rate": 0.0001, "batch_size": 128, "optimizer": "rmsprop"}
  ]
}

در کد زیر نحوه استفاده از JSON برای جستجوی شبکه‌ای (Grid Search) در پایتون را مشاهده می‌کنید:

import json

with open("hyperparameter_search.json", "r") as file:
    experiments = json.load(file)["experiments"]

for exp in experiments:
    print(f"Running experiment with learning_rate={exp['learning_rate']} and batch_size={exp['batch_size']}")

با استفاده از JSON، می‌توانید چندین آزمایش مختلف را همزمان اجرا کنید و به‌صورت خودکار بهترین تنظیمات مدل را پیدا کنید، کاری که قبلا ساعت‌ها زمان می‌برد و پر از خطا بود. نکته جذاب‌تر اینجاست که JSON اجازه می‌دهد تنظیمات پیچیده هایپرپارامترها را به شکلی منظم ذخیره کنید. با این کار علاوه بر سرعت بیشتر، کنترل بهتری روی فرایند فاین‌تیونینگ مدل‌های هوش مصنوعی را تجربه خواهید کرد.

ذخیره‌سازی داده‌های آموزشی برای فاین‌تیونینگ: زمانی که سراغ فاین‌تیونینگ مدل‌های یادگیری ماشین می‌روید، داشتن داده‌های برچسب‌خورده دقیق و قابل دسترس ضروری است. استفاده از JSON برای ذخیره این داده‌ها ،نه تنها سرعت خواندن و نوشتن را بالا می‌برد، بلکه اشتراک‌گذاری و مدیریت داده‌ها را نیز بسیار آسان می‌کند. به‌علاوه، ساختار انعطاف‌پذیر JSON به ما اجازه می‌دهد داده‌ها را به سادگی وارد قالب‌های قدرتمندی مانند pandas DataFrame کنیم و از قابلیت‌های زیاد تحلیل داده بیشترین بهره را ببریم.

مثال: استفاده از JSONL برای فاین‌تیون مدل‌های GPT

{"messages": [{"role": "system", "content": "You are a helpful assistant."},
              {"role": "user", "content": "How do you store ML parameters in JSON?"},
              {"role": "assistant", "content": "You can store hyperparameters like learning rate and batch size in a JSON file."}]}

هر داده آموزشی مطابق با قالب مورد نیاز API است.

ساخت و پیکربندی خطوط لوله یادگیری ماشین با JSON: با JSON می‌توانید کل مسیر اجرای پروژه یادگیری ماشین را از ابتدا تا انتها به‌سادگی تعریف کنید. مشخص کردن دیتاست، تنظیمات لاگ‌ها و حتی جزئیات قابل مدیریت در یک فایل JSON هستند. این روش نه تنها کار شما را در راه‌اندازی و تغییر Pipeline ساده‌تر می‌کند، بلکه باعث می‌شود پروژه‌های‌تان سازمان یافته‌تر باشند.

مثال: فایل JSON برای پیکربندی Pipeline

{
  "dataset": {
    "train": "data/train.csv",
    "test": "data/test.csv"
  },
  "model": {
    "architecture": "transformer",
    "pretrained_weights": "bert-base-uncased"
  },
  "logging": {
    "log_dir": "logs/",
    "save_checkpoints": true
  }
}

در کد زیر نحوه استفاده از JSON برای ساخت Pipeline آموزش در کتابخانه Pytorch را مشاهده می‌کنید:

import json

# Load pipeline configuration
with open("config.json", "r") as file:
    config = json.load(file)

# Access parameters
train_data_path = config["dataset"]["train"]
model_arch = config["model"]["architecture"]

در پایان باید بگوییم؛ این قطعات کد را می‌توانید به توابع پایتون تبدیل کنید تا از تکرار بی‌مورد جلوگیری شود و کدی تمیز، قابل نگهداری و چندبار قابل استفاده داشته باشید. این روش باعث افزایش خوانایی و کارایی کد در پروژه‌های یادگیری ماشین می‌شود.

مدل هوش مصنوعی چیست؟ کاربرد و انواع AI به زبان ساده
مدل هوش مصنوعی چیست؟

کتابخانه JSONFormer چیست؟

کتابخانه JSONFormer در پایتون برای محدود کردن و ساختاردهی خروجی مدل‌های تولید متن (مثل LLMها) طراحی شده تا خروجی همیشه یک JSON معتبر باشد. این ابزار تضمین می‌کند که مدل دقیقا از یک اسکیمای مشخص تبعیت کند، بنابراین برای تولید داده‌های ساختار یافته انتخابی مناسب است.

چرا از JSONFormer استفاده کنیم؟

زمانی‌که با مدل‌های تولید متن کار می‌کنید، گرفتن خروجی کاملا منظم و مطابق با قالب دلخواه همیشه ساده نیست. در این مواقع JSONFormer با روش‌های زیر کار را راحت‌تر می‌کند:

  • اعتبارسنجی خودکار خروجی: تضمین می‌کند مدل دقیقا طبق اسکیمای از پیش تعیین‌شده خروجی تولید کند، بدون حتی یک خطای ساختاری.
  • حذف مراحل اضافه در پردازش: خروجی از همان ابتدا آماده استفاده است و نیازی به بررسی یا اصلاح دستی ندارد.
  • افزایش پایداری و اطمینان: به‌ویژه زمانی که ایجنت‌های هوش مصنوعی با APIها، پایگاه‌های داده یا گردش‌کارها در تعامل هستند.

JSONFormer موقع تولید توکن‌ها، محدودیت‌ها را مستقیما در فرایند اعمال می‌کند تا مدل را وادار کند خروجی را دقیقا طبق قالب مورد نظر بسازد. نکته مهم این است که هیچ تغییری در پارامترهای خود مدل ایجاد نمی‌کند، بلکه ساختار خروجی را به‌صورت پویا و لحظه‌ای شکل می‌دهد.

pip install jsonformer
from jsonformer.format import highlight_values

from jsonformer.main import Jsonformer


from transformers import AutoModelForCausalLM, AutoTokenizer

# Define a schema
schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "age": {"type": "integer"},
        "city": {"type": "string"}
    }
}

# Load model and tokenizer
model_name = "mistralai/Mistral-7B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# Generate structured JSON
jsonformer = Jsonformer(model, tokenizer, schema)
output = jsonformer()

print(output)

JSONFormer، روشی کاربردی‌ست که فرایند تولید خروجی‌های ساخت‌یافته در فاین تیونینگ مدل‌ها را ساده و بهینه می‌کند. با این روش، تنظیمات مبتنی‌بر JSON در پروژه‌های یادگیری ماشین سریع‌تر و دقیق‌تر اجرا می‌شوند و نیازی به پردازش اضافی بعد از تولید خروجی نیست.

کاربرد jsonify در Flask

تابع jsonify در فریم‌ورک Flask یک روش ساده و کاربردی برای بازگرداندن پاسخ‌های JSON از API است. این تابع به‌طور خودکار دیکشنری‌های پایتون را به فرمت JSON تبدیل می‌کند و پاسخ‌ها را به‌درستی تنظیم می‌کند تا کلاینت بتواند خروجی را به درستی تفسیر کند.

ساختار استفاده از تابع jsonify به شکل زیر است:

jsonify(*args, **kwargs)
from flask import Flask, jsonify
 
app = Flask(__name__)
 
# Sample JSON response
@app.route('/get-config', methods=['GET'])
def get_config():
    config = {
        "model": "transformer",
        "hyperparameters": {
            "learning_rate": 0.001,
            "batch_size": 32,
            "epochs": 20
        }
    }
    return jsonify(config)  # Converts dict to JSON and returns a response

if __name__ == "__main__":
    app.run(debug=True)

همچنین، کتابخانه JSONify ساختارهای داده‌ای پایتون مانند دیکشنری‌ها، لیست‌ها یا تاپل‌ها را به فرمت JSON تبدیل می‌کند و تضمین می‌کند که داده‌ها به‌صورت استاندارد و صحیح رمزنگاری شوند.

استفاده از jsonify(config) باعث می‌شود خروجی به شکل استاندارد JSON قالب‌بندی شود و آماده ارسال به کلاینت باشد.

۱۴ ترند برتر هوش مصنوعی در سال ۲۰۲۵ که آینده فناوری را دگرگون می‌کنند
 ترندهای برتر هوش مصنوعی

ساخت فایل JSON برای فاین‌تیون

برای اینکه فاین‌تیونینگ مدل‌ها دقیق و قابل کنترل باشد، داشتن یک فایل JSON منظم و ساخت‌یافته بسیار کمک کننده است. این فایل به شما اجازه می‌دهد هایپرپارامترها را به شکلی مرتب و قابل مدیریت ذخیره کنید و هر بار به راحتی از آن استفاده کنید. در ادامه یک نمونه فایل JSON برای آموزش مدل یادگیری عمیق مشاهده می‌کنید.

{
  "model": "transformer",
  "hyperparameters": {
    "learning_rate": 0.001,
    "batch_size": 32,
    "epochs": 20,
    "optimizer": "adam",
    "dropout": 0.3
  },
  "dataset": {
    "train_path": "data/train.jsonl",
    "validation_path": "data/val.jsonl"
  },
  "fine_tune": {
    "base_model": "bert-base-uncased",
    "dataset_size": 100000,
    "num_labels": 3
  }
}

این فایل JSON، مجموعه‌ای از هایپرپارامترهای مهم مانند نرخ یادگیری، اندازه بچ، انتخاب بهینه‌ساز و مسیرهای دیتاست را ذخیره می‌کند، به‌طوری که همه آن‌ها برای فاین‌تیون دقیق و موفق یک مدل مبتنی بر ترنسفورمر ضروری هستند.

بارگذاری پارامترها از JSON در پایتون

با پایتون، می‌توانید فایل‌های JSON را بارگذاری و پردازش کنید تا تنظیمات آموزش مدل را به‌صورت داینامیک و انعطاف‌پذیر انجام دهید:

import json
# Load JSON configuration file
with open("config.json", "r") as file:
    config = json.load(file)

# Access hyperparameters
learning_rate = config["hyperparameters"]["learning_rate"]
batch_size = config["hyperparameters"]["batch_size"]

print(f"Learning Rate: {learning_rate}, Batch Size: {batch_size}")

با این روش، پارامترها را بدون نیاز به تغییر در کد، به راحتی ویرایش کنید.

فاین‌تیون مدل یادگیری ماشین با JSON

معمولا فاین‌تیونینگ مدل‌های یادگیری ماشین از طریق دو کتابخانه معروف TensorFlow و PyTorch انجام می‌شود.

استفاده از JSON در TensorFlow

import tensorflow as tf
from tensorflow.keras.optimizers import Adam

# Load JSON config
with open("config.json", "r") as file:
    config = json.load(file)

# Define model
model = tf.keras.Sequential([
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dropout(config["hyperparameters"]["dropout"]),
    tf.keras.layers.Dense(10, activation='softmax')
])

# Compile model
model.compile(optimizer=Adam(learning_rate=config["hyperparameters"]["learning_rate"]),
              loss='categorical_crossentropy',
              metrics=['accuracy'])

استفاده از JSON در PyTorch

import torch
import torch.nn as nn
import torch.optim as optim

# Load JSON config
with open("config.json", "r") as file:
    config = json.load(file)

# Define model
class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.fc1 = nn.Linear(128, 64)
        self.dropout = nn.Dropout(config["hyperparameters"]["dropout"])
        self.fc2 = nn.Linear(64, 10)

    def forward(self, x):
        x = self.fc1(x)
        x = self.dropout(x)
        x = self.fc2(x)
        return x

# Initialize model
model = SimpleModel()
optimizer = optim.Adam(model.parameters(), lr=config["hyperparameters"]["learning_rate"])
فاین تیونینگ مدل یادگیری ماشین

مقایسه JSON، YAML و Dict پایتون

وقتی می‌خواهیم تنظیمات فاین‌تیون مدل یا حتی آموزش از صفر را انجام دهیم، انتخاب فرمت مناسب برای ذخیره این تنظیمات اهمیت زیادی پیدا می‌کند. سه گزینه محبوب برای این‌کار وجود دارد:
JSON, YAML و دیکشنری‌های پایتون.

از میان این سه، JSON استاندارد بسیار رایجی است که در اکثر فریم‌ورک‌های به‌خوبی پشتیبانی می‌شود. اما زمانی که با تنظیمات حجیم و پیچیده سروکار داریم، YAML به دلیل ساختار خواناتر و امکان درج کامنت، گزینه بهتری برای ویرایش و مدیریت دستی تنظیمات می‌باشد. در جدول زیر مقایس کلی این سه فرمت را مشاهده می‌کنید.

ویژگیJSONYAMLدیکشنری‌های پایتون
خواناییقابل فهم برای انسان، اما بدون امکان درج کامنتخواناتر و مناسب برای تنظیمات دستیخوانا اما نیازمند اجرای کد پایتون
پیچیدگی پردازشنیازمند استفاده از parser مثل json module در پایتوننیازمند parser مثل yaml moduleنیازی به پردازش ندارد، مستقیماً در کد قابل استفاده است
پشتیبانی از ساختارهای تو در تودارددارددارد
نوع داده‌های پشتیبانی‌شدهرشته، عدد، لیست، آبجکترشته، عدد، لیست، دیکشنریتمام انواع داده‌های پایتون
بهترین کاربردذخیره تنظیمات مدل در فریم‌ورک‌های مختلفتنظیمات خوانا و قابل ویرایش دستیاستفاده مستقیم در اسکریپت‌های پایتون
گستردگی نوع دادهمحدود به انواع پایه‌ایپشتیبانی از انواع بیشتر مثل لیست و دیکشنریپشتیبانی کامل از تمام انواع داده‌های پایتون

مثال کاربردی از JSON

{
  "model": "transformer",
  "learning_rate": 0.001,
  "batch_size": 32
}

مثال کاربردی از YAML

model: transformer
learning_rate: 0.001
batch_size: 32

مثال کاربردی از دیکشنری های پایتون

config = {
    "model": "transformer",
    "learning_rate": 0.001,
    "batch_size": 32
}

جمع بندی

فاین‌تیون کردن یک مدل یادگیری ماشبین زمانی اهمیت پیدا می‌کند که با دیتاست کوچک کار می‌کنیم و نمی‌خواهیم هزینه محاسباتی زیادی صرف کنیم. استفاده از JSON برای مدیریت هایپرپارامترها یا خروجی مدل، رویکردی تمیز، ساخت‌یافته و انعطاف‌پذیر ارائه می‌دهد که هم نگهداری پروژه را ساده‌تر می‌کند و هم فرآیند بهینه‌سازی مدل را سریع‌تر پیش می‌برد.

سوالات متداول

تفاوت بین فاین‌تیون و فاین‌تیونینگ کارآمد از نظر پارامتر (PEFT) چیست؟

در فاین‌تیون، تمام پارامترهای مدل به‌روزرسانی می‌شوند، اما در PEFT فقط بخشی از پارامترها تغییر می‌کنند تا هزینه‌ی محاسباتی کاهش یابد.

مزایای استفاده از JSON در فاین‌تیون مدل‌های یادگیری ماشین چیست؟

JSON ذخیره‌سازی، خوانایی و یکپارچه‌سازی آسان با فریم‌ورک‌های مختلف را فراهم می‌کند و فرآیند آموزش مدل را مدیریت‌پذیرتر می‌سازد.

آیا JSON می‌تواند هایپرپارامترهای مدل‌های یادگیری عمیق را ذخیره کند؟

بله، JSON می‌تواند تمام هایپرپارامترها را ذخیره کند و برای پیکربندی مدل‌های یادگیری عمیق گزینه‌ای ایده‌آل است.

چطور می‌توانم پارامترهای یادگیری ماشین مبتنی بر JSON را در پایتون بارگذاری کنم؟

با استفاده از ماژول json در پایتون می‌توانید فایل‌های JSON را به‌صورت پویا بخوانید و پردازش کنید.

آیا می‌توانم از JSON در TensorFlow و PyTorch استفاده کنم؟

بله، هر دو فریم‌ورک از پیکربندی مبتنی بر JSON برای فاین‌تیون مدل‌ها پشتیبانی می‌کنند.

تفاوت بین فاین‌تیون و تنظیم هایپرپارامتر چیست؟

در فاین‌تیون، وزن‌های مدل به‌روزرسانی می‌شوند، در حالی که در تنظیم هایپرپارامتر، تنظیمات خارجی آموزش بهینه‌سازی می‌شوند.