Francesco Esposito

Programowanie wielkich modeli językowych z użyciem Azure Open AI: Programowanie konwersacyjne i inżynieria podpowiedzi z wykorzystaniem modeli LLM

Przekład: Krzysztof Kapustka

APN Promise, Warszawa 2024

Programowanie wielkich modeli językowych z użyciem Azure Open AI: Programowanie konwersacyjne i inżynieria podpowiedzi z wykorzystaniem modeli LLM

Authorized translation from the English language edition, entitled: Programming Large Language Models with Azure Open AI: Conversational programming and prompt engineering with LLMs, ISBN: 978-0-13-828037-6, by Francesco Esposito, published by Pearson Education, Inc, publishing as Microsoft Press, a Division of Microsoft Corporation.

Copyright © 2024 by Francesco Esposito

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc.

Polish language edition published by APN PROMISE S.A.Copyright © 2024

Autoryzowany przekład z wydania w języku angielskim, zatytułowanego: Programming Large Language Models with Azure Open AI: Conversational programming and prompt engineering with LLMs, ISBN: 978-0-13-828037-6, by Francesco Esposito, opublikowanego przez Pearson Education, Inc, publikującego jako Microsoft Press, oddział Microsoft Corporation.

Wszystkie prawa zastrzeżone. Żadna część niniejszej książki nie może być powielana ani rozpowszechniana w jakiejkolwiek formie i w jakikolwiek sposób (elektroniczny, mechaniczny), włącznie z fotokopiowaniem, nagrywaniem na taśmy lub przy użyciu innych systemów bez pisemnej zgody wydawcy.

APN PROMISE SA, ul. Domaniewska 44a, 02-672 Warszawa; tel. +48 22 35 51 600 e-mail: wydawnictwo@promise.pl

Książka ta przedstawia poglądy i opinie autora. Przykłady firm, produktów, osób i wydarzeń opisane w niniejszej książce są fikcyjne i nie odnoszą się do żadnych konkretnych firm, produktów, osób i wydarzeń, chyba że zostanie jednoznacznie stwierdzone, że jest inaczej. Ewentualne podobieństwo do jakiejkolwiek rzeczywistej firmy, organizacji, produktu, nazwy domeny, adresu poczty elektronicznej, logo, osoby, miejsca lub zdarzenia jest przypadkowe i niezamierzone.

Microsoft oraz znaki towarowe wymienione na stronie http://www.microsoft.com/about/legal/en/us/IntellectualProperty/Trademarks/EN-US.aspx są zastrzeżonymi znakami towarowymi grupy Microsoft. Wszystkie inne znaki towarowe mogą być własnością ich odnośnych właścicieli.

APN PROMISE SA dołożyła wszelkich starań, aby zapewnić najwyższą jakość tej publikacji. Jednakże nikomu nie udziela się rękojmi ani gwarancji. APN PROMISE SA nie jest w żadnym wypadku odpowiedzialna za jakiekolwiek szkody będące następstwem korzystania z informacji zawartych w niniejszej publikacji, nawet jeśli APN PROMISE została powiadomiona o możliwości wystąpienia szkód.

ISBN: 978-83-7541-558-2 (druk), 978-83-7541-559-9 (ebook)

Przekład: Krzysztof Kapustka; Redakcja: Marek Włodarz; Korekta: Ewa Swędrowska; Skład i łamanie: MAWart Marek Włodarz

Dedykacja

Dla sztucznej inteligencji.

Ponieważ niezadedykowanie ci tej książki byłoby profanacją.

Podziękowania

Kiedy wiosną 2023 r. powiedziałem tacie, jak fajna staje się platforma Azure OpenAI, jego odpowiedź była dla mnie pewnym szokiem. – Dlaczego nie napiszesz o tym książki? – Powiedział to tak naturalnie, że poczułem się, jak gdyby naprawdę myślał, że mogę to zrobić. Właściwie to dodał: – Czy jesteś na to gotowy? – Wtedy nie trzeba było mówić nic więcej. Loretta Yates z Microsoft Press entuzjastycznie przyjęła moją propozycję, a historia tej książki rozpoczęła się w czerwcu 2023 r.

Sztuczna inteligencja była gorącym tematem przez większą część dekady, ale pojawienie się nowej generacji dużych modeli językowych (LLM) wprowadziło ją do głównego nurtu. Rosnąca liczba korzystających z nich osób przekłada się na więcej pomysłów, większe możliwości i nowe rozwiązania. A to robi całą różnicę.

Dlatego książka, którą trzymasz w rękach, nie może być ostatecznym i definitywnym przewodnikiem po sztucznej inteligencji i modelach LLM, ponieważ ewoluują one z imponującą szybkością. Poza tym każda książka jest z założenia pewnym przybliżeniem, migawką wiedzy zrobioną w konkretnym momencie. Przybliżenie nieuchronnie prowadzi do pewnej formy niezadowolenia, a niezadowolenie skłania nas do podejmowania nowych wyzwań. Pod tym względem życzę sobie dziesięcioleci niezadowolenia. I jeszcze kilku lat obecności na scenie i prezentowania książek pisanych dla prestiżowego wydawcy – to działa cuda na moje ego.

Przede wszystkim czuję się zobowiązany wobec wszystkich moich pierwszych randek od maja, ponieważ te osoby musiały znosić monologi trwające co najmniej 30 minut na temat modeli LLM i pewnego dziwnego nowego podejścia do transformatorów.

Prawdziwe podziękowania to sprawa prywatna, ale publicznie chcę najpierw podziękować Martinie, która napisała razem ze mną dodatek i zawsze wie, co powiedzieć, żeby było mi lepiej. Dowodem mojej wdzięczności dla niej jest dotrzymywanie znanej jej obietnicy. Dziękuję Martina za to, że jesteś niezwykłym człowiekiem.

Dziękuję Gianfranco, który nauczył mnie, jak ważne jest dyskutowanie i wyrażanie, nawet głośno, gdy coś nam się nie podoba. Nauczył mnie również, że zawsze należy pytać, bo najgorsze, co może się zdarzyć, to że usłyszymy „nie”. Za każdym razem, gdy wdaję się w jakąś dyskusję, myślę o Tobie.

Chcę także podziękować Matteo, Luciano, Gabriele, Filippo, Daniele, Riccardo, Marco, Jacopo, Simone, Francesco i Alessii, którzy pracowali ze mną i wspierali mnie podczas moich (miejmy nadzieję niezbyt częstych) kryzysów. Myślę również ciepło o Alessandro, Antonino, Sarze, Andrei i Cristianie, którzy tolerowali mnie za każdym razem, kiedy nie byliśmy jak 25-letni młodzi ludzie, gdyż musiałem się uczyć i pracować nad tą książką.

Dziękuję Mamie i Micheli, które wytrzymywały ze mną przed tą książką i prawdopodobnie będą to robić także i po niej. Dziękuję moim babciom. Dziękuję Giorgio, Gaetano, Vito i Roberto za to, że każdego dnia pomagają mi się rozwijać. Dziękuję Elio, który nauczył mnie, jak się ubierać i widzieć siebie w większej liczbie kolorów.

Jeżeli zaś chodzi o mojego tatę, Dino, to nigdy nie przestaje uczyć mnie nowych rzeczy – na przykład tego, jak zarabiać na robieniu rzeczy, które po prostu chciałbyś robić, takich jak bycie redaktorem technicznym tej książki. Dziękuję, zarówno jako ojciec, jak i redaktor. Przywodzisz mi na myśl piosenkę, którą dobrze znasz: „Synu, synu, synu”.

Poza Lorettą, jeżeli ta książka powstała, to również dzięki ciężkiej pracy Shourava, Kate i Dana. Dziękuję za Waszą cierpliwość i za to, że tak bardzo mi zaufaliście.

Ta książka jest moją najlepszą, aż do kolejnej!

Spis treści

Strona tytułowa

Spis treści

Podziękowania

Wprowadzenie

Geneza i analiza wielkich modeli językowych

Pierwsze spojrzenie na modele LLM

Historia modeli LLM

Podstawy funkcjonowania

Biznesowe przypadki użycia

Fakty dotyczące programowania konwersacyjnego

Rodząca się moc języka naturalnego

Topologia modeli LLM

Perspektywa przyszłości

Podsumowanie

Podstawowe techniki uczenia z użyciem podpowiedzi

Czym jest inżynieria podpowiedzi?

Pierwsze spojrzenie na podpowiedzi

Alternatywne sposoby na zmianę wyniku

Przygotowanie do wykonywania kodu

Techniki podstawowe

Scenariusze zero-shot

Scenariusze few-shot

Scenariusze łańcucha myśli

Podstawowe przypadki użycia

Chatboty

Tłumaczenie

Ograniczenia modeli LLM

Podsumowanie

Projektowanie zaawansowanych podpowiedzi

Co poza inżynierią podpowiedzi?

Łączenie elementów

Dostrajanie

Wywoływanie funkcji

Styl ręczny

Styl OpenAI

Rozmawianie z (odseparowanymi) danymi

Łączenie danych z modelem LLM

Osadzenia

Magazyn wektorów

Generowanie wzbogacane wyszukiwaniem informacji

Podsumowanie

Korzystanie z platform językowych

Potrzeba orkiestratora

Koncepcje międzyplatformowe

Punkty do rozważenia

LangChain

Modele, szablony podpowiedzi i łańcuchy

Agenci

Połączenie danych

Microsoft Semantic Kernel

Wtyczki

Dane i planiści

Microsoft Guidance

Konfiguracja

Główne funkcje

Podsumowanie

Obawy związane z bezpieczeństwem, prywatnością i dokładnością

Omówienie

Odpowiedzialna AI

Red teaming

Filtrowanie nadużyć i treści

Halucynacja i efektywność

Stronniczość i bezstronność

Bezpieczeństwo i prywatność

Bezpieczeństwo

Prywatność

Ocena i filtrowanie treści

Ewaluacja

Filtrowanie treści

Podsumowanie

Budowanie osobistego asystenta

Omówienie aplikacji internetowej chatbota

Zakres

Stos technologiczny

Projekt

Konfiguracja modelu LLM

Konfigurowanie projektu

Integrowanie modelu LLM

Możliwe rozszerzenia

Podsumowanie

Czatowanie z naszymi danymi

Omówienie

Zakres

Stos technologiczny

Co to jest Streamlit?

Krótkie wprowadzenie do Streamlit

Główne funkcje interfejsu użytkownika

Plusy i minusy w produkcji

Projekt

Konfigurowanie projektu i podstawowego interfejsu użytkownika

Przygotowywanie danych

Integracja z modelem LLM

Dalszy postęp

Generowanie wspomagane wyszukiwaniem informacji kontra dostrajanie

Możliwe rozszerzenia

Podsumowanie

Konwersacyjny interfejs użytkownika

Omówienie

Zakres

Stos technologiczny

Projekt

Konfiguracja API Minimal

OpenAPI

Integracja z modelem LLM

Możliwe rozszerzenia

Podsumowanie

Wewnętrzne funkcjonowanie modeli LLM

Rola prawdopodobieństwa

Podejście heurystyczne

Sztuczne neurony

Przypadek modelu GPT

Transformator i uwaga

Szkolenia i nowe możliwości

Indeks

Wprowadzenie

