Technologia
· 6 min czytania

Jak zmieściliśmy model AI w karcie przeglądarki

Autor: Amine Gaaliche · szkic przygotowany z pomocą Claude'a, sprawdzony i poprawiony ręcznie

Model wykrywania w naszej bezpłatnej aplikacji w przeglądarce ważył 178,5 MB, bo znał słownictwo 104 języków, choć aplikacja obsługiwała wtedy tylko siedem z nich. Usunęliśmy słownictwo pozostałych języków i model waży teraz 139,6 MB. Jego wyniki są identyczne: sprawdziliśmy to na 77 dokumentach.

Skąd brał się rozmiar modelu

Model, który rozpoznaje nazwiska, nazwy firm i adresy, najpierw dzieli tekst na krótkie fragmenty. Każdy fragment ma swój wpis w słowniku modelu, a każdemu wpisowi odpowiada wiersz liczb w pierwszej warstwie sieci.

Nasz model pochodzi z rodziny modeli wielojęzycznych, wytrenowanych jednocześnie na 104 językach. Jego słownik zawiera więc fragmenty słów zapisanych cyrylicą, pismem arabskim, znakami chińskimi i dziesiątkami innych pism. Wszystkie odpowiadające im wiersze liczb trafiały do pliku, który pobiera przeglądarka.

Użytkownik aplikacji pobierał w ten sposób słownictwo 97 języków, w których nigdy nie otworzy dokumentu. W aplikacji na komputer oznacza to tylko zajęte miejsce na dysku, a w przeglądarce dłuższe pierwsze uruchomienie, bo model trzeba najpierw przesłać przez sieć.

Co usunęliśmy

Zostawiliśmy w słowniku fragmenty zapisane pismami, których używają obsługiwane języki. Pozostałe wpisy usunęliśmy razem z odpowiadającymi im wierszami liczb, a reszty sieci nie zmienialiśmy.

Plik na dysku zmalał ze 178,5 MB do 139,6 MB, czyli o mniej więcej 39 MB. Przesyłany przez sieć model zajmuje około 100 MB. Przeglądarka pobiera go raz, a przy kolejnych wizytach korzysta z kopii zapisanej na komputerze.

Przycinaliśmy model z myślą o przeglądarce, bo tam rozmiar pliku ma największe znaczenie: każdy nowy użytkownik pobiera go przez sieć. Mogliśmy to zrobić, bo sami decydujemy o budowie modelu. Powody, dla których mamy własny silnik, opisaliśmy w tekście o tym, dlaczego zbudowaliśmy własny silnik wykrywania danych osobowych.

Jak sprawdziliśmy, że wyniki się nie zmieniły

Tekst w obsługiwanych językach nie korzysta z usuniętych wpisów, więc przy analizie takich dokumentów model niczego z nich nie odczytywał. To jednak tylko rozumowanie, a inżynier słusznie zapyta o pomiar.

Porównaliśmy oba modele na 77 dokumentach w siedmiu językach i sprawdziliśmy dwie rzeczy. Pierwsza to podział tekstu na fragmenty: żaden dokument nie został podzielony inaczej. Druga to wykryte encje, czyli nazwiska, adresy i inne dane: wśród 2219 encji nie było ani jednej różnicy.

Wynik jest identyczny, a nie zbliżony. Gdyby choć jeden dokument został podzielony inaczej albo zmieniła się choć jedna encja, musielibyśmy ten wniosek wycofać, ale nic takiego się nie zdarzyło.

Zmniejszenie modelu o 22% zwykle budzi podejrzenie, że coś poświęcono. Dlatego podajemy wielkość próby i liczbę encji: bez nich słowo „identyczny” byłoby tylko zapewnieniem, a z nimi każdy może zapytać o sposób liczenia i spróbować podważyć wynik.

Optymalizacja, która nic nie kosztuje, zdarza się rzadko, bo zwykle mniejszy plik oznacza gorsze wyniki. Tutaj usunięte wpisy nie brały udziału w obliczeniach dla obsługiwanych języków, więc ich brak niczego nie zmienił.

Mniejszy model, którego nie wybraliśmy

Istniała prostsza droga. Sześciowarstwowy DistilBERT z tej samej rodziny zajmuje przy pobieraniu około 70 MB, a nasz model około 100 MB. Zanim go odrzuciliśmy, zmierzyliśmy jego wyniki.

Na naszym zbiorze testowym DistilBERT uzyskał 73,5%, a model, którego używamy, 77,2%. Taka różnica w średniej wygląda niewinnie. Średnia ukrywa jednak spadek o 22 punkty procentowe w języku hiszpańskim i o 13 punktów w niemieckim.

Pomiar pokazał też drugi problem: DistilBERT zgadzał się z naszym modelem tylko w 76% wyników. Znajdował podobnie liczny, ale w dużej części inny zestaw encji, więc w praktyce pomijałby w dokumentach inne dane niż obecny model.

Mniejszy model oszczędziłby około 30 MB przy pobieraniu, ale za cenę wyraźnie gorszego wykrywania w dwóch językach. Na taki kompromis się nie zgodziliśmy: zostaliśmy przy większym modelu i przycięliśmy jego słownik.

Co to oznacza dla użytkownika

Model działa w przeglądarce, więc dokument nie opuszcza komputera. Aplikacja wysyła jedynie anonimowy sygnał uruchomienia, bez treści dokumentów.

Przycięty model wykrywa to samo co pełny, ale to nie znaczy, że wykrywa wszystko. Żaden lokalny model nie znajduje każdego identyfikatora. W aplikacji na komputer model rozpoznający nazwiska, nazwy firm i adresy jest jedną z warstw: przed nim działają wzorce dla danych o stałym formacie, a po nim opcjonalny model językowy, domyślnie wyłączony. Wyniki wykrywania trzeba przejrzeć przed pobraniem pliku.

Najczęstsze pytania

Czy przycięty model wykrywa gorzej niż pełny?

Nie. Na 77 dokumentach w siedmiu językach oba modele podzieliły tekst tak samo i wykryły te same 2219 encji. Usunięte wpisy dotyczyły pism, których obsługiwane języki nie używają.

Dlaczego nie wybrano mniejszego modelu DistilBERT?

Jego średni wynik był niższy: 73,5% wobec 77,2%. W języku hiszpańskim tracił 22 punkty procentowe, w niemieckim 13, a z obecnym modelem zgadzał się tylko w 76% wyników.

Czy aplikacja w przeglądarce wysyła dokument na serwer?

Nie. Model działa w przeglądarce i dokument nie opuszcza komputera. Aplikacja wysyła tylko anonimowy sygnał uruchomienia.

Ile danych pobiera aplikacja przy pierwszym uruchomieniu?

Sam model zajmuje przy pobieraniu około 100 MB. Przeglądarka pobiera go raz i przy kolejnych wizytach korzysta z zapisanej kopii.

Czy ten tekst był przydatny? Prosimy dać nam znać.

Udostępnij