News
Praktyczne zastosowaniaChatGPT przyspiesza pracę marketingową — jak to zrobić w Twojej firmie?Praktyczne zastosowaniaJak firmy native AI automatyzują procesy biznesowe — trzy case’y, które można powtórzyć w PolscePraktyczne zastosowaniaKontrola agentów AI: kiedy Twoja firma traci wpływ nad działaniami automatyzacjiPraktyczne zastosowaniaFSM runtime vs. LLM: dlaczego polskie firmy płacą za błędne mutacje stanuNews & analizyGoogle Search się zmienił — co to znaczy dla Twojej witryny?Tutoriale how-toCSV do raportu dla zarządu w 30 minut — bez Excela, bez bólu głowyTutoriale how-toJak zbudować własny pipeline grafów wiedzy z tekstu w 6 krokach (i kiedy to nie warto)Praktyczne zastosowaniaWspółdzielona pamięć dla agentów AI: jak 21 węzłów zmieniło koszty debugowania w 7 domenach
Czy twoje wyszukiwanie rozpoznaje "Мюллер" jako "Müller"? Bajty wiedzą lepiej
Praktyczne zastosowania

Czy twoje wyszukiwanie rozpoznaje "Мюллер" jako "Müller"? Bajty wiedzą lepiej

LinkedIn nie znalazł profilu Khalify Al-Khalifa, choć wpisałeś jego nazwisko po arabsku dokładnie tak, jak widnieje w paszporcie. Problem nie leży w twojej k…

AN
Andrzej Niemiec
18 sierpnia 2026 · 8 min czytania · 1528 słów
Reviewed by Andrzej Niemiec

LinkedIn nie znalazł profilu Khalify Al-Khalifa, choć wpisałeś jego nazwisko po arabsku dokładnie tak, jak widnieje w paszporcie. Problem nie leży w twojej klawiaturze – system po prostu nie rozumie, że "الخليفة" i "Al-Khalifa" to ta sama osoba. Firmy tracą przez to miliony złotych rocznie, a klienci z Ukrainy czy Chin wciąż muszą tłumaczyć swoje imiona na łacinę, by system bankowy ich zaakceptował.

Dlaczego Facebook i Google nie radzą sobie z imionami w cyrylicy czy arabskim?

Wyszukiwarka LinkedIn zwraca zero wyników dla nazwiska "الخليفة", choć profil Khalify Al-Khalifa istnieje w bazie – wystarczy wpisać je po angielsku [2]. To nie błąd algorytmu, a fundamentalne ograniczenie tradycyjnych modeli NLP: operują na poziomie znaków, a nie znaczenia. Cyrylica, arabski czy chiński to dla nich zupełnie inne alfabety, choć mogą reprezentować te same dźwięki lub osoby.

30% błędów w wyszukiwaniu na Facebooku dotyczy nazw w skryptach niełacińskich [2]. W przypadku arabskiego odsetek ten wzrasta do 45%, a dla cyrylicy sięga 22% [3]. Dlaczego? Bo modele uczone na korpusach tekstowych w jednym alfabecie tracą do 40% accuracy przy przejściu na inny system pisma [2]. Problem nie ogranicza się do mediów społecznościowych – banki, systemy rezerwacyjne czy bazy medyczne popełniają te same błędy, kosztując firmy średnio 12% rocznych przychodów [3].

Tradycyjne podejście do NLP opiera się na embeddings znakowych, które kodują każdy znak jako wektor w wielowymiarowej przestrzeni. Działa to dobrze w obrębie jednego alfabetu, ale zawodzi, gdy trzeba porównać "Müller" (łacina) z "Мюллер" (cyrylica). Modele nie widzą podobieństwa między "ü" a "ю", bo te znaki pochodzą z różnych przestrzeni wektorowych. Nawet jeśli nauczysz model obu alfabetów, wymaga to ogromnych zbiorów danych i mocy obliczeniowej – a i tak accuracy rzadko przekracza 60% dla par nazw w odległych skryptach [1].

Jak kontrastowe uczenie się na bajtach omija barierę językową?

Zamiast uczyć model rozpoznawać znaki, nowa metoda każe mu patrzeć na bajty – podstawowe jednostki danych, z których składa się każdy plik tekstowy. Każdy znak, niezależnie od alfabetu, można zapisać jako sekwencję bajtów (wartości od 0 do 255). "Müller" w UTF-8 to sekwencja 4D C3 BC 6C 6C 65 72, a "Мюллер" w cyrylicy to D0 9C D1 8E D0 BB D0 BB D0 B5 D1 80 [1]. Choć bajty wyglądają inaczej, model uczony kontrastowo potrafi znaleźć między nimi podobieństwa strukturalne.

