Share via


Abfragebasierte Dokumentzusammenfassung

In diesem Leitfaden erfahren Sie, wie Sie die Dokumentzusammenfassung mithilfe des GPT-3-Modells von Azure OpenAI durchführen. Er enthält eine Beschreibung von Konzepten im Zusammenhang mit dem Dokumentzusammenfassungsprozess und Ansätzen für den Prozess sowie Empfehlungen, welches Modell für bestimmte Anwendungsfälle verwendet werden sollte. Zum Schluss werden zwei Anwendungsfälle mit Beispielcodeschnipseln vorgestellt, die Ihnen helfen, wichtige Konzepte zu verstehen.

Aufbau

Das folgende Diagramm zeigt, wie eine Benutzerabfrage relevante Daten abruft. Die Zusammenfassung verwendet GPT-3, um eine Zusammenfassung des Texts des relevantesten Dokuments zu generieren. In dieser Architektur wird der GPT-3-Endpunkt verwendet, um den Text zusammenzufassen.

Diagramm: Benutzersuche und Zusammenfassungsprozess mit GPT-3.

Laden Sie eine PowerPoint-Datei zu dieser Architektur herunter.

Workflow

Dieser Workflow erfolgt in Quasi-Echtzeit.

  1. Benutzer*innen senden eine Abfrage. Angenommen, Mitarbeitende eines Fertigungsunternehmens suchen im Unternehmensportal nach spezifischen Informationen zu einem Maschinenteil. Die Abfrage wird zuerst von einem Absichtserkennungsmodul wie Conversational Language Understanding (CLU) verarbeitet. Die relevanten Entitäten oder Konzepte in der Benutzerabfrage werden verwendet, um eine Teilmenge von Dokumenten aus einer Wissensdatenbank (in diesem Fall die Wissensdatenbank des Unternehmens), die offline aufgefüllt wird, auszuwählen und darzustellen. Die Ausgabe wird in eine Such- und Analyse-Engine wie Azure Elasticsearch eingespeist, die die relevanten Dokumente filtert, um anstelle von Tausenden oder Zehntausenden Dokumenten einen Dokumentensatz zurückzugeben, der nur einige hundert Dokumente umfasst.
  2. Die Benutzerabfrage wird nochmals auf einen Suchendpunkt wie Azure Cognitive Search angewendet, um den abgerufenen Dokumenten in der Reihenfolge ihrer Relevanz einen Rang zuzuweisen (Seitenrangfolge). Das Dokument mit dem höchsten Rang wird ausgewählt.
  3. Das ausgewählte Dokument wird auf relevante Sätze überprüft. Dieser Überprüfungsvorgang verwendet entweder eine grobe Suchmethode (z. B. Extrahieren aller Sätze, die die Benutzerabfrage enthalten) oder eine komplexere Methode (z. B. GPT-3-Einbettungen), um semantisch ähnliches Material im Dokument zu finden.
  4. Nachdem der relevante Text extrahiert wurde, fasst der GPT-3-Vervollständigungsendpunkt mit der Zusammenfassung den extrahierten Inhalt zusammen. In diesem Beispiel wird die Zusammenfassung wichtiger Details des Maschinenteils zurückgegeben, das die Mitarbeitenden in der Abfrage angegeben haben.

Der Schwerpunkt dieses Artikels liegt auf der Zusammenfassungskomponente der Architektur.

Szenariodetails

Unternehmen erstellen und pflegen häufig eine Wissensdatenbank für Geschäftsprozesse, Kund*innen, Produkte und Informationen. Relevante Inhalte basierend auf einer Benutzerabfrage eines großen Datasets zurückzugeben, ist jedoch häufig schwierig. Benutzer*innen können die Wissensdatenbank abfragen und ein relevantes Dokument mithilfe von Methoden wie der Seitenrangfolge finden. Die genauere Untersuchung des Dokuments, um nach relevanten Informationen zu suchen, ist in der Regel jedoch eine zeitaufwändige manuelle Aufgabe. Dank der jüngsten Fortschritte bei grundlegenden Transformatormodellen wie dem von OpenAI entwickelten Modell konnte der Abfragemechanismus jedoch mit semantischen Suchmethoden optimiert werden, die Codierungsinformationen wie Einbettungen verwenden, um relevante Informationen zu finden. Diese Entwicklungen ermöglichen es, Inhalte zusammenzufassen und sie in kurzer, präziser Form für Benutzer*innen anzuzeigen.

Bei der Dokumentzusammenfassung werden unter Beibehaltung wichtiger Informationselemente und des Inhaltswerts Zusammenfassungen aus großen Datenmengen erstellt. In diesem Artikel wird veranschaulicht, wie Sie die GPT-3-Funktionen von Azure OpenAI Service für Ihren spezifischen Anwendungsfall verwenden. GPT-3 ist ein leistungsstarkes Tool, das Sie für eine Reihe von Aufgaben zur linguistischen Datenverarbeitung verwenden können, darunter Sprachübersetzung, Chatbots, Textzusammenfassung und Inhaltserstellung. Die Methoden und die Architektur, die hier beschrieben werden, können angepasst und auf viele Datasets angewendet werden.

Mögliche Anwendungsfälle

Die Dokumentzusammenfassung ist für alle Organisationen relevant, in denen Benutzer*innen große Mengen von Referenzdaten durchsuchen und eine Zusammenfassung generieren müssen, die die wichtigen Informationen präzise beschreibt. Typische Bereiche sind Organisationen im Rechts-, Finanz-, Nachrichten-, Gesundheits- und Bildungswesen. Im Folgenden sind mögliche Anwendungsfälle für die Zusammenfassung aufgeführt:

  • Generieren von Zusammenfassungen, um wichtige Erkenntnisse zu Nachrichten, Finanzberichten usw. hervorzuheben
  • Erstellen einer Kurzreferenz zur Untermauerung eines Arguments, z. B. in Gerichtsverfahren
  • Bereitstellen eines Kontexts für wissenschaftliche Arbeiten im akademischen Bereich
  • Schreiben von Literaturrezensionen
  • Hinzufügen von Anmerkungen zu einem Literaturverzeichnis