To moja trzecia książka o sztucznej inteligencji (artificial intelligence – AI) i pierwsza, którą napisałem samodzielnie, bez współpracy z innym autorem. Kolejność publikacji moich trzech książek odzwierciedla moją własną ścieżkę uczenia się, motywowaną rzeczywistym pragnieniem zrozumienia AI z powodów znacznie szerszych niż zwykłe względy biznesowe. W pierwszej książce, opublikowanej w 2020 r., przedstawiłem koncepcje matematyczne stojące za uczeniem się maszyn (machine learning – ML), które umożliwiają klasyfikowanie danych i tworzenie aktualnych prognoz. Druga książka, skupiająca się na platformie Microsoft ML.NET, dotyczyła konkretnych aplikacji – innymi słowy tego, jak sprawić, aby fantazyjne algorytmy działały efektywnie na dużych ilościach danych, ukrywając swoją złożoność za wykresami i tabelami znanego frontonu internetowego.

Potem pojawił się ChatGPT.

Technologia stojąca za zdumiewającymi aplikacjami, takimi jak ChatGPT, nazywana jest dużym modelem językowym (large language model – LLM), a modele LLM są tematem tej trzeciej książki. Modele LLM dodają do AI pewną kluczową zdolność: obok klasyfikowania i przewidywania, możliwość generowania treści. Modele LLM reprezentują pewną zmianę paradygmatu, podnosząc poprzeczkę w komunikacji między ludźmi a komputerami i otwierając wrota dla nowych zastosowań, o których przez dziesięciolecia mogliśmy tylko marzyć.

I przez dekady faktycznie marzyliśmy o tych zastosowaniach. Książki i filmy przedstawiały różne superkomputery zdolne do przetwarzania dowolnego rodzaju danych w celu wyprodukowania wyników zrozumiałych dla człowieka. Niezwykle popularnym przykładem był HAL 9000 – komputer sterujący statkiem kosmicznym Discovery w filmie 2001: Odyseja kosmiczna (1968). Innym znanym komputerem był JARVIS (Just A Rather Very Intelligent System), który służył jako domowy asystent Tony’ego Starka w filmie Iron Man i innych filmach z uniwersum Marvel Comics.

Często wszystko, co robią te ludzkie postaci w tego typu filmach i książkach to po prostu „załadowanie danych do komputera” – czy to w formie papierowych dokumentów, plików cyfrowych czy treści multimedialnych. Następnie taki komputer samodzielnie rozpoznaje treść, uczy się z niej i komunikuje się z człowiekiem za pomocą języka naturalnego. Oczywiście te superkomputery zostały wymyślone przez autorów. Były one jedynie fantastyką naukową. Dzisiaj, dzięki modelom LLM, możliwe jest wymyślanie i budowanie konkretnych aplikacji, które nie tylko sprawiają, że interakcja człowiek-komputer jest płynna i naturalna, ale też zamieniają to stare marzenie o zwykłym „ładowaniu danych do komputera” w olśniewającą rzeczywistość.

Ta książka pokazuje sposób tworzenia aplikacji z użyciem tego samego typu silnika, który napędza ChatGPT do autonomicznego komunikowania się z użytkownikami i koordynowania zadaniami biznesowymi sterowanymi podpowiedziami tekstowymi. Nie więcej i nie mniej – jest to tak proste i imponujące, jak się wydaje!

Kto powinien przeczytać tę książkę

Treść tej książki z pewnością będzie przystępna i cenna dla architektów oprogramowania, głównych deweloperów i osób z doświadczeniem w programowaniu – zwłaszcza tych zaznajomionych z takimi językami, jak Python i potencjalnie C# (dla ASP.NET Core). Wśród szerokiego grona profesjonalistów zajmujących się oprogramowaniem, dla których ta książka może być przydatna, wskazałbym tych, którzy interesują się tematem ML, zwłaszcza w kontekście modeli LLM. Wymieniłbym także profesjonalistów IT zajmujących się chmurą, którzy są zainteresowani korzystaniem z usług w chmurze (w szczególności Microsoft Azure) lub wyrafinowanymi i rzeczywistymi zastosowaniami języka zbliżonego do ludzkiego w oprogramowaniu. Chociaż ta książka koncentruje się głównie na usługach dostępnych na platformie Microsoft Azure, omawiane w niej koncepcje można z łatwością zastosować do analogicznych platform. Ostatecznie korzystanie z modelu LLM sprowadza się w dużej mierze do wywoływania kilku punktów końcowych API, a z założenia API są całkowicie niezależne od podstawowej platformy.

Podsumowując, ta książka jest przeznaczona dla zróżnicowanej publiczności, wliczając w to programistów, entuzjastów ML, profesjonalistów w obszarze przetwarzania w chmurze, a także osób zainteresowanych przetwarzaniem języka naturalnego, ze szczególnym naciskiem na wykorzystywanie usług Azure do programowania modeli LLM.

Założenia

Aby móc w pełni zrozumieć wartość książki programistycznej na temat modeli LLM, należy spełnić kilka warunków wstępnych, wliczając w to biegłość w zakresie podstawowych koncepcji programowania i znajomość podstaw związanych z ML. Prócz tego pomocna jest praktyczna znajomość odpowiednich języków programowania i platform, takich jak Python i potencjalnie ASP.NET Core, jak również uznanie dla znaczenia klasycznego przetwarzania języka naturalnego w kontekście dziedzin biznesowych. Ogólnie do pełnego zrozumienia tej książki zalecana jest pewna mieszanka doświadczenia programistycznego, świadomości na temat ML oraz wiedzy lingwistycznej.

Ta książka może nie być dla Ciebie, jeśli…

Ta książka może nie być dla Ciebie, jeśli szukasz po prostu jakiegoś podręcznika, z którego mógłbyś szczegółowo dowiedzieć się, jak należy korzystać z określonego wzorca lub platformy. Chociaż omawia zaawansowane aspekty popularnych platform (na przykład LangChain i Semantic Kernel) oraz API (takich jak OpenAI i Azure OpenAI), nie kwalifikuje się jako podręcznik programowania na temat żadnej z nich. Ta książka koncentruje się na wykorzystywaniu modeli LLM do tworzenia przydatnych aplikacji w dziedzinach biznesowych, w których te modele naprawdę dobrze działają.

Organizacja tej książki

W tej książce omawiane jest praktyczne zastosowanie istniejących modeli LLM w tworzeniu wszechstronnych aplikacji biznesowych. Zasadniczo model LLM to model ML wytrenowany na obszernych danych tekstowych, umożliwiający pojmowanie i generowanie języka podobnego do ludzkiego. Chcąc przekazać wiedzę na temat tych modeli, w tej książce skupiamy się na trzech kluczowych aspektach:

Pierwsze trzy rozdziały omawiają scenariusze, dla których model LLM jest efektywny i przedstawiają podstawowe narzędzia do tworzenia wyrafinowanych rozwiązań. Te rozdziały zapewniają wgląd w programowanie konwersacyjne i podpowiadanie, przedstawiając je jako nowe, zaawansowane, a przy tym ustrukturyzowane podejście do kodowania.

Następne dwa rozdziały kładą nacisk na wzorce, platformy i techniki pozwalające uwolnić potencjał programowania konwersacyjnego. Wiąże się to z wykorzystaniem języka naturalnego w kodzie do definiowania przepływów pracy, gdzie aplikacja oparta na modelu LLM koordynuje istniejącymi API.

Ostatnie trzy rozdziały przedstawiają konkretne i kompleksowe przykłady demonstracyjne obejmujące język Python i platformę ASP.NET Core. Te demonstracje prezentują coraz bardziej zaawansowane interakcje pomiędzy logiką, danymi i istniejącymi procesami biznesowymi. Pierwszy przykład pokazuje, jak pobrać tekst z maila i przygotować odpowiednią wersję roboczą dla odpowiedzi. Drugi przykład ilustruje zastosowanie wzorca generowania wzbogacanego wyszukiwaniem informacji (RAG) do formułowania odpowiedzi na pytania na podstawie zawartości dokumentów. Z kolei trzeci przykład pokazuje, jak zbudować aplikację do rezerwacji hoteli z użyciem chatbota, który do ustalenia potrzeb użytkownika wykorzystuje interfejs konwersacyjny (daty, preferencje dotyczące pokoju, budżet) i bezproblemowo dokonuje (lub odmawia) rezerwacji zgodnie ze stanem podstawowego systemu, bez używania stałych elementów interfejsu użytkownika lub sformatowanych kontrolek wprowadzania danych.

Pliki do pobrania: notesy i przykładowy kod

Notesy Python i Polyglot zawierające kod przedstawiony w początkowej części tej książki, a także kompletne bazy kodu dla przykładów omawianych w dalszych rozdziałach można uzyskać w serwisie GitHub pod adresem:

https://github.com/Youbiquitous/programming-llm

Errata, aktualizacje i wsparcie dla książki

Dołożyliśmy wszelkich starań, aby ta książka, wraz z powiązaną z nią treścią, była dokładna. Dostęp do aktualizacji dla tej książki – w formie listy nadesłanych błędów i powiązanych z nimi poprawek – można uzyskać pod adresem:

MicrosoftPressStore.com/LLMAzureAI/errata

Jeżeli znajdziesz jakiś błąd, którego nie ma na tej liście, możesz zgłosić go do nas za pośrednictwem tej samej strony.

Aby uzyskać dodatkowe wsparcie i informacje dotyczące tej książki, odwiedź witrynę MicrosoftPressStore.com/Support.

Należy pamiętać, że pomoc techniczna dotycząca oprogramowania i sprzętu firmy Microsoft nie jest świadczona pod powyższymi adresami. Aby uzyskać pomoc dotyczącą oprogramowania lub sprzętu firmy Microsoft, przejdź na stronę http://support.microsoft.com.

Pozostańmy w kontakcie

Niech dyskusja nadal trwa! Jesteśmy na X / Twitterze: http://twitter.com/MicrosoftPress.

Rozdział 1

Geneza i analiza wielkich modeli językowych

Zachęcenie kogoś do przeczytania książki to nie jest łatwa sprawa. Jeśli chodzi o powieść, musimy przekonać taką osobę, że to piękna historia, a jeśli jest to książka techniczna, musimy ją zapewnić, że się czegoś nauczy. W tym przypadku spróbujemy się czegoś nauczyć.

W ciągu ostatnich dwóch lat modnym hasłem stała się generatywna AI. Odnosi się ona do dziedziny AI skupiającej się na tworzeniu systemów, które mogą samodzielnie generować nowe, oryginalne treści. Znakomitymi przykładami generatywnej AI są wielkie modele językowe, takie jak GPT-3 i GPT-4, zdolne do tworzenia tekstu podobnego do ludzkiego na podstawie podanego wejścia.

Szybka adopcja modeli LLM prowadzi do zmiany paradygmatu w programowaniu. W tym rozdziale omawiamy tę zmianę, jej przyczyny, a także związane z nią perspektywy. Te perspektywy obejmują programowanie konwersacyjne, w którym za pomocą słów – zamiast przy użyciu kodu – wyjaśniamy, co chcemy osiągnąć. Ten rodzaj programowania prawdopodobnie stanie się bardzo powszechny w przyszłości.

Niczego jednak nie obiecujemy. Jak się wkrótce przekonamy, objaśnianie słowami tego, co chcielibyśmy osiągnąć, jest często tak samo trudne, jak pisanie kodu.

