تنظیم دقیق LLM برای تجزیه و خدمت از طریق اولاما


نویسنده (ها): کووشیک هولا

در ابتدا منتشر شده در به سمت هوش مصنوعیبشر

منبع: توسط نویسنده

هفته گذشته ، من برای کنفرانس Databricks که در سانفرانسیسکو اتفاق افتاد ، ثبت نام کردم و مشتاق کشف نوآوری های جدید هوش مصنوعی بود. هنگام بررسی برنامه رویداد ، یک گفتگوی خاص صاعقه توسط Mastercard توجه من را به خود جلب کرد – هوش مصنوعی تطبیق بازرگان. این جلسه جذاب ، یک سیستم هوش مصنوعی مقرون به صرفه و در عین حال بسیار مؤثر برای ترجمه شناسه های تجاری گیج کننده موجود در صورتهای کارت اعتباری (مانند “SQ Starbucks#123Seattlewa”) را به نام های تجاری قابل تشخیص (مانند “شرکت قهوه Starbucks”) برجسته کرد.

استراتژی آنها به طرز تفکر در سه مرحله مجزا ساخته شده است: اول ، تنظیم دقیق یک مدل Llama 3 8b برای استخراج دقیق جزئیات مهم از رشته های بازرگان مبهم ، از جمله نام و مکان. در مرحله بعد ، استفاده از یک رویکرد جستجوی ترکیبی که از این جزئیات استخراج شده استفاده می کند تا بتواند از یک بانک اطلاعاتی جامع از بازرگانان شناخته شده استفاده کند. سرانجام ، با استفاده از یک مدل Llama 3 70B که به طور دقیق مسابقات کاندیدای برتر را ارزیابی می کند ، شامل یک “قاضی هوش مصنوعی” برای تأیید نتایج و به حداقل رساندن خطاها از توهم می شود.

آنچه برجسته بود دستاورد قابل توجه Mastercard بود – کاهش تأخیر 400 ٪ همراه با دقت چشمگیر ، همه با کمترین هزینه انجام شد. نکته قابل توجه ، آنها خاطرنشان كردند كه تنظیم دقیق هر تکرار مدل صرفاً چند صد دلار هزینه دارد ، نشان می دهد كه حتی تیم های كوچك می توانند با استفاده از هوش مصنوعی با چالش های مهم مقابله كنند.

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

مراحل پروژه تطبیق بازرگان

هدف کلی این پروژه ساخت یک است سیستم قدرتمند AI این می تواند به طور خودکار با نام های بازرگان فریبنده از سوابق مالی تا نام های تجاری تمیز و استاندارد مطابقت داشته باشد.

من در سه مرحله مشکل را خراب کردم:

  1. مرحله 1: تنظیم دقیق مدل – این همان چیزی است که این پست وبلاگ در مورد آن است! آموزش LLM برای درک و تجزیه متن تجاری نامطبوع.
  2. مرحله 2: جستجو – با استفاده از اطلاعات تمیز و جدا شده برای یافتن کارآمد مسابقات بالقوه در یک پایگاه داده از مشاغل شناخته شده. من برای این کار از جستجوی الاستیک و FAISS استفاده خواهم کرد.
  3. مرحله 3: رتبه بندی مجدد – با استفاده از LLM دیگر ، بالقوه بزرگتر برای ارزیابی نتایج جستجو و انتخاب بهترین مطابقت ، اطمینان از دقت بالا. برنامه استفاده از DeepSeek-R1 است.

قبل از مقابله با هر سه مرحله ، من به طور خاص روی آن مرحله اول هیجان انگیز تمرکز خواهم کرد: تنظیم دقیق LLM برای تجزیه و تحلیل داده های بازرگان!

دریافت داده ها:

قبل از تنظیم دقیق ، برای آموزش مدل به مثال نیاز دارید! بنابراین ، من با جستجوی مشابه شروع کردم مجموعه داده ها در Kaggle و موارد مفیدی را برای گرفتن توپ پیدا کرده و ساختار داده های بازرگان را درک می کند.

اما برای اینکه واقعاً مدل را در رسیدگی به نوع خاصی از آشفتگی خوب کند ، من به طور سیستماتیک تغییرات سر و صدا را اضافه می کنم – ستاره ها ، کدهای مکان ، اعداد تصادفی، مخفف-برای تقلید از توصیف کنندگان بازرگانان در دنیای واقعی. این داده های مصنوعی کلید دریافت نمونه های مربوطه کافی بود.

چرا با تلاش خوب تنظیم می شود؟

تنظیم دقیق مانند گرفتن یک LLM عمومی درخشان و آموزش آن به یک مهارت بسیار خاص و متخصص برای کار خاص شما است. این درک و رفتار مدل را برای دامنه شما سفارشی می کند. این بدان معنی است:

  • بهتر دقت در نوع خاص داده های شما
  • شانس کمتری برای پاسخ های عجیب یا بی ربط به شما می دهد.
  • عملکرد بهبود یافته در اصطلاحات خاص دامنه یا اختصارات.
  • شانس کمتری برای انحراف از قالب خروجی مشخص.

به عبارت ساده تر ، تنظیم دقیق به مدل کمک می کند تا واقعاً زبان و ساختار منحصر به فرد داده های بازرگان شما را بدست آورد.

تنظیم دقیق Llama 3 1b

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

مرحله 1: تنظیم فضای کاری

برای تنظیم فضای کاری به کتابخانه های زیر نیاز خواهید داشت.

pip install transformers datasets peft torch

مرحله 2: بارگیری مجموعه داده

داده های مصنوعی تولید شده را بارگیری کنید. داده های آموزش در قالب JSON LINES (.JSONL) است که باعث می شود با استفاده از چهره بغل کردن بارگیری آسان شود datasets کتابخانه

from transformers import AutoModelForCausalLM, AutoTokenizer, Trainer, TrainingArguments
from peft import LoraConfig, get_peft_model, TaskType
from datasets import load_dataset

# Loading the training data
dataset = load_dataset("json", data_files="../Data/parser_train.jsonl")

مرحله 3: نشانه گذاری متن

LLM ها کلمات را نمی خوانند ، آنها شماره ها (نشانه ها) را پردازش می کنند. بنابراین ، شما باید داده های متن خود را با استفاده از یک نشان دهید نشان دهنده سازگار با مدل انتخاب شده Llama 3.

from transformers import AutoTokenizer

model_name = "meta-llama/Llama-3.2-1B"
tokenizer = AutoTokenizer.from_pretrained(model_name, use_fast=False)

# Ensure the tokenizer has a padding token
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token

# Tokenization
def tokenize(batch):
# Combine prompt and completion for Causal LM training
# Assumes your dataset has 'prompt' and 'completion' columns
text = [p + c for p, c in zip(batch["prompt"], batch["completion"])]
# Tokenize the combined text
tokenized = tokenizer(text, truncation=True, padding="max_length", max_length=512)
# In causal LM, labels are the same as input_ids
tokenized["labels"] = tokenized["input_ids"].copy()
return tokenized

# Apply tokenization to the 'train' split and remove original text columns
original_columns = dataset['train'].column_names
dataset = dataset['train'].map(
tokenize,
batched=True,
remove_columns=original_columns # Remove 'prompt', 'completion', etc.
)

مرحله 4: تنظیم لورا و بارگیری مدل

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

# Load model directly onto MPS device before applying PEFT
model = AutoModelForCausalLM.from_pretrained(
model_name,
device_map="mps" # Explicitly load to MPS
)

# Configure LoRA
config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
inference_mode=False,
r=8, lora_alpha=32, lora_dropout=0.05
)