Die Verwendung eines Zusammenfassungsdiensts bietet unabhängig vom Anwendungsfall u. a. die folgenden Vorteile:

  • Verkürzte Lesezeit
  • Effektivere Suche in großen Mengen unterschiedlicher Daten
  • Geringere Wahrscheinlichkeit von Verzerrungen durch menschliche Zusammenfassungstechniken (dies hängt von der Ausgewogenheit der Trainingsdaten ab)
  • Möglichkeit für Mitarbeitende und Benutzer*innen, sich auf eingehendere Analysen zu konzentrieren

Kontextbezogenes Lernen

Azure OpenAI Service verwendet ein generatives Vervollständigungsmodell. Das Modell verwendet Anweisungen in natürlicher Sprache, um die angeforderte Aufgabe und den erforderlichen Skill zu identifizieren. Dieser Prozess wird als Prompt Engineering bezeichnet. Wenn Sie diesen Ansatz verwenden, enthält der erste Teil der Befehlszeile Anweisungen oder Beispiele für die gewünschte Aufgabe in natürlicher Sprache. Das Modell vervollständigt dann die Aufgabe, indem es den wahrscheinlichsten nächsten Text vorhersagt. Diese Technik wird als kontextbezogenes Lernen bezeichnet.

Mit kontextbezogenem Lernen können Sprachmodelle anhand weniger Beispiele Aufgaben lernen. Für das Sprachmodell wird eine Eingabeaufforderung mit einer Liste von Eingabe-/Ausgabe-Paaren, die eine Aufgabe veranschaulichen, und dann eine Testeingabe bereitgestellt. Das Modell trifft eine Vorhersage, indem es die Eingabeaufforderung aufbereitet und die nächsten Token vorhersagt.

Es gibt drei Hauptansätze für kontextbezogenes Lernen: Zero-Shot-Lernen, Few-Shot-Lernen und Methoden zur Feinabstimmung bzw. Optimierung, die die Ausgabe ändern und verbessern. Diese Ansätze variieren je nach Menge der aufgabenspezifischen Daten, die in das Modell eingegeben werden.

Zero-Shot: Bei diesem Ansatz werden keine Beispiele für das Modell bereitgestellt. Die einzige Eingabe ist die Aufgabenanforderung. Beim Zero-Shot-Lernen ist das Modell von zuvor trainierten Konzepten abhängig. Seine Antworten basieren ausschließlich auf Daten, für die es trainiert wurde. Es versteht nicht unbedingt die semantische Bedeutung, verfügt aber über ein statistisches Verständnis, das auf den Informationen basiert, die es bezüglich der nächsten zu generierenden Antwort aus dem Internet gelernt hat. Das Modell versucht, die jeweilige Aufgabe mit vorhandenen Kategorien zu verknüpfen, die es bereits gelernt hat, und antwortet entsprechend.

Few-Shot: Bei diesem Ansatz enthält die Eingabeaufforderung mehrere Beispiele, die das erwartete Antwortformat und den erwarteten Inhalt veranschaulichen. Für das Modell wird ein sehr kleines Trainingsdataset zum Steuern der Vorhersagen bereitgestellt. Durch das Training mit einer geringen Anzahl von Beispielen kann das Modell nicht zusammenhängende, aber bisher unbekannte Aufgaben generalisieren und verstehen. Das Erstellen von Few-Shot-Beispielen kann schwierig sein, da Sie die Aufgabe, die das Modell ausführen soll, genau formulieren müssen. Ein häufiges Problem ist, dass Modelle insbesondere bei kleinen Modellen den in den Trainingsbeispielen verwendeten Schreibstil berücksichtigen.

Feinabstimmung: Bei der Feinabstimmung werden Modelle an Ihre eigenen Datasets angepasst. In diesem Anpassungsschritt können Sie den Prozess wie folgt verbessern:

  • Einschließlich eines größeren Datasets (mindestens 500 Beispiele).
  • Verwenden von herkömmlichen Optimierungstechniken mit Backpropagation, um die Gewichtungen des Modells neu anzupassen. Diese Techniken ermöglichen qualitativ hochwertigere Ergebnisse als die Zero-Shot- oder Few-Shot-Ansätze allein bieten können.
  • Verbesserung des Few-Shot-Ansatzes durch Trainieren der Modellgewichtungen mit spezifischen Eingabeaufforderungen und einer bestimmten Struktur. Mit dieser Methode können Sie bessere Ergebnisse für eine größere Anzahl von Aufgaben erzielen, ohne Beispiele in der Eingabeaufforderung anzugeben. Dadurch wird weniger Text gesendet, und es werden weniger Token verarbeitet.

Wenn Sie eine GPT-3-Lösung erstellen, sind der Entwurf und der Inhalt der Eingabeaufforderung für das Training die wichtigste und aufwändigste Aufgabe.

Eingabeaufforderungsengineering

Prompt Engineering ist eine Disziplin der linguistischen Datenverarbeitung, bei der Eingaben ermittelt werden, die wünschenswerte oder nützliche Ausgaben liefern. Die Art und Weise, wie der Inhalt in Eingabeaufforderungen von Benutzer*innen an das System ausgedrückt wird, kann die Ausgabe erheblich ändern. Der Eingabeaufforderungsentwurf ist der wichtigste Prozess, um sicherzustellen, dass das GPT-3-Modell eine wünschenswerte und kontextbezogene Antwort liefert.

Die in diesem Artikel beschriebene Architektur verwendet den Vervollständigungsendpunkt für die Zusammenfassung. Der Vervollständigungsendpunkt ist eine Azure KI Services-API, die als Eingabe eine partielle Eingabeaufforderung oder einen Kontext akzeptiert und eine oder mehrere Ausgaben zurückgibt, die den Eingabetext fortsetzen oder vervollständigen. Benutzer*innen geben Eingabetext als Eingabeaufforderung an, und das Modell generiert Text, der dem bereitgestellten Kontext oder Muster entspricht. Der Eingabeaufforderungsentwurf hängt stark von der Aufgabe und den Daten ab. Es erfordert viel Zeit und Aufwand Prompt Engineering in ein Feinabstimmungsdataset zu integrieren und vor der Verwendung des Systems in der Produktion zu ermitteln, welche Eingabeaufforderungen am besten funktionieren.

