1. Tokenizing
Tokenizing
Tokenizacja to proces dzielenia danych, takich jak tekst, na mniejsze, łatwiejsze do zarządzania fragmenty zwane tokenami. Każdemu tokenowi przypisywany jest unikalny identyfikator numeryczny (ID). Jest to fundamentalny krok w przygotowywaniu tekstu do przetwarzania przez modele uczenia maszynowego, szczególnie w przetwarzaniu języka naturalnego (NLP).
Celem tej początkowej fazy jest bardzo prosty: Podzielić dane wejściowe na tokeny (id) w sposób, który ma sens.
Jak działa tokenizacja
Dzielnie tekstu:
Podstawowy tokenizator: Prosty tokenizator może dzielić tekst na pojedyncze słowa i znaki interpunkcyjne, usuwając spacje.
Przykład: Tekst:
"Hello, world!"
Tokeny:["Hello", ",", "world", "!"]
Tworzenie słownika:
Aby przekształcić tokeny w numeryczne ID, tworzony jest słownik. Ten słownik zawiera wszystkie unikalne tokeny (słowa i symbole) i przypisuje każdemu z nich konkretny ID.
Tokeny specjalne: To specjalne symbole dodawane do słownika, aby obsługiwać różne scenariusze:
[BOS]
(Początek sekwencji): Wskazuje początek tekstu.[EOS]
(Koniec sekwencji): Wskazuje koniec tekstu.[PAD]
(Wypełnienie): Używane do wyrównania długości wszystkich sekwencji w partii.[UNK]
(Nieznany): Reprezentuje tokeny, które nie znajdują się w słowniku.Przykład: Jeśli
"Hello"
ma ID64
,","
to455
,"world"
to78
, a"!"
to467
, to:"Hello, world!"
→[64, 455, 78, 467]
Obsługa nieznanych słów: Jeśli słowo takie jak
"Bye"
nie znajduje się w słowniku, jest zastępowane przez[UNK]
."Bye, world!"
→["[UNK]", ",", "world", "!"]
→[987, 455, 78, 467]
&#xNAN;(Zakładając, że[UNK]
ma ID987
)
Zaawansowane metody tokenizacji
Podczas gdy podstawowy tokenizator dobrze działa w przypadku prostych tekstów, ma ograniczenia, szczególnie w przypadku dużych słowników i obsługi nowych lub rzadkich słów. Zaawansowane metody tokenizacji rozwiązują te problemy, dzieląc tekst na mniejsze podjednostki lub optymalizując proces tokenizacji.
Kodowanie par bajtów (BPE):
Cel: Zmniejsza rozmiar słownika i obsługuje rzadkie lub nieznane słowa, dzieląc je na często występujące pary bajtów.
Jak to działa:
Zaczyna od pojedynczych znaków jako tokenów.
Iteracyjnie łączy najczęściej występujące pary tokenów w jeden token.
Kontynuuje, aż nie będzie można połączyć więcej częstych par.
Korzyści:
Eliminuje potrzebę tokena
[UNK]
, ponieważ wszystkie słowa mogą być reprezentowane przez łączenie istniejących tokenów subword.Bardziej efektywny i elastyczny słownik.
Przykład:
"playing"
może być tokenizowane jako["play", "ing"]
, jeśli"play"
i"ing"
są częstymi subwordami.
WordPiece:
Używane przez: Modele takie jak BERT.
Cel: Podobnie jak BPE, dzieli słowa na jednostki subword, aby obsługiwać nieznane słowa i zmniejszać rozmiar słownika.
Jak to działa:
Zaczyna od podstawowego słownika pojedynczych znaków.
Iteracyjnie dodaje najczęściej występujący subword, który maksymalizuje prawdopodobieństwo danych treningowych.
Używa modelu probabilistycznego do decydowania, które subwordy połączyć.
Korzyści:
Równoważy między posiadaniem zarządzalnego rozmiaru słownika a efektywnym reprezentowaniem słów.
Efektywnie obsługuje rzadkie i złożone słowa.
Przykład:
"unhappiness"
może być tokenizowane jako["un", "happiness"]
lub["un", "happy", "ness"]
w zależności od słownika.
Model językowy Unigram:
Używane przez: Modele takie jak SentencePiece.
Cel: Używa modelu probabilistycznego do określenia najbardziej prawdopodobnego zestawu tokenów subword.
Jak to działa:
Zaczyna od dużego zestawu potencjalnych tokenów.
Iteracyjnie usuwa tokeny, które najmniej poprawiają prawdopodobieństwo modelu dla danych treningowych.
Finalizuje słownik, w którym każde słowo jest reprezentowane przez najbardziej prawdopodobne jednostki subword.
Korzyści:
Elastyczny i może modelować język w sposób bardziej naturalny.
Często prowadzi do bardziej efektywnych i kompaktowych tokenizacji.
Przykład:
"internationalization"
może być tokenizowane na mniejsze, znaczące subwordy jak["international", "ization"]
.
Przykład kodu
Zrozummy to lepiej na przykładzie kodu z https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb:
References
Last updated