Hugging Face LLM و راهنمای کامل برای استفاده از ابزارهای آن
31 شهریور 1402 1402-06-31 22:58Hugging Face LLM و راهنمای کامل برای استفاده از ابزارهای آن
Hugging Face LLM و راهنمای کامل برای استفاده از ابزارهای آن
هاگینگ فیس یک مرکز تحقیقاتی و مرکزی است که جامعه از محققان، پژوهشگران و علاقمندان در زمینه هوش مصنوعی ایجاد کرده است. در مدت زمان کوتاهی، هاگینگ فیس توانسته است حضور قابل توجهی در فضای هوش مصنوعی داشته باشد. شرکتهای فناوری بزرگ از جمله گوگل، آمازون و انویدیا با سرمایهگذاریهای قابل توجهی، شرکت نوپای هوش مصنوعی هاگینگ فیس ( Hugging Face LLM) را تقویت کردهاند و ارزش این شرکت به 4.5 میلیارد دلار رسیده است.
مدلهای تبدیل در پردازش زبان طبیعی (NLP)
در سال 2017، دانشگاه کورنل مقالهای تأثیرگذار منتشر کرد که مدلهای تبدیل را معرفی کرد. این مدلهای یادگیری عمیق در پردازش زبان طبیعی (NLP) استفاده میشوند. این کشف منجر به توسعه مدلهای زبان بزرگ مانند ChatGPT شد.
مدلهای زبان بزرگ یا LLMs سیستمهای هوش مصنوعی هستند که از مدلهای تبدیل برای درک و ایجاد متن شبیه به انسان استفاده میکنند. با این حال، ساخت این مدلها هزینهبر است و اغلب نیاز به میلیونها دلار دارد که امکان دسترسی به آن را برای شرکتهای بزرگ محدود میکند.
هاگینگ فیس، که در سال 2016 شروع شد، هدف از دسترسیپذیری مدلهای پردازش زبان طبیعی به همه افراد است. با وجود اینکه این شرکت تجاری است، انواع منابع متن باز را ارائه میدهد که به مردم و سازمانها کمک میکند تا مدلهای تبدیل به صرفه را بسازند و استفاده کنند. یادگیری ماشین در مورد آموزش کامپیوترها برای انجام وظایف با تشخیص الگوها است، در حالی که یادگیری عمیق، یک زیرمجموعه از یادگیری ماشین است که یک شبکه ایجاد میکند که به صورت مستقل یاد میگیرد. مدلهای تبدیل نوعی از معماری یادگیری عمیق هستند که به طور مؤثر و انعطافپذیری از دادههای ورودی استفاده میکنند، که از آنجا که نیاز به زمان آموزش کمتری دارند، یک گزینه محبوب برای ساخت مدلهای زبان بزرگ میشوند.
چگونه Hugging Face پروژه های NLP و LLM را تسهیل می کند
هاگینگ فیس با ارائه موارد زیر، کار با مدلهای زبان بزرگ (LLM) را سادهتر کرده است:
- ارائه مجموعهای از مدلهای پیشآموزششده برای انتخاب
- ابزارها و مثالها برای بهینهسازی این مدلها بر اساس نیازهای خاص شما
- گزینههای آسان برای استقرار در محیطهای مختلف.
یک منبع عالی در دسترس از طریق هاگینگ فیس، ردهبندیگر باز LLM است. به عنوان یک پلتفرم جامع، این پلتفرم به طور سیستماتیک پیشرفتها را در دامنه مدلهای زبان بزرگ (LLM) و چتباتها در دامنه منبع باز مشاهده و رتبهبندی میکند و کارایی آنها را ارزیابی میکند، تحلیل دقیقی از پیشرفتها در دامنه منبع باز ارائه میدهد.
تعیینکنندههای عملکرد مدلهای LLM را از طریق چهار معیار اندازهگیری میکند:
- چالش استدلال AI2 (25 نمونه) – سری سوالاتی در حوزه برنامه درسی علوم مقدماتی
- آزمون استدلال عقلانی HellaSwag (10 نمونه) – یک آزمون استدلال عقلانی که برای انسانها ساده است، اما برای مدلهای پیشرفته یک چالش مهم است
- ارزیابی چندجانبه MMLU (5 نمونه) – یک ارزیابی چندجانبه که به توانمندی یک مدل متنی در 57 حوزه متنوع، از جمله ریاضیات مقدماتی، حقوق و علوم کامپیوتر، بینش دارد.
- TruthfulQA (بدون نمونه) – یک ابزار برای تعیین تمایل مدل به تکرار اطلاعات نادرست معمول در اینترنت است.
بنچمارکها، که با استفاده از اصطلاحاتی مانند “25 نمونه”، “10 نمونه”، “5 نمونه” و “بدون نمونه” توصیف میشوند، تعداد مثالهای پیشفرضی را نشان میدهند که در فرآیند ارزیابی به مدل داده میشود تا عملکرد و توانایی استدلال آن در حوزههای مختلف را اندازهگیری کند. در پارادایمهای “تعداد نمونه کم”، مدلها با تعداد کمی مثال به آنها ارائه میشود تا به تولید پاسخهایشان کمک کند، در حالی که در تنظیمات “بدون نمونه”، مدلها هیچ مثالی دریافت نمیکنند و باید کاملاً بر روی دانش پیشفرض خود برای پاسخ مناسب تکیه کنند.
مؤلفههای Hugging Face
Pipelines
لولهها ( پایه ها ) به عنوان بخشی از کتابخانه ترنسفورمر هاگینگ فیس عملکردی را فراهم میکنند که در بهرهگیری آسان از مدلهای پیشآموزششده موجود در مخزن هاگینگ فیس کمک میکند. این ابزار یک واسط کاربری شفاف برای انجام مجموعهای از وظایف از جمله تحلیل احساسات، پاسخ به سوالات، مدلسازی زبان ماسکشده، تشخیص نهادهای نامگذاری شده و خلاصهسازی فراهم میکند.
لولهها شامل سه مؤلفه اصلی هاگینگ فیس میشوند:
توکنساز (Tokenizer): متن شما را برای مدل آماده کرده و به یک فرمت تبدیل میکند که مدل میتواند آن را درک کند.
مدل: این قلب پایه ها است که پیشبینیهای واقعی بر اساس ورودی پیشپردازش شده انجام میدهد.
پسپردازنده: پیشبینیهای خام مدل را به یک فرم خوانا برای انسان تبدیل میکند.
این پایه ها نه تنها کدنویسی گسترده را کاهش میدهند بلکه رابط کاربری دوستانهای برای انجام وظایف مختلف پردازش زبان طبیعی ارائه میدهند.
برنامه های کاربردی Transformer با استفاده از کتابخانه Hugging Face
یکی از نکات مهم کتابخانه هاگینگ فیس کتابخانه ترنسفورمرها (Transformers) است که با ارتباط مدل با مراحل پیشپردازش و پسپردازش مورد نیاز، فرایند تجزیه و تحلیل را سادهتر میکند. برای نصب و وارد کردن این کتابخانه، دستورات زیر را استفاده کنید:
pip install
-
q transformers
from
transformers
import
pipeline
کاربردهای عملی
Text Classification
دستهبندی متن با تابع pipeline() کتابخانه هاگینگ فیس به سادگی انجام میشود. در زیر توضیح داده شده که چگونه میتوانید یک لوله دستهبندی متن را آغاز کنید:
classifier
=
pipeline(
"text-classification"
)
برای تجربه عملی، یک رشته متن یا یک لیست از رشتهها را به piplines وارد کرده و پیشبینیها را دریافت کنید که میتوانید از کتابخانه Pandas در پایتون برای نمایش بهتر آنها استفاده کنید. در زیر یک قطعه کد پایتونی نمایش داده شده است که این کار را نمایش میدهد:
sentences
=
[
"I am thrilled to introduce you to the wonderful world of AI."
,
"Hopefully, it won't disappoint you."
]
# Get classification results for each sentence in the list
results
=
classifier(sentences)
# Loop through each result and print the label and score
for
i, result
in
enumerate
(results):
print
(f
"Result {i + 1}:"
)
print
(f
" Label: {result['label']}"
)
print
(f
" Score: {round(result['score'], 3)}\n"
)
Result 1:
Label: POSITIVE
Score: 1.0
Result 2:
Label: POSITIVE
Score: 0.996
تشخیص نهادهای نامگذاری شده (NER)
ner_tagger
=
pipeline(
"ner"
, aggregation_strategy
=
"simple"
)
text
=
"Elon Musk is the CEO of SpaceX."
outputs
=
ner_tagger(text)
print
(outputs)
Elon Musk: PER, SpaceX: ORG |
پاسخ به سوالات
پاسخ به سوالات شامل استخراج پاسخهای دقیق به سوالات خاص از یک سیاق داده شده میشود. برای شروع یک لوله پاسخ به سوالات راهاندازی کنید و سوال و متن مرتبط خود را وارد کنید تا پاسخ مورد نظر را دریافت کنید:
reader
=
pipeline(
"question-answering"
)
text
=
"Hugging Face is a company creating tools for NLP. It is based in New York and was founded in 2016."
question
=
"Where is Hugging Face based?"
outputs
=
reader(question
=
question, context
=
text)
print
(outputs)
{ 'score' : 0.998, 'start' : 51, 'end' : 60, 'answer' : 'New York' } |
تابع لوله (pipeline) هاگینگ فیس مجموعهای از لولهکاریهای پیشساخته برای وظایف مختلف ارائه میدهد، به غیر از دستهبندی متن، تشخیص نهادهای نامگذاری شده و پاسخ به سوالات. در زیر جزئیاتی در مورد یک زیرمجموعه از وظایف موجود آمده است:
چرا Hugging Face تمرکز خود را روی Rust تغییر داد
سیستم هاگینگ فیس (HF) به تازگی شروع به استفاده از زبان برنامهنویسی Rust در کتابخانههای خود مانند safesensors و tokenizers کرده است.
هاگینگ فیس به تازگی یک چارچوب یادگیری ماشین جدید به نام Candle منتشر کرده است. برخلاف چارچوبهای سنتی که از زبان Python استفاده میکنند، Candle با استفاده از زبان Rust ساخته شده است. هدف از استفاده از Rust، بهبود عملکرد و سادهتر کردن تجربه کاربر در عین حمایت از عملیات GPU است.
هدف اصلی از Candle، تسهیل اجرای بدون سرور (serverless inference) است که امکان استقرار باینریهای سبک را ممکن میسازد و از Python در بارگیریهای تولیدی حذف میکند، که گاهی اوقات به دلیل هزینههای اضافی آن میتواند فرآیندها را کند کند. این چارچوب به عنوان یک راه حل برای حل مشکلاتی که با چارچوبهای کامل یادگیری ماشین مانند PyTorch روبرو میشود، ارائه شده است که زمانی که در یک خوشه نمونههای مختلف ایجاد میشوند، بزرگ و کند هستند.
بیایید بررسی کنیم که چرا Rust به عنوان یک انتخاب محبوب بهتر از Python در حال تبدیل شدن است.
- سرعت و عملکرد – Rust برای سرعت بسیار بالای خود شناخته میشود و بهتر از Python عمل میکند که به طور سنتی در چارچوبهای یادگیری ماشین استفاده میشود. عملکرد Python گاهی اوقات به دلیل قفل تفسیر جهانی (GIL) آن کاهش مییابد، اما Rust با این مشکل مواجه نمیشود و اجرای سریعتر و به تبع آن عملکرد بهبود یافته در پروژههایی که از آن استفاده میشود را ارائه میدهد.
- امنیت – Rust گارانتیهای امنیت حافظه را بدون گردآورنده زباله (garbage collector) ارائه میدهد، ویژگیای که در اطمینان از ایمنی سیستمهای همزمان حیاتی است. این نقش حیاتی را در زمینههایی مانند safetensors بازی میکند که ایمنی در کنترل ساختارهای داده اولویت دارد.
محافظ های ایمنی
محافظ های ایمنی از سرعت و ویژگیهای امنیتی Rust بهره میبرند. آنها شامل دستکاری تانسورها (tensors)، یک موجودیت ریاضی پیچیده، است. استفاده از Rust به اطمینان از این میانجامد که عملیاتها نه فقط سریع بلکه ایمن باشند. تا از بروز اشکالات معمول و مشکلات امنیتی که از اشتباه در مدیریت حافظه ممکن است به وجود آید، جلوگیری میکند.
توکنساز (Tokenizer)
توکنسازها وظیفه تجزیه جملات یا عبارات به واحدهای کوچکتر مانند کلمات یا اصطلاحات را بر عهده دارند. Rust در این فرآیند با افزایش سرعت اجرا به کار میرود. از سویی اطمینان حاصل میکند که فرآیند توکنسازی نه تنها دقیق بلکه سریع هم باشد. و به بهبود کارایی وظایف پردازش زبان طبیعی کمک میکند.
در مرکز توکنساز هاگینگ فیس مفهوم توکنسازی زیرکلمه (subword tokenization) قرار دارد. که تعادلی دقیق بین توکنسازی کلمه و کاراکتری برای بهینهسازی حفظ اطلاعات و اندازه واژگان را ایجاد میکند. این فرآیند از طریق ایجاد زیرتوکنها مانند “##ing” و “##ed” عمل میکند و به حفظ غنای معنایی میانهای میان توکنسازی کلمه و کاراکتری میپردازد. در حالی که از واژگان پر و زیادهرویی جلوگیری میکند.
توکنسازی زیرکلمه شامل یک مرحله آموزشی برای شناسایی تعادل کارآمد بین توکنسازی کاراکتری و کلمهای است. این به اصطلاح فقط قوانین پیشوند و پسوند را نمیپذیرد و نیاز به تجزیه و تحلیل جامع الگوهای زبانی در متون گسترده دارد تا یک توکنساز زیرکلمه کارآمد طراحی شود. توکنساز تولیدی توانایی کار با کلمات جدید را دارد و آنها را به زیرکلمات شناخته شده تجزیه میکند و در عین حفظ درک زیادی از معنا، بر اندازهی واژگان را کاهش میدهد.
اجزای توکن سازی
کتابخانه توکنسازها مراحل توکنسازی را به چندین مرحله تقسیم میکند، هر یک به یک جنبه متمایز از توکنسازی پرداخته و ما در قسمت این مؤلفهها را بررسی میکنیم:
1. **نرمالساز (Normalizer)**: این مرحله تغییرات اولیه را بر روی رشته ورودی اعمال میکند. و تنظیمات لازم را مانند تبدیل به حروف کوچک، نرمالسازی یونیکد و حذف برخی موارد اعمال میکند.
2. **پیشتوکنساز (PreTokenizer)**: مسئول تجزیه رشته ورودی به بخشهای پیشسازی است و محل تقسیمبندیها بر اساس قوانین پیشفرض مانند جداکنندههای فضا تعیین میکند.
3. **مدل (Model)**: نظارت بر کشف و ایجاد زیرتوکنها دارد و با توجه به ویژگیهای داده ورودی شما و قابلیتهای آموزشی، تطابق مییابد.
4. **پسپردازنده (Post-Processor)**: این مرحله ویژگیهای ساختاری را به منظور تسهیل سازگاری با مدلهای مبتنی بر ترانسفورمر مانند BERT افزوده میکند، با اضافه کردن توکنهایی مانند [CLS] و [SEP].
برای شروع استفاده از توکنسازهای هاگینگ فیس، کتابخانه را با دستور `pip install tokenizers` نصب کرده و آن را در محیط پایتون خود وارد کنید. این کتابخانه قادر به توکنسازی حجم زیادی از متن در زمان کمی است. و از منابع محاسباتی ارزشمندی در مقایسه با وظایف محاسباتی چون آموزش مدل صرفهجویی میکند.
کتابخانه توکنسازها از زبان Rust استفاده میکند. که شباهتهای نحوی C++ را به ارث میبرد و در عین حال مفاهیم نوآورانهای را در طراحی زبانهای برنامهنویسی معرفی میکند. با استفاده از پیوندهای Python، این کتابخانه اجازه میدهد که از عملکرد زبان سطح پایینتری در محیط پایتون بهرهبرداری کنید.
مجموعه دادگان
مجموعه دادهها (Datasets) پایهای برای پروژههای هوش مصنوعی هستند. هاگینگ فیس مجموعههای دادههای متنوعی را برای انواع وظایف پردازش زبان طبیعی و سایر وظایف فراهم میکند. برای بهرهبرداری مؤثر از آنها، understanding نحوه بارگذاری و تجزیه و تحلیل آنها ضرور است. در زیر یک اسکریپت پایتون با توضیحات کامل نشان داده ایم که نحوه بررسی مجموعههای داده موجود در هاگینگ فیس را نمایش میدهد:
from
datasets
import
load_dataset
# Load a dataset
dataset
=
load_dataset(
'squad'
)
# Display the first entry
print
(dataset[
0
])
استفاده از مدل های از پیش آموزش دیده و گردآوری همه آنها
مدلهای پیشآموز شکل اصلی بسیاری از پروژههای یادگیری عمیق را تشکیل میدهند. و به محققان و توسعهدهندگان این امکان را میدهند که پروژههای خود را بدون شروع از ابتدا آغاز کنند. هاگینگ فیس اکتشاف مدلهای پیشآموز متنوعی را تسهیل میکند، همانطور که در کد زیر نشان داده شده است:
from
transformers
import
AutoModelForQuestionAnswering, AutoTokenizer
# Load the pre-trained model and tokenizer
model
=
AutoModelForQuestionAnswering.from_pretrained(
'bert-large-uncased-whole-word-masking-finetuned-squad'
)
tokenizer
=
AutoTokenizer.from_pretrained(
'bert-large-uncased-whole-word-masking-finetuned-squad'
)
# Display the model's architecture
print
(model)
def
get_answer(text, question):
# Tokenize the input text and question
inputs
=
tokenizer(question, text, return_tensors
=
'pt'
, max_length
=
512
, truncation
=
True
)
outputs
=
model(
*
*
inputs)
# Get the start and end scores for the answer
answer_start
=
torch.argmax(outputs.start_logits)
answer_end
=
torch.argmax(outputs.end_logits)
+
1
answer
=
tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(inputs[
'input_ids'
][
0
][answer_start:answer_end]))
return
answer
در کد ارائه شده، ما ماژولهای مورد نیاز از بسته transformers را وارد میکنیم، سپس یک مدل پیشآموز و توکنساز متناظر با آن را با استفاده از متد from_pretrained بارگذاری میکنیم. ما یک مدل BERT را انتخاب میکنیم که بر روی مجموعه داده SQuAD تنظیم مجدد شده است.
حالا بیایید یک مثال استفاده از این تابع را ببینیم که در آن یک پاراگراف متن داریم . میخواهیم یک پاسخ خاص به یک سوال از آن استخراج کنیم:
text
=
"""
The Eiffel Tower, located in Paris, France, is one of the most iconic landmarks in the world. It was designed by Gustave Eiffel and completed in 1889. The tower stands at a height of 324 meters and was the tallest man-made structure in the world at the time of its completion.
"""
question
=
"Who designed the Eiffel Tower?"
# Get the answer to the question
answer
=
get_answer(text, question)
print
(f
"The answer to the question is: {answer}"
)
# Output: The answer to the question is: Gustave Eiffel