W tym rozdziale poruszane są tematy, dla których nie znalazło się miejsce w pozostałych rozdziałach tej książki. Nie musisz czytać każdego podrozdziału, ani ściśle przestrzegać ich kolejności. Wystarczy, że przeczytasz to, co uznasz za konieczne lub interesujące. Mam nadzieję, że po przeczytaniu ostatniego rozdziału tej książki wrócisz do przeczytania niektórych z tych podrozdziałów.

Pierwsze spojrzenie na modele LLM

Do poruszania się po świecie modeli LLM jako deweloper lub menedżer konieczne jest zrozumienie genezy generatywnej AI i odróżnienie jej od predykcyjnej AI. Ten rozdział ma jeden kluczowy cel: dostarczyć pewnych informacji na temat szkolenia i biznesowego znaczenia modeli LLM, rezerwując zawiłe szczegóły matematyczne dla dodatku tej książki.

Nasza podróż obejmie zarówno historyczne korzenie AI, jak i podstawy modeli LLM, wliczając w to ich szkolenie, wnioskowanie i pojawienie się modeli wielomodalnych. Zagłębiając się w krajobraz biznesowy zaprezentujemy również bieżące popularne przypadki użycia generatywnej AI i modeli tekstowych.

Celem tego wprowadzenia nie jest omówienie każdego szczegółu, ale raczej dostarczenie wystarczającej ilości informacji, aby móc wskazać i wypełnić wszelkie potencjalne luki w wiedzy, starając się jednocześnie wyjaśnić zawiłości związane z ewolucją i implementacją modeli LLM.

Historia modeli LLM

Ewolucja modeli LLM krzyżuje się zarówno z historią konwencjonalnej AI (często określanej jako predykcyjna AI), jak i dziedziną przetwarzania języka naturalnego (natural language processing – NLP). NLP obejmuje rozumienie języka naturalnego (natural language understanding – NLU), które stara się zredukować ludzką mowę do postaci ustrukturyzowanej ontologii, a także generowanie języka naturalnego (natural language generation – NLG), którego celem jest produkowanie tekstu zrozumiałego dla ludzi.

Modele LLM są podtypem generatywnej AI skupiającym się na tworzeniu tekstu na podstawie pewnego rodzaju wejścia, zwykle w formie tekstu pisanego nazywanego podpowiedzią (prompt), ale obecnie rozszerzającego się na dane wielomodalne, wliczając w to obrazy, wideo i audio. Na pierwszy rzut oka większość modeli LLM można postrzegać jako bardzo zaawansowaną formę autouzupełniania, ponieważ generują one następny wyraz. Choć generują one konkretnie tekst, modele LLM robią to w sposób symulujący ludzkie rozumowanie, co umożliwia im wykonywanie różnorodnych skomplikowanych zadań. Te zadania obejmują analizę nastrojów, streszczanie, tłumaczenie, rozpoznawanie jednostek i intencji, wyodrębnianie ustrukturyzowanych informacji, generowanie dokumentów i tak dalej.

Modele LLM reprezentują naturalne rozszerzenie odwiecznych ludzkich aspiracji do konstruowania automatów (przodków dla współczesnych robotów) i nasycenia ich pewnym stopniem rozumowania i języka. Mogą być one postrzegane jako mózg dla takich automatów, zdolnych do reagowania na bodźce zewnętrzne.

Początki AI

Współczesne oprogramowanie – oraz AI jako jego dynamiczna część – stanowi kulminację pewnej rodzącej się wizji, która krążyła w umysłach wielkich myślicieli od XVII wieku. Różni matematycy, filozofowie i naukowcy na różne sposoby i na różnych poziomach abstrakcji wyobrażali sobie uniwersalny język zdolny do zmechanizowania procesu pozyskiwania wiedzy i dzielenia się nią. W szczególności Gottfried Leibniz (1646 – 1716) rozmyślał nad ideą, że przynajmniej pewna część ludzkiego rozumowania mogłaby zostać zmechanizowana.

Współczesna konceptualizacja inteligentnych maszyn ukształtowała się w połowie XX wieku za sprawą znanych matematyków Alana Turinga i Alonzo Churcha. Badania Turinga nad „inteligentnymi maszynami” w 1947 r., w połączeniu z jego przełomowym artykułem z 1950 r. pt. „Computing Machinery and Intelligence” (Maszyny liczące a inteligencja), położyły kamień węgielny pod test Turinga – kluczową koncepcję w dziedzinie AI. Ten test rzucił wyzwanie maszynom, aby przejawiały ludzkie zachowanie (niemożliwe do odróżnienia przez sędziego będącego człowiekiem), zapoczątkowując erę AI jako dyscypliny naukowej.

Uwaga Biorąc pod uwagę ostatnie postępy, uzasadniona może być ponowna ocena oryginalnego testu Turinga w celu zawarcia bardziej precyzyjnej definicji ludzkiego i racjonalnego zachowania.

NLP

NLP to interdyscyplinarna dziedzina AI, której celem jest połączenie interakcji między komputerami a językiem ludzkim. Choć swoje historyczne korzenie znajduje ona w podejściach lingwistycznych, co odróżnia ją od współczesnego znaczenia AI, w pewnym szerszym znaczeniu NLP od zawsze było gałęzią AI. Tak naprawdę nadrzędnym celem było zawsze sztuczne odtworzenie pewnej ekspresji ludzkiej inteligencji – a konkretnie języka.

Podstawowym celem NLP jest umożliwienie maszynom rozumienia, interpretowania i generowania języka podobnego do ludzkiego w sposób, który jest zarówno sensowny, jak i zgodny z kontekstem. Ta interdyscyplinarna dziedzina czerpie z językoznawstwa, informatyki i psychologii poznawczej w celu opracowania algorytmów i modeli umożliwiających bezproblemową interakcję między ludźmi i maszynami za pośrednictwem języka naturalnego.

Historia NLP obejmuje kilka dziesięcioleci i ewoluuje od wczesnych systemów opartych na regułach do współczesnych podejść głębokiego uczenia, co podkreśla znaczący postęp w rozumieniu i przetwarzaniu ludzkiego języka przez komputery.

Wczesne wysiłki z lat 50. XX wieku, takie jak eksperyment Georgetown-IBM z 1954 r., skupiały się na tłumaczeniu maszynowym z języka rosyjskiego na angielski, kładąc podwaliny pod NLP. Jednak te początkowe wysiłki miały przede wszystkim charakter lingwistyczny. W kolejnych dziesięcioleciach wpływ lingwistyki Chomsky’ego zaczął kształtować zainteresowanie tej dziedziny strukturami syntaktycznymi i gramatycznymi.

Lata 80. XX wieku przyniosły zmianę w kierunku metod statystycznych, takich jak n-gramy, wykorzystując częstotliwości współwystępowania wyrazów do prognozowania. Przykładem był system Candide firmy IBM do rozpoznawania mowy. Jednak podejścia oparte na regułach borykały się ze złożonością języka naturalnego. W latach 90. XX wieku doszło do odrodzenia się podejść statystycznych i pojawienia się technik uczenia się maszyn (ML), takich jak ukryte modele Markowa (HMM) i statystyczne modele językowe. W tamtym okresie znaczącymi kamieniami milowymi było wprowadzenie Penn Treebank, tekstowego zbioru danych złożonego z 7 milionów słów z oznaczonymi częściami mowy, a także pojawienie się statystycznych systemów tłumaczenia maszynowego.

W pierwszej dekadzie XXI wieku rozwój podejść opartych na analizie danych oraz dostępność obszernych danych tekstowych w Internecie ożywiły tę dziedzinę. Na znaczeniu zyskały modele probabilistyczne, wliczając w to modele maksymalnej entropii i warunkowe pola losowe. Rozpoczęty w latach 80. XX wieku, ale ukończony dopiero wiele lat później rozwój bazy WordNet, semantyczno-leksykalnej bazy danych języka angielskiego (wraz z jego grupami synonimów i ich relacjami), przyczynił się do głębszego zrozumienia semantyki wyrazów.

Ten krajobraz zaczął się zmieniać po 2010 r. wraz z pojawieniem się głębokiego uczenia, które stało się możliwe dzięki nowej generacji procesorów graficznych (GPU) i zwiększonej mocy obliczeniowej. Architektury sieci neuronowych – w szczególności transformatory, takie jak bidirectional encoder representations from transformers (BERT) i generative pretrained transformer (GPT) – zrewolucjonizowały NLP, pozwalając na uchwycenie skomplikowanych wzorców językowych i informacji kontekstowych. Nacisk przesunął się na wstępnie przeszkolone i oparte na analizie danych modele językowe, które można dostroić do konkretnych zadań.

Predykcyjna AI kontra generatywna AI

Predykcyjna AI i generatywna AI reprezentują dwa odrębne paradygmaty, z których każdy jest głęboko powiązany z postępem w sieciach neuronowych i architekturach głębokiego uczenia.

Predykcyjna AI, często kojarzona z uczeniem nadzorowanym, ma swoje korzenie w klasycznych podejściach uczenia się maszyn, które pojawiły się w połowie XX wieku. Wczesne modele, takie jak perceptrony, utorowały drogę do odrodzenia się sieci neuronowych w latach 80. Jednak dopiero w wyniku pojawienia się głębokiego uczenia w XXI wieku – wraz z rozwojem głębokich sieci neuronowych, splotowych sieci neuronowych (convolutional neural networks – CNN) do rozpoznawania obrazów i rekurencyjnych sieci neuronowych (recurrent neural networks – RNN) do przetwarzania danych sekwencyjnych – predykcyjna AI doświadczyła transformacyjnego odrodzenia. Wprowadzenie jednostek długiej pamięci krótkotrwałej (long short-term memory – LSTM) umożliwiło bardziej efektywne modelowanie sekwencyjnych zależności w danych.

Z drugiej strony, generatywna AI odnotowała znaczący postęp napędzany udoskonaleniami w uczeniu nienadzorowanym i wyrafinowanych architekturach sieci neuronowych (tych samych, które są używane w przypadku predykcyjnej AI). Koncepcja modeli generatywnych sięga lat 90. XX wieku, ale przełom nastąpił wraz z wprowadzeniem w 2014 r. generatywnych sieci przeciwstawnych (generative adversarial networks – GAN), które pokazały siłę uczenia przeciwstawnego. Kluczową rolę odgrywają sieci GAN, które są wyposażone w generator służący do tworzenia danych oraz dyskryminator umożliwiający rozróżnienie danych rzeczywistych od wygenerowanych. Dyskryminator, rozpoznający autentyczność generowanych danych podczas szkolenia, przyczynia się do ulepszenia generatora, wspierając ciągłe doskonalenie w generowaniu bardziej realistycznych danych, począwszy od realistycznych obrazów aż po spójny tekst.

Tabela 1-1 stanowi podsumowanie głównych typów procesów uczenia.

Tabela 1-1 Główne typy procesów uczenia

Typ

Definicja

Szkolenie

Przypadki użycia

Nadzorowane

Szkolenie na oznaczonych danych, gdzie każde wejście ma odpowiednią etykietę

Dostosowuje parametry w celu zminimalizowania błędu przewidywania

Klasyfikacja, regresja

Samonadzorowane

