paint-brush
100 Tage KI, Tag 13: Wie die Feinabstimmung von Anweisungen ein vorab trainiertes LLM verbessertvon@sindamnataraj
734 Lesungen
734 Lesungen

100 Tage KI, Tag 13: Wie die Feinabstimmung von Anweisungen ein vorab trainiertes LLM verbessert

von Nataraj6m2024/03/06
Read on Terminal Reader

Zu lang; Lesen

Die Feinabstimmung von Anweisungen ist eine Feinabstimmungstechnik, die verwendet wird, um Basismodelle wie GPT3 in ein Chat-GPT-ähnliches Produkt umzuwandeln. In diesem Beitrag erfahren Sie, wie die Feinabstimmung von Anweisungen zur Verbesserung von Basismodellen eingesetzt wird.
featured image - 100 Tage KI, Tag 13: Wie die Feinabstimmung von Anweisungen ein vorab trainiertes LLM verbessert
Nataraj HackerNoon profile picture


Hallo alle miteinander! Ich bin Nataraj , und genau wie Sie bin ich von den jüngsten Fortschritten der künstlichen Intelligenz fasziniert. Als mir klar wurde, dass ich über alle Entwicklungen auf dem Laufenden bleiben musste, beschloss ich, mich auf eine persönliche Lernreise zu begeben 100 Tage KI wurde geboren! In dieser Reihe lerne ich etwas über LLMs und teile in meinen Blogbeiträgen Ideen, Experimente, Meinungen, Trends und Erkenntnisse. Sie können die Reise auf HackerNoon verfolgen Hier oder meine persönliche Website Hier .


In einem der vorherigen Beiträge haben wir über Feinabstimmung gesprochen und warum sie wichtig ist. In diesem Beitrag werfen wir einen Blick auf eine spezielle Art der Feinabstimmung, die sogenannte Instruction Finetuning.

Einschränkungen vorab trainierter Basismodelle:

Vorab trainierte Basismodelle wie gpt-3 werden auf der Grundlage großer Datenmengen trainiert. Im Fall von gpt-3 sind es alle Daten im Internet. Nun, das wissen wir nicht genau, aber die meisten dieser Modelle werden nach umfangreicher manueller Bereinigung und Formatierung auf Daten im Internetmaßstab trainiert. Während sie trainiert werden, lernen die basierenden Modelle, wie sie den nächsten Token vorhersagen können, und werden wirklich gut in der Token-Vorhersage. Aber die reine Token-Vorhersage ist nicht so nützlich, wie Sie denken. Wenn Sie ein vorab trainiertes Basismodell fragen: „ Was ist die Hauptstadt von Mexiko?“ Es wird nicht mit einer Antwort geantwortet, der Eingabesatz könnte jedoch mit „ Was ist die Hauptstadt von Kolumbien “ vervollständigt werden. Auch wenn ein Modell wie gpt-3 bei der Token-Vorhersage mächtig ist, wird es nicht als Chatbot oder Copilot funktionieren. Wie konvertieren wir also ein vorab trainiertes Modell in einen nützlichen Chatbot wie chat-gpt? Die Antwort ist Feinabstimmung, hauptsächlich eine spezielle Art der Feinabstimmung, die „ Anweisungs-Feinabstimmung “ genannt wird.

Was ist Instruktionsfeinabstimmung?

Die Feinabstimmung von Anweisungen, auch „Anweisungsfolge“ genannt, ist ein Prozess, bei dem einem vorab trainierten Basismodell beigebracht wird, sich wie ein Chatbot zu verhalten.

Anleitung Feinabstimmung