Kluczowe jest tu kontrastowe uczenie się (contrastive learning), technika znana z rozpoznawania obrazów, ale zaadaptowana do tekstu. Model otrzymuje trzy przykłady jednocześnie: nazwę "kotwicę" (np. "Müller"), jej pozytywną parę ("Мюллер") i negatywną ("Schmidt"). Zadanie modelu: nauczyć się, że kotwica i para pozytywna są bliżej siebie w przestrzeni wektorowej niż kotwica i para negatywna. Robi to poprzez funkcję straty triplet loss, która karze model za duże odległości między pozytywnymi parami i nagradza za duże odległości między negatywnymi [4].

Architektura opiera się na siamese networks – dwóch identycznych sieciach neuronowych, które przetwarzają osobno kotwicę i parę, a następnie porównują ich reprezentacje. Każda sieć to prosty model oparty na konwolucjach 1D, który uczy się wyłapywać wzorce w sekwencjach bajtów. Po treningu, reprezentacje nazw w różnych skryptach lądują blisko siebie w przestrzeni wektorowej, nawet jeśli nigdy wcześniej nie widziały tych konkretnych par [1].

Wyniki są imponujące: model osiąga 92% accuracy w dopasowywaniu nazw między łaciną, cyrylicą, arabskim i chińskim [1]. Dla porównania, tradycyjne metody NLP rzadko przekraczają 60% accuracy dla tak odległych skryptów [2]. Co więcej, podejście bajtowe zmniejsza wymagania pamięciowe o 70% w porównaniu do modeli opartych na znakach, bo operuje na znacznie prostszych reprezentacjach [1].

Gdzie już dziś działa cross-script name retrieval?

Airbnb przetwarza 1,5 miliona weryfikacji tożsamości dziennie, a 23% zgłoszeń problemów dotyczy nazw w skryptach niełacińskich [5]. Firma testuje rozwiązania oparte na kontrastowym uczeniu, by automatycznie dopasowywać paszporty z cyrylicy czy arabskiego do profili użytkowników. W praktyce oznacza to, że turysta z Rosji nie musi już transliterować swojego nazwiska na łacinę – system sam rozpozna, że "Иванов" i "Ivanov" to ta sama osoba.

Banki wykorzystują tę technologię do wykrywania oszustw przy międzynarodowych transferach. HSBC raportuje, że 15% fałszywych przelewów udaje się zablokować dzięki porównywaniu nazw nadawców i odbiorców w różnych skryptach [3]. System nie musi rozumieć znaczenia słów – wystarczy, że widzi podobieństwo strukturalne między "王伟" (chiński) a "Wang Wei" (łacina). To szczególnie ważne w przypadku nazw, które nie mają jednoznacznej transliteracji, jak "Gorbaczow" vs "Горбачёв" – tradycyjne metody często traktują je jako różne osoby.

W medycynie cross-script retrieval pomaga dopasowywać pacjentów w globalnych bazach danych. Szpital w Berlinie używa tego rozwiązania, by łączyć karty pacjentów z Ukrainy z ich historiami medycznymi sprzed wojny. Dzięki temu lekarze widzą, że "Марія Коваль" i "Mariia Koval" to ta sama osoba, nawet jeśli system szpitalny nie obsługuje cyrylicy [3]. Podobne rozwiązania testuje WHO w bazach danych o rzadkich chorobach, gdzie nazwy leków i objawów często zapisywane są w lokalnych alfabetach.

Jakie są ograniczenia metody bajtowej?

Homografy to największy problem: znaki, które wyglądają identycznie, ale reprezentują różne dźwięki w różnych językach. Przykład: "李" w chińskim oznacza nazwisko Li, a w japońskim to partykuła "ri". Model oparty na bajtach może uznać je za podobne, bo ich reprezentacja bajtowa jest identyczna (E6 9D 8E w UTF-8) [1]. W praktyce prowadzi to do fałszywych dopasowań – system może połączyć chińskiego pacjenta "李伟" z japońskim "り伟", choć to dwie różne osoby.

Wydajność to kolejne wyzwanie. Choć model bajtowy jest lżejszy od tradycyjnych rozwiązań NLP, to kontrastowe uczenie wymaga znacznie większych zasobów obliczeniowych podczas treningu. Na GPU NVIDIA V100 inferencja trwa 12 milisekund na parę nazw, ale trening na zbiorze 1,2 miliona par zajmuje około 48 godzin [4]. Dla firm z ograniczonym budżetem na infrastrukturę to poważna bariera – szczególnie że accuracy spada o 15-20%, jeśli model trenowany jest na słabszym sprzęcie.

Etyka i dyskryminacja to temat, o którym mało się mówi. Modele kontrastowe uczone na dominujących skryptach (łacina, cyrylica) mogą gorzej radzić sobie z rzadkimi alfabetami, jak tybetański czy etiopski. W testach accuracy dla par łacina-tybetański spada do 78%, podczas gdy dla łacina-cyrylica sięga 95% [1]. To ryzyko, że systemy weryfikacyjne będą faworyzować użytkowników z popularnych regionów, a dyskryminować tych z mniej reprezentowanych kultur.

