BudouX: jak dzielić tekst japoński, chiński i tajski na frazy
BudouX dzieli tekst japoński, chiński i tajski na frazy. Jak działa model AdaBoost i co potrafi word-break: auto-phrase w Chrome 119 — plus ograniczenia.
Czym jest BudouX i skąd się wziął?
BudouX to mały, samodzielny segmenter fraz rozwijany w organizacji Google i publikowany na licencji Apache 2.0 [1]. Dzieli tekst języków bez spacji na jednostki, na których przeglądarka może bezpiecznie kończyć wiersz. Nie jest oficjalnie wspieranym produktem Google — README projektu zawiera wyraźne zastrzeżenie w tej sprawie [1]. Kod trafił do publicznego repozytorium w 2022 roku [1].
Projekt jest następcą Budou, narzędzia ogłoszonego 21 października 2016 roku [2]. Budou dzieliło tekst japoński, korzystając z Cloud Natural Language API, i początkowo obsługiwało wyłącznie japoński [2]. BudouX odcina się od tego modelu: segmentacja odbywa się lokalnie, bez odpytywania zewnętrznej usługi [1]. Dzięki temu bibliotekę można uruchomić także w przeglądarce.
Temat okazuje się szerszy niż pojedyncza biblioteka, bo pokazuje, jak Google przenosi wyniki eksperymentów językowych do codziennych mechanizmów sieci. Podobny kierunek widać w zmianach wyszukiwarki, o których piszemy w artykule Google Search z AI.
Jak model rozpoznaje granice fraz?
Model zadaje jedno pytanie przy każdym miejscu między dwoma znakami: czy w tym punkcie może kończyć się fraza [1]. Sygnały czerpie z sąsiednich znaków — pojedynczych, par i trójek — oraz z przynależności znaków do bloków Unicode [1]. Całość opiera się na AdaBoost [1].
To klasyfikator binarny pracujący na bardzo lokalnym kontekście. Nie potrzebuje słownika ani zewnętrznego segmentera. Zamiast pytać „jakie to słowo”, pyta „czy tutaj wypada granica”. Takie podejście działa dla języków, w których nie ma spacji, a granice słów nie są oznaczone jawnie.
Wynikiem jest lista fraz. Biblioteka może ją zwrócić wprost albo zmodyfikować HTML, wstawiając znaki zero-width space (U+200B) [1]. To wskazówki dla istniejącego mechanizmu zawijania tekstu, nie ręczne ustawianie każdej linii.
Jakie języki i modele obsługuje BudouX?
Biblioteka ma cztery gotowe modele: japoński, chiński uproszczony, chiński tradycyjny i tajski [1]. API udostępniono w Pythonie, JavaScripcie i Javie [1]. Deklarowana wielkość to około 15 KB razem z modelem uczenia maszynowego [1].
Ta liczba pochodzi od autorów i zależy od wariantu językowego, bundlera oraz portu. Nie trzeba traktować jej jako gwarancji dla każdej konfiguracji.
Zakres modeli bywa mylony z zasięgiem funkcji przeglądarek. To dwie różne rzeczy: biblioteka obsługuje cztery warianty językowe, a natywna funkcja CSS obsługiwana jest — według dokumentacji Chrome z grudnia 2023 roku — wyłącznie dla japońskiego [3].
Co potrafi word-break: auto-phrase w Chrome?
Chrome 119, wydany w 2023 roku, wprowadził właściwość word-break: auto-phrase dla japońskiego [3]. Przeglądarka łamie wiersze na granicach fraz wyznaczonych przez model, a implementacja korzysta z portu BudouX w C++ i AdaBoost [3].
Dokumentacja Chrome z 4 grudnia 2023 roku mówi wprost, że obsługiwany jest wtedy tylko japoński [3]. Chiński i koreański zapowiedziano na przyszłe wersje, a tajski nie został wymieniony jako obsługiwany [3]. Wprowadzenie funkcji przeszło standardową ścieżkę w przeglądarce — widać je w zgłoszeniu Intent to Ship dla Blinka [4].
Dla autora strony oznacza to prostą rzecz: jedna deklaracja CSS zamiast ręcznego wstawiania znaczników. Ceną jest ograniczenie zasięgu — poza Chrome i poza japoński trzeba wracać do biblioteki.
BudouX czy natywny CSS? Porównanie
| Kryterium | BudouX (biblioteka) | word-break: auto-phrase w Chrome | Ręczne znaczniki |
|---|---|---|---|
| Zakres języków | japoński, chiński uproszczony, chiński tradycyjny, tajski | tylko japoński (stan na grudzień 2023) | dowolny, ale ręcznie |
| Zależność od przeglądarki | brak, działa też na serwerze | tak, Chrome 119 i nowsze | brak |
| Kontrola nad wynikiem | duża, można korygować i trenować model | ograniczona do decyzji modelu | pełna, kosztem pracy |
| Praca przy wdrożeniu | instalacja pakietu i wywołanie w kodzie | jedna reguła CSS | ręczne oznaczanie każdego tekstu |
Tabela pokazuje, że wybór zależy od rynku. Dla jednego języka i nowoczesnego Chrome wystarczy CSS. Dla kilku języków i wielu przeglądarek potrzebna jest biblioteka.
Jak wdrożyć BudouX w projekcie webowym?
Start jest krótki: dodać pakiet do projektu, wybrać parser dla języka i przepuścić przez niego tekst przed wyświetleniem [5]. Parser zwraca frazy albo gotowy fragment z niewidocznymi znakami [1]. Warto sprawdzić oba warianty, bo pierwszy daje większą kontrolę nad składem.
Kolejny krok to decyzja, gdzie segmentacja ma się odbywać. Przy treściach statycznych można ją wykonać przy budowaniu strony i zapisać wynik. Przy treściach dynamicznych, na przykład nazwach produktów z API, wygodniej zrobić to po stronie serwera i zapisać rezultat w cache. Model działa lokalnie, więc nie ma tu kosztu zewnętrznego API [1].
Ostatni krok to testy. Trzeba sprawdzić długie nazwy własne, teksty mieszane i fragmenty z łaciną w środku. Granice fraz wyznacza model, a nie słownik, więc wyniki trzeba ocenić na realnym materiale.
Kiedy wynik bywa błędny i jak go poprawić?
Model może wskazać granicę niezgodną z intencją autora [3]. Dokumentacja Chrome ostrzega, że wynik uczenia maszynowego nie zawsze odpowiada oczekiwaniom [3]. Dotyczy to nazw własnych, neologizmów i długich złożeń.
Korekta jest możliwa na trzy sposoby: znacznik wbr, znak U+200B oraz znak U+200D [3]. W praktyce automat daje punkt startowy, a redakcja dokłada wyjątki tam, gdzie są naprawdę potrzebne.
Trzeba też pamiętać, że liczba linii nie jest właściwością BudouX. O podziale decyduje szerokość kontenera, font, rozmiar tekstu i CSS. Bez tych parametrów nie da się powiedzieć, ile linii zajmie dany napis.
Czym BudouX różni się od Budou?
Budou i BudouX to dwa kolejne projekty, nie jedna rzecz pod dwiema nazwami [2][1]. Budou z 2016 roku korzystało z Cloud Natural Language API i obsługiwało tylko japoński [2]. BudouX działa bez zewnętrznego segmentera, ma własne modele i cztery warianty językowe [1].
Różnica jest więc i techniczna, i praktyczna. Pierwsze narzędzie było demonstracją możliwości chmurowego API. Drugie jest biblioteką, którą można wbudować w produkt i uruchomić bez sieci.
Najczęstsze pytania
Czy BudouX to oficjalny produkt Google?
Nie. Kod znajduje się w organizacji Google i jest objęty licencją Apache 2.0, ale README zawiera zastrzeżenie, że projekt nie jest oficjalnie wspieranym produktem Google [1]. Bezpieczniej opisywać go jako otwarty projekt rozwijany w organizacji Google.
Czy BudouX łamie wiersze samodzielnie?
Nie. Dzieli tekst na frazy i może wstawić znaki U+200B jako wskazówki [1]. Ostateczny podział należy do mechanizmu zawijania w przeglądarce lub do układu, w którym tekst jest renderowany.
Czy natywna funkcja Chrome obsługuje chiński i tajski?
Według dokumentacji z grudnia 2023 roku nie. word-break: auto-phrase obsługiwał wtedy tylko japoński, a chiński i koreański zapowiadano na przyszłe wersje [3]. Tajski nie był wymieniony w tym zakresie [3]. Modele chiński i tajski są dostępne w bibliotece [1].
Ile waży BudouX i czy nadaje się na stronę klienta?
Autorzy deklarują około 15 KB razem z modelem [1]. To wartość orientacyjna, zależna od języka, wariantu i sposobu pakowania. Przy takiej wielkości użycie po stronie klienta jest realne.
Czy wynik modelu trzeba poprawiać ręcznie?
Czasem tak. Model może wyznaczyć granicę sprzeczną z intencją autora, zwłaszcza w nazwach własnych [3]. Korektę umożliwiają znacznik wbr oraz znaki U+200B i U+200D [3].