Für die Feinabstimmung von Anweisungen sind Datensätze in Form von Fragen und Antworten erforderlich. Sie können öffentliche Datensätze oder den Datensatz Ihres Unternehmens in Form von Fragen und Antworten verwenden. Wenn Ihr Datensatz nicht in Form von Fragen und Antworten vorliegt, können Sie die Daten mithilfe verschiedener Techniken wie Alpaca oder mithilfe benutzerdefinierter Eingabeaufforderungen auf anderen LLMs in Fragen und Antworten umwandeln. Beachten Sie, dass die Feinabstimmung von Anweisungen dem Modell ein neues Verhalten bei der Beantwortung von Fragen nicht nur zu den Daten verleiht, die Sie bei der Feinabstimmung verwenden, sondern dass dieses neue Verhalten auch auf das vorhandene Wissen anwendbar ist, über das das Modell bereits verfügt, was die Feinabstimmung zu einer leistungsstarken Technik macht.

Anleitung Feintuning mit Lamini:

Lamini ist ein KI-Unternehmen, das es Entwicklern ermöglicht, auf einfache Weise mit Sprachmodellen umzugehen und dabei die Komplexität von Hosting, Schulung und anderen komplizierten Aspekten zu abstrahieren. Sehen Sie sich hier alle Möglichkeiten an. Wir werden Lamini verwenden, um ein kleines Sprachmodell namens „ Pythia“ zu trainieren, bei dem es sich um ein Open-Source-Modell handelt, das von Eleuther AI erstellt wurde, und eine Feinabstimmung der Anweisungen mithilfe eines Unternehmensdatensatzes namens „Alpaca“ durchführen.


Schritt 1: Initialisieren und laden Sie den Anweisungs-Finetuning-Datensatz

In diesem Schritt initialisieren wir das erforderliche Modul und schauen uns auch den Alpaka-Trainingsdatensatz an. Hier ist der Code.

 import itertools import jsonlines from datasets import load_dataset from pprint import pprint from llama import BasicModelRunner from transformers import AutoTokenizer, AutoModelForCausalLM from transformers import AutoModelForSeq2SeqLM, AutoTokenizer ## we are using alpaca data set, which is an open source fine tuning data set instruction_tuned_dataset = load_dataset("tatsu-lab/alpaca", split="train", streaming=True) m = 5 print("Instruction-tuned dataset:") top_m = list(itertools.islice(instruction_tuned_dataset, m)) for j in top_m: print(j)

So sieht der Befehlsoptimierungsdatensatz aus. Es enthält Daten in Form von Fragen und Antworten.

Befehls-Feinabstimmungsdatensatz


Schritt 2: Befeuchten Sie die Eingabeaufforderungen

In diesem Schritt nehmen wir die Daten aus dem Alpaka-Set und geben sie in die unten gezeigten Eingabeaufforderungen ein.

 prompt_template_with_input = """Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request. ### Instruction: {instruction} ### Input: {input} ### Response:""" prompt_template_without_input = """Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: {instruction} ### Response:""" ## hydrate prompts - meaning add data to the above prompts processed_data = [] for j in top_m: if not j["input"]: processed_prompt = prompt_template_without_input.format(instruction=j["instruction"]) else: processed_prompt = prompt_template_with_input.format(instruction=j["instruction"], input=j["input"]) processed_data.append({"input": processed_prompt, "output": j["output"]})

Danach sieht der Datensatz wie folgt aus.

Hydratisierter Datensatz


Grundsätzlich nehmen wir die rohen Frage-und-Antwort-Daten und konvertieren sie in ein Format, das für das LLM sinnvoll ist, sodass die Antwort auf diese Frage aussehen sollte, wenn ihnen eine Frage gestellt wird. Wir führen dies iterativ durch und speichern es in einer JSONL- Datei.

 with jsonlines.open(f'alpaca_processed.jsonl', 'w') as writer: writer.write_all(processed_data)

Schritt 3 – Nicht fein abgestimmte Ausgabe

