Erkundung von ChatGPT im Vergleich zu Open-Source-Modellen bei etwas schwierigeren Aufgaben
Open-Source-LLMs wie Vicuna und MPT-7B-Chat tauchen überall auf, was zu vielen Diskussionen darüber geführt hat, wie diese Modelle im Vergleich zu kommerziellen LLMs (wie ChatGPT oder Bard) abschneiden.
Der Großteil des Vergleichs bezog sich auf Antworten auf einfache One-Turn-Fragen/Anweisungen. Die Leute von LMSYSOrg haben zum Beispiel eine interessante Analyse (+1 für Automatisierung und Reproduzierbarkeit) durchgeführt und Vicuna-13B mit ChatGPT anhand verschiedener kurzer Fragen verglichen, was sich hervorragend als Vergleich der Modelle als einfache Chatbots eignet . Viele interessante Einsatzmöglichkeiten von LLMs erfordern jedoch in der Regel komplexe Anweisungen und/oder Gespräche in mehreren Runden sowie eine zeitnahe technische Umsetzung. Wir glauben, dass die meisten Menschen in der „realen Welt“ verschiedene LLM-Angebote zu ihrem Problem mit einer Vielzahl unterschiedlicher Anregungen vergleichen möchten .
Dieser Blogbeitrag (gemeinsam mit Scott Lundberg verfasst ) ist ein Beispiel dafür, wie eine solche Erkundung mit aussehen könnte guidance
, einem Open-Source-Projekt, das Benutzern bei der Steuerung von LLMs hilft. Wir vergleichen zwei Open-Source-Modelle (Vicuna-13B, MPT-7b-Chat) mit ChatGPT (3.5) für Aufgaben unterschiedlicher Komplexität.
Aufwärmen: Gleichungen lösen
Zum Aufwärmen beginnen wir mit der Spielzeugaufgabe, einfache Polynomgleichungen zu lösen, bei der wir die Ausgabe auf Korrektheit überprüfen können und nicht viel schnelles Engineering benötigen sollten. Dies ähnelt der Kategorie „Mathe“ hier , mit dem Unterschied, dass wir Modelle anhand der Grundwahrheit als richtig/falsch bewerten, anstatt GPT-4 zur Bewertung der Ausgabe zu verwenden.
Kurzer Exkurs zur Chat-Syntax : Jedes dieser Modelle hat seine eigene Chat-Syntax mit speziellen Token, die Äußerungen trennen. So würde die gleiche Konversation in Vicuna und MPT aussehen (wo [generated response]
das Modell seine Ausgabe generieren würde):
Vicuña:
A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions.
USER: Can you please solve the following equation? x^2 + 2x + 1 = 0
ASSISTANT: [generated response] </s>
<|im_start|>system
- You are a helpful assistant chatbot trained by MosaicML.
- You answer questions.
- You are excited to be able to help the user, but will refuse to do anything that could be considered harmful to the user.
- You are more than just an information source, you are also able to write poetry, short stories, and make jokes.
<|im_end|>
<|im_start|>user Can you please solve the following equation? x^2 + 2x + 1 = 0<|im_end|>
<|im_start|>assistant [generated response]<|im_end|>
find_roots = guidance('''
{{#system~}}
{{llm.default_system_prompt}}
{{~/system}}
{{#user~}}
Please find the roots of the following equation: {{equation}}
Think step by step, find the roots, and then say:
ROOTS = [root1, root2...]
For example, if the roots are 1.3 and 2.2, say ROOTS = [1.3, 2.2].
Make sure to use real numbers, not fractions.
{{~/user}}
{{#assistant~}}
{{gen 'answer'}}
{{~/assistant~}}''')
import guidance
mpt = guidance.llms.transformers.MPTChat('mosaicml/mpt-7b-chat', device=1)
vicuna = guidance.llms.transformers.Vicuna('yourpath/vicuna-13b', device_map='auto')
chatgpt = guidance.llms.OpenAI("gpt-3.5-turbo")
equation = 'x^2 + 3.0x = 0'
roots = [0, -3]
answer_gpt = find_roots(llm=chatgpt, equation=equation)
answer_vicuna = find_roots(llm=vicuna, equation=equation)
answer_mpt = find_roots(llm=mpt, equation=equation)
Im Notizbuch zu diesem Beitrag schreiben wir eine Funktion zum Generieren zufälliger quadratischer Gleichungen mit ganzzahligen Wurzeln zwischen -20 und 20 und führen die Eingabeaufforderung 20 Mal mit jedem Modell aus. Die Ergebnisse waren wie folgt:
╔═══════════╦══════════╦
║ Model ║ Accuracy ║
╠═══════════╬══════════╬
║ ChatGPT ║ 80% ║
║ Vicuna ║ 0% ║
║ MPT ║ 0% ║
╚═══════════╩══════════╩
ChatGPT macht im letzten Schritt einen Berechnungsfehler, wo (13 +- 25) /2
sollte yield [19, -6]
statt [19.5, -6.5]
.
Da Vicuna und MPT nun bei quadratischen Gleichungen versagt haben, schauen wir uns noch einfachere Gleichungen an, wie z x - 10 = 0
. Für diese Gleichungen erhalten wir diese Zahlen:
╔═══════════╦══════════╦
║ Model ║ Accuracy ║
╠═══════════╬══════════╬
║ ChatGPT ║ 100% ║
║ Vicuna ║ 85% ║
║ MPT ║ 30% ║
╚═══════════╩══════════╩
Diskussion
Dies war eine sehr leichte Aufgabe, diente jedoch als Beispiel dafür, wie Modelle mit unterschiedlicher Chat-Syntax mit derselben Eingabeaufforderung verglichen werden können. Bei dieser speziellen Aufgaben-/Eingabeaufforderungskombination übertrifft ChatGPT Vicuna und MPT in Bezug auf die Genauigkeit (gemessen anhand der Grundwahrheit) bei weitem.
Aufgabe: Snippets extrahieren + Fragen zu Meetings beantworten
Wir wenden uns nun einer realistischeren Aufgabe zu, bei der die Bewertung der Genauigkeit nicht so einfach ist. Nehmen wir an, wir möchten, dass unser LLM Fragen (mit den relevanten Gesprächsabschnitten zur Begründung) zu Besprechungsprotokollen beantwortet.
Dies ist eine Anwendung, bei der einige Benutzer aus Datenschutzgründen lieber Open-Source-LLMs als kommerzielle LLMs verwenden möchten (z. B. möchten einige Unternehmen ihre Besprechungsdaten möglicherweise nicht an OpenAI senden).
Hier ist ein Transkript des Spielzeugtreffens für den Anfang:
Sitzungsprotokoll:
John : Okay, wir sind also alle hier, um das Angebot zu besprechen, das wir von Microsoft zum Kauf unseres Startups erhalten haben. Was denken Sie darüber?
Lucy : Nun, ich denke, es ist eine großartige Gelegenheit für uns. Microsoft ist ein riesiges Unternehmen mit vielen Ressourcen und sie könnten uns wirklich dabei helfen, unser Produkt auf die nächste Stufe zu bringen.
Steven : Ich stimme Lucy zu. Microsoft verfügt über umfangreiche Erfahrung in der Technologiebranche und könnte uns die Unterstützung bieten, die wir für das Wachstum unseres Unternehmens benötigen.
John : Ich verstehe Ihren Standpunkt, aber ich zögere ein wenig, unser Startup zu verkaufen. Wir haben viel Zeit und Mühe in den Aufbau dieses Unternehmens gesteckt und ich bin mir nicht sicher, ob ich bereit bin, es schon jetzt aufzugeben.
Lucy: Ich verstehe, woher du kommst, John, aber wir müssen über die Zukunft unseres Unternehmens nachdenken. Wenn wir an Microsoft verkaufen, erhalten wir Zugriff auf deren Ressourcen und Fachwissen, was uns dabei helfen könnte, unser Geschäft noch weiter auszubauen.
Steven : Richtig, und vergessen wir nicht die finanziellen Vorteile. Microsoft bietet uns viel Geld für unser Startup, was uns helfen könnte, in neue Projekte zu investieren und unser Team zu erweitern.
John : Ich verstehe Ihren Standpunkt, habe aber immer noch einige Vorbehalte. Was passiert, wenn Microsoft unser Produkt oder unsere Unternehmenskultur ändert? Was passiert, wenn wir die Kontrolle über unser eigenes Unternehmen verlieren?
Steven : Weißt du was, darüber hatte ich vorher noch nicht nachgedacht, aber vielleicht hat John Recht. Es wäre schade, wenn sich unsere Kultur ändern würde.
Lucy: Das sind berechtigte Bedenken, aber wir können die Vertragsbedingungen aushandeln, um sicherzustellen, dass wir eine gewisse Kontrolle über unser Unternehmen behalten. Und was das Produkt und die Kultur betrifft, können wir mit Microsoft zusammenarbeiten, um sicherzustellen, dass unsere Vision weiterhin intakt ist.
John : Aber werden wir uns nicht nur dadurch verändern, dass wir in ein großes Unternehmen integriert werden? Ich meine, wir sind ein kleines Startup mit einer sehr spezifischen Kultur. Microsoft ist ein riesiger Konzern mit einer ganz anderen Kultur. Ich bin mir nicht sicher, ob die beiden nebeneinander existieren können.
Steven : Aber John, hatten wir nicht immer vor, übernommen zu werden? Wird das nicht immer ein Problem sein?
Lucy : Richtig
John : Ich möchte einfach nicht verlieren, was wir hier aufgebaut haben.
Steven : Ich teile diese Sorge auch
Versuchen wir zunächst, ChatGPT dazu zu bringen, die Aufgabe für uns zu lösen. Wir gehen der Frage nach: „Wie denkt Steven über den Verkauf?“. Hier ist ein erster Versuch einer Eingabeaufforderung
qa_attempt1 = guidance('''{{#system~}}
{{llm.default_system_prompt}}
{{~/system}}
{{#user~}}
You will read a meeting transcript, then extract the relevant segments to answer the following question:
Question: {{query}}
Here is a meeting transcript:
----
{{transcript}}
----
Please answer the following question:
Question: {{query}}
Extract from the transcript the most relevant segments for the answer, and then answer the question.
{{/user}}
{{#assistant~}}
{{gen 'answer'}}
{{~/assistant~}}''')
qa_attempt3 = guidance('''{{#system~}}
{{llm.default_system_prompt}}
{{~/system}}
{{#user~}}
You will read a meeting transcript, then extract the relevant segments to answer the following question:
Question: {{query}}
Here is a meeting transcript:
----
{{transcript}}
----
Based on the above, please answer the following question:
Question: {{query}}
Please extract from the transcript whichever conversation segments are most relevant for the answer, and then answer the question.
Note that conversation segments can be of any length, e.g. including multiple conversation turns.
Please extract at most 3 segments. If you need less than three segments, you can leave the rest blank.
As an example of output format, here is a fictitious answer to a question about another meeting transcript.
CONVERSATION SEGMENTS:
Segment 1: Peter and John discuss the weather.
Peter: John, how is the weather today?
John: It's raining.
Segment 2: Peter insults John
Peter: John, you are a bad person.
Segment 3: Blank
ANSWER: Peter and John discussed the weather and Peter insulted John.
{{/user}}
{{#assistant~}}
{{gen 'answer'}}
{{~/assistant~}}''')
qa_attempt5 = guidance('''{{#system~}}
{{llm.default_system_prompt}}
{{~/system}}
{{#user~}}
You will read a meeting transcript, then extract the relevant segments to answer the following question:
Question: What were the main things that happened in the meeting?
Here is a meeting transcript:
----
Peter: Hey
John: Hey
Peter: John, how is the weather today?
John: It's raining.
Peter: That's too bad. I was hoping to go for a walk later.
John: Yeah, it's a shame.
Peter: John, you are a bad person.
----
Based on the above, please answer the following question:
Question: {{query}}
Please extract from the transcript whichever conversation segments are most relevant for the answer, and then answer the question.
Note that conversation segments can be of any length, e.g. including multiple conversation turns.
Please extract at most 3 segments. If you need less than three segments, you can leave the rest blank.
{{/user}}
{{#assistant~}}
CONVERSATION SEGMENTS:
Segment 1: Peter and John discuss the weather.
Peter: John, how is the weather today?
John: It's raining.
Segment 2: Peter insults John
Peter: John, you are a bad person.
Segment 3: Blank
ANSWER: Peter and John discussed the weather and Peter insulted John.
{{~/assistant~}}
{{#user~}}
You will read a meeting transcript, then extract the relevant segments to answer the following question:
Question: {{query}}
Here is a meeting transcript:
----
{{transcript}}
----
Based on the above, please answer the following question:
Question: {{query}}
Please extract from the transcript whichever conversation segments are most relevant for the answer, and then answer the question.
Note that conversation segments can be of any length, e.g. including multiple conversation turns.
Please extract at most 3 segments. If you need less than three segments, you can leave the rest blank.
{{~/user}}
{{#assistant~}}
{{gen 'answer'}}
{{~/assistant~}}''')
qa_attempt5(llm=chatgpt, transcript=meeting_transcript, query=query1)
qa_guided = guidance('''{{#system~}}
{{llm.default_system_prompt}}
{{~/system}}
{{#user~}}
You will read a meeting transcript, then extract the relevant segments to answer the following question:
Question: {{query}}
----
{{transcript}}
----
Based on the above, please answer the following question:
Question: {{query}}
Please extract the three segment from the transcript that are the most relevant for the answer, and then answer the question.
Note that conversation segments can be of any length, e.g. including multiple conversation turns. If you need less than three segments, you can leave the rest blank.
As an example of output format, here is a fictitious answer to a question about another meeting transcript:
CONVERSATION SEGMENTS:
Segment 1: Peter and John discuss the weather.
Peter: John, how is the weather today?
John: It's raining.
Segment 2: Peter insults John
Peter: John, you are a bad person.
Segment 3: Blank
ANSWER: Peter and John discussed the weather and Peter insulted John.
{{/user}}
{{#assistant~}}
CONVERSATION SEGMENTS:
Segment 1: {{gen 'segment1'}}
Segment 2: {{gen 'segment2'}}
Segment 3: {{gen 'segment3'}}
ANSWER: {{gen 'answer'}}
{{~/assistant~}}''')
Wir können die gleiche Eingabeaufforderung natürlich auch mit MPT ausführen:
Während MPT dem Format folgt, ignoriert es die Frage und übernimmt Auszüge aus dem Formatbeispiel und nicht aus dem echten Transkript.
Von nun an vergleichen wir nur noch ChatGPT und Vicuna.
Versuchen wir es mit einer anderen Frage: „Wer möchte das Unternehmen verkaufen?“
Hier ist ChatGPT:
Vicuña:
Beide scheinen wirklich gut zu funktionieren. Lassen Sie uns das Meeting-Protokoll auf die ersten paar Minuten eines Interviews mit Elon Musk umstellen. Der relevante Teil für die Frage, die wir stellen werden, ist
Elon Musk : Dann sage ich, Sir, dass Sie nicht wissen, wovon Sie sprechen.
Interviewer : Wirklich?
Elon Musk : Ja. Weil Sie kein einziges Beispiel für hasserfüllte Inhalte nennen können. Nicht einmal ein Tweet. Und dennoch haben Sie behauptet, dass der hasserfüllte Inhalt hoch sei. Das ist falsch.
Interviewer : Nein. Was ich behauptet habe –
Elon Musk : Sie haben nur gelogen.
Dann stellen wir folgende Frage:
„Beleidigt Elon Musk den Interviewer?“
ChatGPT:
Vicuña:
Vicuna hat das richtige Format und sogar die richtigen Segmente, generiert aber überraschenderweise eine völlig falsche Antwort, wenn es heißt: „Elon Musk wirft ihm nicht vor, zu lügen oder ihn in irgendeiner Weise zu beleidigen.“
Wir haben verschiedene andere Fragen und Konversationen ausprobiert und das allgemeine Muster war, dass Vicuna bei den meisten Fragen mit ChatGPT vergleichbar war, aber häufiger eine falsche Antwort gab als ChatGPT.
Aufgabe: Dinge mit Bash erledigen
Nun versuchen wir, diese LLMs dazu zu bringen, iterativ eine Bash-Shell zur Lösung einzelner Probleme zu verwenden. Immer wenn sie einen Befehl ausgeben, führen wir ihn aus und fügen die Ausgabe wieder in die Eingabeaufforderung ein, bis die Aufgabe gelöst ist.
Hier ist die ChatGPT-Eingabeaufforderung (Hinweis, die shell this.command
eine benutzerdefinierte Funktion mit this.command
dem Argument as aufruft):
terminal = guidance('''{{#system~}}
{{llm.default_system_prompt}}
{{~/system}}
{{#user~}}
Please complete the following task:
Task: list the files in the current directory
You can give me one bash command to run at a time, using the syntax:
COMMAND: command
I will run the commands on my terminal, and paste the output back to you. Once you are done with the task, please type DONE.
{{/user}}
{{#assistant~}}
COMMAND: ls
{{~/assistant~}}
{{#user~}}
Output: guidance project
{{/user}}
{{#assistant~}}
The files or folders in the current directory are:
- guidance
- project
DONE
{{~/assistant~}}
{{#user~}}
Please complete the following task:
Task: {{task}}
You can give me one bash command to run at a time, using the syntax:
COMMAND: command
I will run the commands on my terminal, and paste the output back to you. Once you are done with the task, please type DONE.
{{/user}}
{{#geneach 'commands' stop=False}}
{{#assistant~}}
{{gen 'this.command'}}
{{~/assistant~}}
{{~#user~}}
Output: {{shell this.command)}}
{{~/user~}}
{{/geneach}}''')
Tatsächlich folgt ChatGPT einem sehr natürlichen Ablauf und löst die Aufgabe. Es folgt nicht unserer Anweisung, FERTIG zu sagen, aber wir können die Iteration automatisch stoppen, da keine BEFEHLE ausgegeben werden.
Für die Open-Source-Modelle schreiben wir eine einfachere (geführte) Eingabeaufforderung mit einer Folge von Befehlsausgaben:
guided_terminal = guidance('''{{#system~}}
{{llm.default_system_prompt}}
{{~/system}}
{{#user~}}
Please complete the following task:
Task: list the files in the current directory
You can run bash commands using the syntax:
COMMAND: command
OUTPUT: output
Once you are done with the task, use the COMMAND: DONE.
{{/user}}
{{#assistant~}}
COMMAND: ls
OUTPUT: guidance project
COMMAND: DONE
{{~/assistant~}}
{{#user~}}
Please complete the following task:
Task: {{task}}
You can run bash commands using the syntax:
COMMAND: command
OUTPUT: output
Once you are done with the task, use the COMMAND: DONE.
{{~/user}}
{{#assistant~}}
{{#geneach 'commands' stop=False ~}}
COMMAND: {{gen 'this.command' stop='\\n'}}
OUTPUT: {{shell this.command)}}{{~/geneach}}
{{~/assistant~}}''')
Hier ist MPT:
In einer interessanten Wendung der Ereignisse ist Vicuna nicht in der Lage, die Aufgabe zu lösen, aber MPT hat Erfolg. Abgesehen vom Datenschutz (wir senden das Sitzungsprotokoll nicht an OpenAI) haben Open-Source-Modelle hier einen erheblichen Vorteil: Die gesamte Eingabeaufforderung ist ein einziger LLM-Lauf (und wir beschleunigen ihn sogar, indem wir die Ausgabestruktur-Tokens wie nicht generieren ) COMMAND:
. .
Im Gegensatz dazu müssen wir für jeden Befehl einen neuen Aufruf an ChatGPT tätigen, was langsamer und teurer ist.
Jetzt versuchen wir einen anderen Befehl: „Finde alle Jupyter-Notebook-Dateien in ~/work/guidance, die derzeit von Git nicht verfolgt werden“.
Hier ist ChatGPT:
Wieder einmal stoßen wir auf ein Problem mit ChatGPT, das nicht unserer angegebenen Ausgabestruktur folgt (und es uns daher unmöglich macht, es innerhalb eines Programms zu verwenden, ohne dass ein Mensch in der Schleife ist). Unser Programm hat gerade Befehle ausgeführt und daher nach der letzten ChatGPT-Nachricht oben gestoppt.
Wir vermuteten, dass die leere Ausgabe ChatGPT ausschaltete, und haben daher dieses spezielle Problem behoben, indem wir die Nachricht geändert haben, wenn keine Ausgabe erfolgt. Wir können jedoch das allgemeine Problem nicht beheben, dass ChatGPT nicht gezwungen werden kann, unserer angegebenen Ausgabestruktur zu folgen.
ChatGPT konnte das Problem nach dieser kleinen Änderung lösen. Mal sehen, wie es Vicuna geht:
Vicuna folgt unserer Ausgabestruktur, führt aber leider den falschen Befehl aus, um die Aufgabe auszuführen. MPT (nicht gezeigt) ruft git status wiederholt auf, sodass auch dies fehlschlägt.
Wir haben diese Programme für verschiedene andere Anweisungen ausgeführt und festgestellt, dass ChatGPT fast immer die richtige Befehlssequenz erzeugt, manchmal jedoch nicht dem angegebenen Format folgt (und daher menschliches Eingreifen erfordert). Die Open-Source-Modelle funktionierten nicht so gut (wir können sie wahrscheinlich durch schnelleres Engineering verbessern, aber bei den meisten schwierigeren Anweisungen scheiterten sie).
Imbissbuden
Zusätzlich zu den obigen Beispielen haben wir verschiedene Eingaben für beide Aufgaben (Fragebeantwortung und Bash) ausprobiert. Wir haben auch eine Reihe anderer Aufgaben ausprobiert, darunter Zusammenfassung, Beantwortung von Fragen, „kreative“ Generierung und Aufgaben zur Manipulation von Spielzeugketten, bei denen wir die Genauigkeit automatisch bewerten können.
Hier ist eine Zusammenfassung unserer Ergebnisse:
- Qualität bei der Aufgabe : Bei jeder Aufgabe, die wir ausprobiert haben, ist ChatGPT (3.5) bei der Aufgabe selbst immer noch stärker als Vicuna. MPT schnitt bei fast allen Aufgaben schlecht ab (vielleicht verwenden wir es falsch?), während Vicuna oft in der Nähe von ChatGPT lag (manchmal sehr nahe, manchmal viel schlechter, wie in der letzten Beispielaufgabe oben).
- Benutzerfreundlichkeit : Es ist viel aufwändiger, ChatGPT dazu zu bringen, einem bestimmten Ausgabeformat zu folgen, und daher ist es schwieriger, es innerhalb eines Programms zu verwenden (ohne dass ein Mensch in der Schleife ist). Darüber hinaus müssen wir immer Regex-Parser für die Ausgabe schreiben (im Gegensatz zu Vicuna, wo das Parsen einer Eingabeaufforderung mit klarer Syntax trivial ist).
Wir sind normalerweise in der Lage, das Strukturproblem zu lösen, indem wir weitere Beispiele mit wenigen Schüssen hinzufügen, aber es ist mühsam, sie zu schreiben, und manchmal weicht ChatGPT ohnehin vom Skript ab. Außerdem erhalten wir Eingabeaufforderungen, die länger, umständlicher und hässlicher sind, was unbefriedigend ist.
Die Möglichkeit, die Ausgabestruktur festzulegen, ist ein wesentlicher Vorteil von Open-Source-Modellen, bis zu dem Punkt, dass wir Vicuna manchmal ChatGPT vorziehen, auch wenn es bei der Aufgabe selbst etwas schlechter ist. - Effizienz : Wenn das Modell lokal ist, können wir Aufgaben in einem einzigen LLM-Lauf lösen (
guidance
behält den LLM-Status bei, während das Programm ausgeführt wird), was schneller und kostengünstiger ist. Dies gilt insbesondere dann, wenn Teilschritte den Aufruf anderer APIs oder Funktionen (z. B. Suche, Terminal usw.) beinhalten, was immer einen neuen Aufruf der OpenAI-API erfordert.guidance
beschleunigt auch die Generierung, da das Modell die Ausgabestruktur-Tokens nicht generieren muss, was manchmal einen großen Unterschied macht.
Wir sollten anerkennen, dass wir voreingenommen sind, da wir in den letzten Jahren häufig OpenAI-Modelle verwendet haben, verschiedene Artikel geschrieben haben, die auf GPT-3 basieren (z. B. hier , hier ), und ein Artikel , der im Grunde sagt: „GPT-4 ist großartig.“ , hier sind ein paar coole Beispiele.“
Apropos: Obwohl Vicuna einigermaßen mit ChatGPT (3.5) vergleichbar ist, glauben wir, dass GPT-4 ein viel stärkeres Modell ist, und sind gespannt, ob Open-Source-Modelle das erreichen können . Obwohl guidance
es mit OpenAI-Modellen recht gut funktioniert, glänzt es wirklich, wenn Sie die Ausgabestruktur festlegen und die Generierung beschleunigen können.
Auch hier sind wir eindeutig voreingenommen, aber wir denken, dass dies guidance
eine großartige Möglichkeit ist, diese Modelle zu nutzen, sei es mit APIs (OpenAI, Azure) oder lokal (huggingface). Hier ist ein Link zum Jupyter-Notizbuch mit Code für alle oben genannten Beispiele (und mehr).
Haftungsausschluss : Dieser Beitrag wurde gemeinsam von Marco Tulio Ribeiro und Scott Lundberg verfasst. Sie geben ausschließlich unsere persönliche Meinung wieder und nicht die unseres Arbeitgebers (Microsoft).
Danksagungen: Wir sind Harsha Nori wirklich dankbar für die aufschlussreichen Kommentare zu diesem Beitrag