Äußerungsentwurf

GPT-3-Modelle können mehrere Aufgaben ausführen. Sie müssen die Ziele des Entwurfs daher genau festlegen. Die Modelle schätzen basierend auf der bereitgestellten Eingabeaufforderung, welche Ausgabe gewünscht wird.

Wenn Sie die Worte „Zeige mir eine Liste von Katzenrassen“ senden, geht das Modell beispielsweise nicht automatisch davon aus, dass Sie eine Liste von Katzenrassen erhalten möchten. Sie könnten das Modell genauso gut auffordern, eine Unterhaltung fortzusetzen, bei der die ersten Worte „Zeige mir eine Liste von Katzenrassen“ und die nächsten Worte „und ich sage, welche ich mag“ lauten. Würde das Modell nur davon ausgehen, dass Sie eine Liste von Katzen erwarten, wären die Inhaltserstellung, Klassifizierung oder andere vom Modell ausgeführte Aufgaben weniger zuverlässig.

Wie unter Erfahren Sie, wie Sie Text generieren oder bearbeiten beschrieben, gibt es drei grundlegende Richtlinien für das Erstellen von Eingabeaufforderungen:

  • Zeigen und Erläutern Verdeutlichen Sie, was Sie erwarten, indem Sie Anweisungen und/oder Beispiele bereitstellen. Wenn das Modell eine Liste von Elementen in alphabetischer Reihenfolge ordnen oder einen Absatz nach der Stimmung klassifizieren soll, zeigen Sie ihm, dass Sie dies erwarten.
  • Bereitstellen von Qualitätsdaten Stellen Sie eine ausreichende Anzahl von Beispielen bereit, wenn Sie eine Klassifizierung erstellen oder ein Modell einem Muster folgen soll. Denken Sie daran, Ihre Beispiele Korrektur zu lesen. Das Modell ist in der Regel in der Lage, Rechtschreibfehler zu erkennen und eine Antwort zurückzugeben. Es könnte aber auch annehmen, dass die Rechtschreibfehler beabsichtigt sind, was sich auf die Antwort auswirken kann.
  • Überprüfen Sie Ihre Einstellungen. Die Einstellungen temperature und top_p bestimmen, wie deterministisch das Modell eine Antwort generiert. In Fällen, in denen es nur eine richtige Antwort gibt, konfigurieren Sie diese Einstellungen auf einer niedrigeren Ebene. Wenn Sie vielfältigere Antworten wünschen, können Sie die Einstellungen auf einer höheren Ebene konfigurieren. Die Annahme, dass diese Einstellungen intelligent oder kreativ sind, ist ein häufiger Fehler.

Alternativen

Azure Conversational Language Understanding (CLU) ist eine Alternative zur hier verwendeten Zusammenfassung. Der Hauptzweck von Conversational Language Understanding besteht darin, Modelle zu erstellen, die die allgemeine Absicht einer eingehenden Äußerung vorhersagen, wertvolle Informationen daraus extrahieren und eine auf das Thema abgestimmte Antwort generieren. Dieses Feature ist in Chatbotanwendungen nützlich, wenn auf eine vorhandene Wissensdatenbank verwiesen werden kann, um den passendsten Vorschlag für eine eingehende Äußerung zu finden. Es ist wenig hilfreich, wenn der Eingabetext keine Antwort erfordert. Diese Architektur dient dazu, eine kurze Zusammenfassung langer Textinhalte zu generieren. Die Kernaussage des Inhalts wird kurz beschrieben, und alle wichtigen Informationen werden angezeigt.

Beispielszenarien

In diesem Anwendungsfall wird eine Sammlung von Gesetzesvorlagen zusammengefasst, die vom Kongress verabschiedet wurden. Die Zusammenfassung wird fein abgestimmt, um sie einer vom Menschen generierten Zusammenfassung (bezeichnet als Ground Truth-Zusammenfassung) anzugleichen.

Zero-Shot-Prompt Engineering wird verwendet, um die Gesetzesvorlagen zusammenzufassen. Die Eingabeaufforderung und die Einstellungen werden anschließend geändert, um verschiedene Zusammenfassungsausgaben zu generieren.

Dataset

Das erste Dataset ist das Dataset „BillSum“ für die Zusammenfassung der Gesetzesvorlagen des US-Kongresses und des Bundesstaats Kalifornien. In diesem Beispiel werden nur die Gesetzesvorlagen des Kongresses verwendet. Die Daten sind in 18.949 Gesetzesvorlagen für das Training und 3.269 Gesetzesvorlagen für Tests unterteilt. „BillSum“ konzentriert sich auf Gesetze mit mittlerer Länge zwischen 5.000 und 20.000 Zeichen. Das Datset wird bereinigt und vorverarbeitet.

Weitere Informationen zum Dataset und Anweisungen zum Download finden Sie unter FiscalNote/BillSum auf GitHub.

BillSum-Schema

Das Schema des Datasets „BillSum“ umfasst Folgendes:

  • bill_id. Ein Bezeichner für die Gesetzesvorlage.
  • text. Der Text der Gesetzesvorlage.
  • summary. Eine von Menschen geschriebene Zusammenfassung der Gesetzesvorlage.
  • title. Der Titel der Gesetzesvorlage.
  • text_len. Die Zeichenlänge der Gesetzesvorlage.
  • sum_len. Die Zeichenlänge der Zusammenfassung der Gesetzesvorlage.

In diesem Anwendungsfall werden die Elemente text und summary verwendet.

Zero-shot

