7.2. Λεπτομερής Ρύθμιση για να ακολουθεί οδηγίες

Reading time: 6 minutes

tip

Ο στόχος αυτής της ενότητας είναι να δείξει πώς να ρυθμίσετε λεπτομερώς ένα ήδη προεκπαιδευμένο μοντέλο για να ακολουθεί οδηγίες αντί να παράγει απλώς κείμενο, για παράδειγμα, απαντώντας σε εργασίες ως chatbot.

Dataset

Για να ρυθμίσετε λεπτομερώς ένα LLM για να ακολουθεί οδηγίες, είναι απαραίτητο να έχετε ένα dataset με οδηγίες και απαντήσεις για να ρυθμίσετε το LLM. Υπάρχουν διάφορες μορφές για να εκπαιδεύσετε ένα LLM να ακολουθεί οδηγίες, για παράδειγμα:

  • Το παράδειγμα στυλ προτροπής Apply Alpaca:
csharp
Below is an instruction that describes a task. Write a response that appropriately completes the request.

### Instruction:
Calculate the area of a circle with a radius of 5 units.

### Response:
The area of a circle is calculated using the formula \( A = \pi r^2 \). Plugging in the radius of 5 units:

\( A = \pi (5)^2 = \pi \times 25 = 25\pi \) square units.
  • Παράδειγμα Στυλ Προτροπής Phi-3:
vbnet
<|User|>
Can you explain what gravity is in simple terms?

<|Assistant|>
Absolutely! Gravity is a force that pulls objects toward each other.

Η εκπαίδευση ενός LLM με αυτούς τους τύπους συνόλων δεδομένων αντί για απλό κείμενο βοηθά το LLM να κατανοήσει ότι πρέπει να δίνει συγκεκριμένες απαντήσεις στις ερωτήσεις που λαμβάνει.

Επομένως, ένα από τα πρώτα πράγματα που πρέπει να κάνετε με ένα σύνολο δεδομένων που περιέχει αιτήματα και απαντήσεις είναι να μοντελοποιήσετε αυτά τα δεδομένα στη επιθυμητή μορφή προτροπής, όπως:

python
# Code from https://github.com/rasbt/LLMs-from-scratch/blob/main/ch07/01_main-chapter-code/ch07.ipynb
def format_input(entry):
instruction_text = (
f"Below is an instruction that describes a task. "
f"Write a response that appropriately completes the request."
f"\n\n### Instruction:\n{entry['instruction']}"
)

input_text = f"\n\n### Input:\n{entry['input']}" if entry["input"] else ""

return instruction_text + input_text

model_input = format_input(data[50])

desired_response = f"\n\n### Response:\n{data[50]['output']}"

print(model_input + desired_response)

Στη συνέχεια, όπως πάντα, είναι απαραίτητο να διαχωρίσουμε το σύνολο δεδομένων σε σύνολα για εκπαίδευση, επικύρωση και δοκιμή.

Batching & Data Loaders

Στη συνέχεια, είναι απαραίτητο να ομαδοποιήσουμε όλες τις εισόδους και τις αναμενόμενες εξόδους για την εκπαίδευση. Για αυτό, είναι απαραίτητο να:

  • Tokenize τα κείμενα
  • Pad όλα τα δείγματα στην ίδια μήκος (συνήθως το μήκος θα είναι όσο μεγαλύτερο όσο το μήκος του πλαισίου που χρησιμοποιήθηκε για την προεκπαίδευση του LLM)
  • Δημιουργήσουμε τους αναμενόμενους tokens μετατοπίζοντας 1 την είσοδο σε μια προσαρμοσμένη συνάρτηση collate
  • Αντικαταστήσουμε μερικούς tokens padding με -100 για να τους αποκλείσουμε από την απώλεια εκπαίδευσης: Μετά τον πρώτο endoftext token, αντικαταστήστε όλους τους άλλους endoftext tokens με -100 (διότι η χρήση cross_entropy(...,ignore_index=-100) σημαίνει ότι θα αγνοήσει τους στόχους με -100)
  • [Προαιρετικό] Μάσκα χρησιμοποιώντας -100 επίσης όλους τους tokens που ανήκουν στην ερώτηση ώστε το LLM να μάθει μόνο πώς να παράγει την απάντηση. Στο στυλ Apply Alpaca αυτό θα σημαίνει να μάσκαρετε τα πάντα μέχρι ### Response:

Με αυτό δημιουργημένο, είναι ώρα να δημιουργήσουμε τους data loaders για κάθε σύνολο δεδομένων (εκπαίδευση, επικύρωση και δοκιμή).

Load pre-trained LLM & Fine tune & Loss Checking

Είναι απαραίτητο να φορτώσουμε ένα προεκπαιδευμένο LLM για να το προσαρμόσουμε. Αυτό έχει ήδη συζητηθεί σε άλλες σελίδες. Στη συνέχεια, είναι δυνατό να χρησιμοποιήσουμε τη συνάρτηση εκπαίδευσης που χρησιμοποιήθηκε προηγουμένως για να προσαρμόσουμε το LLM.

Κατά τη διάρκεια της εκπαίδευσης είναι επίσης δυνατό να δούμε πώς η απώλεια εκπαίδευσης και η απώλεια επικύρωσης ποικίλλουν κατά τη διάρκεια των εποχών για να δούμε αν η απώλεια μειώνεται και αν συμβαίνει υπερβολική προσαρμογή.
Θυμηθείτε ότι η υπερβολική προσαρμογή συμβαίνει όταν η απώλεια εκπαίδευσης μειώνεται αλλά η απώλεια επικύρωσης δεν μειώνεται ή ακόμη και αυξάνεται. Για να το αποφύγουμε, το πιο απλό πράγμα που πρέπει να κάνουμε είναι να σταματήσουμε την εκπαίδευση στην εποχή όπου αρχίζει αυτή η συμπεριφορά.