Uczenie nienadzorowane, gdzie model generuje własne etykiety

Uczy się wypełniać puste miejsca (przewidywać fragmenty wprowadzanych danych na podstawie innych fragmentów)

NLP, rozpoznawanie obrazów

Półnadzorowane

Łączy oznaczone i nieoznaczone dane na potrzeby szkolenia

Wykorzystuje dane oznaczone do nadzorowanych zadań, a dane nieoznaczone do uogólnień

Scenariusze z ograniczoną liczbą oznaczonych danych – przykładowo klasyfikacja obrazów

Nienadzorowane

Szkolenie na danych bez jawnego nadzoru

Identyfikuje nieodłączne struktury lub relacje w danych

Grupowanie, redukcja wymiarowości, modelowanie generatywne

Historyczna trajektoria predykcyjnej i generatywnej AI podkreśla symbiotyczny związek z sieciami neuronowymi i głębokim uczeniem. Predykcyjna AI wykorzystuje architektury głębokiego uczenia, takie jak sieci CNN do przetwarzania obrazu i sieci RNN/pamięci LSTM do danych sekwencyjnych, osiągając najlepsze wyniki w zadaniach od rozpoznawania obrazów aż po zrozumienie języka naturalnego. Generatywna AI, napędzana możliwościami sieci GAN i modelami językowymi wielkiej skali, ukazuje twórczy potencjał sieci neuronowych w generowaniu nowatorskich treści.

Modele LLM

Model LLM, którego przykładem jest seria GPT firmy OpenAI, to generatywny system AI zbudowany przy użyciu zaawansowanych architektur głębokiego uczenia, takich jak transformator (więcej na ten temat znajduje się w dodatku).

Te modele działają na zasadzie nienadzorowanego i samonadzorowanego uczenia, szkoląc się na rozległych korpusach tekstowych w celu rozumienia i generowania tekstu, który jest spójny i zgodny z kontekstem. Generują one sekwencje tekstu (które mogą mieć postać zwykłego tekstu, ale mogą to być także struktury białkowe, kod, formaty danych SVG, JSON, XML itd.), wykazując niezwykłą zdolność do kontynuowania i rozwijania dostarczanych podpowiedzi w sposób, który wiernie naśladuje język ludzki.

Architektura tych modeli, a w szczególności architektura transformatora, umożliwia im uchwycenie długoterminowych zależności i skomplikowanych wzorców w danych. Koncepcja osadzeń wyrazów, kluczowy prekursor, przedstawia wyrazy jako ciągłe wektory (Word2Vec, Mikolov i in. w 2013 r.), przyczyniając się do zrozumienia przez model semantycznych relacji między wyrazami. Osadzenia wyrazów to pierwsza „warstwa” modelu LLM.

Generatywny charakter najnowszych modeli zapewnia im wszechstronność w zakresie wyników, umożliwiając wykonywanie takich zadań, jak uzupełnianie tekstu, streszczanie czy kreatywne generowanie tekstu. Użytkownicy mogą podpowiadać modelowi z użyciem różnych zapytań lub częściowych zdań, a model autonomicznie generuje spójne i właściwe kontekstowo uzupełnienia, demonstrując swoją zdolność do rozumienia i naśladowania wzorców językowych podobnych do języka ludzkiego.

Ta podróż rozpoczęła od wprowadzenia osadzeń wyrazów w 2013 r., zwłaszcza od modelu Word2Vec opracowanego przez Mikolova i innych, co zrewolucjonizowało reprezentację semantyczną. Następnie pojawiły się architektury RNN i LSTM, mające sprostać wyzwaniom związanym z przetwarzaniem sekwencji i zależnościami długoterminowymi. Zmiana transformacyjna nastąpiła wraz z wprowadzeniem w 2017 r. architektury transformatora, która umożliwiła przetwarzanie równoległe i znacząco skróciła czas szkolenia.

W 2018 r. badacze firmy Google pod kierunkiem Jacoba Devlina zaprezentowali model językowy BERT. BERT przyjął dwukierunkowe podejście do przewidywania kontekstu. Podczas wstępnego szkolenia BERT zostaje poddany zadaniu maskowanego modelowania języka, w którym pewien losowy podzbiór wyrazów w zdaniu jest zamaskowany, a model przewiduje te zamaskowane wyrazy na podstawie lewego i prawego kontekstu. To dwukierunkowe szkolenie pozwala modelowi BERT uchwycić bardziej zróżnicowane relacje kontekstowe między wyrazami. To czyni go szczególnie skutecznym w zadaniach wymagających głębokiego zrozumienia kontekstu, takich jak odpowiadanie na pytania i analiza nastrojów.

W tym samym okresie seria GPT firmy OpenAI wyznaczyła zmianę paradygmatu w NLP, począwszy od modelu GPT w 2018 r., a następnie modeli GPT-2 w 2019 r., GPT-3 w 2020 r., a także GPT-3.5-turbo, GPT-4 i GPT- 4-turbo-visio (z danymi wielomodalnymi) w 2023 r. Jako modele autoregresyjne przewidują one następny token (który jest atomowym elementem języka naturalnego w miarę jego opracowywania przez maszyny) lub wyraz w sekwencji na podstawie poprzedniego kontekstu. Autoregresyjne podejście modelu GPT, przewidujące po jednym tokenie na raz, pozwala mu generować spójny i zgodny z kontekstem tekst, ukazując jego wszechstronność i zrozumienie języka. Ten model ma jednak wielkie rozmiary. Przykładowo model GPT-3 ma ogromną skalę na poziomie 175 miliardów parametrów (szczegółowe informacje na temat modelów GPT-3.5-turbo i GPT-4 nie są dostępne w momencie pisania tego tekstu). Faktem jest, że te modele potrafią się skalować i uogólniać, zmniejszając w ten sposób potrzebę ich dostrajania pod kątem konkretnego zadania.

Podstawy funkcjonowania

Podstawową zasadą kierującą działaniem większości modeli LLM jest autoregresyjne modelowanie języka, w ramach którego model pobiera tekst wejściowy i systematycznie przewiduje kolejny token lub wyraz (więcej o różnicy między tymi dwoma terminami powiemy wkrótce) w danej sekwencji. Ten proces przewidywania token po tokenie ma kluczowe znaczenie dla generowania spójnego i zgodnego z kontekstem tekstu. Yann LeCun podkreśla jednak, że takie podejście może kumulować błędy. Jeśli n-ty token jest nieprawidłowy, model może trwale zakładać jego poprawność, co może skutkować niedokładnościami w wygenerowanym tekście.

Do 2020 r. dominującą metodą dostosowywania modeli do konkretnych zadań było ich dostrajanie. Jednak ostatnie osiągnięcia – których najlepszym przykładem mogą być większe modele, takie jak GPT-3 – wprowadziły inżynierię podpowiedzi. Pozwala to modelom uzyskiwać wyniki specyficzne dla zadania bez konwencjonalnego dostrajania, bazując zamiast tego na precyzyjnych instrukcjach dostarczanych w formie podpowiedzi.

Modele takie jak te dostępne w serii GPT są misternie opracowywane w celu przyswajania obszernej wiedzy na temat składni, semantyki i podstawowej ontologii właściwej korpusom języka ludzkiego. Chociaż te modele są biegłe w uchwytywaniu cennych informacji lingwistycznych, należy koniecznie przyjąć do wiadomości, że te modele mogą również dziedziczyć nieścisłości i uprzedzenia obecne w ich korpusach szkoleniowych.

Różne podejścia do szkolenia

Model LLM można wyszkolić w oparciu o różne cele, z których każdy wymaga innego podejścia. Trzy najważniejsze metody są następujące:

Przyczynowe modelowanie języka (casual language modeling – CLM) Ta autoregresyjna metoda jest stosowana w modelach takich jak seria GPT firmy OpenAI. CLM uczy model przewidywania następnego tokena w sekwencji na podstawie poprzednich tokenów. Chociaż modele CLM są efektywne w przypadku takich zadań, jak generowanie i streszczanie tekstu, mają one kontekst jednokierunkowy i podczas przewidywania uwzględniają jedynie przeszły kontekst. My skoncentrujemy się na tym rodzaju modelu, ponieważ jest to obecnie najczęściej używana architektura.

Maskowane modelowanie języka (masked language modeling – MLM) Ta metoda jest stosowana w modelach takich jak BERT, gdzie pewien procent tokenów w sekwencji wejściowej jest losowo maskowany, a model przewiduje oryginalne tokeny na podstawie otaczającego je kontekstu. To dwukierunkowe podejście jest korzystne w przypadku takich zadań, jak klasyfikacja tekstu, analiza nastrojów czy rozpoznawanie nazwanych jednostek. Nie nadaje się ono do zadań związanych z generowaniem czystego tekstu, ponieważ w takich przypadkach model powinien opierać się wyłącznie na przeszłości, bądź też „lewej części” danych, bez spoglądania na „prawą część” lub patrzenia w przyszłość.

Sekwencja do sekwencji (Seq2Seq) Te modele, wykorzystujące architekturę kodera-dekodera, są używane w zadaniach, takich jak tłumaczenie maszynowe i streszczanie. Koder przetwarza sekwencję wejściową, generując ukrytą reprezentację wykorzystywaną przez dekoder do wyprodukowania sekwencji wyjściowej. To podejście doskonale radzi sobie ze złożonymi zadaniami obejmującymi przekształcenia typu wejście-wyjście, które są powszechnie stosowane w zadaniach, gdzie wejście i wyjście są ze sobą jasno powiązane w czasie szkolenia, jak choćby w przypadku zadań tłumaczeniowych.

Główne różnice między nimi dotyczą ich celów, architektur i przydatności do określonych zadań. Model CLM koncentruje się na przewidywaniu następnego tokena i specjalizuje się w generowaniu tekstu. Model MLM specjalizuje się w (dwukierunkowym) rozumieniu kontekstu, a Seq2Seq jest biegły w generowaniu spójnego tekstu wyjściowego w formie sekwencji. I chociaż modele CLM nadają się do zadań autoregresyjnych, modele MLM rozumieją i osadzają kontekst, a modele Seq2Seq obsługują przekształcenia wejście-wyjście. Modele można również wstępnie przeszkolić w zakresie zadań pomocniczych, takich jak przewidywanie następnego zdania (next sentence prediction – NSP), które sprawdza ich zrozumienie na temat rozkładu danych.

Model transformatora

Architektura transformatora tworzy podstawę dla nowoczesnych modeli LLM. Vaswani i in. przedstawili model transformatora w artykule „Attention Is All You Need” (Uwaga jest wszystkim, czego potrzebujesz) opublikowanym w grudniu 2017 r. Od tego czasu NLP zostało całkowicie zrewolucjonizowane. W przeciwieństwie do poprzednich modeli, które opierają się na przetwarzaniu sekwencyjnym, transformatory wykorzystują mechanizm uwagi, który umożliwia zrównoleglanie i wychwytuje długotrwałe zależności.

Oryginalny model składa się z kodera i dekodera, obydwu wyrażonych wieloma warstwami przetwarzania samouwagi. Przetwarzanie samouwagi (self-attention processing) oznacza, że każdy wyraz jest określany poprzez zbadanie i wzięcie pod uwagę jego informacji kontekstowych.