Das Ziel besteht darin, das GPT-3-Modell für Eingaben im Konversationsstil zu trainieren. Der Vervollständigungsendpunkt wird verwendet, um eine Azure OpenAI-API und eine Eingabeaufforderung zu erstellen, die die beste Zusammenfassung der Gesetzesvorlage generiert. Die Eingabeaufforderungen müssen mit Sorgfalt erstellt werden, damit sie relevante Informationen extrahieren. Um allgemeine Zusammenfassungen aus einer bestimmten Gesetzesvorlage zu extrahieren, wird das folgende Format verwendet.

  • Präfix: die gewünschte Aktion
  • Kontexteinführung: der Kontext
  • Kontext: die Informationen, die zum Bereitstellen einer Antwort erforderlich sind (in diesem Fall der zusammenzufassende Text)
  • Suffix: das beabsichtigte Format der Antwort (z. B. eine Antwort, eine Vervollständigung oder eine Zusammenfassung)
API_KEY = # SET YOUR OWN API KEY HERE
RESOURCE_ENDPOINT = " -- # SET A LINK TO YOUR RESOURCE ENDPOINT -- "

openai.api_type = "azure"
openai.api_key = API_KEY
openai.api_base = RESOURCE_ENDPOINT
openai.api_version = "2022-12-01-preview"
prompt_i = 'Summarize the legislative bill given the title and the text.\n\nTitle:\n'+" ".join([normalize_text(bill_title_1)])+ '\n\nText:\n'+ " ".join([normalize_text(bill_text_1)])+'\n\nSummary:\n'
response = openai.Completion.create(
    engine=TEXT_DAVINCI_001
    prompt=prompt_i,
    temperature=0.4,
    max_tokens=500,
    top_p=1.0,
    frequency_penalty=0.5,
    presence_penalty=0.5,
    stop=['\n\n###\n\n'], # The ending token used during inference. Once it reaches this token, GPT-3 knows the completion is over.
    best_of=1
    )
 = 1

Ground Truth: Nationale Verordnung zur Steuervergünstigung für Wissenschaftspädagogik für Unternehmen von 2007 (National Science Education Tax Incentive for Businesses Act of 2007) – Ergänzung des US-amerikanischen Steuergesetzes (Internal Revenue Code) um einen Freibetrag für die allgemeine Unternehmenssteuer (General Business Tax) für Zuwendungen in Form von Eigentum oder Leistungen an Grund- und Sekundarschulen sowie für die Ausbildung von Lehrkräften zur Förderung des Unterrichts in Wissenschaft, Technologie, Ingenieurwissenschaften und Mathematik (Science, Technology, Engineering and Mathematics, STEM).

Zusammenfassung des Zero-Shot-Modells: Die nationale Verordnung zur Steuervergünstigung für Wissenschaftspädagogik für Unternehmen von 2007 würde zu einem neuen Steuerfreibetrag für Unternehmen führen, die Zuwendungen für den Unterricht in Wissenschaft, Technologie, Ingenieurwissenschaften und Mathematik an Grund- und Sekundarschulen (STEM) leisten. Der Freibeitrag würde 100 Prozent der qualifizierten STEM-Zuwendungen des Steuerpflichtigen für das Steuerjahr betragen. Zu qualifizierten STEM-Zuwendungen zählen Zuwendungen an STEM-Schulen, Ausgaben für STEM-Praktika und Ausgaben für die Ausbildung von STEM-Lehrkräften.

Beobachtungen: Das Zero-Shot-Modell generiert eine präzise, generalisierte Zusammenfassung des Dokuments. Sie ähnelt der vom Menschen geschriebenen Ground Truth und erfasst die gleichen wichtigen Punkte. Sie ist wie eine von Menschen geschriebene Zusammenfassung aufgebaut und auf den Punkt fokussiert.

Feinabstimmung

Die Feinabstimmung verbessert das Zero-Shot-Lernen, indem mehr Beispiele für das Training verwendet werden, als Sie in die Eingabeaufforderung einschließen können. Dadurch erzielen Sie bessere Ergebnisse für eine größere Anzahl von Aufgaben. Nachdem ein Modell fein abgestimmt wurde, müssen Sie keine Beispiele in der Eingabeaufforderung angeben. Die Feinabstimmung spart Geld, da sie die Anzahl erforderlicher Token reduziert und latenzärmere Anforderungen ermöglicht.

Im Allgemeinen umfasst die Feinabstimmung die folgenden Schritte:

  • Aufbereiten und Hochladen von Trainingsdaten
  • Trainieren eines neuen fein abgestimmten Modells
  • Verwenden des fein abgestimmten Modells

Weitere Informationen finden Sie unter Anpassen eines Modells mit Azure OpenAI Service.

Vorbereiten von Daten für die Feinabstimmung

In diesem Schritt können Sie das Zero-Shot-Modell verbessern, indem Sie Prompt Engineering für die Eingabeaufforderungen nutzen, die zur Feinabstimmung verwendet werden. Dadurch können Sie Anweisungen zur Verwendung der Eingabeaufforderungs-/Vervollständigungspaare für das Modell bereitstellen. In einem Feinabstimmungsmodell dienen Eingabeaufforderungen als Ausgangspunkt, den das Modell zum Lernen und Treffen von Vorhersagen verwenden kann. Dieser Prozess ermöglicht dem Modell ein erstes grundlegendes Verständnis der Daten, das anschließend schrittweise verbessert werden kann, wenn mehr Daten für das Modell verfügbar gemacht werden. Zudem können Eingabeaufforderungen dem Modell das Identifizieren von Mustern in den Daten ermöglichen, die es andernfalls nicht erkennen würde.

Die gleiche Prompt Engineering-Struktur wird auch nach dem Trainieren des Modells beim Rückschluss verwendet, damit das Modell das Verhalten erkennt, das es während des Trainings gelernt hat, und gemäß den Anweisungen Vervollständigungen generieren kann.

#Adding variables used to design prompts consistently across all examples
#You can learn more here: https://learn.microsoft.com/azure/cognitive-services/openai/how-to/prepare-dataset

