Große Sprachmodelle und der Aufstieg der KI-Codegeneratoren
Von Martin Heller
Mitwirkender Herausgeber, InfoWorld |
Als ich im November 2021 über GitHub Copilot schrieb, war Copilot eine der wenigen verfügbaren Technologien zur KI-Codegenerierung. Ich habe es als Visual Studio Code-Erweiterung getestet. Zu dieser Zeit generierte Copilot nicht immer guten, korrekten oder sogar lauffähigen Code, war aber dennoch einigermaßen nützlich. Das große Versprechen von Copilot (und anderen Codegeneratoren, die maschinelles Lernen verwenden) besteht darin, dass es darauf ausgelegt ist, sich im Laufe der Zeit zu verbessern, sowohl durch die Einbeziehung von Benutzerfeedback als auch durch die Aufnahme neuer Codebeispiele in seinen Trainingskorpus.
Ab Mai 2023 sind allein für Visual Studio Code Hunderte von „KI“- oder „Codegenerierungs“-Erweiterungen verfügbar. Einige davon können Ihnen beim Codieren etwas Zeit sparen, aber wenn Sie dem generierten Code glauben, ohne ihn zu überprüfen, zu testen und zu debuggen, kann ich Ihnen eine Brücke verkaufen.
Hunderte von Visual Studio Code-Erweiterungen auf dem Markt versprechen „Codegenerierung“ oder „KI“, aber nur ein Bruchteil davon generiert tatsächlich Code, der auf maschinellem Lernen basiert.
Eine vielversprechende Entwicklung in diesem Bereich ist, dass mehrere Tools über eine automatische Generierung von Unit-Tests verfügen. Das Generieren von Unit-Tests ist ein viel einfacher zu handhabendes Problem als das Generieren von allgemeinem Code – tatsächlich kann es mit einfachen Mustern durchgeführt werden –, aber Sie müssen die generierten Tests trotzdem überprüfen und ausführen, um festzustellen, ob sie sinnvoll sind.
Im Abschluss dieses Artikels gebe ich einen kurzen Überblick über die Geschichte der Sprachmodelle, bevor ich einen Überblick über die hochmodernen großen Sprachmodelle (LLMs) gebe, wie die GPT-Familie von OpenAI und LaMDA und PaLM von Google, die zur Textgenerierung verwendet werden und Codegenerierung heute. Wir schließen mit einer kurzen Tour durch 10 Tools zur Codegenerierung ab, darunter Amazon CodeWhisperer, Google Bard und GitHub Copilot X.
Sprachmodelle gehen auf Andrey Markov im Jahr 1913 zurück. Dieses Forschungsgebiet wird heute Markov-Ketten genannt, ein Sonderfall von Markov-Modellen. Markov zeigte, dass im Russischen, insbesondere in Puschkins Eugen Onegin, die Wahrscheinlichkeit, dass ein Buchstabe erscheint, vom vorherigen Buchstaben abhängt und dass Konsonanten und Vokale im Allgemeinen dazu neigen, sich abzuwechseln. Markovs Methoden wurden seitdem auf Wörter, andere Sprachen und andere Sprachanwendungen verallgemeinert.
Markovs Arbeit wurde 1948 von Claude Shannon für die Kommunikationstheorie und 1985 erneut von Fred Jelinek und Robert Mercer von IBM erweitert, um ein auf Kreuzvalidierung basierendes Sprachmodell (das sie gelöschte Schätzungen nannten) zu erstellen und auf Echtzeit anzuwenden. Spracherkennung mit großem Wortschatz. Im Wesentlichen weist ein statistisches Sprachmodell Wortfolgen Wahrscheinlichkeiten zu.
Um ein Sprachmodell schnell in Aktion zu sehen, geben Sie ein paar Wörter in die Google-Suche oder eine SMS-App auf Ihrem Smartphone ein und lassen Sie zu, dass Optionen zur automatischen Vervollständigung angeboten werden.
Im Jahr 2000 haben Yoshua Bengio et al. veröffentlichte einen Artikel über ein neuronales probabilistisches Sprachmodell, in dem neuronale Netze die Wahrscheinlichkeiten in einem statistischen Sprachmodell ersetzen, den Fluch der Dimensionalität umgehen und die Wortvorhersagen (basierend auf vorherigen Wörtern) gegenüber einem geglätteten Trigrammmodell (damals Stand der Technik) verbessern ) um 20 % bis 35 %. Die Idee von Feed-Forward-, autoregressiven, neuronalen Netzwerkmodellen der Sprache wird auch heute noch verwendet, obwohl die Modelle inzwischen Milliarden von Parametern haben und auf umfangreichen Korpora trainiert werden, daher der Begriff „große Sprachmodelle“.
Wie wir sehen werden, wurden Sprachmodelle im Laufe der Zeit immer größer, um eine bessere Leistung zu erzielen. Dies ist jedoch mit Kosten verbunden. Der Artikel „Über die Gefahren stochastischer Papageien: Können Sprachmodelle zu groß sein?“ aus dem Jahr 2021 von Emily Bender, Timnit Gebru, et al. fragt sich, ob wir mit diesem Trend zu weit gehen. Die Autoren schlagen unter anderem vor, zunächst die ökologischen und finanziellen Kosten abzuwägen und Ressourcen in die Kuratierung und sorgfältige Dokumentation von Datensätzen zu investieren, anstatt alles im Internet aufzunehmen.
Die jüngste Explosion großer Sprachmodelle wurde durch den Artikel „Attention is All You Need“ von Ashish Vaswani et al. aus dem Jahr 2017 ausgelöst. von Google Brain und Google Research. In diesem Artikel wurde „eine neue einfache Netzwerkarchitektur, der Transformer, eingeführt, die ausschließlich auf Aufmerksamkeitsmechanismen basiert und vollständig auf Wiederholungen und Faltungen verzichtet.“ Transformatormodelle sind sowohl einfacher als rekurrente und Faltungsmodelle und ihnen überlegen. Sie benötigen auch deutlich weniger Zeit zum Trainieren.
ELMo ist eine tief kontextualisierte Wortdarstellung aus dem Jahr 2018 von AllenNLP (siehe ELMo-Artikel), die sowohl komplexe Merkmale der Wortverwendung (z. B. Syntax und Semantik) als auch die Variation dieser Verwendungen in sprachlichen Kontexten (z. B. zur Modellierung von Polysemie) modelliert. Das ursprüngliche Modell verfügt über 93,6 Millionen Parameter und wurde anhand des One Billion Word Benchmark trainiert.
BERT ist ein Sprachmodell von Google AI Language aus dem Jahr 2018, das auf der neuronalen Netzwerkarchitektur Transformer (2017) des Unternehmens basiert (siehe BERT-Artikel). BERT wurde entwickelt, um tiefe bidirektionale Darstellungen aus unbeschriftetem Text vorab zu trainieren, indem in allen Ebenen gemeinsam der linke und rechte Kontext konditioniert wird. Die beiden im Originalpapier verwendeten Modellgrößen waren 100 Millionen und 340 Millionen Gesamtparameter. BERT verwendet Masked Language Modeling (MLM), bei dem etwa 15 % der Token für das Training „beschädigt“ werden. Es wurde auf der englischen Wikipedia und dem Toronto Book Corpus trainiert.
Das 2020 Text-To-Text Transfer Transformer (T5)-Modell von Google (siehe T5-Artikel) synthetisiert ein neues Modell basierend auf den besten Transfer-Lerntechniken von GPT, ULMFiT, ELMo und BERT und ihren Nachfolgern unter Verwendung einer neuen Open-Source-Lösung , Vortrainingsdatensatz namens Colossal Clean Crawled Corpus (C4). Der Standard-C4 für Englisch ist ein 800-GB-Datensatz, der auf dem Common Crawl-Datensatz basiert. T5 wandelt alle Aufgaben zur Verarbeitung natürlicher Sprache in ein einheitliches Text-zu-Text-Format um, bei dem die Eingabe und Ausgabe immer Textzeichenfolgen sind, im Gegensatz zu Modellen im BERT-Stil, die nur eine Klassenbezeichnung oder einen Bereich der Eingabe ausgeben. Das Basismodell T5 verfügt über insgesamt etwa 220 Millionen Parameter.
OpenAI, ein KI-Forschungs- und Einsatzunternehmen, hat die Mission, „sicherzustellen, dass künstliche allgemeine Intelligenz (AGI) der gesamten Menschheit zugute kommt“. Natürlich hat OpenAI AGI noch nicht erreicht. Und einige KI-Forscher, wie der Pionier des maschinellen Lernens Yann LeCun von Meta-FAIR, glauben, dass der aktuelle Ansatz von OpenAI für AGI eine Sackgasse ist.
OpenAI ist für die GPT-Familie von Sprachmodellen verantwortlich, die über die OpenAI-API und den Azure OpenAI-Dienst von Microsoft verfügbar sind. Beachten Sie, dass die gesamte GPT-Familie auf der neuronalen Netzwerkarchitektur Transformer 2017 von Google basiert, was legitim ist, da Google Transformer als Open-Source-Lösung anbietet.
GPT (Generative Pretrained Transformer) ist ein Modell von OpenAI aus dem Jahr 2018, das etwa 117 Millionen Parameter verwendet (siehe GPT-Papier). GPT ist ein unidirektionaler Transformator, der vorab auf dem Toronto Book Corpus trainiert wurde und mit einem CLM-Ziel (Causal Language Modeling) trainiert wurde, was bedeutet, dass er darauf trainiert wurde, das nächste Token in einer Sequenz vorherzusagen.
GPT-2 ist eine direkte Skalierung von GPT aus dem Jahr 2019 mit 1,5 Milliarden Parametern, trainiert auf einem Datensatz von acht Millionen Webseiten oder etwa 40 GB Textdaten. OpenAI schränkte ursprünglich den Zugriff auf GPT-2 ein, weil es „zu gut“ sei und zu „Fake News“ führen würde. Das Unternehmen gab schließlich nach, obwohl die potenziellen sozialen Probleme mit der Veröffentlichung von GPT-3 noch schlimmer wurden.
GPT-3 ist ein autoregressives Sprachmodell aus dem Jahr 2020 mit 175 Milliarden Parametern, das auf einer Kombination aus einer gefilterten Version von Common Crawl, WebText2, Books1, Books2 und englischer Wikipedia trainiert wurde (siehe GPT-3-Artikel). Das in GPT-3 verwendete neuronale Netzwerk ähnelt dem von GPT-2, weist jedoch einige zusätzliche Blöcke auf.
Der größte Nachteil von GPT-3 besteht darin, dass es dazu neigt, zu „halluzinieren“, also Fakten ohne erkennbare Grundlage zu erfinden. GPT-3.5 und GPT-4 haben das gleiche Problem, wenn auch in geringerem Ausmaß.
CODEX ist ein Nachkomme von GPT-3 aus dem Jahr 2021, der für die Codegenerierung auf 54 Millionen Open-Source-GitHub-Repositories optimiert wurde. Es handelt sich um das in GitHub Copilot verwendete Modell, das ich im nächsten Abschnitt bespreche.
GPT-3.5 ist eine Reihe von 2022-Updates für GPT-3 und CODEX. Das gpt-3.5-turbo-Modell ist für den Chat optimiert, eignet sich aber auch gut für herkömmliche Abschlussaufgaben.
GPT-4 ist ein großes multimodales Modell aus dem Jahr 2023 (das Bild- und Texteingaben akzeptiert und Textausgaben ausgibt), von dem OpenAI behauptet, dass es bei verschiedenen professionellen und akademischen Benchmarks eine Leistung auf menschlichem Niveau aufweist. GPT-4 übertraf GPT-3.5 in einer Reihe simulierter Prüfungen, darunter das Uniform Bar Exam, das LSAT, das GRE und mehrere AP-Fachprüfungen.
Es gibt Anlass zu großer Sorge, dass OpenAI nicht erklärt hat, wie GPT-4 trainiert wurde; Das Unternehmen gibt an, dass dies aus Wettbewerbsgründen geschieht, was angesichts der Konkurrenz zwischen Microsoft (das OpenAI finanziert) und Google einigermaßen sinnvoll ist. Dennoch bedeutet die Unkenntnis der Verzerrungen im Trainingskorpus, dass wir die Verzerrungen im Modell nicht kennen. Emily Benders Meinung zu GPT-4 (gepostet auf Mastodon am 16. März 2023) lautet: „GPT-4 sollte als giftiger Müll angesehen werden, bis #OpenAI *offen* ist, was seine Trainingsdaten, Modellarchitektur usw. angeht.“
ChatGPT und BingGPT sind Chatbots, die ursprünglich auf gpt-3.5-turbo basierten und im März 2023 auf die Verwendung von GPT-4 aktualisiert wurden. Um auf die auf GPT-4 basierende Version von ChatGPT zugreifen zu können, müssen Sie derzeit ChatGPT Plus abonnieren. Der auf GPT-3.5 basierende Standard ChatGPT wurde auf Daten trainiert, die im September 2021 eingestellt wurden. BingGPT, auf das Sie im Microsoft Edge-Browser zugreifen können, wurde ebenfalls auf Daten trainiert, die im Jahr 2021 eingestellt wurden, sagt aber (wenn Sie fragen it), dass „ich ständig lerne und mein Wissen mit neuen Informationen aus dem Internet aktualisiere.“
BingGPT erklärt rechts im Bild sein Sprachmodell und seine Trainingsdaten. Screenshot vom 16. März 2023.
Anfang März 2023 hielt Pascale Fung vom Centre for Artificial Intelligence Research der Hong Kong University of Science & Technology einen Vortrag über die ChatGPT-Evaluierung. Es lohnt sich, die Stunde damit zu verbringen, es anzusehen.
LaMDA (Language Model for Dialogue Applications), Googles „bahnbrechende“ Konversationstechnologie aus dem Jahr 2021, ist ein Transformer-Modell aus dem Jahr 2017, das auf Dialoge trainiert und so optimiert wurde, dass die Sinnhaftigkeit und Spezifität seiner Antworten deutlich verbessert wird. Eine der Stärken von LaMDA besteht darin, dass es mit der Themendrift umgehen kann, die in menschlichen Gesprächen häufig vorkommt.
Eine Version von LaMDA unterstützt Bard, den Konversations-KI-Dienst von Google. Bard wurde am 21. März 2023 veröffentlicht und am 10. Mai 2023 allgemein verfügbar gemacht. Im Folgenden bespreche ich seine Funktionen zur Codegenerierung.
PaLM (Pathways Language Model) ist ein dichtes Transformer-Modell nur für Decoder aus dem Jahr 2022 von Google Research mit 540 Milliarden Parametern, das mit dem Pathways-System trainiert wurde (siehe PaLM-Artikel). PaLM wurde mithilfe einer Kombination aus englischen und mehrsprachigen Datensätzen trainiert, die hochwertige Webdokumente, Bücher, Wikipedia, Konversationen und GitHub-Code umfassen.
Google hat außerdem ein „verlustfreies“ Vokabular für PaLM erstellt, das alle Leerzeichen beibehält (besonders wichtig für Code), Unicode-Zeichen außerhalb des Vokabulars in Bytes aufteilt und Zahlen in einzelne Token aufteilt, eines für jede Ziffer. PaLM-Coder ist eine Version von PaLM 540B, die auf einen reinen Python-Codedatensatz abgestimmt ist.
PaLM-E ist ein 2023 „verkörpertes“ (für Robotik) multimodales Sprachmodell von Google. Die Forscher begannen mit PaLM, einem leistungsstarken großen Sprachmodell, und verkörperten es (das „E“ in PaLM-E), indem sie es mit Sensordaten des Roboteragenten ergänzten. PaLM-E ist auch ein allgemein leistungsfähiges Vision- und Sprachmodell. Zusätzlich zu PaLM ist das Vision-Modell ViT-22B integriert.
LLaMA (Large Language Model Meta AI) ist ein „rohes“ großes Sprachmodell mit 65 Milliarden Parametern, das im Februar 2023 von Meta AI (auch bekannt als Meta-FAIR) veröffentlicht wurde. Laut Meta ist „das Training kleinerer Basismodelle wie LLaMA in der großen Sprache wünschenswert.“ Modellraum, weil es viel weniger Rechenleistung und Ressourcen erfordert, um neue Ansätze zu testen, die Arbeit anderer zu validieren und neue Anwendungsfälle zu erkunden. Foundation-Modelle werden auf einer großen Menge unbeschrifteter Daten trainiert, was sie ideal für die Feinabstimmung für eine Vielzahl von Anwendungen macht Aufgaben."
LLaMA wurde in mehreren Größen zusammen mit einer Modellkarte veröffentlicht, die detailliert beschreibt, wie das Modell gebaut wurde. Ursprünglich musste man die Checkpoints und den Tokenizer anfordern, aber sie sind jetzt in freier Wildbahn, da ein herunterladbarer Torrent auf 4chan von jemandem gepostet wurde, der die Modelle ordnungsgemäß durch Einreichen einer Anfrage erhalten hat, so Yann LeCun von Meta-FAIR.
Während mehrere große Sprachmodelle, darunter ChatGPT und Bard, in der veröffentlichten Version für die Codegenerierung verwendet werden können, ist es hilfreich, wenn sie auf einen bestimmten Code abgestimmt sind, typischerweise aus kostenloser Open-Source-Software, um offensichtliche Urheberrechtsverletzungen zu vermeiden. Das lässt immer noch das Gespenst der „Open-Source-Softwarepiraterie“ aufkommen, wie es in einer bundesweiten Sammelklage gegen GitHub, Microsoft (Eigentümer von GitHub) und OpenAI aus dem Jahr 2022 bezüglich des GitHub Copilot-Produkts und des OpenAI GPT Codex-Modells behauptet wird.
Beachten Sie, dass einige Tools zur Codegenerierung nicht nur KI-Modelle verwenden, die größtenteils auf öffentlich verfügbarem Code trainiert wurden, sondern auch auf der Suche nach Code-Sharing-Sites wie Stack Overflow basieren.
Amazon CodeWhisperer lässt sich in Visual Studio Code und JetBrains-IDEs integrieren, generiert Codevorschläge als Reaktion auf Kommentare und Codevervollständigungen basierend auf vorhandenem Code und kann Code auf Sicherheitsprobleme scannen. Sie können CodeWhisperer auch für die Verwendung in AWS Cloud9 und AWS Lambda aktivieren.
CodeWhisperer unterstützt die Programmiersprachen Python, Java, JavaScript, TypeScript und C# gut und weitere 10 Programmiersprachen in geringerem Maße. Es ist für einzelne Entwickler kostenlos verfügbar und kostet für professionelle Teams 19 US-Dollar pro Benutzer und Monat.
CodeWhisperer hat mir geholfen, den unten gezeigten Python-Code zu schreiben. Ich habe es überprüft, getestet und debuggt, und es ist in Ordnung.
Codegenerierung mit Amazon CodeWhisperer. Ich habe den Kommentar oben in die Datei eingegeben und der größte Teil des Rests war CodeWhisperer. Ich musste meinen Code aus mehreren Optionen auswählen und eine nicht verwendete Importanweisung aus einer vorherigen Option löschen.
Bard-Unterstützung für die Programmierung wurde am 21. April 2023 angekündigt. In der Ankündigung heißt es, dass mehr als 20 Programmiersprachen unterstützt werden, darunter C++, Go, Java, JavaScript, TypeScript und Python. Als schnellen Test habe ich Bard gebeten, „eine Go-Funktion zu schreiben, um das aktuelle Datum und die aktuelle Uhrzeit zurückzugeben“. Es ging so schnell:
Bard generierte eine korrekte Go-Sprachfunktion, ein Beispiel für die Verwendung der Funktion und eine Erklärung der Funktion, alles aus der Eingabeaufforderung „Schreiben Sie eine Go-Funktion, um das aktuelle Datum und die aktuelle Uhrzeit zurückzugeben.“ Beachten Sie die Symbole zum Kopieren der Funktion und des Testcodes.
Bard hat die Funktion nicht nur geschrieben, sondern sie auch erklärt und ein Beispiel für den Aufruf der Funktion erstellt.