Вступ
Я впевнений, що більшість із вас чули б про ChatGPT і спробували його, щоб відповісти на свої запитання! Ви коли-небудь замислювалися, що відбувається під капотом? Він працює на базі великої мовної моделі GPT-3, розробленої Open AI. Ці великі мовні моделі, які часто називають LLM, відкрили багато можливостей Обробка природних мов.
Що таке великі мовні моделі?
Моделі LLM навчаються на величезній кількості текстових даних, що дозволяє їм розуміти людську мову зі значенням і контекстом. Раніше більшість моделей навчалися за керованим підходом, коли ми подавали вхідні функції та відповідні мітки. На відміну від цього, магістратури навчаються шляхом неконтрольованого навчання, де їм згодовують величезну кількість текстових даних без жодних позначок та інструкцій. Отже, LLMs ефективно вивчають значення та зв’язки між словами мови. Їх можна використовувати для різноманітних завдань, таких як створення тексту, відповіді на запитання, переклад з однієї мови на іншу та багато іншого.
Як вишенька на вершині, ці великі мовні моделі можна точно налаштувати на вашому спеціальному наборі даних для завдань, пов’язаних із доменом. У цій статті я розповім про необхідність тонкого налаштування, різні доступні LLM, а також покажу приклад.
Розуміння тонкої настройки LLM
Припустімо, ви керуєте спільнотою підтримки діабетиків і хочете створити онлайн-лінію довіри, щоб відповідати на запитання. Попередньо підготовлений магістр права має більш загальну підготовку, тому він не зможе надати найкращі відповіді на питання, що стосуються конкретної області, і не зможе зрозуміти медичні терміни та абревіатури. Це можна вирішити шляхом тонкого налаштування.
Що ми маємо на увазі під тонким налаштуванням? Якщо коротко сказати, Передача
вивчення! Великі мовні моделі навчаються на величезних наборах даних із використанням великих ресурсів і мають мільйони параметрів. Уявлення та мовні шаблони, вивчені LLM під час попереднього навчання, переносяться на ваше поточне завдання. З технічної точки зору, ми ініціалізуємо модель із попередньо підготовленими ваговими коефіцієнтами, а потім навчаємо її на наших даних, що стосуються конкретного завдання, щоб досягти більш оптимізованих для завдання вагових коефіцієнтів для параметрів. Ви також можете вносити зміни в архітектуру моделі та змінювати шари відповідно до ваших потреб.
Чому вам потрібно точно налаштовувати моделі?
- Економте час і ресурси: Точне налаштування може допомогти вам скоротити час навчання та необхідні ресурси, ніж навчання з нуля.
- Зменшені вимоги до даних: Якщо ви хочете навчити модель з нуля, вам знадобиться величезна кількість позначених даних, які часто недоступні окремим особам і малим підприємствам. Точне налаштування може допомогти вам досягти хорошої продуктивності навіть із меншим обсягом даних.
- Налаштувати відповідно до ваших потреб: Попередньо навчений магістр права може не вловити вашу доменну термінологію та скорочення. Наприклад, звичайний LLM не розпізнає, що «Тип 1» і «Тип 2» означають типи діабету, тоді як добре налаштований може.
- Увімкнути постійне навчання: Скажімо, ми налаштували нашу модель на основі даних про діабет і розгорнули її. Що робити, якщо є новий план дієти чи лікування, які ви хочете включити? Ви можете використовувати вагові коефіцієнти своєї попередньо налаштованої моделі та налаштувати її, щоб включити нові дані. Це може допомогти організаціям ефективно підтримувати свої моделі в актуальному стані.
Вибір моделі LLM з відкритим кодом
Наступним кроком буде вибір великої мовної моделі для вашого завдання. Які у вас варіанти? Сучасні великі мовні моделі, доступні на даний момент, включають GPT-3, Bloom, BERT, T5 і XLNet. Серед них GPT-3 (Generative Pretrained Transformers) продемонстрував найкращу продуктивність, оскільки він навчений на 175 мільярдах параметрів і може виконувати різноманітні завдання NLU. Але до тонкого налаштування GPT-3 можна отримати доступ лише через платну підписку, і воно відносно дорожче, ніж інші варіанти.
З іншого боку, BERT є великою мовною моделлю з відкритим кодом, і її можна безкоштовно налаштувати. БЕРТ означає Bi-directional Encoder Decoder Transformers. BERT відмінно справляється з розумінням контекстних представлень слів.
Як ви обираєте?
Якщо ваше завдання більше орієнтоване на генерацію тексту, кращим вибором будуть моделі GPT-3 (платна) або GPT-2 (відкрита). Якщо ваше завдання відноситься до класифікації тексту, відповідей на запитання або розпізнавання об’єктів, ви можете скористатися BERT. У моєму випадку відповіді на запитання щодо діабету я б продовжував використовувати модель BERT.
Підготовка та попередня обробка вашого набору даних
Це найважливіший етап тонкого налаштування, оскільки формат даних залежить від моделі та завдання. Для цього випадку я створив зразок текстового документа з інформацією про діабет, який я отримав від Національного інституту здоров’я сайт. Ви можете використовувати власні дані.
Щоб точно налаштувати завдання BERT Question-Answering, рекомендується конвертувати ваші дані у формат SQuAD. SQuAD — це Стенфордський набір даних відповідей на запитання, і цей формат широко використовується для навчання моделей НЛП для завдань відповідей на запитання. Дані мають бути у форматі JSON, де кожне поле складається з:
context
: речення або абзац із текстом, на основі якого модель шукатиме відповідь на запитанняquestion
: Запит, на який ми хочемо, щоб BERT відповів. Вам потрібно буде сформулювати ці запитання на основі того, як кінцевий користувач буде взаємодіяти з моделлю контролю якості.answers
: у цьому полі потрібно вказати бажану відповідь. Тут є два підкомпоненти,text
таanswer_start
,text
матиме рядок відповіді. враховуючи,answer_start
позначає індекс, з якого починається відповідь у абзаці контексту.
Як ви можете собі уявити, створення цих даних для вашого документа займе багато часу, якщо ви робите це вручну. Не хвилюйтеся, я покажу вам, як легко це зробити за допомогою інструмента анотації Haystack.
Як створити дані у форматі SQuAD за допомогою Haystack?
Використовуючи інструмент анотації Haystack, ви можете швидко створити позначений набір даних для завдань із відповідями на запитання. Ви можете отримати доступ до інструменту, створивши обліковий запис на їхньому сайті сайт. Створіть новий проект і завантажте документ. Ви можете переглянути його на вкладці «Документи», перейдіть до «Дії» та побачите опцію створення запитань. Ви можете написати своє запитання та виділити відповідь у документі, Haystack автоматично знайде його початковий індекс. Я показав, як я це зробив, на своєму документі на зображенні нижче.
Рис. 1: Створення позначеного набору даних для Question-Answering за допомогою Haystack
Коли ви закінчите створювати достатню кількість пар «запитання-відповідь» для тонкого налаштування, ви зможете побачити їх короткий виклад, як показано нижче. На вкладці «Експорт міток» ви можете знайти кілька варіантів формату, у який ви хочете експортувати. Ми вибираємо формат групи для нашого випадку. Якщо вам потрібна додаткова допомога у використанні інструменту, ви можете перевірити їх документація. Тепер у нас є файл JSON, що містить пари QA для точного налаштування.
Як точно налаштувати?
Python пропонує багато пакетів з відкритим кодом, які можна використовувати для тонкого налаштування. Я використовував пакет Pytorch і Transformers для свого випадку. Почніть з імпортування модулів пакунків за допомогою pip, менеджера пакетів. The transformers
бібліотека надає a BERTTokenizer
, який призначений спеціально для токенізації вхідних даних у модель BERT.
!pip install torch
!pip install transformers import json
import torch
from transformers import BertTokenizer, BertForQuestionAnswering
from torch.utils.data import DataLoader, Dataset
Визначення спеціального набору даних для завантаження та попередньої обробки
Наступним кроком є завантаження та попередня обробка даних. Ви можете використовувати Dataset
клас від pytorch's utils.data
модуль для визначення спеціального класу для вашого набору даних. Я створив спеціальний клас набору даних diabetes
як ви можете бачити у наведеному нижче фрагменті коду. The init
відповідає за ініціалізацію змінних. The file_path
це аргумент, який вводитиме шлях до вашого навчального файлу JSON і використовуватиметься для ініціалізації data
. Ми ініціалізуємо BertTokenizer
також тут.
Далі ми визначаємо a load_data()
функція. Ця функція прочитає файл JSON в об’єкт даних JSON і витягне з нього контекст, запитання, відповіді та їхній індекс. Він додає витягнуті поля до списку та повертає його.
Команда getitem
використовує токенізатор BERT для кодування питання та контексту у вхідні тензори, які є input_ids
та attention_mask
, encode_plus
токенізуватиме текст і додаватиме спеціальні маркери (такі як [CLS] і [SEP]). Зверніть увагу, що ми використовуємо squeeze()
метод для видалення будь-яких однотонних розмірів перед введенням у BERT. Нарешті, він повертає оброблені вхідні тензори.
class diabetes(Dataset): def __init__(self, file_path): self.data = self.load_data(file_path) self.tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') def load_data(self, file_path): with open(file_path, 'r') as f: data = json.load(f) paragraphs = data['data'][0]['paragraphs'] extracted_data = [] for paragraph in paragraphs: context = paragraph['context'] for qa in paragraph['qas']: question = qa['question'] answer = qa['answers'][0]['text'] start_pos = qa['answers'][0]['answer_start'] extracted_data.append({ 'context': context, 'question': question, 'answer': answer, 'start_pos': start_pos, }) return extracted_data def __len__(self): return len(self.data) def __getitem__(self, index): example = self.data[index] question = example['question'] context = example['context'] answer = example['answer'] inputs = self.tokenizer.encode_plus(question, context, add_special_tokens=True, padding='max_length', max_length=512, truncation=True, return_tensors='pt') input_ids = inputs['input_ids'].squeeze() attention_mask = inputs['attention_mask'].squeeze() start_pos = torch.tensor(example['start_pos']) return input_ids, attention_mask, start_pos, end_pos
Визначивши його, ви можете створити екземпляр цього класу, передавши file_path
аргумент до цього.
file_path = 'diabetes.json'
dataset = diabetes(file_path)
Навчання моделі
Я буду використовувати BertForQuestionAnswering
модель, оскільки вона найкраще підходить для завдань із забезпечення якості. Ви можете ініціалізувати попередньо навчені ваги bert-base-uncased
модель за телефоном from_pretrained
функція на моделі. Ви також повинні вибрати функцію втрат оцінки та оптимізатор, який ви будете використовувати для навчання.
Ознайомтеся з нашим практичним практичним посібником із вивчення Git з передовими методами, прийнятими в галузі стандартами та включеною шпаргалкою. Припиніть гуглити команди Git і фактично вчитися це!
Я використовую оптимізатор Адама та функцію перехресної втрати ентропії. Ви можете використовувати клас Pytorch DataLoader
завантажувати дані різними пакетами, а також перемішувати їх, щоб уникнути будь-якої упередженості.
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = BertForQuestionAnswering.from_pretrained('bert-base-uncased')
model.to(device) optimizer = torch.optim.AdamW(model.parameters(), lr=2e-5)
loss_fn = torch.nn.CrossEntropyLoss()
batch_size = 8
num_epochs = 50 data_loader = DataLoader(dataset, batch_size=batch_size, shuffle=True)
Після того, як завантажувач даних визначено, ви можете продовжити і написати останній навчальний цикл. Під час кожної ітерації кожна партія, отримана з data_loader
містить batch_size
кількість прикладів, на яких виконується пряме і зворотне поширення. Код намагається знайти найкращий набір ваг для параметрів, за якого втрата буде мінімальною.
for epoch in range(num_epochs): model.train() total_loss = 0 for batch in data_loader: input_ids = batch[0].to(device) attention_mask = batch[1].to(device) start_positions = batch[2].to(device) optimizer.zero_grad() outputs = model(input_ids, attention_mask=attention_mask, start_positions=start_positions) loss = outputs.loss loss.backward() optimizer.step() total_loss += loss.item() avg_loss = total_loss / len(data_loader) print(f"Epoch {epoch+1}/{num_epochs} - Average Loss: {avg_loss:.4f}")
На цьому ваше тонке налаштування завершено! Ви можете перевірити модель, встановивши для неї значення model.eval()
. Ви також можете використати точне налаштування швидкості навчання та параметрів кількості епох, щоб отримати найкращі результати на ваших даних.
Найкращі поради та практики
Ось деякі моменти, на які слід звернути увагу під час тонкого налаштування будь-яких великих мовних моделей на настроюваних даних:
- Ваш набір даних має представляти цільову область або завдання, у якому ви хочете, щоб мовна модель досягла успіху. Очистити і добре структуровані дані є важливими.
- Переконайтеся, що у ваших даних достатньо навчальних прикладів, щоб модель могла вивчати шаблони. Інакше модель може запам’ятати приклади та переналаштуватися, не маючи на це можливості узагальнювати до небачених прикладів.
- Виберіть попередньо підготовлену модель, яку було навчено на корпусі, який відповідає вашому завданню. Для відповідей на запитання ми вибираємо попередньо навчену модель, яка навчена на наборі даних Stanford Question Answering. Подібно до цього, існують різні моделі, доступні для таких завдань, як аналіз настроїв, створення тексту, резюмування, класифікація тексту тощо.
- пробувати Градієнтне накопичення якщо у вас обмежена пам'ять GPU. У цьому методі замість оновлення ваги моделі після кожної партії градієнти накопичуються в кількох міні-пакетах перед виконанням оновлення.
- Якщо ви зіткнулися з проблемою переобладнання під час тонкого налаштування, використовуйте регуляризація техніки. Деякі поширені методи включають додавання шарів вилучення до архітектури моделі, впровадження розпаду ваги та нормалізацію шару.
Висновок
Великі мовні моделі можуть допомогти вам автоматизувати багато завдань швидко та ефективно. LLM з тонким налаштуванням допоможе вам використовувати можливості передачі навчання та налаштувати його відповідно до конкретного домену. Точне налаштування може бути необхідним, якщо ваш набір даних відноситься до таких сфер, як медицина, технічна ніша, набори фінансових даних тощо.
У цій статті ми використовували BERT, оскільки він є відкритим кодом і добре працює для особистого використання. Якщо ви працюєте над масштабним проектом, ви можете вибрати більш потужні LLM, як-от GPT3, або інші альтернативи з відкритим кодом. Пам’ятайте, що тонке налаштування великих мовних моделей може бути обчислювально дорогим і трудомістким. Переконайтеся, що у вас достатньо обчислювальних ресурсів, зокрема GPU або TPU залежно від масштабу.
- Розповсюдження контенту та PR на основі SEO. Отримайте посилення сьогодні.
- PlatoData.Network Vertical Generative Ai. Додайте собі сили. Доступ тут.
- PlatoAiStream. Web3 Intelligence. Розширення знань. Доступ тут.
- ПлатонЕСГ. Автомобільні / електромобілі, вуглець, CleanTech, Енергія, Навколишнє середовище, Сонячна, Поводження з відходами. Доступ тут.
- BlockOffsets. Модернізація екологічної компенсаційної власності. Доступ тут.
- джерело: https://stackabuse.com/guide-to-fine-tuning-open-source-llms-on-custom-data/
- : має
- :є
- : ні
- :де
- $UP
- 1
- 12
- 20
- 8
- a
- Здатний
- МЕНЮ
- доступ
- доступний
- рахунки
- Накопичений
- Achieve
- дії
- насправді
- Адам
- додати
- Додає
- прийнята
- після
- попереду
- AI
- Також
- альтернативи
- am
- серед
- кількість
- суми
- an
- аналіз
- та
- Інший
- відповідь
- Відповіді
- будь-який
- підхід
- архітектура
- ЕСТЬ
- аргумент
- стаття
- AS
- At
- Спроби
- автоматизувати
- автоматично
- доступний
- середній
- уникнути
- заснований
- BE
- було
- перед тим
- нижче
- КРАЩЕ
- Краще
- між
- зміщення
- Мільярд
- Цвісти
- border
- підприємства
- але
- by
- покликання
- CAN
- потужність
- випадок
- Залучайте
- Зміни
- ChatGPT
- перевірка
- вибір
- Вибирати
- клас
- класифікація
- код
- зазвичай
- співтовариство
- Завершує
- висновок
- складається
- містить
- контекст
- контекстуальний
- перетворення
- Відповідний
- створювати
- створений
- створення
- Перетинати
- вирішальне значення
- Поточний
- В даний час
- виготовлений на замовлення
- налаштувати
- дані
- набори даних
- певний
- розгорнути
- бажаний
- розвиненою
- пристрій
- Діабет
- DID
- дієта
- різний
- розміри
- Різне
- do
- документ
- документація
- робить
- домен
- домени
- Дон
- зроблений
- під час
- кожен
- легко
- ефективний
- продуктивно
- ще
- дозволяє
- кінець
- досить
- забезпечувати
- суб'єкта
- епоха
- епохи
- істотний
- оцінка
- Навіть
- НІКОЛИ
- приклад
- Приклади
- перевершувати
- відмінно
- дорогий
- експорт
- витяг
- Face
- Фолс
- риси
- Fed
- поле
- Поля
- філе
- остаточний
- в кінці кінців
- фінансовий
- знайти
- Сфокусувати
- для
- формат
- Вперед
- FRAME
- Безкоштовна
- від
- функція
- в цілому
- покоління
- генеративний
- Git
- Go
- добре
- GPU
- Графічні процесори
- градієнти
- керівництво
- рука
- обробляти
- практичний
- відбувається
- Мати
- здоров'я
- почутий
- важкий
- допомога
- отже
- тут
- Виділіть
- капот
- hover
- Як
- How To
- HTTPS
- величезний
- людина
- жалібний
- i
- if
- зображення
- картина
- реалізації
- імпорт
- in
- включати
- включені
- У тому числі
- індекс
- осіб
- інформація
- вхід
- витрати
- встановлювати
- екземпляр
- інструкції
- взаємодіяти
- в
- Вступ
- IT
- ітерація
- робота
- json
- тримати
- етикетки
- мова
- великий
- масштабний
- шар
- шарів
- УЧИТЬСЯ
- вчений
- вивчення
- дозволяти
- Важіль
- LG
- бібліотека
- як
- обмеженою
- список
- ll
- LLM
- загрузка
- завантажувач
- погрузка
- від
- серія
- зробити
- менеджер
- манера
- вручну
- багато
- масивний
- Може..
- значити
- сенс
- медичний
- пам'ять
- метод
- методика
- може бути
- мільйони
- мінімальний
- модель
- Моделі
- змінювати
- Модулі
- Модулі
- більше
- найбільш
- багато
- множинний
- my
- National
- Необхідність
- необхідний
- потреби
- Нові
- наступний
- NIH
- nlp
- немає
- нормальний
- зараз
- номер
- об'єкт
- отримувати
- отриманий
- of
- Пропозиції
- часто
- on
- ONE
- онлайн
- тільки
- відкрити
- з відкритим вихідним кодом
- варіант
- Опції
- or
- організації
- Інше
- наші
- з
- над
- власний
- пакет
- пакети
- оплачувану
- пар
- параметри
- приватність
- Проходження
- шлях
- моделі
- для
- продуктивність
- виконується
- виконанні
- персонал
- план
- plato
- Інформація про дані Платона
- PlatoData
- точок
- можливостей
- влада
- Харчування
- потужний
- Практичний
- раніше
- Проблема
- Оброблено
- проект
- забезпечувати
- забезпечує
- піторх
- Питання та відповіді
- питання
- питань
- Швидко
- швидко
- ставка
- швидше
- досягати
- Читати
- визнання
- визнавати
- рекомендований
- зменшити
- називають
- Відносини
- щодо
- доречний
- запам'ятати
- видаляти
- представляти
- Вимога
- ресурси
- відповідальний
- результати
- Умови повернення
- кільце
- прогін
- s
- say
- шкала
- подряпати
- Пошук
- побачити
- SELF
- пропозиція
- настрій
- комплект
- установка
- тінь
- лист
- Повинен
- Показувати
- показаний
- перемішування
- означати
- аналогічний
- невеликий
- малого бізнесу
- менше
- деякі
- Source
- спеціальний
- конкретний
- конкретно
- Stackabuse
- стандартів
- стенди
- Станфорд
- старт
- Починаючи
- впроваджений
- Крок
- Стоп
- рядок
- передплата
- такі
- достатній
- РЕЗЮМЕ
- підтримка
- Переконайтеся
- Приймати
- балаканина
- Мета
- Завдання
- завдання
- технічний
- термінологія
- terms
- тест
- Класифікація тексту
- ніж
- Що
- Команда
- їх
- Їх
- потім
- Там.
- Ці
- вони
- це
- через
- час
- трудомісткий
- Поради
- до
- токенізувати
- маркування
- Жетони
- інструмент
- топ
- факел
- до
- поїзд
- навчений
- Навчання
- переклад
- передані
- Трансформатори
- перехід
- Переклад
- лікування
- намагався
- два
- тип
- Типи
- при
- розуміти
- розуміння
- на відміну від
- відповідний сучасним вимогам
- Оновити
- оновлення
- використання
- використовуваний
- користувач
- використовує
- використання
- різноманітність
- вид
- хотіти
- we
- вага
- ДОБРЕ
- були
- Що
- в той час як
- який
- в той час як
- широкий
- широко
- волі
- з
- без
- слово
- слова
- робочий
- працює
- турбуватися
- б
- хіба що
- запис
- Ти
- вашу
- зефірнет