LINE_SEP = " \n "
PROMPT_END = " [end] "
#Injecting the zero-shot prompt into the fine-tune dataset
def stage_examples(proc_df):
    proc_df['prompt'] = proc_df.apply(lambda x:"Summarize the legislative bill. Do not make up facts.\n\nText:\n"+" ".join([normalize_text(x['prompt'])])+'\n\nSummary:', axis=1)
    proc_df['completion'] = proc_df.apply(lambda x:" "+normalize_text(x['completion'])+PROMPT_END, axis=1)

    return proc_df

df_staged_full_train = stage_examples(df_prompt_completion_train)
df_staged_full_val = stage_examples(df_prompt_completion_val)

Nachdem die Daten für die Feinabstimmung im richtigen Format bereitgestellt wurden, können Sie mit dem Ausführen der Befehle zur Feinabstimmung beginnen.

Als Nächstes können Sie die OpenAI-CLI verwenden, um einige der Schritte zur Datenaufbereitung auszuführen. Das OpenAI-Tool überprüft Daten, stellt Vorschläge bereit und formatiert Daten neu.

openai tools fine_tunes.prepare_data -f data/billsum_v4_1/prompt_completion_staged_train.csv

openai tools fine_tunes.prepare_data -f data/billsum_v4_1/prompt_completion_staged_val.csv
Feinabstimmen des Datasets
payload = {
  "model": "curie",
  "training_file": " -- INSERT TRAINING FILE ID -- ",
  "validation_file": "-- INSERT VALIDATION FILE ID --",
  "hyperparams": {
  "n_epochs": 1,
  "batch_size": 200,
  "learning_rate_multiplier": 0.1,
  "prompt_loss_weight": 0.0001    
  }
}

url = RESOURCE_ENDPOINT + "openai/fine-tunes?api-version=2022-12-01-preview"
r = requests.post(url, 
    headers={
    "api-key": API_KEY,
    "Content-Type": "application/json"
    },
    json = payload
)
data = r.json()
print(data)
fine_tune_id = data['id']
print('Endpoint Called: {endpoint}'.format(endpoint = url))
print('Status Code: {status}'.format(status= r.status_code))
print('Fine tuning job ID: {id}'.format(id=fine_tune_id))
print('Response Information \n\n {text}'.format(text=r.text))
Auswerten des fein abgestimmten Modells

In diesem Abschnitt wird veranschaulicht, wie Sie das fein abgestimmte Modell auswerten.

#Run this cell to check status
url = RESOURCE_ENDPOINT + "openai/fine-tunes/<--insert fine-tune id-->?api-version=2022-12-01-preview"
r = requests.get(url, 
    headers={
    "api-key": API_KEY,
    "Content-Type": "application/json"
    }
)

data = r.json()
print('Endpoint Called: {endpoint}'.format(endpoint = url))
print('Status Code: {status}'.format(status= r.status_code))
print('Fine tuning ID: {id}'.format(id=fine_tune_id))
print('Status: {status}'.format(status = data['status'])) 
print('Response Information \n\n {text}'.format(text=r.text))

Ground Truth: Nationale Verordnung zur Steuervergünstigung für Wissenschaftspädagogik für Unternehmen von 2007 (National Science Education Tax Incentive for Businesses Act of 2007) – Ergänzung des US-amerikanischen Steuergesetzes (Internal Revenue Code) um einen Freibetrag für die allgemeine Unternehmenssteuer (General Business Tax) für Zuwendungen in Form von Eigentum oder Leistungen an Grund- und Sekundarschulen sowie für die Ausbildung von Lehrkräften zur Förderung des Unterrichts in Wissenschaft, Technologie, Ingenieurwissenschaften und Mathematik (Science, Technology, Engineering and Mathematics, STEM).

Fein abgestimmte Modellzusammenfassung: Diese Gesetzesvorlage sieht einen Steuerfreibetrag für Zuwendungen an Grund- und Sekundarschulen für den Unterricht in den Bereichen Wissenschaft, Technologie, Ingenieurwissenschaften und Mathematik vor. Der Freibetrag entspricht 100 % der qualifizierten STEM-Zuwendungen, die von Steuerpflichtigen im Steuerjahr geleistet wurden. Zu qualifizierten STEM-Zuwendungen zählen: (1) Zuwendungen an STEM-Schulen, (2) Ausgaben für STEM-Praktika und (3) Ausgaben für die Ausbildung von STEM-Lehrkräften. Diese Gesetzesvorlage sieht auch einen Steuerfreibetrag für Zuwendungen an Grund- und Sekundarschulen für den Unterricht in den Bereichen Wissenschaft, Technologie, Ingenieurwissenschaften und Mathematik vor. Der Freibetrag entspricht 100 % der qualifizierten STEM-Zuwendungen, die von den Steuerpflichtigen im Steuerjahr geleistet wurden. Zu qualifizierten STEM-Zuwendungen zählen: (1) im Steuerjahr bezahlte oder entstandene STEM-Zuwendungsbeträge für Dienstleistungen, die in den USA oder an einem Militärstützpunkt außerhalb des USA erbracht wurden; und (2) im Steuerjahr eingebrachte STEM-Bestandsobjekte, die von einer Bildungsorganisation in den USA oder an einem militärischen Stützpunkt außerhalb des USA für den Grund- und Sekundarschulunterricht in den Bereichen Wissenschaft, Technologie, Ingenieurwissenschaften und Mathematik genutzt wurden.

Beobachtungen: Insgesamt fasst das fein abgestimmte Modell die Gesetzesvorlage sehr gut zusammen. Es erfasst Fachbegriffe und die wichtigen Punkte, die in der vom Menschen geschriebenen Ground Truth enthalten sind, aber nicht erklärt werden. Es unterscheidet sich durch die detailliertere und umfassendere Zusammenfassung vom Zero-Shot-Modell.

Anwendungsfall: Finanzberichte

In diesem Anwendungsfall wird das Zero-Shot-Prompt Engineering verwendet, um Zusammenfassungen von Finanzberichten zu erstellen. Anschließend wird ein als „Zusammenfassung der Zusammenfassungen“ bezeichneter Ansatz verwendet, um die Ergebnisse zu generieren.