Response Quality

Καθώς αυτό δεν είναι μια προσαρμογή ταξινόμησης όπου είναι δυνατόν να εμπιστευτούμε περισσότερο τις μεταβολές της απώλειας, είναι επίσης σημαντικό να ελέγξουμε την ποιότητα των απαντήσεων στο σύνολο δοκιμών. Επομένως, συνιστάται να συγκεντρώσουμε τις παραγόμενες απαντήσεις από όλα τα σύνολα δοκιμών και να ελέγξουμε την ποιότητά τους χειροκίνητα για να δούμε αν υπάρχουν λανθασμένες απαντήσεις (σημειώστε ότι είναι δυνατόν για το LLM να δημιουργήσει σωστά τη μορφή και τη σύνταξη της πρότασης απάντησης αλλά να δώσει μια εντελώς λανθασμένη απάντηση. Η μεταβολή της απώλειας δεν θα αντικατοπτρίζει αυτή τη συμπεριφορά).
Σημειώστε ότι είναι επίσης δυνατό να πραγματοποιηθεί αυτή η ανασκόπηση περνώντας τις παραγόμενες απαντήσεις και τις αναμενόμενες απαντήσεις σε άλλα LLMs και να τους ζητήσουμε να αξιολογήσουν τις απαντήσεις.

Άλλες δοκιμές που πρέπει να εκτελούνται για να επαληθευτεί η ποιότητα των απαντήσεων:

  1. Measuring Massive Multitask Language Understanding (MMLU): Το MMLU αξιολογεί τις γνώσεις και τις ικανότητες επίλυσης προβλημάτων ενός μοντέλου σε 57 θέματα, συμπεριλαμβανομένων των ανθρωπιστικών επιστημών, των επιστημών και άλλων. Χρησιμοποιεί ερωτήσεις πολλαπλής επιλογής για να αξιολογήσει την κατανόηση σε διάφορα επίπεδα δυσκολίας, από στοιχειώδη έως προχωρημένα επαγγελματικά.
  2. LMSYS Chatbot Arena: Αυτή η πλατφόρμα επιτρέπει στους χρήστες να συγκρίνουν τις απαντήσεις από διαφορετικούς chatbots δίπλα-δίπλα. Οι χρήστες εισάγουν μια προτροπή και πολλαπλά chatbots παράγουν απαντήσεις που μπορούν να συγκριθούν άμεσα.
  3. AlpacaEval: Το AlpacaEval είναι ένα αυτοματοποιημένο πλαίσιο αξιολόγησης όπου ένα προηγμένο LLM όπως το GPT-4 αξιολογεί τις απαντήσεις άλλων μοντέλων σε διάφορες προτροπές.
  4. General Language Understanding Evaluation (GLUE): Το GLUE είναι μια συλλογή εννέα εργασιών κατανόησης φυσικής γλώσσας, συμπεριλαμβανομένης της ανάλυσης συναισθήματος, της κειμενικής συνεπαγωγής και της απάντησης σε ερωτήσεις.
  5. SuperGLUE: Βασισμένο στο GLUE, το SuperGLUE περιλαμβάνει πιο απαιτητικές εργασίες σχεδιασμένες να είναι δύσκολες για τα τρέχοντα μοντέλα.
  6. Beyond the Imitation Game Benchmark (BIG-bench): Το BIG-bench είναι ένα μεγάλης κλίμακας benchmark με πάνω από 200 εργασίες που δοκιμάζουν τις ικανότητες ενός μοντέλου σε τομείς όπως η λογική, η μετάφραση και η απάντηση σε ερωτήσεις.
  7. Holistic Evaluation of Language Models (HELM): Το HELM παρέχει μια ολοκληρωμένη αξιολόγηση σε διάφορους δείκτες όπως η ακρίβεια, η ανθεκτικότητα και η δικαιοσύνη.
  8. OpenAI Evals: Ένα ανοιχτού κώδικα πλαίσιο αξιολόγησης από την OpenAI που επιτρέπει τη δοκιμή AI μοντέλων σε προσαρμοσμένες και τυποποιημένες εργασίες.
  9. HumanEval: Μια συλλογή προγραμματιστικών προβλημάτων που χρησιμοποιούνται για την αξιολόγηση των ικανοτήτων παραγωγής κώδικα των γλωσσικών μοντέλων.
  10. Stanford Question Answering Dataset (SQuAD): Το SQuAD αποτελείται από ερωτήσεις σχετικά με άρθρα της Wikipedia, όπου τα μοντέλα πρέπει να κατανοήσουν το κείμενο για να απαντήσουν με ακρίβεια.
  11. TriviaQA: Ένα μεγάλης κλίμακας σύνολο δεδομένων ερωτήσεων και απαντήσεων trivia, μαζί με έγγραφα αποδείξεων.

και πολλά άλλα

Follow instructions fine-tuning code

Μπορείτε να βρείτε ένα παράδειγμα του κώδικα για να εκτελέσετε αυτή την προσαρμογή στο https://github.com/rasbt/LLMs-from-scratch/blob/main/ch07/01_main-chapter-code/gpt_instruction_finetuning.py

References