1. Tokenizing
Tokenizacja
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). 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
Dzielenie tekstu:
Podstawowy tokenizator: Prosty tokenizator może dzielić tekst na pojedyncze słowa i znaki interpunkcyjne, usuwając spacje.
Przykład: Tekst:
"Witaj, świecie!"
Tokeny:["Witaj", ",", "świecie", "!"]
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
"Witaj"
ma ID64
,","
to455
,"świecie"
to78
, a"!"
to467
, to:"Witaj, świecie!"
→[64, 455, 78, 467]
Obsługa nieznanych słów: Jeśli słowo takie jak
"Żegnaj"
nie znajduje się w słowniku, jest zastępowane przez[UNK]
."Żegnaj, świecie!"
→["[UNK]", ",", "świecie", "!"]
→[987, 455, 78, 467]
(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 podsłownych.Bardziej efektywny i elastyczny słownik.
Przykład:
"grając"
może być tokenizowane jako["gra", "jąc"]
, jeśli"gra"
i"jąc"
są częstymi podsłowami.
WordPiece:
Używane przez: Modele takie jak BERT.
Cel: Podobnie jak BPE, dzieli słowa na jednostki podsłowne, 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ące podsłowo, które maksymalizuje prawdopodobieństwo danych treningowych.
Używa modelu probabilistycznego do decydowania, które podsłowa 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:
"nieszczęście"
może być tokenizowane jako["nie", "szczęście"]
lub["nie", "szczęśliwy", "ść"]
w zależności od słownika.
Model języka Unigram:
Używane przez: Modele takie jak SentencePiece.
Cel: Używa modelu probabilistycznego do określenia najbardziej prawdopodobnego zestawu tokenów podsłownych.
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 podsłowne.
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:
"internacjonalizacja"
może być tokenizowane na mniejsze, znaczące podsłowa jak["internacjonal", "izacja"]
.
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:
Odniesienia
Last updated