Ansatz „Zusammenfassung der Zusammenfassungen“

Wenn Sie Eingabeaufforderungen schreiben, muss der gesamte GPT-3-Text der Eingabeaufforderung und der resultierenden Vervollständigung weniger als 4.000 Token enthalten. Der Zusammenfassungstext ist somit auf einige Seiten beschränkt. Für Dokumente, die in der Regel mehr als 4.000 Token (etwa 3.000 Wörter) enthalten, können Sie den Ansatz Zusammenfassung der Zusammenfassungen verwenden. Bei der Verwendung dieses Ansatzes wird der gesamte Text zunächst aufgeteilt, um die Tokeneinschränkungen zu erfüllen. Anschließend werden Zusammenfassungen der kürzeren Texte abgeleitet. Im nächsten Schritt wird eine Zusammenfassung der Zusammenfassungen erstellt. Dieser Anwendungsfall veranschaulicht den Ansatz „Zusammenfassung der Zusammenfassungen“ mit einem Zero-Shot-Modell. Diese Lösung eignet sich für lange Dokumente. Darüber hinaus wird in diesem Abschnitt beschrieben, wie unterschiedliche Prompt Engineering-Verfahren zu variierenden Ergebnissen führen können.

Hinweis

Die Feinabstimmung wird im Anwendungsfall der Finanzberichte nicht angewendet, da nicht genügend Daten für diesen Schritt verfügbar sind.

Dataset

Das Dataset für diesen Anwendungsfall ist technisch und enthält wichtige quantitative Metriken zur Bewertung der Leistung eines Unternehmens.

Das Finanzdataset umfasst Folgendes:

  • url: Die URL für den Finanzbericht
  • pages: Die Seite im Bericht, die wichtige Informationen enthält, die zusammengefasst werden sollen (1 indiziert).
  • completion: Die Ground Truth-Zusammenfassung des Berichts
  • comments: Alle zusätzlichen Informationen, die benötigt werden

In diesem Anwendungsfall wird der Finanzbericht von Rathbone aus dem Dataset zusammengefasst. Rathbone ist ein Investment- und Vermögensverwaltungsunternehmen für Privatkund*innen. Der Bericht hebt die Leistung von Rathbone im Jahr 2020 hervor und erwähnt Leistungsmetriken wie Gewinn, verwaltetes Vermögen und Erlöse. Die wichtigen zusammenzufassenden Informationen befinden sich auf Seite 1 der PDF-Datei.

API_KEY = # SET YOUR OWN API KEY HERE
RESOURCE_ENDPOINT = "# SET A LINK TO YOUR RESOURCE ENDPOINT"

openai.api_type = "azure"
openai.api_key = API_KEY
openai.api_base = RESOURCE_ENDPOINT
openai.api_version = "2022-12-01-preview"
name = os.path.abspath(os.path.join(os.getcwd(), '---INSERT PATH OF LOCALLY DOWNLOADED RATHBONES_2020_PRELIM_RESULTS---')).replace('\\', '/')

pages_to_summarize = [0]
# Using pdfminer.six to extract the text 
# !pip install pdfminer.six
from pdfminer.high_level import extract_text
t = extract_text(name
, page_numbers=pages_to_summarize
)
print("Text extracted from " + name)
t
Zero-Shot-Ansatz

Wenn Sie den Zero-Shot-Ansatz verwenden, geben Sie keine aufgelösten Beispiele an. Sie geben nur den Befehl und die nicht aufgelöste Eingabe an. In diesem Beispiel wird das Anweisungsmodell verwendet. Dieses Modell dient speziell dazu, eine Anweisung zu akzeptieren und eine Antwort ohne zusätzlichen Kontext aufzuzeichnen, was ideal für den Zero-Shot-Ansatz ist.

Nachdem Sie den Text extrahiert haben, können Sie verschiedene Eingabeaufforderungen verwenden, um zu überprüfen, wie diese die Qualität der Zusammenfassung beeinflussen:

#Using the text from the Rathbone's report, you can try different prompts to see how they affect the summary

prompt_i = 'Summarize the key financial information in the report using qualitative metrics.\n\nText:\n'+" ".join([normalize_text(t)])+'\n\nKey metrics:\n'

response = openai.Completion.create(
        engine="davinci-instruct",
        prompt=prompt_i,
        temperature=0,
        max_tokens=2048-int(len(prompt_i.split())*1.5),
        top_p=1.0,
        frequency_penalty=0.5,
        presence_penalty=0.5,
        best_of=1
    )
print(response.choices[0].text)
>>>
- Funds under management and administration (FUMA) reached £54.7 billion at 31 December 2020, up 8.5% from £50.4 billion at 31 December 2019
- Operating income totalled £366.1 million, 5.2% ahead of the prior year (2019: £348.1 million)
- Underlying1 profit before tax totalled £92.5 million, an increase of 4.3% (2019: £88.7 million); underlying operating margin of 25.3% (2019: 25.5%)

# Different prompt

prompt_i = 'Extract most significant money related values of financial performance of the business like revenue, profit, etc. from the below text in about two hundred words.\n\nText:\n'+" ".join([normalize_text(t)])+'\n\nKey metrics:\n'

response = openai.Completion.create(
        engine="davinci-instruct",
        prompt=prompt_i,
        temperature=0,
        max_tokens=2048-int(len(prompt_i.split())*1.5),
        top_p=1.0,
        frequency_penalty=0.5,
        presence_penalty=0.5,
        best_of=1
    )
