W jaki sposób AI rozumie język naturalny? – Modele typu Text Embedding
08.03.2024 | Bartłomiej Orlik
W dzisiejszym świecie ilość danych tekstowych stale rośnie, a analiza zawartych w nich informacji staje się coraz większym wyzwaniem. Choć tradycyjne metody przetwarzania języka naturalnego radzą sobie z wieloma zagadnieniami, istnieje szereg kwestii, które są trudne do rozwiązania nawet przy użyciu zaawansowanych metod sztucznej inteligencji. Jednym z takich wyzwań jest zrozumienie prawdziwego znaczenia słów, zdań oraz obszerniejszych fragmentów tekstu przez algorytmy AI.
W czym tkwi problem?
Dla ludzi zrozumienie języka jest naturalne. Z łatwością potrafimy jednoznacznie zinterpretować zarówno całe fragmenty tekstu, jak i pojedyncze słowa... prawda? - Niekoniecznie. Spróbujmy dla przykładu rozważyć słowo "zamek". Co przychodzi ci na myśl?
Możliwości jest wiele, a każda z nich znacząco różni się od pozostałych. Wybór jednej interpretacji może być trudny. Jednak gdybyśmy mieli dostęp do kontekstu, np. zdania, w którym to słowo zostało użyte, z pewnością łatwiej byłoby nam określić jego prawdziwe znaczenie.
Przykładowe zdanie mogłoby brzmieć następująco: "Na malowniczym wzgórzu znajduje się ufortyfikowany zamek, wzniesiony w średniowieczu, pełniący niegdyś funkcję obronną i strategiczną". W tym kontekście znaczenie słowa "zamek" staje się jednoznaczne.
Z tego przykładu możemy wyciągnąć następujący wniosek: aby w pełni zrozumieć znaczenie pojedynczych słów, musimy znać kontekst, w jakim zostały użyte. Słowa mogą mieć różne znaczenia w zależności od sytuacji. Co więcej, nawet fragmenty tekstu mogą nabierać odmiennego sensu w zależności od kontekstu (fragmentu poprzedzającego i następującego).
Tradycyjne metody przetwarzania języka naturalnego napotykały trudności w efektywnym radzeniu sobie z tym problemem. Potencjalnie najlepsze rozwiązania, oparte na Rekurencyjnych Sieciach Neuronowych (RNN), nie zawsze były wystarczająco skuteczne. W praktyce ich wady przyćmiewały możliwość skutecznego zastosowania, m.in. poprzez:
- Powolny i problematyczny proces uczenia oraz wykorzystania gotowego modelu.
- Brak możliwości pełnego uwzględnienia kontekstu (np. klasyczne jednostki LSTM wykorzystywane do budowy sieci potrafiły zrozumieć jedynie lewostronny kontekst słów, co nie zawsze było wystarczające).
Modele typu Transformer
W roku 2017 nastąpiła rewolucja wraz z wprowadzeniem architektury typu Transformer. Kluczowym elementem nowatorskiego podejścia był mechanizm atencji, który doskonale sprawdzał się w analizie kontekstu występowania słów w tekście. Ten sam mechanizm umożliwił efektywne zrównoleglenie obliczeń, co znacząco przyspieszyło proces uczenia i wnioskowania.
Opierając się na architekturze Transformer, badacze z Google zaprojektowali model BERT, zdolny do realizacji różnorodnych zadań, takich jak analiza sentymentu (inaczej analiza wydźwięku emocjonalnego), streszczanie wypowiedzi, question-answering czy klasyfikacja.
Niektóre z wymienionych zadań były już wcześniej realizowane przez tradycyjne modele (np. analiza sentymentu). Jednak wcześniejsze rozwiązania bazowały na mechanizmach, które w głównej mierze opierały się o statyczne reprezentacje słów. Wprowadzenie kontekstu w analizie wypowiedzi zaowocowało osiągnięciem rezultatów, które były niedostępne przy użyciu wcześniejszych metod.
Jak nauczyć model języka naturalnego?
Proces uczenia modeli takich jak BERT składa się z dwóch kluczowych kroków. Pierwszym z nich jest etap wstępnego trenowania, podczas którego model zdobywa ogólne zrozumienie składni języka. Drugi krok to dotrenowanie modelu pod konkretne zadanie.
Warto zaznaczyć, że wstępny trening modelu odbywa się tylko raz, ze względu na wysokie nakłady obliczeniowe oraz potrzebę przygotowania dużego korpusu składającego się z różnorodnych tekstów.
Etap drugi jest w większości zadań prostszy w realizacji i wymaga często ułamka zasobów obliczeniowych w porównaniu z etapem pierwszym.
Etap wstępnego trenowania modelu
W pierwszej fazie model BERT jest trenowany na ogromnym korpusie tekstów. Ciekawą cechą pierwszego etapu treningu jest to, że nie wymaga on specjalnego przygotowania danych – model sam zdobywa wiedzę na podstawie nieoznakowanego korpusu. W ramach wstępnego trenowania model uczy się wykonywać następujące zadania:
- Modelowanie zakrytych części zdania (MLM - Masked Language Modeling): Wybrane fragmenty tekstu (najczęściej pojedyncze słowa, znaki interpunkcyjne, itp.) są losowo zakrywane, a model uczy się je przewidywać. To zadanie pomaga modelowi zrozumieć kontekst i zależności między słowami.
- Przewidywanie następstwa zdań (NSP - Next Sentence Prediction): Model uczy się przewidywać, czy drugie zdanie następuje bezpośrednio po pierwszym w danym kontekście. To pomaga modelowi zrozumieć strukturę zdań i ich powiązania.
Etap dotrenowania modelu
W drugim etapie, model jest trenowany na mniejszym zbiorze danych, który zazwyczaj zawiera teksty z oznaczonymi etykietami. Oznaczanie danych można przeprowadzić ręcznie lub przy pomocy półautomatycznych metod. Zadania dotrenowania różnią się w zależności od przeznaczenia gotowego modelu. Dla przykładu, jeśli celem jest stworzenie modelu do rozpoznawania wydźwięku emocjonalnego, dane treningowe mogą wyglądać podobnie do poniższego przykładu:
Warto zauważyć, że w pierwszym etapie model uczony jest składni, struktury oraz relacji między słowami, lecz jeszcze nie rozumie pełnego znaczenia tekstów. Rozumienie to następuje dopiero w trakcie etapu dotrenowania. Modele specjalizujące się w zadaniach rozumienia tekstu są nazywane modelami typu Text Embedding lub też Universal Sentence Encoders. Proces ich trenowania jest bardziej złożony niż w przypadku modeli przeznaczonych do klasyfikacji czy analizy sentymentu.
Modele typu Text Embedding - jak rozumieć i porównywać podobieństwo tekstów za pomocą modelu AI
Modele sztucznej inteligencji są w rzeczywistości abstrakcyjnymi modelami matematycznymi. Ich działanie opiera się na liczbowych reprezentacjach tekstu. Zadaniem modelu typu Text Embedding jest przedstawienie języka w postaci liczbowej, umożliwiającej porównywanie za pomocą operacji matematycznych. Choć wydaje się to skomplikowane, to de facto nie jest trudne. Przeanalizujmy więc działanie takiego modelu krok po kroku.
Aby przetworzyć tekst, musimy przejść przez dwa kluczowe etapy:
- Tokenizacja: W tym etapie słowa (lub ich części) są zamieniane na tokeny, czyli numeryczne reprezentacje. Wykorzystuje się do tego wcześniej przygotowany tokenizer. O tokenizerze możemy myśleć jak o słowniku, który mapuje tekst na odpowiadające mu liczby. Do zmapowanego tekstu, dodawane są specjalne tokeny, które mają techniczne zastosowanie.
- Przetworzenie przez model: Model przyjmuje na wejściu numeryczną wersję tekstu i generuje wynik w postaci embeddingu. Embedding dla tekstu to wektorowa reprezentacja, czyli lista liczb (zazwyczaj 768- lub 1024-elementowa), starannie dobrana w celu jak najlepszego odzwierciedlenia treści tekstu. Warto zaznaczyć, że długość embeddingów jest stała dla wybranego modelu.
Podsumowując, głównym zadaniem modeli typu Text Embedding jest przekształcenie tekstu w listę liczb (embedding) o stałej wielkości, zależnej od jego architektury. Ten proces umożliwia nam reprezentowanie tekstów w formie, która jest prosta w interpretacji za pomocą matematycznych metryk. Otwiera to drzwi do wielu zastosowań, takich jak analiza podobieństwa tekstu czy wyszukiwanie informacji.
Embeddingi… ale jak je interpretować? Jak można je wykorzystać?
Jak już wcześniej wspomniałem, embedding stanowi reprezentację tekstu. Ale co tak naprawdę zawiera ta reprezentacja? Otóż, w ramach embeddingu znajduje się informacja dotycząca treści, tonu wypowiedzi, sentymentu, tematu itp. Proporcje tych informacji są zależne od procesu dotrenowania. Embeddingi dla wypowiedzi o podobnym znaczeniu będą zbliżone. Z drugiej strony gdy wypowiedzi odznaczają się odmienną informacją, embeddingi im odpowiadające będą skrajnie różne. Dla zobrazowania rozważmy przykład dwóch zdań:
"Na ostatnim spacerze pies złamał nogę."
"Podczas dzisiejszej wyprawy owczarek niemiecki poważnie uszkodził tylną kończynę."
Te dwa zdania wyrażają bardzo podobne informacje pomimo tego, że składają się z zupełnie innych zestawów słów. W rezultacie wektorowe reprezentacje obu zdań będą dosyć podobne. Z drugiej strony, dla par zdań o zupełnie odmiennym znaczeniu, embeddingi będą bardzo różne. Przykładowa para zdań:
"Lubię słuchać szumu fal podczas spacerów brzegiem morza."
"W punkcie 5.2 regulaminu istnieje informacja o zakazie korzystania z telefonów komórkowych."
Jak porównywać teksty ze sobą?
Embedding określany jest często jako wielowymiarowa reprezentacja tekstu. W poprzednim podrozdziale omówiliśmy, co dokładnie zawiera się w tej reprezentacji. Co oznacza jednak przymiotnik "wielowymiarowa"? W skrócie, wymiar embeddingu odpowiada liczbie wartości z zakresu od -1 do 1, które wchodzą w jego skład. Choć typowe rozmiary embeddingów to zazwyczaj 768 lub 1024, dla celów wizualizacji załóżmy na chwilę, że model, z którego korzystamy, ma rozmiar embeddingu równy 2. Oznacza to, że w ramach jednego embeddingu możemy traktować go jako dwuwymiarowy wektor, co jesteśmy w stanie zwizualizować w następujący sposób:
Przykład prezentuje Zdanie Bazowe ZB, które będzie służyć do porównania ze zdaniami porównawczymi ZP1 oraz ZP2. Na wykresie zdania opisane są słownie oraz posiadają przypisany dwuwymiarowy embedding. W kolejnym etapie określimy, które ze zdań porównawczych jest bardziej podobne do zdania bazowego.
Embeddingi są porównywane na podstawie kątów, jakie tworzą między sobą. Im mniejszy jest kąt między embeddingami dla dwóch tekstów, tym większe podobieństwo charakteryzuje te wypowiedzi. Aby to zwizualizować, przyjrzyjmy się poniższej ilustracji.
Embeddingi są porównywane za pomocą metryki nazywanej podobieństwem cosinusowym (Sc - cosine similarity), która wykorzystując cosinus kąta, zwraca wartości z zakresu od -1 do 1. W przypadku identycznych dokumentów, miara podobieństwa wynosi dokładnie 1. Im mniejsza miara podobieństwa, tym mniej dokumenty są do siebie podobne. W konsekwencji ZP1 jest bardziej podobne do ZB niż ZP2.
Warto zauważyć, że przestrzeń dwuwymiarowa jest dosyć ograniczona. Ilość informacji jaka może zostać zawarta w tekście jest ogromna. Właśnie z tego powodu embeddingi posiadają tak wiele wymiarów. Zadaniem modelu jest umieszczenie tekstu w ogromnej przestrzeni w taki sposób, aby dokumenty podobne znajdowały się blisko siebie. W procesie treningu model uczy się jak najefektywniej realizować to zadanie. Dla człowieka wyobrażenie sobie takiej przestrzeni staje się wręcz niemożliwe. Nie musimy jednak wcale tego robić. Narzędzia matematyczne oraz metryki (takie jak podobieństwo cosinusowe) działają prawidłowo niezależnie od liczby wymiarów.
Wyszukiwanie dokumentów na podstawie zapytania w języku naturalnym
Załóżmy, że naszym celem jest stworzenie wyszukiwarki tekstów, która dostarcza informacje na temat pytania postawionego przez użytkownika. Aby zrealizować to zadanie, musimy mieć bazę tekstów składającą się z wypowiedzi na interesujące nas tematy. W oparciu o ten korpus tekstów tworzymy bazę, która przechowuje nie tylko same teksty, ale także przygotowane za pomocą modelu embeddingi. W uproszczeniu, struktura tabeli w takiej bazie może wyglądać następująco:
Gdy użytkownik zadaje pytanie, tworzony jest dla niego embedding. Reprezentacja zapytania jest następnie porównywana z wszystkimi embeddingami znajdującymi się w bazie, wykorzystując miarę podobieństwa cosinusowego. W celu realizacji tego zadania stosuje się specjalne typy baz danych zwane bazami wektorowymi. Bazy te są zoptymalizowane do wykonywania takich operacji i potrafią obliczać podobieństwo cosinusowe między zapytaniem, a milionami wpisów w bazie nawet poniżej 1 sekundy!
Warto zauważyć, że załadowanie bazy danych jest procesem kosztownym obliczeniowo. Dla każdego wpisu w bazie musimy wyznaczyć oraz zapisać jego embedding. Dzięki temu, w przypadku zapytania, model musi utworzyć wektorową reprezentację tylko raz (dla samej treści zapytania). Podejście z wykorzystaniem bazy wektorowej pozwala znacznie przyspieszyć proces przeszukiwania bazy kosztem pamięci, w której przechowujemy przeliczone embeddingi. Koszt ten jest zazwyczaj pomijalny w porównaniu do możliwości, jakie oferuje to podejście. W ten sposób jesteśmy w stanie zrealizować efektywną i szybką wyszukiwarkę tekstu, gotową do odpowiedzi na pytania użytkownika w błyskawicznym tempie.
Dodatkowe zastosowania embeddingów dla tekstów
Embeddingi dla tekstów stanowią źródło wielu informacji. Wiemy już, że na ich podstawie jesteśmy w stanie porównywać teksty ze sobą, a nawet zbudować własną wyszukiwarkę. Nie jest to jednak wszystko. Embeddingi stanowią świetne źródło informacji jako wartość wejściowa kolejnych modeli sztucznej inteligencji, których zadaniem jest np. klasyfikacja tekstów. Takie modele zazwyczaj posiadają proste architektury, których celem jest wyciągnięcie informacji z przygotowanych embeddingów (wizualizacja uproszczonej architektury znajduje się na ilustracji poniżej). W konsekwencji budowanie klasyfikatorów jest procesem bardzo szybkim i wymagającym minimalnych nakładów obliczeniowych. Dla zobrazowania klasyfikator dokumentów zaprezentowany poniżej jest w stanie zakończyć trening w czasie kilku minut z wykorzystaniem prostego procesora. Cecha ta staje się istotna gdy mamy do czynienia z wysoko zmiennymi procesami biznesowymi.
Podsumowanie
Zrozumienie tekstu na poziomie kontekstu staje się osiągalne dzięki modelom opartym na architekturze typu Transformer. Przykładem takiego modelu jest BERT, który po odpowiednim treningu jest w stanie przekształcać tekst na liczbowe reprezentacje, zwane embeddingami. To zrozumienie kontekstowe treści stanowi klucz do tworzenia rozwiązań o wyższej jakości, a nawet takich, które wcześniej nie były dostępne. Doskonałym przykładem jest wyszukiwarka semantyczna oparta o zrozumienie zapytania wprowadzonego przez użytkownika.