W koderze sekwencje wejściowe są osadzane i przetwarzane równolegle za pośrednictwem warstw, wychwytując w ten sposób skomplikowane relacje między wyrazami. Dekoder generuje sekwencje wyjściowe, korzystając z informacji kontekstowych kodera. W trakcie procesu szkolenia dekoder uczy się przewidywać następny wyraz poprzez analizowanie wyrazów poprzedzających.

Transformator wykorzystuje wiele warstw dekoderów, aby zwiększyć jego zdolność do generowania języka. Konstrukcja transformatora zawiera okno kontekstowe, które określa długość sekwencji uwzględnianej przez model podczas wnioskowania i szkolenia. Większe okna kontekstowe oferują szerszy zakres, ale wiążą się z wyższymi kosztami obliczeniowymi, podczas gdy mniejsze okna stwarzają ryzyko pominięcia kluczowych długoterminowych zależności. Prawdziwym „mózgiem”, który pozwala transformatorom zrozumieć kontekst i przodować w takich zadaniach, jak tłumaczenie i streszczanie, jest mechanizm samouwagi. W dzisiejszym modelu LLM nie ma nic lepszego, niż świadomość czy uczenie neuronowe.

Mechanizm samouwagi pozwala modelowi LLM selektywnie skupiać się na różnych częściach sekwencji wejściowej, zamiast traktować całe wejście w ten sam sposób. Z tego powodu potrzebuje on mniej parametrów do modelowania długotrwałych zależności i może uchwycić relacje między wyrazami, które w sekwencji są rozmieszczone daleko od siebie. Jest to po prostu kwestia odgadywania kolejnych wyrazów w oparciu o dane statystyczne, choć naprawdę wydaje się to mądre i ludzkie.

Podczas gdy pierwotną architekturą transformatora był model Seq2Seq konwertujący całe sekwencje ze źródła do formatu docelowego, obecnie stosowanym podejściem do generowania tekstu jest podejście autoregresyjne.

Odbiegając od tej oryginalnej architektury, niektóre modele, w tym modele GPT, nie zawierają jawnej części kodera i opierają się wyłącznie na dekoderze. W tej architekturze wejście podawane jest bezpośrednio do dekodera. Dekoder ma więcej głów samouwagi i został przeszkolony przy użyciu ogromnej ilości danych w sposób nienadzorowany, po prostu przewidując następny wyraz w istniejącym tekście. Inne modele, takie jak BERT, zawierają tylko część dotyczącą kodera, która produkuje tzw. osadzenia.

Tokeny i tokenizacja

Tokeny, będące podstawowymi komponentami w zaawansowanych modelach językowych, takich jak GPT, odgrywają kluczową rolę w skomplikowanym procesie rozumienia i generowania języka.

W przeciwieństwie do tradycyjnych jednostek językowych, takich jak wyrazy lub znaki, token wyraża istotę pojedynczej jednostki wyrazu, znaku lub podwyrazu. Taka większa szczegółowość jest niezbędna do uchwycenia subtelności i zawiłości języka.

Proces tokenizacji to kluczowy aspekt. Polega na podziale tekstów na mniejsze i łatwiejsze do zarządzania jednostki, nazywane tokenami, które są następnie poddawane analizie modelu. Wybór tokenów zamiast wyrazów jest celowy i pozwala na bardziej zróżnicowaną reprezentację języka.

OpenAI i Azure OpenAI wykorzystują technikę tokenizacji podwyrazów nazywaną kodowaniem par bajtów (byte pair encoding – BPE). W BPE często występujące pary znaków zostają złączone w pojedyncze tokeny, co przyczynia się do bardziej zwartej i spójnej reprezentacji danych tekstowych. W tym przypadku pojedynczy token składa się z około czterech znaków w języku angielskim lub trzech czwartych wyrazu. Tym samym 100 tokenów to około 75 wyrazów. Przykładowo zdanie „Many words map to one token, but some don’t: indivisible” zostałoby podzielone na tokeny ["Many", " words", " map", " to", " one", " token", ",", " but", " some", " don", "'t", ":", " indiv", "isible"], które po odwzorowaniu na identyfikatory będą mieć wartości [8607, 4339 , 2472, 311, 832, 4037, 11, 719, 1063, 1541, 956, 25, 3687, 23936].

Wskazówka Zwróćmy uwagę na spacje poprzedzające tekst (po znaku otwierającego cudzysłowu) – to nie jest błąd składu, ta początkowa spacja istotnie stanowi część tokenu.

Tokenizacja służy wielu różnym celom, wpływając zarówno na dynamikę obliczeniową, jak i na jakościowe aspekty generowanego tekstu. Koszt obliczeniowy wykonywania modelu LLM jest ściśle związany z metodami tokenizacji, rozmiarem słownictwa (zwykle dla słownictwa jednego języka używa się od 30 000 do 50 000 różnych tokenów) oraz długości i złożoności tekstów wejściowych i wyjściowych.

Ten celowy wybór tokenów zamiast wyrazów w modelach LLM wynika z różnych względów:

Tokeny pozwalają na bardziej szczegółową reprezentację języka, umożliwiając modelom dostrzeganie subtelnych znaczeń i skuteczne radzenie sobie z wyrazami spoza słownika lub rzadko używanymi. Ten poziom szczegółowości jest szczególnie istotny w przypadku języków charakteryzujących się bogatą strukturą morfologiczną.

Tokeny pomagają stawić czoła wyzwaniu, jakim jest radzenie sobie z niejednoznacznością i polisemią w języku, przy użyciu bardziej kompozycyjnego podejścia.

Tokenizacja podwyrazowa umożliwia modelom LLM reprezentowanie wyrazów jako kombinacji tokenów będących podwyrazami, pozwalając im skuteczniej uchwycić różne znaczenia danego wyrazu na podstawie poprzedzających go lub następujących po nim znaków. Przykładowo przyrostek wyrazu może mieć dwie różne reprezentacje tokenów, w zależności od przedrostka następnego wyrazu.

Chociaż algorytm tokenizacji jest wykonywany na danym języku (zwykle angielskim), co sprawia, że dzielenie tokenów nie jest optymalne dla innych języków, natywnie rozszerza on wsparcie dla dowolnego języka z tym samym zestawem znaków.

Użycie tokenów znacząco pomaga w efektywnym wykorzystaniu pamięci. Poprzez podzielenie tekstu na mniejsze jednostki modele LLM mogą skuteczniej zarządzać pamięcią, przetwarzając i przechowując większe zbiory wyrazów bez nakładania niepraktycznych wymagań na zasoby pamięci.

Podsumowując, tokeny i tokenizacja reprezentują podstawowe elementy, które kształtują przetwarzanie i rozumienie języka w modelach LLM. Od ich roli w zapewnianiu szczegółowości i zarządzaniu pamięcią, aż po rozwiązywanie problemów językowych, tokeny są niezbędne w optymalizacji wydajności i efektywności modeli LLM.

Osadzenia

Tokenizacja i osadzenia to blisko powiązane pojęcia w NLP.

Tokenizacja polega na dzieleniu sekwencji tekstu na mniejsze jednostki. Te tokeny są konwertowane na identyfikatory i służą jako podstawowe elementy składowe dla modelu w celu przetwarzania informacji tekstowych. Z kolei osadzenia odnoszą się do numerycznych i gęstych reprezentacji tych tokenów w wielowymiarowej przestrzeni wektorowej, zwykle z ponad 1000 wymiarów.

Osadzenia są generowane za pośrednictwem warstwy osadzania w modelu i kodują semantyczne relacje oraz informacje kontekstowe dotyczące tokenów. Warstwa osadzeń zasadniczo uczy się, podczas szkolenia, rozproszonej reprezentacji dla każdego tokena, umożliwiając modelowi zrozumienie relacji i podobieństw między wyrazami lub podwyrazami na podstawie ich kontekstowego użycia.

Osadzenia upraszczają wyszukiwanie semantyczne: możemy osadzić różne zdania i mierzyć ich odległości w tej ponad 1000-wymiarowej przestrzeni. Im krótsze jest zdanie i im większa jest ta wielowymiarowa przestrzeń, tym dokładniejsza jest reprezentacja semantyczna. Wewnętrznym celem osadzania jest umieszczenie wyrazów, takich jak królowa i król, blisko siebie w tej przestrzeni osadzeń, przy czym wyraz kobieta również będzie znajdować się blisko wyrazu królowa.

Osadzenia mogą działać na poziomie wyrazu, jak Word2Vec (2013), lub na poziomie zdania, jak text-ada-002 firmy OpenAI (z najnowszą wersją wydaną w 2022 r.).

Jeżeli model osadzania (model, który przyjmuje na wejściu jakiś tekst i generuje gęsty wektor liczbowy) jest zazwyczaj wynikiem części kodującej modelu transformatora, w przypadku modeli GPT wygląda to inaczej. W rzeczywistości GPT-4 ma pewne wewnętrzne warstwy osadzeń (wyrazów i pozycyjne) wewnątrz głów uwagi, podczas gdy właściwy model osadzania (text-ada-002) jest szkolony oddzielnie i nie jest bezpośrednio używany w GPT-4. Text-ada-002 jest dostępny podobnie jak model generowania tekstu i służy do wyszukiwania podobieństwa i innych podobnych przypadków użycia (omawianych w dalszej części).

Podsumowując, tokenizacja służy za początkowy krok w przygotowywaniu danych tekstowych dla modeli ML, a osadzenia usprawniają ten proces poprzez tworzenie sensownych reprezentacji numerycznych, które dobrze oddają różnice semantyczne i informacje kontekstowe tokenów.

Kroki szkolenia

Szkolenie modeli językowych typu GPT obejmuje kilka kluczowych faz, z których każda przyczynia się do rozwoju i biegłości modelu:

1. Wstępne szkolenie z użyciem zindeksowanych danych.

2. Dostrajanie nadzorowane (SFT).

3. Modelowanie nagród.

4. Uczenie przez wzmacnianie na podstawie ludzkiej informacji zwrotnej (RLHF).

Wstępne szkolenie z użyciem zindeksowanych danych

W tej początkowej fazie model językowy jest wstępnie szkolony przy użyciu ogromnego zbioru danych utworzonego ze zindeksowanych danych internetowych i/lub prywatnych zbiorów danych. Ten początkowy zbiór szkoleniowy dla przyszłych modeli prawdopodobnie zawiera tekst wygenerowany przez model LLM.

W tej fazie model uczy się wzorców, struktury i reprezentacji języka poprzez przewidywanie kolejnego wyrazu w sekwencji na podstawie podanego kontekstu. Jest to realizowane przy użyciu celu modelowania języka.

Tokenizacja to kluczowy etap wstępnego przetwarzania, podczas którego wyrazy lub podwyrazy są konwertowane na tokeny, a następnie na tokeny liczbowe. Używanie tokenów zamiast wyrazów umożliwia modelowi uchwycenie bardziej zróżnicowanych relacji i zależności w obrębie języka, ponieważ tokeny mogą reprezentować jednostki podwyrazów, znaki, a nawet części wyrazów.

Model jest szkolony pod kątem przewidywania następnego tokena w danej sekwencji na podstawie poprzednich tokenów. Ten cel szkoleniowy jest zwykle realizowany przy użyciu funkcji straty, takiej jak strata entropii krzyżowej, która mierzy różnicę między przewidywanym rozkładem prawdopodobieństwa dla tokenów a rozkładem rzeczywistym.