print(response.choices[0].text)
>>>
- Funds under management and administration (FUMA) grew by 8.5% to reach £54.7 billion at 31 December 2020
- Underlying profit before tax increased by 4.3% to £92.5 million, delivering an underlying operating margin of 25.3%
- The board is announcing a final 2020 dividend of 47 pence per share, which brings the total dividend to 72 pence per share, an increase of 2.9% over 2019
Herausforderungen
  • Wie Sie sehen, erzeugt das Modell möglicherweise Metriken, die im Originaltext nicht erwähnt werden.

    Lösungsvorschlag: Sie können dieses Problem beheben, indem Sie die Eingabeaufforderung ändern.

  • Die Zusammenfassung kann sich auf einen Abschnitt des Artikels konzentrieren und andere wichtige Informationen vernachlässigen.

    Lösungsvorschlag: Probieren Sie den Ansatz „Zusammenfassung der Zusammenfassungen“. Teilen Sie den Bericht in Abschnitte auf, und erstellen Sie kleinere Zusammenfassungen, die Sie dann zusammenfassen können, um die Ausgabezusammenfassung zu erstellen.

Dieser Code implementiert die vorgeschlagenen Lösungen:

# Body of function

from pdfminer.high_level import extract_text

text = extract_text(name
, page_numbers=pages_to_summarize
)

r = splitter(200, text)

tok_l = int(2000/len(r))
tok_l_w = num2words(tok_l)

res_lis = []
# Stage 1: Summaries
for i in range(len(r)):
    prompt_i = f'Extract and summarize the key financial numbers and percentages mentioned in the Text in less than {tok_l_w} 
words.\n\nText:\n'+normalize_text(r[i])+'\n\nSummary in one paragraph:'

    response = openai.Completion.create(
        engine=TEXT_DAVINCI_001,
        prompt=prompt_i,
        temperature=0,
        max_tokens=tok_l,
        top_p=1.0,
        frequency_penalty=0.5,
        presence_penalty=0.5,
        best_of=1
    )
    t = trim_incomplete(response.choices[0].text)
    res_lis.append(t)

# Stage 2: Summary of summaries
prompt_i = 'Summarize the financial performance of the business like revenue, profit, etc. in less than one hundred words. Do not make up values that are not mentioned in the Text.\n\nText:\n'+" ".join([normalize_text(res) for res in res_lis])+'\n\nSummary:\n'

response = openai.Completion.create(
        engine=TEXT_DAVINCI_001,
        prompt=prompt_i,
        temperature=0,
        max_tokens=200,
        top_p=1.0,
        frequency_penalty=0.5,
        presence_penalty=0.5,
        best_of=1
)

print(trim_incomplete(response.choices[0].text))

Die Eingabeaufforderung enthält den Originaltext aus dem Finanzbericht von Rathbone für ein bestimmtes Jahr.

Ground Truth: Rathbone hat im Jahr 2020 einen Umsatz von 366,1 Mio. £ im Vergleich zu 348,1 Mio. £ im Jahr 2019 und eine Zunahme des zugrunde liegenden Gewinns vor Steuer von 88,7 Mio. £ auf 92,5 Mio. £ erzielt. Das verwaltete Vermögen stieg um 8,5 % von 50,4 Mrd. £ auf 54,7 Mrd. £ und das Vermögen in der Vermögensverwaltung um 4,4 % auf 44,9 Mrd. £. Die Nettozuflüsse lagen im Jahr 2020 bei 2,1 Mrd. £ im Vergleich zu 600 Mio. £ im Vorjahr und gehen in erster Linie auf Zuflüsse in Höhe von 1,5 Mrd. £ in das Fondsgeschäft und die Übertragung von Vermögenswerten in Höhe von 400 Mio. £ von Barclays Wealth zurück.

Zero-Shot-Zusammenfassung der Zusammenfassungsausgabe: Rathbones hat im Jahr 2020 eine starke Leistung erzielt, wobei das verwaltete Vermögen zum Jahresende um 8,5 % auf 54,7 Milliarden £ stieg. Der zugrunde liegende Gewinn vor Steuer stieg um 4,3 % auf 92,5 Mio. £, sodass sich eine zugrunde liegende operative Marge von 25,3 % ergibt. Die Nettozuflüsse betrugen insgesamt 2,1 Milliarden £, was einer Wachstumsrate von 4,2 % entspricht. Der Jahresgewinn vor Steuern betrug 43,8 Mio. £, der unverwässerte Gewinn pro Aktie belief sich auf 49,6 %. Das Betriebsergebnis für das Jahr war um 5,2 % höher als im Vorjahr und belief sich auf 366,1 Mio. £.

Beobachtungen: Der Ansatz „Zusammenfassung der Zusammenfassungen“ generiert ein hervorragendes Resultset, das die anfänglichen Herausforderungen löst, die beim Bereitstellen einer detaillierteren und umfassenderen Zusammenfassung aufgetreten sind. Die Fachbegriffe und wichtigen Punkte, die in der Ground Truth enthalten, aber nicht gut erklärt sind, werden ausgezeichnet erfasst.

Das Zero-Shot-Modell eignet sich gut für die Zusammenfassung von allgemeinen Dokumenten. Wenn die Daten branchen- oder themenspezifisch sind, Fachbegriffe enthalten oder branchenspezifische Kenntnisse erfordern, ist die Feinabstimmung am besten geeignet. Dieser Ansatz eignet sich beispielsweise gut für medizinische Fachzeitschriften, Rechtsformen und Finanzaufstellungen. Sie können den Few-Shot-Ansatz anstelle von Zero-Shot verwenden, um für das Modell Beispiele für die Formulierung einer Zusammenfassung bereitzustellen, damit es lernen kann, die bereitgestellte Zusammenfassung zu imitieren. Beim Zero-Shot-Ansatz trainiert diese Lösung das Modell nicht erneut. Das Wissen des Modells basiert auf dem GPT-3-Training. Das GPT-3-Modell wird mit fast allen verfügbaren Daten aus dem Internet trainiert. Es eignet sich gut für Aufgaben, die kein bestimmtes Wissen erfordern.

Empfehlungen

Es gibt viele Möglichkeiten zum Erstellen von Zusammenfassungen mit GPT-3, darunter Zero-Shot, Few-Shot und Feinabstimmung. Die Ansätze erzeugen Zusammenfassungen unterschiedlicher Qualität. Sie können untersuchen, welcher Ansatz die besten Ergebnisse für Ihren Anwendungsfall liefert.

