Проблема «половинчатых» слов
Стандартные токенизаторы, обученные на латинице, критически неэффективны для брахмийских языков (Devanagari, Telugu, Tamil, Kannada). Эти языки относятся к абугидам: согласные несут в себе «неотъемлемый гласный», который модифицируется диакритическими знаками. В отличие от английского, где любые два валидных токена можно склеить (свойство полугруппы), в брахмийских языках это приводит к орфографическим ошибкам. Система формирует «частичную полугруппу», где не каждая конкатенация дает валидную строку.
Решение через формальную верификацию
Авторы Sai Hemanth Kapila и Rakshika Bagavathy формализовали эту проблему в языке зависимых типов Agda. Они смоделировали валидные токены как цепочки в системе переходов и вывели функцию fixToken. Эта функция гарантирует, что любой кандидат в токены будет расширен или скорректирован с учетом орфографических границ, исключая генерацию «мусорных» символов.
Практическая реализация
Теоретическая модель была успешно переведена в практический код. Разработчики создали:
- Патч для популярного токенизатора SentencePiece.
- Самостоятельную библиотеку-пре-токенизатор на Rust.
Оба решения полностью устраняют наблюдаемые ранее ошибки при обработке индийских языков.
Сравнение подходов
| Характеристика | Стандартные токенизаторы | Proposed Method (Type-Driven) |
|---|---|---|
| Математическая база | Эвристика (частотность) | Формальная верификация (Agda) |
| Обработка абугид | Нарушает орфографию | Уважает орфографические границы |
| Ядро реализации | C++ / Python | Rust / SentencePiece Patch |
| Гарантии корректности | Отсутствуют | Доказуемая корректность |
Значение для индустрии
Работа закрывает критический пробел в поддержке low-resource и сложных языков. Использование Rust обеспечивает высокую производительность, а интеграция с SentencePiece позволяет легко внедрить исправления в существующие LLM-пайплайны без полной переписывания систем токенизации.
Источник: arXiv cs.CL ↗