Modele otrzymane po zakończeniu tej fazy są zwykle nazywane modelami podstawowymi lub modelami wstępnie przeszkolonymi.

Dostrajanie nadzorowane (SFT)

Po wstępnym szkoleniu model przechodzi nadzorowane dostrajanie (supervised fine-tuning – SFT). Na tym etapie do modelu wprowadzane są podpowiedzi i uzupełnienia w celu udoskonalenia jego podstawy. Model uczy się przy użyciu oznaczonych danych, dostosowując swoje parametry w celu poprawy wydajności w określonych zadaniach.

Niektóre małe modele open source na potrzeby tej fazy dostrajania wykorzystują wyniki wygenerowane przez większe modele. Nawet jeśli jest to sprytny sposób na zaoszczędzenie pieniędzy podczas szkolenia, może to prowadzić do zwodniczych modeli, przekonanych o tym, że mają większe możliwości niż te, jakimi dysponują w rzeczywistości.

Modelowanie nagród

Po dopracowaniu modelu za pomocą SFT tworzony jest model nagród. Osoby poddające model ewaluacji recenzują i oceniają różne wyniki modelu w oparciu o jakość, trafność, dokładność i inne kryteria. Te oceny są używane do tworzenia modelu nagród, który przewiduje „nagrodę” lub ocenę dla różnych wyników.

Uczenie przez wzmacnianie na podstawie ludzkiej informacji zwrotnej (RLHF)

Po wdrożeniu modelu nagród wdrażane jest uczenie przez wzmacnianie na podstawie ludzkiej informacji zwrotnej (reinforcement learning from human feedback – RLHF), którego zadaniem jest pokierowanie modelem w celu generowania lepszych wyników. Model otrzymuje informację zwrotną na temat swoich wyników z modelu nagród i dostosowuje swoje parametry, aby zmaksymalizować przewidywaną nagrodę. Ten proces uczenia przez wzmacnianie zwiększa precyzję i umiejętności komunikacyjne modelu. Modele własnościowe, takie jak GPT-4, są modelami RLHF (stojące za nimi modele podstawowe nie zostały jeszcze wydane).

Istotne jest uznanie odmiennego charakteru podpowiadania modelowi podstawowemu w porównaniu z modelem RLHF lub SFT. Dla takiej podpowiedzi, jak „write me a song about love” (napisz mi piosenkę o miłości), model podstawowy prawdopodobnie wyprodukuje coś zbliżonego do „write me a poem about loyalty” (napisz mi wiersz o lojalności), a nie piosenkę o miłości. Ta tendencja wynika ze zbioru danych szkoleniowych, gdzie wyrażenie „write me a song about love” może poprzedzać inne podobne instrukcje, skłaniając model do wygenerowania odpowiedzi zgodnych z tymi wzorcami. Aby nakierować model podstawowy na stworzenie piosenki miłosnej, wymagane staje się zróżnicowane podejście do inżynierii podpowiedzi. Przykładowo utworzenie podpowiedzi typu „here is a love song: I love you since the day we met” (Oto piosenka o miłości: Kocham cię od dnia, w którym się poznaliśmy) pozwala modelowi oprzeć się na dostarczonym kontekście i wygenerować pożądany wynik.

Wnioskowanie

Proces wnioskowania to autoregresyjny proces generowania, który polega na iteracyjnym wywoływaniu modelu z jego własnymi wygenerowanymi wynikami, używanymi jako dane początkowe. W ramach przyczynowego modelowania języka jako wejście przyjmowana jest sekwencja tokenów tekstowych, a model zwraca rozkład prawdopodobieństwa dla następnego tokena.

Aspekt niedeterministyczny pojawia się przy wyborze kolejnego tokena z tego rozkładu, co jest często realizowane poprzez próbkowanie. Jednak niektóre modele zapewniają opcję ziarna na potrzeby deterministycznych wyników.

Proces selekcji może być różny – od prostego (wybór najbardziej prawdopodobnego tokena) do złożonego (obejmującego różne przekształcenia). Parametry, takie jak temperatura, wpływają na kreatywność modelu, gdzie wysokie temperatury skutkują bardziej płaskim rozkładem prawdopodobieństwa.

Ten iteracyjny proces trwa aż do osiągnięcia warunku zatrzymania – w idealnym przypadku ustalonego przez model lub zdefiniowaną wcześniej maksymalną długość.

Kiedy model generuje nieprawidłowe, bezsensowne lub nawet fałszywe informacje, nazywamy to halucynacją. Gdy modele LLM generują tekst, działają one jak ekstrapolatory oparte na podpowiedziach, pozbawione cytowania dla konkretnych źródeł danych szkoleniowych, ponieważ nie są zaprojektowane jako bazy danych ani wyszukiwarki. Proces abstrakcji – przekształcania zarówno podpowiedzi, jak i danych szkoleniowych – może przyczyniać się do halucynacji z powodu ograniczonego zrozumienia kontekstowego, prowadząc do potencjalnej utraty informacji.

Uwaga Halucynacje mogą być uznawane za zaletę w modelach LLM, zwłaszcza gdy poszukujemy kreatywności i różnorodności. Na przykład, gdy prosimy ChatGPT lub inny model LLM o napisanie jakiejś fabuły fantasy, celem nie jest replikacja, ale wygenerowanie zupełnie nowych postaci, scen i historii. Ten kreatywny aspekt opiera się na modelach, które nie odwołują się bezpośrednio do danych, na których zostały przeszkolone, co prowadzi do kreatywnych i różnorodnych wyników.

Pomimo trenowania na bilionach tokenów, co widać w przypadku GPT-3 z prawie 1 TB danych, wagi tych modeli – decydujące o ich wielkości – są często od 20% do 40% mniejsze od oryginału. W tym przypadku stosuje się kwantyzację, aby spróbować zmniejszyć rozmiar wag, obcinając dla nich precyzję. Jednak modele LLM nie są zaprojektowane jako właściwe kompresory bezstratne, przez co w pewnym momencie dochodzi do utraty informacji. Jest to pewne możliwe heurystyczne wyjaśnienie dla halucynacji.

Jeszcze jednym powodem jest pewne wewnętrzne ograniczenie modeli LLM jako autoregresyjnych predyktorów. W rzeczywistości podczas przewidywania następnego tokena modele LLM polegają w dużym stopniu na tokenach w obrębie swojego okna kontekstowego, należącego do rozkładu zbioru danych, który składa się głównie z tekstu napisanego przez ludzi. Podczas wykonywania modeli LLM i pobierania z nich próbek tokenów, każdy próbkowany token stopniowo przesuwa ten model nieco poza rozkład, na którym był początkowo szkolony. Rzeczywiste wejście modelu jest generowane częściowo przez niego samego, a w miarę wydłużania przez nas sekwencji, którą chcemy przewidzieć, stopniowo przesuwamy model poza znany mu rozkład, którego się nauczył.

Dostrajanie, podpowiadanie i inne techniki

W celu zoptymalizowania odpowiedzi z modelu LLM stosuje się różne techniki, takie jak inżynieria podpowiedzi i dostrajanie.

Inżynieria podpowiedzi (prompt engineering) obejmuje tworzenie starannie sformułowanych i konkretnych zapytań użytkowników, które mają na celu pokierowanie modelem i ukształtowanie jego odpowiedzi. Celem tej specjalistycznej umiejętności, która często wymaga dogłębnego zrozumienia architektury modelu, jest poprawa wyników poprzez tworzenie bardziej znaczących wejść. Inżynieria podpowiedzi działa, ponieważ wykorzystuje możliwości nowszych i większych modeli językowych, które nauczyły się ogólnych wewnętrznych reprezentacji języka. Te zaawansowane modele, często opracowywane za pomocą takich technik, jak nienadzorowane szkolenie wstępne na ogromnych zbiorach danych, zapewniają głębokie zrozumienie struktur językowych, kontekstu i semantyki. W rezultacie mogą one generować sensowne odpowiedzi na podstawie otrzymanych danych.

Kiedy inżynierowie podpowiedzi opracowują starannie sformułowane i konkretne zapytania, wykorzystują oni zdolność modelu do interpretowania i generowania języka w sposób odpowiedni dla kontekstu. Poprzez dostarczanie modelowi bardziej szczegółowych i efektywnych danych, inżynieria podpowiedzi naprowadza model na produkowanie pożądanych wyników. Zasadniczo inżynieria podpowiedzi jest zgodna z nieodłączną zdolnością modelu do rozumienia i generowania języka, umożliwiając użytkownikom wpływanie i optymalizowanie odpowiedzi modelu za pomocą dobrze zaprojektowanych podpowiedzi.

Z kolei dostrajanie to technika szkoleniowa, która dostosowuje model LLM do konkretnych zadań lub dziedzin wiedzy poprzez zastosowanie nowych, często niestandardowych zbiorów danych. Ten proces obejmuje szkolenie wag modelu z użyciem dodatkowych danych, co skutkuje lepszą wydajnością i trafnością.

Inżynieria podpowiedzi i dostrajanie służą różnym celom optymalizacji. Inżynieria podpowiedzi koncentruje się na uzyskiwaniu lepszych wyników poprzez udoskonalanie danych, podczas gdy dostrajanie ma na celu poprawę wydajności modelu w przypadku określonych zadań poprzez szkolenie z wykorzystaniem nowych zbiorów danych. Ponadto inżynieria podpowiedzi zapewnia precyzyjną kontrolę nad działaniami modelu LLM, zaś dostrajanie nadaje głębi odpowiednim obszarom tematycznym. Obie te techniki mogą się wzajemnie uzupełniać, poprawiając ogólne zachowanie modelu i wyniki.

Istnieją pewne specyficzne zadania, których nie da się wykonać za pomocą żadnego modelu LLM, a przynajmniej nie bez wykorzystywania zewnętrznych narzędzi lub dodatkowego oprogramowania. Przykładem takiego zadania jest generowanie odpowiedzi na wprowadzone przez użytkownika polecenie „calculate 12*6372” (oblicz 12*6372), zwłaszcza jeśli model LLM nie napotkał wcześniej kontynuacji tego obliczenia w swoim zbiorze danych szkoleniowych. W takim przypadku pewną starszą opcją jest użycie wtyczek jako rozszerzeń umożliwiających modelowi LLM dostęp do zewnętrznych narzędzi lub danych, poszerzając w ten sposób jego możliwości. Przykładowo ChatGPT obsługuje wtyczki do usług, takich jak Wolfram Alpha, Bing Search itd.

Posuwając się w inżynierii podpowiedzi o krok dalej można również nakłaniać modele LLM do autorefleksji z użyciem takich technik, jak łańcuch myśli (chain-of-thought), pozwalający ukazać sposób myślenia przez model. Podpowiadanie ograniczone (takie jak podpowiedzi szablonowe, generowanie przeplatane i sterowanie logiczne) to kolejna technika zalecana w celu poprawy dokładności i bezpieczeństwa w wynikach modelu.

Podsumowując, optymalizowanie odpowiedzi z modelów LLM to wieloaspektowy proces, który obejmuje połączenie inżynierii podpowiedzi, dostrajania i integracji wtyczek, a wszystko to dostosowane do konkretnych wymagań dla pożądanych zadań i dziedzin.

Modele wielomodalne

