Artykuł powstał na podstawie artykułu https://blog.floydhub.com/tokenization-nlp/
Miniony rok był ogromny dla przetwarzania języka naturalnego (NLP). Jeśli chodzi o ulepszenia, możliwe jest teraz szybsze wdrażanie sieci neuronowych dzięki zastosowaniu zoptymalizowanych bibliotek i wydajnego sprzętu. Jednak jednym z wąskich gardeł we współczesnych potokach NLP opartych na głębokim uczeniu jest tokenizacja, w szczególności implementacje, które są wszechstronne i niezależne od ram.
Świat głębokie uczenia oraz NLP ewoluuje w szybkim tempie. Dwa najważniejsze trendy to architektura Transformer (2017) i model językowy BERT (2018), który jest najbardziej znanym modelem wykorzystującym dawną architekturę. W szczególności te dwa osiągnięcia przyczyniły się do poprawy wydajności maszyn w szerokim zakresie zadań związanych z czytaniem języka.
Człowiek może zrozumieć język, zanim nauczy się czytać. Maszyny nie mają tego fonetycznego początku. Nie wiedząc nic o języku, trzeba opracować systemy, które umożliwią im przetwarzanie tekstu bez zdolności, podobnie jak ludzi, do kojarzenia dźwięków ze znaczeniem słów.
Jak maszyny mogą rozpocząć przetwarzanie tekstu, jeśli nie wiedzą nic o gramatyce, dźwiękach, słowach lub zdaniach? Możesz tworzyć reguły, które każą maszynie przetwarzać tekst, aby umożliwić mu wyszukiwanie typu słownikowego. Jednak w tym scenariuszu maszyna niczego się nie uczy i musiałbyś mieć statyczny zestaw danych dla każdej możliwej kombinacji słów i wszystkich ich wariantów gramatycznych.
Zamiast trenować maszynę do wyszukiwania ustalonych słowników, trzeba nauczyć maszyny rozpoznawania i „czytania” tekstu w taki sposób, aby mógł uczyć się na podstawie tej akcji. Innymi słowy, im więcej czyta, tym więcej się uczy. Ludzie robią to, wykorzystując sposób, w jaki wcześniej nauczyli się dźwięków fonetycznych. Maszyny nie mają tej wiedzy, aby je wykorzystać, dlatego trzeba im powiedzieć, jak podzielić tekst na standardowe jednostki, aby go przetworzyć. Robią to za pomocą systemu zwanego „tokenizacją”, w którym sekwencje tekstu są dzielone na mniejsze części lub „tokeny”, a następnie wprowadzane jako dane wejściowe do modelu głębokiego uczenia NLP, takiego jak BERT. Ale zanim przyjrzymy się różnym sposobom tokenizacji tekstu, najpierw sprawdźmy, czy naprawdę musimy w ogóle używać tokenizacji.
Aby nauczyć model głębokiego uczenia, taki jak BERT lub GPT-2, jak dobrze sobie radzić w zadaniach przetwarzania języka naturalnego, musimy podać mu dużo tekstu. Dzięki specyficznemu projektowi architektury model nauczy się pewnego poziomu zrozumienia syntaktycznego lub semantycznego. Nadal jest to obszar aktywnych badań nad poziomem zrozumienia semantycznego tych modeli. Uważa się, że uczą się wiedzy syntaktycznej na niższych poziomach sieci neuronowej, a następnie wiedzy semantycznej na wyższych poziomach, gdy zaczynają doskonalić bardziej specyficzne sygnały w dziedzinie języka, np. teksty medyczne a szkolenia techniczne.
Określony rodzaj zastosowanej architektury będzie miał znaczący wpływ na zadania, z którymi model może sobie poradzić, jak szybko może się nauczyć i jak dobrze sobie radzi. GPT2 wykorzystuje na przykład architekturę dekodera, ponieważ jego zadaniem jest przewidywanie następnego słowa w sekwencji. W przeciwieństwie do tego, BERT wykorzystuje architekturę typu enkodera, ponieważ jest przeszkolony do większego zakresu zadań NLP, takich jak przewidywanie następnego zdania, wyszukiwanie pytań i odpowiedzi oraz klasyfikacja. Bez względu na to, w jaki sposób są zaprojektowane, wszyscy muszą otrzymywać tekst przez swoje warstwy wejściowe, aby przeprowadzić dowolny rodzaj nauki.
Aby zaoferować dostęp do szybkiego, najnowocześniejszego i łatwego w użyciu tokenizacji, który dobrze współgra z nowoczesnymi potokami NLP, udostępniono tokenizery o otwartym kodzie źródłowym. Tokenizery to, jak sama nazwa wskazuje, implementacja najpopularniejszych obecnie tokenizerów z naciskiem na wydajność i wszechstronność. Implementacja tokenizera składa się z następującego potoku procesów, z których każdy stosuje inne transformacje do informacji tekstowej.
Klasyczna reprezentacja słów nie radzi sobie dobrze z rzadkim słowem. Osadzanie znaków jest jednym z rozwiązań przezwyciężających brak słownictwa. Może jednak zbyt drobiazgowo brakować ważnych informacji. Podsłowie znajduje się pomiędzy słowem a znakiem. Nie jest zbyt drobnoziarnisty, a jednocześnie radzi sobie z niewidocznym słowem i rzadkim słowem.
Jednym z popularnych algorytmów tokenizacji napisów zgodnych z powyższym podejściem jest BPE. BPE był pierwotnie używany do kompresji danych poprzez znalezienie wspólnych kombinacji par bajtów. Można go również zastosować do NLP, aby znaleźć najbardziej efektywny sposób reprezentacji tekstu. Możemy spojrzeć na przykład, aby zobaczyć, jak BPE działa w praktyce
Zauważyliśmy, że użycie częstotliwości wzorców podtekstów do tokenizacji może skutkować niejednoznacznym kodowaniem końcowym. Problem polega na tym, że nie mamy możliwości przewidzenia, który konkretny token będzie najprawdopodobniej najlepszy podczas kodowania nowego tekstu wejściowego. Na szczęście potrzeba przewidzenia najbardziej prawdopodobnej sekwencji tekstu nie jest unikalnym problemem dla tokenizacji. Możemy wykorzystać tę wiedzę, aby zbudować lepszy tokenizer. Aby rozwiązać tę złożoność, najprostszym podejściem jest model unigram, który bierze pod uwagę tylko prawdopodobieństwo bieżącego słowa.
Podejście unigram różni się od BPE tym, że próbuje wybrać najbardziej prawdopodobną opcję zamiast najlepszej opcji przy każdej iteracji. Aby wygenerować zestaw tokenów podmenu unigram, musisz najpierw zdefiniować pożądany końcowy rozmiar zestawu tokenów, a także początkowy zestaw tokenów podmenu początkowego. Możesz wybrać zestaw tokenu słowa źródłowego w podobny sposób jak BPE i wybrać najczęściej występujące podciągi.
Świat tokenizacji podsłów, podobnie jak świat głębokiego uczenia NLP, ewoluuje szybko w krótkim czasie. Kiedy więc BERT został wydany w 2018 roku, zawierał nowy algorytm pod słowem o nazwie WordPiece. Przy pierwszym czytaniu możesz pomyśleć, że wróciłeś do punktu wyjścia i musisz wymyślić inny model podsłów. Jednak WordPiece okazuje się bardzo podobny do BPE. Pomyśl o WordPiece jako o pośredniku między podejściem BPE a podejściem unigram. BPE, bierze dwa tokeny, sprawdza częstotliwość każdej pary, a następnie łączy pary, które mają najwyższą łączną liczbę częstotliwości. Bierze pod uwagę tylko najczęstsze kombinacje par na każdym kroku, nic więcej.
WordPiece wydaje się być pomostem między podejściami BPE i unigram. Jego ogólne podejście jest podobne do BPE, ale wykorzystuje również metodę unigram do określenia, kiedy scalić tokeny.
SentencePiece zasadniczo stara się umieścić wszystkie narzędzia i techniki tokenizacji pod słowami pod jednym sztandarem. To trochę jak szwajcarski scyzoryk do tokenizacji napisów.
Jakie problemy dotyczy SentencePiece:
1. Wszystkie pozostałe modele zakładają, że dane wejściowe są już tokenizowane: BPE i Unigram są świetnymi modelami, ale mają jedną wielką wadę – oba muszą mieć już swoje dane tokenizowane. SentencePiece rozwiązuje ten problem, po prostu wprowadzając tekst surowy, a następnie robiąc wszystko na podstawie tych danych wejściowych, aby wykonać tokenizację pod słowami.
2. Agnostyk językowy: Ponieważ wszystkie inne algorytmy podsłówkowe muszą mieć wstępnie tokenizowane dane wejściowe, ogranicza to ich zastosowanie do wielu języków. Musisz stworzyć reguły dla różnych języków, aby móc ich używać jako danych wejściowych do swojego modelu. Szybko robi się bardzo bałagan.
3. Dekodowanie jest trudne: Kolejnym problemem powodowanym przez modele takie jak BPE i unigram wymagające już tokenizowanych danych wejściowych jest to, że nie wiesz, jakie reguły kodowania zostały użyte. Stwarza to problemy podczas próby odtworzenia wyników lub potwierdzenia wyników.
4. Brak kompleksowego rozwiązania: to tylko niektóre z problemów, co oznacza, że BPE i unigram nie są w pełni kompletnymi lub kompleksowymi rozwiązaniami. Nie możesz po prostu podłączyć surowego wejścia i uzyskać wyniku. Zamiast tego są tylko częścią rozwiązania. SentencePiece gromadzi wszystko, co potrzebne do kompleksowego rozwiązania w jednym zgrabnym pakiecie.
SentencePiece wykorzystuje szereg funkcji, które rozwiązują wszystkie powyższe problemy, które zostały szczegółowo opisane zarówno w powiązanym dokumencie, jak i w odpowiednim repozytorium GitHub. Oba są świetnymi zasobami, ale jeśli masz mało czasu, przeglądanie repozytorium może być najlepszym sposobem na szybki przegląd SentencePiece i całej powiązanej z nim wielkości szwajcarskiej armii.
Na razie wystarczy zwrócić uwagę na niektóre techniki stosowane przez SentencePiece w celu usunięcia powyższych niedociągnięć przed zanurzeniem się w niektórych przykładach kodu.
Dzięki szybkiemu rozwojowi Deep Learningu można łatwo spojrzeć tylko na główny rdzeń modeli, takich jak BERT i XLNet. Jednak format umożliwiający tym modelom przetwarzanie tekstu ma kluczowe znaczenie dla ich uczenia się. Zrozumienie podstaw tokenizerów pod słowami pozwoli ci szybko opanować najnowsze innowacje w tej dziedzinie. Pomoże to również, jeśli próbujesz samodzielnie zbudować te sieci lub masz do czynienia z wielojęzycznymi problemami podczas wykonywania tradycyjnych zadań NLP. Tak czy inaczej, wiedza o modelach takich jak SentencePiece będzie użytecznym narzędziem, jeśli jesteś zainteresowany dziedziną Deep Learning NLP.