Im Folgenden sind einige Empfehlungen aufgeführt, die auf Beobachtungen zu den in diesem Artikel vorgestellten Tests basieren:

  • Zero-Shot eignet sich am besten für allgemeine Dokumente, die kein spezifisches Fachwissen erfordern. Bei diesem Ansatz wird versucht, alle allgemeinen Informationen kurz und in menschenähnlicher Weise zu erfassen. Er bietet eine Basiszusammenfassung von hoher Qualität. Für das juristische Dataset, das in den Tests in diesem Artikel verwendet wird, generiert der Zero-Shot-Ansatz eine qualitativ hochwertige Zusammenfassung.
  • Die Verwendung von Few-Shot für die Zusammenfassung langer Dokumente ist schwierig, da die Tokenbeschränkung überschritten wird, wenn ein Beispieltext bereitgestellt wird. Sie können stattdessen für lange Dokumente den Zero-Shot-Ansatz „Zusammenfassung der Zusammenfassungen“ verwenden oder das Dataset vergrößern, um eine erfolgreiche Feinabstimmung zu ermöglichen. Der Ansatz „Zusammenfassung der Zusammenfassungen“ generiert hervorragende Ergebnisse für das in diesen Tests verwendete Finanzdataset.
  • Die Feinabstimmung ist besonders nützlich für technische oder fachspezifische Anwendungsfälle, wenn die Informationen nicht ohne Weiteres verfügbar sind. Um mit diesem Ansatz die besten Ergebnisse zu erzielen, benötigen Sie ein Dataset, das einige Tausend Beispiele enthält. Bei der Feinabstimmung wird die Zusammenfassung mithilfe von Vorlagen erfasst und versucht, sie an die Darstellung der Zusammenfassungen im Dataset anzupassen. Beim juristischen Dataset führt dieser Ansatz zu einer Zusammenfassung von höherer Qualität als der Zero-Shot-Ansatz.

Auswerten der Zusammenfassung

Es gibt mehrere Techniken zum Auswerten der Leistung von Zusammenfassungsmodellen.

Hier sind einige Beispiele:

ROUGE (Recall-Oriented Understudy for Gisting Evaluation). Diese Technik umfasst Measures zum automatischen Bestimmen der Qualität einer Zusammenfassung durch einen Vergleich der Zusammenfassung mit idealen, von Menschen erstellten Zusammenfassungen. Die Measures zählen die Anzahl sich überschneidender Einheiten (z. B. N-Gramm, Wortfolgen und Wortpaare) zwischen der bewerteten computergenerierten Zusammenfassung und den idealen Zusammenfassungen.

Hier sehen Sie ein Beispiel:

reference_summary = "The cat ison porch by the tree"
generated_summary = "The cat is by the tree on the porch"
rouge = Rouge()
rouge.get_scores(generated_summary, reference_summary)
[{'rouge-1': {'r':1.0, 'p': 1.0, 'f': 0.999999995},
  'rouge-2': {'r': 0.5714285714285714, 'p': 0.5, 'f': 0.5333333283555556},
  'rouge-1': {'r': 0.75, 'p': 0.75, 'f': 0.749999995}}]

BERTScore. Diese Technik berechnet Ähnlichkeitswerte, indem generierte Zusammenfassungen und Referenzzusammenfassungen auf Tokenebene abgeglichen werden. Tokenübereinstimmungen werden berechnet, um die Kosinusähnlichkeit zwischen kontextualisierten Tokeneinbettungen aus BERT zu maximieren.

Hier sehen Sie ein Beispiel:

import torchmetrics
from torchmetrics.text.bert import BERTScore
preds = "You should have ice cream in the summer"
target = "Ice creams are great when the weather is hot"
bertscore = BERTScore()
score = bertscore(preds, target)
print(score)

Ähnlichkeitsmatrix. Eine Ähnlichkeitsmatrix ist eine Darstellung der Ähnlichkeiten zwischen verschiedenen Entitäten in einer Zusammenfassungsauswertung. Sie können sie verwenden, um verschiedene Zusammenfassungen desselben Texts zu vergleichen und deren Ähnlichkeit zu messen. Die Ähnlichkeitsmatrix wird durch ein zweidimensionales Raster dargestellt, in dem jede Zelle ein Measure für die Ähnlichkeit zwischen zwei Zusammenfassungen enthält. Sie können die Ähnlichkeit mit verschiedenen Methoden messen, z. B. Kosinusähnlichkeit, Jaccard-Ähnlichkeit und Edit-Distanz. Anschließend verwenden Sie die Matrix, um die Zusammenfassungen zu vergleichen und zu bestimmen, welche Zusammenfassung den Originaltext am genauesten wiedergibt.

Hier sehen Sie einen Beispielbefehl, der die Ähnlichkeitsmatrix eines BERTScore-Vergleichs zweier ähnlicher Sätze abruft:

bert-score-show --lang en -r "The cat is on the porch by the tree"
                          -c "The cat is by the tree on the porch"
                          -f out.png

Der erste Satz (The cat is on the porch by the tree) wird als Kandidat bezeichnet. Der zweite Satz wird als Referenz bezeichnet. Der Befehl verwendet BERTScore, um die Sätze zu vergleichen und eine Matrix zu generieren.

Die folgende Matrix zeigt die Ausgabe, die vom vorherigen Befehl generiert wird:

Diagramm: Beispiel für eine Ähnlichkeitsmatrix.

Weitere Informationen finden Sie unter SummEval: Reevaluating Summarization Evaluation (SummEval: Neuauswerten der Zusammenfassungsauswertung). Ein PyPI-Toolkit für die Zusammenfassung finden Sie unter Summ-eval 0.892.

Beitragende

Dieser Artikel wird von Microsoft gepflegt. Er wurde ursprünglich von folgenden Mitwirkenden geschrieben:

Hauptautor:

Andere Mitwirkende:

Melden Sie sich bei LinkedIn an, um nicht öffentliche LinkedIn-Profile anzuzeigen.

Nächste Schritte