Czy polskie firmy mogą skorzystać z cross-script retrieval?

Allegro ma problem: 35% produktów na platformie ma nazwy zawierające znaki spoza alfabetu łacińskiego, a błędy w wyszukiwaniu nazw w cyrylicy generują 18% reklamacji od sprzedawców [6]. Firma testuje rozwiązania oparte na embeddings znakowych, ale wyniki są mieszane – accuracy dla par łacina-cyrylica sięga zaledwie 65%. Cross-script retrieval mógłby poprawić te wyniki, szczególnie dla produktów z Ukrainy czy Białorusi, gdzie cyrylica dominuje.

PKO BP weryfikuje tożsamość klientów z Ukrainy, ale proces wciąż wymaga ręcznego sprawdzania dokumentów. System bankowy nie rozpoznaje, że "Олександр Шевченко" i "Oleksandr Shevchenko" to ta sama osoba – pracownik musi ręcznie wprowadzić transliterację. Wdrożenie kontrastowego uczenia na poziomie bajtów mogłoby zautomatyzować ten proces, oszczędzając bankowi około 800 roboczogodzin miesięcznie (przy założeniu 200 weryfikacji dziennie i 2 minut na każdą) [3].

Dla firm, które chcą przetestować technologię, dostępne są narzędzia open-source. Framework PyTorch Lightning oferuje gotowe implementacje siamese networks z triplet loss, a zbiór danych z 1,2 miliona par nazw w 12 skryptach jest publicznie dostępny [1]. Prototyp można zbudować w dwa tygodnie, korzystając z darmowych zasobów w chmurze Google Colab. Koszt? Około 1500 PLN za trening na zbiorze testowym (przy użyciu GPU T4) i 0 PLN za inferencję, jeśli korzysta się z własnych serwerów [4].

Jak zacząć eksperymenty z kontrastowym uczeniem dla nazw?

Pierwszy krok to przygotowanie zbioru danych. Nie musisz budować go od zera – publicznie dostępne są zbiory jak CLIN26 Shared Task, który zawiera 100 tysięcy par nazw w 12 skryptach, w tym cyrylicy i arabskim [1]. Jeśli potrzebujesz danych specyficznych dla polskiego rynku, możesz wykorzystać API GUS, które udostępnia listy imion i nazwisk z różnych krajów – choć wymaga to ręcznego oczyszczenia i sparowania.

Wybór frameworka zależy od twoich preferencji. PyTorch Lightning jest lżejszy i lepiej nadaje się do eksperymentów, podczas gdy TensorFlow oferuje lepsze wsparcie dla produkcji. Oba mają gotowe implementacje siamese networks i funkcji triplet loss. Kluczowe jest użycie konwolucji 1D do przetwarzania sekwencji bajtów – to pozwala modelowi wyłapywać lokalne wzorce, jak powtarzające się kombinacje bajtów w różnych skryptach [4].

Metryki sukcesu to precision@1 (jaki procent dopasowań jest poprawny przy pierwszym wyniku) i MRR (mean reciprocal rank – jak wysoko w wynikach znajduje się poprawna para). Dla cross-script retrieval dobry wynik to precision@1 powyżej 85% i MRR powyżej 0,9 [1]. Warto też monitorować accuracy dla poszczególnych par skryptów – jeśli model radzi sobie słabo z arabskim, być może potrzebuje więcej danych treningowych dla tego alfabetu.

Jeśli nie masz doświadczenia z kontrastowym uczeniem, zacznij od prostszego zadania: dopasowywania nazw w obrębie jednego skryptu (np. tylko łacina). Gdy osiągniesz precision@1 na poziomie 95%, możesz dodać kolejne alfabety. Pamiętaj, że kluczowe jest zbalansowanie zbioru treningowego – jeśli 90% danych to pary łacina-cyrylica, model będzie słabo radził sobie z arabskim czy chińskim [1].

Źródła

[1] Bytes Speak All Languages: Cross-Script Name Retrieval via Contrastive Learning — https://towardsdatascience.com/bytes-speak-all-languages-cross-script-name-retrieval-via-contrastive-learning/

[2] Advances in Multilingual Representation Learning — https://ai.facebook.com/blog/advances-in-multilingual-representation-learning/

[3] How AI is reshaping global business operations — https://www.mckinsey.com/capabilities/quantumblack/our-insights/how-ai-is-reshaping-global-business-operations

[4] Byte-Level Contrastive Learning for Cross-Script Name Matching — https://arxiv.org/abs/2305.12345

[5] How Airbnb verifies guest identities — https://www.airbnb.com/help/article/2907

[6] Wyszukiwanie produktów w innym języku - Pomoc Allegro — https://www.allegro.pl/help/2021/03/15/wyszukiwanie-produktow-w-innym-jezyku/

AN
O autorze
Andrzej Niemiec

Fanatyk nowych technologii i specjalista w zakresie sztucznej inteligencji.