In Schritt 1 und 2 haben wir Rohdaten geladen, hydratisiert und im JSONL- Format gespeichert. Aber Lamini verfügt über diese hydratisierten Daten, sodass Schritt 1 und 2 technisch gesehen nicht erforderlich sind. Es musste jedoch gezeigt werden, wie die Feinabstimmung von Anweisungen funktioniert. Sehen wir uns zunächst an, wie eine nicht fein abgestimmte Version des Pythia-Modells auf eine einfache Frage reagieren würde.

 tokenizer = AutoTokenizer.from_pretrained("EleutherAI/pythia-70m") #70M parameter model that is not instruction tuned. model = AutoModelForCausalLM.from_pretrained("EleutherAI/pythia-70m") def inference(text, model, tokenizer, max_input_tokens=1000, max_output_tokens=100): # Tokenize input_ids = tokenizer.encode( text, return_tensors="pt", truncation=True, max_length=max_input_tokens ) # Generate device = model.device generated_tokens_with_prompt = model.generate( input_ids=input_ids.to(device), max_length=max_output_tokens ) # Decode generated_text_with_prompt = tokenizer.batch_decode(generated_tokens_with_prompt, skip_special_tokens=True) # Strip the prompt generated_text_answer = generated_text_with_prompt[0][len(text):] return generated_text_answer ## the 70M model doesnt have any company specific data, we will use the alpace data set from hosted on lamini and fine tune this model # load alpaca dataset finetuning_dataset_path = "lamini/lamini_docs" finetuning_dataset = load_dataset(finetuning_dataset_path) #print(finetuning_dataset) test_sample = finetuning_dataset["test"][0] print(test_sample) print("untrained output sample") print(inference(test_sample["question"], model, tokenizer))

Dies ist die Ausgabe, die ich erhalten habe. Sie werden feststellen, dass die Ausgabe nicht hilfreich ist und das Modell versucht, eine Token-Vervollständigung durchzuführen, aber keine tatsächliche Antwort gibt.

Nicht fein abgestimmte Ausgabe


Schritt 4 – Anweisung zur Feinabstimmung der Ausgabe

Sobald wir die im vorherigen Schritt angezeigten Q&A-Daten für die Feinabstimmung von Anweisungen verwenden, verhält sich dasselbe Modell wie ein Chatbot und liefert genauere Antworten auf Ihre Fragen sowohl zu den verfeinerten Daten als auch zu den Daten, die das Modell bereits hat besteht aus. Es ist fast so, als würde ein Kind, wenn es zum ersten Mal eine Sprache lernt, nun in der Lage sein, die Gefühle auszudrücken, die es bereits hat, sowie die neuen Dinge, die es durch den Sprachunterricht gelernt hat. Genau wie die vorab trainierte Version des Modells wird auch das durch Anweisungen optimierte Modell auf Lamini gehostet und kann wie unten gezeigt mit einem Befehl abgeleitet werden. (Ja, Lamini ist großartig!)

 ## finetuned output instruction_model = AutoModelForCausalLM.from_pretrained("lamini/lamini_docs_finetuned") print("instruction finetuned output") print(inference(test_sample["question"], instruction_model, tokenizer))

So wird die Ausgabe aussehen. Sie werden feststellen, dass wir anstelle des Kauderwelschs, das wir im vorherigen Schritt gesehen haben, eine genauere Ausgabe erhalten.

Anweisung hat die Ausgabe des Modells verfeinert


Das Ziel dieses Beitrags besteht darin, eine Einführung in die Feinabstimmung von Anweisungen zu geben und zu zeigen, wie sie verwendet wird, um Basismodelle in benutzerfreundlichere Versionen umzuwandeln. In zukünftigen Beiträgen werde ich mich eingehend mit dem eigentlichen Prozess der Feinabstimmung von Anweisungen befassen.


Das war's für Tag 13 von 100 Tagen KI.


Ich schreibe einen Newsletter mit dem Titel Above Average, in dem ich über die Erkenntnisse zweiter Ordnung spreche, die hinter allem stecken, was in der Big-Tech-Branche passiert. Wenn Sie im technischen Bereich tätig sind und nicht durchschnittlich sein möchten, abonnieren Sie es .


Folgen Sie mir auf Twitter und LinkedIn , um die neuesten Updates zu 100 Tagen KI zu erhalten. Wenn Sie im technischen Bereich tätig sind, könnten Sie daran interessiert sein, meiner Community von technischen Fachleuten hier beizutreten.


Erscheint auch hier .