Większość modeli ML jest szkolonych i działa w sposób jednomodalny, wykorzystując jeden typ danych – tekst, obraz lub dźwięk. Modele wielomodalne łączą informacje z różnych modalności, obejmując takie elementy, jak obrazy i tekst. Podobnie jak ludzie, mogą one sprawnie poruszać się po różnych trybach danych. Modele wielomodalne zwykle podlegają nieco innemu procesowi szkolenia.

Istnieją różne rodzaje wielomodalności:

Wielomodalne wejście Obejmuje to:

Wejście w postaci tekstu i obrazu Systemy z wielomodalnym wejściem przetwarzają dane zarówno w postaci tekstu, jak i obrazu. Ta konfiguracja jest korzystna w przypadku zadań, takich jak odpowiadanie na pytania wizualne, gdzie model odpowiada na pytania na podstawie połączonych informacji tekstowych i graficznych.

Wejście w postaci dźwięku i tekstu Systemy uwzględniające na wejściu dźwięk oraz tekst przydają się w takich zastosowaniach, jak zamiana mowy na tekst i wielomodalne chatboty.

Wielomodalne wyjście Obejmuje to:

Wyjście w postaci tekstu i obrazu Niektóre modele generują jednocześnie wyniki w formie tekstu i obrazu. Można to zaobserwować w zadaniach, takich jak synteza tekstu na obraz lub opatrywanie obrazów podpisami.

Wyjście w postaci dźwięku i tekstu W scenariuszach, w których wymagane są wyniki zarówno w formie dźwięku, jak i tekstu, np. generowanie odpowiedzi mówionych na podstawie wprowadzonego tekstu, w grę wchodzą modele z wielomodalnym wyjściem.

Wielomodalne wejście i wyjście Obejmuje to:

Wejście w postaci tekstu, obrazu i dźwięku Rozbudowane systemy wielomodalne przetwarzają jednocześnie tekst, obraz i dźwięk, umożliwiając szersze zrozumienie różnorodnych źródeł danych.

Wyjście w postaci tekstu, obrazu i dźwięku Modele, które produkują wyniki w wielu modalnościach oferują wszechstronne odpowiedzi – na przykład, generowanie opisów tekstowych, obrazów i treści mówionych w odpowiedzi na zapytanie użytkownika.

Przykładem przejścia na modele wielomodalne mogą być modele pionierskie, takie jak Flamingo firmy DeepMind, BLIP firmy Salesforce i PaLM-E firmy Google. Teraz na rynek wkroczył GPT-4-visio, model z wielomodalnym wejściem od OpenAI.

Biorąc pod uwagę obecny krajobraz, wielomodalne wyjście (ale także wejście) można osiągnąć poprzez dostosowanie istniejących systemów i wykorzystanie integracji między różnymi modelami. Można przykładowo wywołać model DALL-E firmy OpenAI w celu wygenerowania obrazu na podstawie opisu z modelu OpenAI GPT-4 lub zastosować funkcję zamiany mowy na tekst z modelu OpenAI Whisper i przekazać jego wynik do modelu GPT-4.

Uwaga Poza ulepszaniem interakcji użytkownika, możliwości wielomodalne wyglądają obiecująco pod względem świadczenia pomocy osobom niedowidzącym w poruszaniu się zarówno w sferze cyfrowej, jak i w świecie fizycznym.

Biznesowe przypadki użycia

Modele LLM zmieniają krajobraz aplikacji biznesowych i ich interfejsów. Ich potencjał transformacyjny obejmuje różne dziedziny, oferując spektrum możliwości podobne do ludzkiego rozumowania.

Na przykład, niektóre standardowe zadania NLP – takie jak tłumaczenie językowe, streszczanie, wydobywanie intencji i analiza nastrojów – stają się bezproblemowe w przypadku modeli LLM. Wyposażają one firmy w potężne narzędzia do efektywnej komunikacji i zrozumienia rynku, wraz z aplikacjami chatbot do obsługi klienta. Podczas gdy dawniej podczas rozmowy z chatbotem ludzie myśleli: „Proszę, pozwól mi porozmawiać z człowiekiem”, dzisiaj może być odwrotnie, ponieważ chatboty oparte na modelach LLM rozumieją i działają w bardzo ludzki i efektywny sposób.

Konwersacyjny interfejs użytkownika, realizowany przez chatboty oparte na modelach LLM, może zastąpić tradycyjne interfejsy użytkownika, oferując bardziej interaktywne i intuicyjne doświadczenie. Może to być szczególnie korzystne w przypadku skomplikowanych platform, takich jak systemy raportowania.

Poza konkretnymi zastosowaniami, prawdziwa siła modeli LLM leży w ich możliwościach adaptacyjnych. Wykazują one zdolność rozumowania podobną do ludzkiej, dzięki czemu nadają się do wielu różnych zadań, które wymagają zróżnicowanego zrozumienia i rozwiązywania problemów. Pomyślmy o sprawdzaniu i grupowaniu recenzji jakiegoś produktu sprzedawanego w internecie. Ich zdolność do uczenia się na przykładach (co później nazwiemy podpowiadaniem wielostrzałowym) wprowadza pewną warstwę elastyczności.

Ta zdolność do adaptacji rozciąga się na dowolny rodzaj tworzenia treści, w przypadku którego modele LLM mogą generować tekst zbliżony do ludzkiego na potrzeby materiałów marketingowych i opisów produktów, optymalizując wydajność w rozpowszechnianiu informacji. W przypadku analizy danych modele LLM pobierają i wydobywają cenne spostrzeżenia z ogromnych zbiorów danych tekstowych, umożliwiając firmom podejmowanie świadomych decyzji.

Od ulepszania wyszukiwarek po przyczynianie się do wykrywania oszustw, wzmacnianie bezpieczeństwa cybernetycznego, a nawet pomoc w diagnozowaniu medycznym, modele LLM okazują się być niezbędnymi narzędziami zdolnymi do naśladowania ludzkiego rozumowania i uczenia się na przykładach. Jednak pośród tego technologicznego cudu względy etyczne związane ze stronniczością, prywatnością i odpowiedzialnym korzystaniem z danych pozostają najważniejsze, podkreślając znaczenie przemyślanej i rozważnej integracji modeli LLM w krajobrazie biznesowym. Krótko mówiąc, modele LLM oznaczają nie tylko skok w zakresie sprawności technologicznej, ale także głęboką zmianę w sposobie, w jaki firmy podchodzą do rozwiązywania problemów i przetwarzania informacji.

Fakty dotyczące programowania konwersacyjnego

W świecie szybkich danych i aplikacji opartych na AI język naturalny wyłania się jako wszechstronna siła, odgrywająca podwójną rolę jako medium programistyczne (angielski jako nowy język programowania) i interfejs użytkownika. Oznacza to nadejście Oprogramowania 3.0. Odwołując się do analogii Andreja Karpathy’ego, jeśli Oprogramowanie 1.0 było „zwykłym i starym” kodem, a Oprogramowanie 2.0 było stosem sieci neuronowych, to Oprogramowanie 3.0 jest erą konwersacyjnego programowania i oprogramowania. Oczekuje się, że ta tendencja będzie się nasilać, w miarę jak AI staje się łatwo dostępna jako produkt.

Rodząca się moc języka naturalnego

Wpływ języka naturalnego jest wieloaspektowy i służy on zarówno jako narzędzie do programowania modeli LLM (zwykle za pośrednictwem inżynierii podpowiedzi), jak i interfejs użytkownika (zwykle w scenariuszach czatów).

Język naturalny pełni funkcję deklaratywnego języka programowania wykorzystywanego przez deweloperów do wyrażania funkcjonalności aplikacji, a przez użytkowników do wyrażania oczekiwanych rezultatów. Ta zbieżność języka naturalnego jako metody wprowadzania danych w programowaniu i medium komunikacyjnego dla użytkowników stanowi przykład rosnącej mocy i wszechstronności modeli LLM, gdzie wyrażenia lingwistyczne wypełniają lukę pomiędzy zawiłościami programowania a interakcjami użytkownika.

Język naturalny jako (nowa) warstwa prezentacji

Język naturalny w oprogramowaniu ewoluował poza swoją tradycyjną rolę narzędzia do komunikacji i obecnie wyłania się jako potężna warstwa prezentacji w różnych aplikacjach.

Zamiast polegać na interfejsach graficznych, użytkownicy mogą wchodzić w interakcję z systemami i aplikacjami przy użyciu codziennego języka. Ta zmiana paradygmatu, możliwa dzięki modelom LLM, upraszcza interakcje użytkowników, czyniąc technologię bardziej dostępną dla szerszego grona odbiorców i umożliwiając użytkownikom korzystanie z aplikacji w intuicyjny i przystępny sposób.

Poprzez wykorzystanie modeli LLM deweloperzy mogą tworzyć konwersacyjne interfejsy, zamieniając złożone zadania w stosunkowo proste konwersacje. W przypadku prostego oprogramowania i w określonych przypadkach użycia, gdzie przykładowo bezpieczeństwo obsługiwane jest osobno, zwykły interfejs użytkownika nie jest już potrzebny. Całe API zaplecza można wywołać poprzez czat w aplikacjach Microsoft Teams, WhatsApp lub Telegram.

Inżynieria AI

Programowanie w języku naturalnym, zwykle nazywane inżynierią podpowiedzi, reprezentuje kluczową dyscyplinę w maksymalizacji możliwości modeli LLM, kładąc nacisk na tworzenie efektywnych podpowiedzi nakierowujących modele LLM na generowanie pożądanych wyników. Na przykład, prosząc model o „zwrócenie listy JSON z miastami wymienionymi w poniższym tekście”, inżynier podpowiedzi powinien wiedzieć, jak przeformułować taką podpowiedź (lub wiedzieć, które narzędzia i struktury mogą być pomocne) w przypadku, gdy model zacznie zwracać tekst wprowadzający przed właściwym pożądanym kodem JSON. W ten sam sposób inżynier podpowiedzi powinien wiedzieć, jakich podpowiedzi należy użyć w przypadku modelu podstawowego w porównaniu z modelem RLHF.

Wraz z wprowadzeniem modeli GPT firmy OpenAI i powiązanego z nimi sklepu powstało pewne przekonanie, że każdy może bez wysiłku opracować aplikację opartą na modelach LLM. Ale czy to przekonanie jest trafne? Gdyby to była prawda, powstające w ten sposób aplikacje prawdopodobnie miałyby niewielką lub zerową wartość, co utrudniałoby zarabianie na nich. Na szczęście rzeczywistość jest taka, że do skonstruowania prawdziwie efektywnej aplikacji opartej na modelach LLM potrzeba dużo więcej niż tylko stworzenia pojedynczej kreatywnej podpowiedzi.

Czasem inżynieria podpowiedzi (która niekoniecznie sprowadza się do utworzenia pojedynczej podpowiedzi, ale raczej kilku różnych) sama w sobie nie jest wystarczająca i potrzebne jest bardziej całościowe spojrzenie. Pomaga to wyjaśnić, dlaczego pojawienie modeli LLM jako produktu doprowadziło do powstania nowej roli zawodowej, która jest niezbędna do uwolnienia pełnego potencjału tych modeli. Ta rola, często określana mianem inżyniera AI, wykracza poza zwykłe podpowiadanie modelom. Obejmuje ona kompleksowe zaprojektowanie i zaimplementowanie infrastruktury oraz kodu klejowego niezbędnego do sprawnego funkcjonowania modeli LLM.