model = get_peft_model(model, config)

مرحله 5: زمان آموزش!

اکنون برای حلقه آموزش واقعی. بغل کردن صورت Trainer این کار را نسبتاً ساده می کند.

# Training arguments
training_args = TrainingArguments(
output_dir="./adapter",
per_device_train_batch_size=2,
num_train_epochs=1,
logging_steps=100,
save_total_limit=1
)

#%%
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset
)
trainer.train()

هشدار خطای رایج!

خطاهای خارج از حافظه (OOM): این احتمالاً متداول ترین مسئله هنگام تنظیم دقیق LLMS است! این یعنی شما GPU/Vram از فضا فرار کرد.

  • راه حل: اندازه دسته پایین: کاهش دادن per_device_train_batch_sizeبشر

مرحله ششم: صرفه جویی در مدل تنظیم شده خوب و خدمت با اولاما

این مدل اکنون مهارت جدید خود را آموخته است. در مرحله بعد ، آن آداپتورهای لورا را ذخیره کرده و از آن آماده شوید. اولاما ابزاری خارق العاده برای اجرای LLMS به صورت محلی است و می تواند به راحتی مدل تنظیم شده با آن را ارائه دهد.

model.save_pretrained("./adapter")
tokenizer.save_pretrained("./adapter")

مرحله 6.1: آداپتور لورا را به فرمت GGUF تبدیل کنید

