Od ostatniego wpisu tutaj, minęło trochę czasu. Byłem zajęty pracą, w której zdryfowałem z zagadnień uczenia maszynowego w stronę backend aplikacji sieciowych. No i siłą rzeczy nie miałem nic ciekawego do napisania. Teraz powróciłem do uczenia maszynowego i okazało się, że mam kilka nowych zagadnień do omówienia.
Generatory
Do tej pory na blogu pisałem głównie o analizowaniu danych, wyciąganiu wniosków i budowaniu modeli predykcyjnych. Okazuje się jednak, że na świecie jest coraz większy popyt na używanie uczenia maszynowego do tworzenia nowych treści. Czyli do czegoś więcej niż uzyskiwania odpowiedzi tak/nie, bądź klasy „pies”, „kot”, „koń”, bądź wartości 20000 USD. Ludzie chcą uzyskiwać kompletne gotowe treści. Taką treścią może być obrazek, który zostanie wygenerowany z tekstu. Na przykład „Maltańczyk szydełkujący na plaży w stylu Vacation Dadcore” jakikolwiek by to miało mieć sens.
Grafika
Na załączonym obrazku widać efekt wygenerowany przez serwis playground z takiego zapytania (w wersji angielskiej). Model, z którego skorzystałem to chyba Stable Diffusion zmodyfikowany tak, żeby był szybki i tani w użyciu. No i z racji tego, że jest tanio (a nawet darmowo) i szybko, model ten produkuje nieidealne wyniki. Widać tutaj miejsce, gdzie pies oprócz bycia ubranym w ubranko szydełkowe sam też ma łapkę zrobioną na szydełku. I o ile takie coś jest dopuszczalne (można mieć maskotki zrobione na szydełku) to tutaj jest to nieprawidłowe kontekstowo zlepienie dwóch „grafik”. Pewnie gdy to czytasz, są już dostępne jeszcze lepsze modele, które popełniają coraz mniej takich błędów. „Kiedyś” łato się rozpoznawało wygenerowane obrazki po dziwnych palcach albo po tym, że oczy były różne. Teraz chyba nawet już to jest ogarnięte, więc możemy spodziewać się coraz większego zalewu tak stworzonych grafik, a nawet „filmów”.
Dźwięk
Podobnie sprawa ma się z muzyką oraz dźwiękiem ogólnie. Nie jest w dzisiejszych czasach niczym szczególnym mowa wygenerowana z tekstu, natomiast dzięki uczeniu maszynowemu można łatwo „przenieść” styl mowy danej osoby tak, żeby „brzmiała” dokładnie tak, jak chcemy. Możemy się więc spodziewać np. nowej fali wyłudzeń telefonicznych „na wnuczka” gdzie ofiara będzie rozmawiać z kimś, kto brzmi jak wnuczek. A tak naprawdę jest to oszust i głos generowany w czasie rzeczywistym. No i z tego co gdzieś widziałem, wskrzeszani są już piosenkarze i aktorzy. Zaiste ciekawe, ale i ponure czasy się zaczynają.
Tekst
Kolejną kategorią takich generatorów są „duże modele językowe” (ang. large language model, LLM). Tutaj już w ogóle temat trafił do mainstreamu i już w telewizji mówią o sztucznej inteligencji, z którą możemy chatować i napisze za nas zadanie domowe jak i całą książkę. No i tak trochę jest. Modele te nie są inteligentne same w sobie, natomiast całkiem trafnie potrafią przewidzieć, jakie powinno być kolejne słowo. I te modele skradły zainteresowanie dużej części biznesu. W dużej mierze dlatego, że sprawiają wrażenie, że są potężną i wszechstronną sztuczną inteligencją. Poniekąd też dlatego, że nie osiągnęły jeszcze limitu. Chodzi o to, że w przypadku LLMów wciąż możemy dawać im więcej danych do treningu i wciąż możemy budować większe sieci neuronowe i uzyskiwać w ten sposób lepsze wyniki. Wystarczy więc sypać pieniędzmi do pieca, a pociąg będzie jechał szybciej.
Jak sami możemy się za to zabrać?
Nie wiem, jak z wyżej wymienionymi aspektami graficznymi i dźwiękowymi, ale jeżeli chcemy skonstruować sobie taką sztuczną inteligencję „do pogadania” albo do tego, żeby pisała za nas zadanie domowe, to możemy się za to zabrać, nawet bez góry pieniędzy do spalenia. Potrzebujemy do tego w zasadzie dwóch elementów oprogramowania i jednego sprzętowego.
Jeśli chodzi o sprzęt, to dobrze byłoby mieć jakieś GPU. Nie jestem pewien czy jakaś firma przełamała już przewagę Nvidii w tej kwestii, więc jeśli masz GPU Nvidii to powinno zadziałać bez większych problemów. Im nowsze, tym lepiej i im więcej RAMu na karcie, tym lepiej. Można też próbować bez GPU, tyle że wtedy potencjalna interakcja nie będzie się odbywała w skali sekund, ale raczej grubych minut. Przy czym, w niektórych sytuacjach nie musi to być problemem.
Jeśli chodzi o oprogramowanie, to potrzebne nam będą dwa elementy: wytrenowany model i interface do „gadania” z modelem. Na dzień dzisiejszy (koniec sierpnia 2024) najlepszym modelem LLM dostępnym publicznie zdaje się, że jest meta-llama/Meta-Llama-3.1-405B-Instruct. Jest to model przygotowany przez firmę Meta (dawniej Facebook) opublikowany 23 lipca 2024. Dzięki korzystaniu z wytrenowanego modelu nie musimy poświęcać zasobów na jego zbudowanie. A w razie potrzeby, możemy go douczyć, jeżeli to, co w nim zostało zawarte, jest dla nas niesatysfakcjonujące. Fajna sprawa.
Jednakże sam model, to de facto duża tabela z liczbami rzeczywistymi, więc ciężko z takiej tabelki wydobyć odpowiedź na jakiekolwiek pytanie. Trzeba ją obudować odpowiednim interface. I tutaj z pomocą przychodzi biblioteka Python transformers. Instalujemy, importujemy, wskazujemy, co chcemy zrobić i na bazie jakiego modelu chcemy to zrobić i już. Mamy darmową, kompletną, współczesną i całkiem efektywną platformę to zagadnień związanych z tekstem i ogólnie z przetwarzaniem języka naturalnego.
Co dalej?
Oczywiście, jak zwykle diabeł tkwi w szczegółach. Samo uruchomienie Llamy nie sprawi, że cokolwiek co robimy, nagle stanie się mądrzejsze. Jak to zwykle bywa, ML/AI jest super narzędziem, ale głównie wtedy jeżeli jesteśmy w stanie dobrze określić problem, który chcemy rozwiązać. I znaleźć dane i miejsce, do których możemy doczepić nasze rozwiązanie. Osobiście jeszcze tego nie rozgryzłem. Oczywiście jest cała masa przykładów jak można używać LLMy, ale jeszcze żaden do mnie nie przemówił. W zagadnieniach stricte tabelarycznych i w szeregach czasowych nie mam takich problemów. Umiem wyobrazić sobie konkretne namacalne przykłady i budować działające prototypy, które im odpowiadają. Tutaj jeszcze tego nie czuję. Ale myślę, że niedługo coś przygotuję i opiszę tutaj konkretniej. Także, do następnego artykułu 😀