Zrozumienie tokenizacji w NLP: przewodnik dla początkujących po przetwarzaniu tekstu
Opublikowany: 2024-11-26Tokenizacja jest krytycznym, choć często pomijanym elementem przetwarzania języka naturalnego (NLP). W tym przewodniku wyjaśnimy tokenizację, jej przypadki użycia, zalety i wady oraz dlaczego jest ona wykorzystywana w prawie każdym dużym modelu językowym (LLM).
Spis treści
- Czym jest tokenizacja w NLP?
- Rodzaje tokenizacji
- Jak działa tokenizacja
- Aplikacje tokenizacyjne
- Korzyści z tokenizacji
- Wyzwania tokenizacji
Czym jest tokenizacja w NLP?
Tokenizacja to metoda NLP, która konwertuje tekst na formaty liczbowe, z których mogą korzystać modele uczenia maszynowego (ML). Kiedy wysyłasz monit do LLM, takiego jak Claude firmy Anthropic, Gemini firmy Google lub członek serii GPT firmy OpenAI, model nie czyta bezpośrednio Twojego tekstu. Modele te mogą przyjmować wyłącznie liczby jako dane wejściowe, więc tekst należy najpierw przekonwertować na sekwencję liczb za pomocą tokenizera.
Jednym ze sposobów, w jaki tokenizator może tokenizować tekst, byłoby podzielenie go na osobne słowa i przypisanie numeru każdemu unikalnemu słowu:
„Grammarly kocha gramatykę, ML i pisanie” może brzmieć:
Każde słowo (i powiązany z nim numer) jest tokenem. Model ML może używać sekwencji tokenów — [7102], [37], [564], [2], [9763], [2], [231] — do wykonywania operacji i generowania wyników. Dane wyjściowe to zwykle liczba, która jest konwertowana z powrotem na tekst, stosując odwrotność tego samego procesu tokenizacji. W praktyce ta tokenizacja słowo po słowie jest świetnym przykładem, ale jest rzadko stosowana w branży z powodów, które zobaczymy później.
Ostatnią rzeczą, na którą warto zwrócić uwagę, jest to, że tokenizatory dysponują słownikami — pełnym zestawem tokenów, z którymi mogą sobie poradzić. Tokenizator, który zna podstawowe angielskie słowa, ale nie zna nazw firm, może nie mieć w swoim słownictwie słowa „Grammarly” jako tokenu, co prowadzi do niepowodzenia tokenizacji.
Rodzaje tokenizacji
Ogólnie rzecz biorąc, tokenizacja polega na zamianie fragmentu tekstu na ciąg liczb. Choć myślenie o tokenizacji na poziomie słów jest naturalne, istnieje wiele innych metod tokenizacji, z których jedna — tokenizacja podsłów — jest standardem branżowym.
Tokenizacja słów
Tokenizacja słów to przykład, który widzieliśmy wcześniej, w którym tekst jest dzielony według każdego słowa i znaków interpunkcyjnych.
Główną zaletą tokenizacji słów jest to, że jest łatwa do zrozumienia i wizualizacji. Ma jednak kilka wad:
- Interpunkcja, jeśli występuje, jest dołączona do słów, podobnie jak w przypadku „pisania”.
- Nowe lub nietypowe słowa (takie jak „Gramatyka”) zajmują cały żeton.
W rezultacie tokenizacja słów może stworzyć słowniki zawierające setki tysięcy tokenów. Problem z dużymi słownikami polega na tym, że znacznie zmniejszają efektywność uczenia i wnioskowania — macierz potrzebna do konwersji tekstu na liczby musiałaby być ogromna.
Ponadto byłoby wiele rzadko używanych słów, a modele NLP nie miałyby wystarczających odpowiednich danych szkoleniowych, aby zwrócić dokładne odpowiedzi na te rzadkie słowa. Gdyby jutro wynaleziono nowe słowo, LLM stosujący tokenizację słów musiałby zostać przeszkolony, aby uwzględnić to słowo.
Tokenizacja podsłów
Tokenizacja podsłów dzieli tekst na fragmenty mniejsze lub równe słowom. Nie ma ustalonego rozmiaru każdego tokena; każdy token (i jego długość) jest określany w procesie uczenia. Tokenizacja podsłów jest standardem branżowym dla LLM. Poniżej znajduje się przykład z tokenizacją wykonaną przez tokenizer GPT-4o:
Tutaj niezwykłe słowo „Grammarly” zostaje podzielone na trzy symbole: „Gr”, „amm” i „arly”. Tymczasem pozostałe słowa są na tyle powszechne w tekście, że tworzą własne tokeny.
Tokenizacja podsłów pozwala na zastosowanie mniejszych słowników, co oznacza wydajniejsze i tańsze szkolenie i wnioskowanie. Tokenizatory podsłów mogą również dzielić rzadkie lub nowe słowa na kombinacje mniejszych, istniejących tokenów. Z tych powodów wiele modeli NLP wykorzystuje tokenizację podsłów.
Tokenizacja znaków
Tokenizacja znaków dzieli tekst na pojedyncze znaki. Oto jak wyglądałby nasz przykład:
Każdaunikalnapostać staje się swoim własnym tokenem. W rzeczywistości wymaga to najmniejszego słownictwa, ponieważ alfabet składa się tylko z 52 liter (wielkie i małe litery są uważane za różne) i kilku znaków interpunkcyjnych. Ponieważ z tych znaków należy utworzyć każde angielskie słowo, tokenizacja znaków może działać z każdym nowym lub rzadkim słowem.
Jednak według standardowych testów porównawczych LLM tokenizacja znaków nie działa w praktyce tak dobrze, jak tokenizacja podsłów. Żeton podsłowa „samochód” zawiera znacznie więcej informacji niż żeton znaku „c”, więc mechanizm uwagi w transformatorach ma więcej informacji, na których może działać.
Tokenizacja zdania
Tokenizacja zdań zamienia każde zdanie w tekście na swój własny token. Nasz przykład wyglądałby następująco:
Zaletą jest to, że każdy token zawiera mnóstwo informacji. Istnieje jednak kilka wad. Istnieje nieskończona liczba sposobów łączenia słów w celu napisania zdań. Zatem słownictwo również musiałoby być nieskończone.
Ponadto każde zdanie samo w sobie byłoby dość rzadkie, ponieważ nawet drobne różnice (takie jak „również” zamiast „i”) oznaczałyby inny token pomimo tego samego znaczenia. Szkolenie i wnioskowanie byłoby koszmarem. Tokenizację zdań stosuje się w wyspecjalizowanych przypadkach użycia, takich jak analiza tonacji zdań, ale poza tym jest to rzadki widok.
Kompromis w tokenizacji: wydajność kontra wydajność
Wybór odpowiedniej szczegółowości tokenizacji dla modelu to naprawdę złożona relacja między wydajnością a wydajnością. W przypadku bardzo dużych znaczników (np. na poziomie zdania) słownictwo staje się ogromne. Efektywność uczenia modelu spada, ponieważ matryca mieszcząca wszystkie te żetony jest ogromna. Wydajność gwałtownie spada, ponieważ nie ma wystarczającej ilości danych szkoleniowych dla wszystkich unikalnych tokenów, aby w znaczący sposób uczyć się relacji.
Z drugiej strony, przy małych żetonach, słownictwo staje się małe. Uczenie staje się wydajne, ale wydajność może gwałtownie spaść, ponieważ każdy token nie zawiera wystarczającej ilości informacji, aby model mógł nauczyć się relacji token-token.
Tokenizacja podsłów znajduje się pośrodku. Każdy token zawiera wystarczającą ilość informacji, aby modele mogły nauczyć się relacji, ale słownictwo nie jest na tyle duże, aby szkolenie stało się nieefektywne.
Jak działa tokenizacja
Tokenizacja opiera się na szkoleniu i wykorzystaniu tokenizatorów. Tokenizatory konwertują tekst na tokeny, a tokeny z powrotem na tekst. Omówimy tutaj tokenizatory podsłów, ponieważ są one najpopularniejszym typem.
Tokenizatory podsłów muszą zostać przeszkolone, aby skutecznie dzielić tekst.
Dlaczego „Grammarly” jest podzielone na „Gr”, „amm” i „arly”? Czy słowa „Gram”, „mar” i „ly” również nie mogłyby działać? Dla ludzkiego oka z pewnością tak, ale tokenizator, który prawdopodobnie nauczył się najskuteczniejszej reprezentacji, myśli inaczej. Powszechnym algorytmem szkoleniowym (choć nie używanym w GPT-4o) stosowanym do uczenia się tej reprezentacji jest kodowanie parami bajtów (BPE). Wyjaśnimy BPE w następnej sekcji.
Szkolenie z tokenizera
Aby wyszkolić dobrego tokenizatora, potrzebujesz ogromnego zbioru tekstu, na którym będzie można trenować. Uruchamianie BPE na tym korpusie działa w następujący sposób:
- Podziel cały tekst w korpusie na pojedyncze znaki. Ustaw je jako początkowe znaczniki w słownictwie.
- Połącz dwa najczęściej sąsiadujące ze sobą tokeny z tekstu w jeden nowy token i dodaj go do słownika (bez usuwania starych tokenów – to ważne).
- Powtarzaj ten proces, aż nie pozostaną już żadne często występujące pary sąsiadujących ze sobą żetonów lub zostanie osiągnięty maksymalny rozmiar słownictwa.
Jako przykład załóżmy, że cały nasz korpus szkoleniowy składa się z tekstu „abc abcd”:
- Tekst zostanie podzielony na [„a”, „b”, „c”, „ ”, „a”, „b”, „c”, „d”]. Należy pamiętać, że czwarty wpis na tej liście to znak spacji. Nasze słownictwo wyglądałoby wówczas na [„a”, „b”, „c”, „ ”, „d”].
- „a” i „b” najczęściej występują w tekście obok siebie (razem z „b” i „c”, ale „a” i „b” wygrywają w kolejności alfabetycznej). Łączymy je więc w jeden token „ab”. Słownictwo wygląda teraz jak [„a”, „b”, „c”, „ ”, „d”, „ab”], a zaktualizowany tekst (z zastosowanym połączeniem tokenów „ab”) wygląda jak [„ab” , „c”, „ ”, „ab”, „c”, „d”].
- Obecnie w tekście najczęściej występują razem „ab” i „c”. Łączymy je w token „abc”. Słownictwo wygląda wtedy jak [„a”, „b”, „c”, „ ”, „d”, „ab”, „abc”], a zaktualizowany tekst wygląda jak [„abc”, „ ”, „abc” ", "D"].
- Na tym kończymy proces, ponieważ każda sąsiadująca para żetonów występuje teraz tylko raz. Dalsze łączenie tokenów spowodowałoby, że wynikowy model działałby gorzej w przypadku innych tekstów. W praktyce czynnikiem ograniczającym jest wielkość słownictwa.
Dzięki naszemu nowemu zestawowi słownictwa możemy mapować tekst i tokeny. Nawet tekst, którego wcześniej nie widzieliśmy, np. „taksówka”, można tokenizować, ponieważ nie odrzuciliśmy tokenów jednoznakowych. Możemy również zwrócić numery tokenów, po prostu sprawdzając pozycję tokena w słowniku.
Dobre szkolenie w zakresie tokenizacji wymaga niezwykle dużych ilości danych i dużej ilości obliczeń — więcej, niż większość firm może sobie pozwolić. Firmy radzą sobie z tym, pomijając szkolenie własnego tokenizera. Zamiast tego po prostu używają wstępnie wyszkolonego tokenizera (takiego jak tokenizer GPT-4o, do którego link znajduje się powyżej), aby zaoszczędzić czas i pieniądze przy minimalnej, jeśli w ogóle, utracie wydajności modelu.
Korzystanie z tokenizera
Mamy więc ten tokenizator podsłów wyszkolony na ogromnym korpusie przy użyciu BPE. Jak teraz go użyć w nowym fragmencie tekstu?
Stosujemy reguły scalania, które ustaliliśmy w procesie szkolenia tokenizera. Najpierw dzielimy tekst wejściowy na znaki. Następnie wykonujemy łączenie tokenów w tej samej kolejności, co przy szkoleniu.
Aby to zilustrować, użyjemy nieco innego tekstu wejściowego „dc abc”:
- Dzielimy go na znaki [„d”, „c”, „ ”, „a”, „b”, „c”].
- Pierwszym połączeniem, które zrobiliśmy podczas szkolenia, było „ab”, więc robimy to tutaj: [„d”, „c”, „ ”, „ab”, „c”].
- Drugie połączenie, które zrobiliśmy, to „abc”, więc robimy to: [„d”, „c”, „ ”, „abc”].
- To jedyne reguły scalania, jakie mamy, więc zakończyliśmy tokenizację i możemy zwrócić identyfikatory tokenów.
Jeśli mamy kilka identyfikatorów tokenów i chcemy przekonwertować je na tekst, możemy po prostu wyszukać każdy identyfikator tokena na liście i zwrócić powiązany z nim tekst. Firmy LLM robią to, aby zamienić osadzanie (wektory liczb, które oddająznaczenietokenów na podstawie otaczających tokenów), z którymi pracują, z powrotem na tekst czytelny dla człowieka.
Aplikacje tokenizujące
Tokenizacja jest zawsze pierwszym krokiem we wszystkich NLP. Przekształcanie tekstu w formularze, z którymi mogą współpracować modele ML (i komputery), wymaga tokenizacji.
Tokenizacja w LLM
Tokenizacja jest zazwyczaj pierwszą i ostatnią częścią każdego wywołania LLM. Tekst jest najpierw przekształcany w tokeny, następnie tokeny są konwertowane na elementy osadzone w celu uchwycenia znaczenia każdego tokena i przekazywane do głównych części modelu (bloków transformatorów). Po uruchomieniu bloków transformatorów osady są ponownie przekształcane w żetony. Na koniec właśnie zwrócony token jest dodawany do danych wejściowych i przekazywany z powrotem do modelu, powtarzając proces ponownie. LLM wykorzystują tokenizację podsłów, aby zrównoważyć wydajność i efektywność.
Tokenizacja w wyszukiwarkach
Wyszukiwarki tokenizują zapytania użytkowników, aby je ujednolicić i lepiej zrozumieć intencje użytkownika. Tokenizacja wyszukiwarek może obejmować dzielenie tekstu na słowa, usuwanie słów wypełniających (takich jak „the” lub „i”), zamianę wielkich liter na małe i obsługę znaków takich jak łączniki. Tokenizacja podsłów zwykle nie jest tutaj konieczna, ponieważ wydajność i efektywność są mniej zależne od rozmiaru słownictwa.
Tokenizacja w tłumaczeniu maszynowym
Tokenizacja tłumaczenia maszynowego jest interesująca, ponieważ języki wejściowe i wyjściowe są różne. W efekcie powstaną dwa tokenizatory, po jednym dla każdego języka. Tokenizacja podsłów zwykle działa najlepiej, ponieważ równoważy kompromis między wydajnością modelu a wydajnością modelu. Ale niektóre języki, takie jak chiński, nie mają elementu językowego mniejszego niż słowo. Tam wymagana jest tokenizacja słów.
Korzyści z tokenizacji
Tokenizacja jest koniecznością w każdym modelu NLP. Dobra tokenizacja pozwala modelom ML efektywnie pracować z tekstem i dobrze obsługiwać nowe słowa.
Tokenizacja umożliwia modelom pracę z tekstem
Wewnętrznie modele ML działają tylko z liczbami. Algorytm stojący za modelami ML opiera się całkowicie na obliczeniach, które same w sobie wymagają liczb do obliczenia. Dlatego tekst musi zostać zamieniony na liczby, zanim modele ML będą mogły z nimi współpracować. Po tokenizacji na liczbach można zastosować techniki takie jak uwaga lub osadzanie.
Tokenizacja uogólnia nowy i rzadki tekst
Mówiąc dokładniej,dobratokenizacja uogólnia nowy i rzadki tekst. Dzięki tokenizacji podsłów i znaków nowe teksty można rozłożyć na sekwencje istniejących tokenów. Zatem wklejenie artykułu zawierającego bełkot do ChatGPT nie spowoduje jego awarii (choć może też nie dać bardzo spójnej odpowiedzi). Dobra generalizacja pozwala również modelom uczyć się relacji między rzadkimi słowami na podstawie relacji w subtokenach.
Wyzwania tokenizacji
Tokenizacja zależy od korpusu szkoleniowego i algorytmu, więc wyniki mogą się różnić. Może to mieć wpływ na zdolność rozumowania LLM oraz długość danych wejściowych i wyjściowych.
Tokenizacja wpływa na zdolności rozumowania LLM
Łatwym problemem, który często zaskakuje LLM, jest liczenie wystąpień litery „r” w słowie „truskawka”. Model błędnie powiedziałby, że są dwa, chociaż tak naprawdę odpowiedź brzmi trzy. Ten błąd mógł częściowo wynikać z tokenizacji. Tokenizator podsłów podzielił „truskawkę” na „st”, „surowe” i „jagody”. Zatem model mógł nie być w stanie połączyć jednego „r” w środkowym żetonie z dwoma „r” w ostatnim żetonie. Wybrany algorytm tokenizacji ma bezpośredni wpływ na to, w jaki sposób słowa są tokenizowane i jak każdy token odnosi się do pozostałych.
Tokenizacja wpływa na długość danych wejściowych i wyjściowych LLM
LLM są w większości zbudowane na architekturze transformatorowej, która opiera się na mechanizmie uwagi w celu kontekstualizowania każdego tokena. Jednak wraz ze wzrostem liczby żetonów czas potrzebny na skupienie uwagi rośnie kwadratowo. Tak więc tekst z czterema żetonami zajmie 16 jednostek czasu, ale tekst z ośmioma żetonami zajmie 64 jednostki czasu. Ogranicza to LLM do limitów wejściowych i wyjściowych wynoszących kilkaset tysięcy tokenów. W przypadku mniejszych tokenów może to naprawdę ograniczyć ilość tekstu, który można wprowadzić do modelu, zmniejszając liczbę zadań, do których można go używać.