اولاما با مدل ها و آداپتورهای موجود در قالب GGUFبشر شما
نیاز به تبدیل آداپتور Peft Face Saved Saved را به این قالب تبدیل کنید. بوها
روش مشترک برای انجام این کار با استفاده از convert_lora_to_gguf.py فیلمنامه
که بخشی از llama.cpp پروژه (کلون llama.cpp).

# (If you haven’t already) clone llama.cpp so you have the conversion script:
git clone https://github.com/ggerganov/llama.cpp.git

# From your project root, run:
python llama.cpp/scripts/convert_lora_to_gguf.py \
--adapter-dir ./adapter \
--outfile merchant-parser-adapter.gguf

این دستور پرونده ای به نام ایجاد می کند merchant-parser-adapter.ggufبشر این مدل تنظیم شده خوب اکنون برای اولاما آماده است!

مرحله 6.2: نوشتن Ollama modelfile

مدل Llama 3.2 را ترکیب کنید (که قبلاً باید نصب کرده باشید
در اولاما ، به عنوان مثال ، با دویدن ollama run llama3.2:1b) با GGUF جدید
فایل آداپتور در همان پوشه جایی که ذخیره کردید merchant-parser-
adapter.gguf
، یک فایل جدید به نام ایجاد کنید Modelfileبشر

# Modelfile for your fine-tuned merchant parser
# Start from the base Llama-3.2 1B Instruct model
FROM llama3.2:1b

# Point to converted GGUF adapter:
ADAPTER ./merchant-parser-adapter.gguf

# System prompt for parsing tasks:
SYSTEM "You are an expert at parsing raw merchant transaction descriptors into structured data."

مرحله 6.3: ساخت مدل Ollama

اکنون ، از ابزار خط فرمان Ollama برای ساختن این مدل جدید بر اساس خود استفاده کنید Modelfileبشر ترمینال خود را در فهرست حاوی خود باز کنید Modelfile و .gguf فایل آداپتور

# From the same directory containing Modelfile & merchant-parser-adapter.gguf:
ollama create llama-merchant-parser -f Modelfile

Ollama مدل پایه را با آداپتور بسته بندی می کند. این ممکن است یک یا دو دقیقه طول بکشد. مدل تنظیم شده سفارشی اکنون در Ollama آماده است!

خلاصه و آنچه بعدی است!

ما خوب تنظیم کردیم مدل Llama 3.2 ، آن را تبدیل کرد و آن را برای درک استنباط به کار گرفت داده های بازرگان. این است هسته تجزیه و تحلیل داده های بازرگان موتور

این مرحله برای تبدیل این ورودی کثیف به اطلاعات تمیز و ساختاری بسیار مهم است. این فقط اولین قطعه از معما است. این پروژه شامل دو مرحله کلیدی دیگر برای دستیابی کامل است تطبیق بازرگان:

  1. جستجو: با استفاده از داده های تجزیه شده ، به طور موثر پیدا کردن مسابقات نامزد در یک پایگاه داده.
  2. رتبه بندی مجدد: با استفاده از یک مدل بزرگتر یا روش های دیگر برای انتخاب بهترین مسابقه احتمالی از نامزدها.

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

منتشر شده از طریق به سمت هوش مصنوعی



منبع: https://towardsai.net/p/artificial-intelligence/fine-tuning-llm-for-parsing-and-serving-through-ollama