W szczególności musi ona uwzględnić dwie kluczowe różnice w odniesieniu do „prostej” inżynierii podpowiedzi:

Szczegółowe wyjaśnienie modelowi LLM tego, co chce się osiągnąć, jest mniej więcej tak samo skomplikowane jak pisanie tradycyjnego kodu, przynajmniej jeśli chce się zachować kontrolę nad zachowaniem modelu LLM.

Aplikacja oparta na modelu LLM to przede wszystkim aplikacja. Jest to fragment tradycyjnego oprogramowania wykonywanego z użyciem pewnej infrastruktury (głównie w chmurze z mikrousługami i innymi fajnymi rzeczami) i wchodzącego w interakcję z innymi elementami oprogramowania (przypuszczalnie API), które ktoś napisał (być może my sami). Co więcej, w większości przypadków odpowiedzi nie są generowane przez pojedynczy model LLM, ale wiele modeli LLM aranżowanych z użyciem różnych strategii (takich jak agenci w przypadku LangChain/Semantic Kernel lub w stylu wieloagentowym w przypadku AutoGen).

Połączenia pomiędzy różnymi komponentami modelu LLM często wymagają „tradycyjnego” kodu. Nawet jeśli rzeczy są wykonywane za nas (jak w przypadku asystentów wydanych przez OpenAI) i nie wymagają dużej ilości kodu, nadal potrzebujemy dokładnego zrozumienia sposobu działania takiego oprogramowania, aby wiedzieć, jak je napisać.

To, że sukces inżyniera AI nie zależy od bezpośredniego doświadczenia w szkoleniach sieci neuronowych, a inżynier AI może osiągnąć biegłość, koncentrując się na projektowaniu, optymalizacji i orkiestracji przepływów pracy związanych z modelami LLM, nie oznacza wcale, że inżynier AI nie potrzebuje pewnej wiedzy o wewnętrznych mechanizmach i matematyce. Prawdą jest jednak, że ta rola jest bardziej dostępna dla osób o zróżnicowanym zestawie umiejętności.

Topologia modeli LLM

W naszej eksploracji modeli językowych i ich zastosowań skupiamy teraz naszą uwagę na praktycznych narzędziach i platformach, za pośrednictwem których te modele są fizycznie i technicznie wykorzystywane. Powstaje pytanie: jaką formę przyjmują te modele? Czy musimy je pobierać na komputery, z których korzystamy, czy też istnieją one w formie API?

Przed przystąpieniem do wyboru konkretnego modelu należy rozważyć rodzaj modelu, jaki wymagany jest dla danego przypadku użycia: model podstawowy (a jeśli tak, to jakiego rodzaju – maskowany, przyczynowy, Seq2Seq), model RLHF lub dostrojony model niestandardowy. W ogólnym przypadku, jeśli nie istnieją bardzo specyficzne wymagania dotyczące zadania lub budżetu, odpowiednie będą większe modele RLHF, takie jak GPT-4-turbo (jak również 4 i 3.5-turbo), ponieważ wykazały one niezwykłą wszechstronność w różnych zadaniach z uwagi na ich mocne uogólnienie podczas szkolenia.

W tej książce będziemy używać modeli GPT firmy OpenAI (w wersji 3.5-turbo i nowszych) za pośrednictwem platformy Microsoft Azure. Istnieją jednak alternatywne opcje i pokrótce je tutaj omówię.

OpenAI i Azure OpenAI

Obydwa modele GPT firmy OpenAI, tj. OpenAI i Azure OpenAI, wywodzą się z tej samej podstawowej technologii. Jednak każdy z tych produktów oferuje inne parametry dotyczące poziomu usług, takie jak niezawodność i limity szybkości.

Firma OpenAI opracowała przełomowe modele, takie jak seria GPT, Codex i DALL-E. Azure OpenAI – efekt współpracy pomiędzy Microsoft Azure i OpenAI – łączy zaawansowane modele sztucznej inteligencji od OpenAI z bezpieczną i skalowalną infrastrukturą platformy Azure. Microsoft Azure OpenAI obsługuje również modele spoza serii GPT, w tym modele osadzania (takie jak text-embedding-ada-002), modele audio (takie jak Whisper) i DALL-E. Dodatkowo Azure OpenAI oferuje doskonałe możliwości w zakresie zabezpieczeń oraz obsługę sieci VNET i prywatnych punktów końcowych – funkcje niedostępne w OpenAI. Co więcej, platforma Azure OpenAI jest objęta umową SLA dotyczącą usług Azure Cognitive Services, podczas gdy OpenAI oferuje obecnie jedynie stronę statusu. Jednak Azure OpenAI jest dostępna tylko w niektórych regionach, podczas gdy OpenAI ma szerszą dostępność na całym świecie.

Uwaga Dane przesyłane do usługi Azure OpenAI pozostają pod nadzorem Microsoft Azure, a wszystkie trwałe dane podlegają automatycznemu szyfrowaniu. Zapewnia to zgodność z wymogami bezpieczeństwa organizacji.

Użytkownicy mogą wchodzić w interakcję z modelami OpenAI i Azure OpenAI za pośrednictwem API REST oraz zestawu narzędzi Python SDK dla obu rozwiązań OpenAI i Azure OpenAI. Obydwa te modele oferują także interfejs internetowy: Playground dla OpenAI oraz Azure OpenAI Studio. ChatGPT i Bing Chat są oparte na modelach hostowanych odpowiednio przez OpenAI i Microsoft Azure OpenAI.

Uwaga Usługa Azure OpenAI jest skonfigurowana pod kątem modeli GPT-3+. Jednak za pomocą innego produktu firmy Microsoft, Azure Machine Learning Studio, można tworzyć modele z kilku źródeł (np. Azure ML i Hugging Face, z ponad 200 000 modeli typu open source) oraz zaimportować dostrojone modele niestandardowe.

Hugging Face i nie tylko

Hugging Face to platforma dla członków społeczności ML umożliwiająca współpracę nad modelami, zbiorami danych i aplikacjami. Organizacja angażuje się w demokratyzację dostępu do NLP oraz głębokiego uczenia i odgrywa ważną rolę w NLP.

Znana ze swojej biblioteki transformatorów, platforma Hugging Face zapewnia ujednolicone API dla wstępnie przeszkolonych modeli językowych, takich jak Transformers, Diffusion i Timm. Platforma zapewnia użytkownikom narzędzia do udostępniania modeli, edukację poprzez Hugging Face Course i różnorodne implementacje ML. Biblioteki obsługują dostrajanie modeli, kwantyzację i udostępnianie zbiorów danych, kładąc przy tym nacisk na wspólne badania.

Hugging Face Enterprise Hub ułatwia prywatną pracę z transformatorami, zbiorami danych i bibliotekami open source. W celu dostarczenia szybkich informacji widżet Free Inference umożliwia przewidywanie bez użycia kodu, natomiast API Free Inference obsługuje żądania HTTP dla przewidywań modelu. W środowisku produkcyjnym punkty końcowe Inference Endpoints oferują bezpieczne i skalowalne wdrożenia, a usługa Spaces ułatwia wdrażanie modeli przy użyciu przyjaznego interfejsu użytkownika, obsługującego aktualizacje sprzętu.

Uwaga Godne uwagi alternatywy dla Hugging Face obejmują Google Cloud AI, Mosaic, CognitiveScale, wstępnie przeszkolone modele NVIDIA, Cohere dla przedsiębiorstw oraz rozwiązania specyficzne dla konkretnych zadań, takie jak Amazon Lex i Comprehend, współpracujące z usługami Cognitive Services platformy Azure.

Bieżący stos modeli LLM

Modele LLM mogą być używane jako narzędzia do tworzenia oprogramowania (przykładowo GitHub Copilot, oparty na modelach Codex) lub jako narzędzie do integrowania w aplikacjach. W tym drugim przypadku modele LLM umożliwiają tworzenie aplikacji, które bez nich byłyby nie do pomyślenia.

Obecnie aplikacja oparta na modelach LLM ma dosyć standardowy przepływ pracy, który jednak różni się od przepływu pracy tradycyjnego oprogramowania. Ponadto stos technologiczny nadal znajduje się w fazie definiowania i za kilka miesięcy może wyglądać inaczej.

W każdym razie ten przepływ pracy prezentuje się następująco:

1. Przetestuj prosty przepływ i podpowiedzi. Zwykle odbywa się to za pośrednictwem Azure OpenAI Studio w sekcji Prompt Flow (Przepływ podpowiedzi), bądź też za pośrednictwem Humanloop, Nat.dev lub natywnego OpenAI Playground.

2. Wymyśl rzeczywistą aplikację LLM, która będzie pracować z użytkownikiem w odpowiedzi na jego zapytania. Versel, Streamlit i Steamship to popularne platformy do hostingu aplikacji. Jednak hosting aplikacji to jedynie interfejs internetowy, tak więc sprawdzi się tu dowolna platforma interfejsu internetowego, wliczając w to React i ASP.NET.

3. Gdy zapytanie użytkownika opuszcza przeglądarkę (bądź też WhatsApp, Telegram lub cokolwiek innego), narzędzie filtrowania danych gwarantuje, że żadne nieautoryzowane dane nie dotrą do silnika modelu LLM. Może zostać użyta również pewna warstwa monitorująca nadużycia, mimo że platforma Azure OpenAI dysponuje już w tym zakresie domyślną ochroną.

4. Połączone działanie podpowiedzi i orkiestratorów, takich jak LangChain i Semantic Kernel (lub jakiegoś niestandardowego oprogramowania), tworzy właściwą logikę biznesową. Ten blok orkiestracji stanowi rdzeń aplikacji LLM. Ten proces obejmuje zwykle rozszerzanie dostępnych danych przy użyciu potoków danych, takich jak Databricks i Airflow, inne narzędzia, takie jak LlamaIndex (którego można również używać jako orkiestratora) oraz wektorowe bazy danych, takie jak Chroma, Pinecone, Qdrant i Weaviate – wszystkie współpracują z modelem osadzania w celu obsługi danych nieustrukturyzowanych lub częściowo ustrukturyzowanych.

5. Może zajść potrzeba wywołania przez orkiestratora jakiegoś zewnętrznego, zastrzeżonego API, udokumentowanych źródeł danych OpenAPI i/lub usług danych ad hoc, w tym również natywnych zapytań do baz danych (SQL lub NoSQL). Podczas przekazywania takich danych pomocne staje się użycie pamięci podręcznej. Często używane biblioteki to m.in. GPTCache i Redis.

6. Wyniki generowane przez silnik LLM można dodatkowo sprawdzić, aby mieć pewność, że w interfejsie użytkownika nie są prezentowane żadne niepożądane dane i/lub uzyskano określony format wyjściowy. Zwykle jest to realizowane za pośrednictwem platform Guardrails, LMQL lub Microsoft Guidance.

7. Pełny potok jest rejestrowany w LangSmith, MLFlow, Helicone, Humanloop lub Azure AppInsights. Niektóre z tych narzędzi oferują usprawniony interfejs użytkownika do oceny modeli produkcyjnych. Pod tym względem kolejną realną opcją jest platforma AI o nazwie Weight & Biases.