Многоязычное NER: сложности обнаружения PII
Обновлено в 2026 году
Разрыв в точности
NER-модели, обученные на английском, достигают 85–92% F1 на стандартных тестах. Примените те же модели к арабскому или китайскому тексту. Точность падает до 50–70%.
Для задач защиты PII этот разрыв критичен. Показатель обнаружения 70% означает, что 30% конфиденциальных данных остаются невидимыми.
Причины — не ошибки в коде. Они вытекают из различий в письменных системах.
Четыре корневые причины
1. Границы слов
Английский разделяет слова пробелами. Токенизация проста.
В китайском пробелов нет вообще.
"张伟住在北京"
→ Сначала разбить: ["张伟", "住在", "北京"]
Модель не может пометить то, что не может обнаружить. Разбиение на слова должно предшествовать NER.
В арабском буквы связаны внутри слова. Краткие гласные опускаются. Текст идёт справа налево.
"محمد يعيش في دبي"
→ Без кратких гласных, справа налево, связанные буквы
2. Морфология
Английские глаголы изменяются несколькими способами. Арабский использует корневую систему. Один корень порождает десятки слов.
كتب (k-t-b, «писать»)
→ كاتب (писатель), كتاب (книга), مكتبة (библиотека)
NER должен анализировать корни для нахождения имён в производных формах слов.
3. Соглашения об именах
Латинские имена: Имя затем Фамилия. Имена в RTL-языках образуют семейные цепочки.
محمد بن عبد الله
(Мухаммад сын Абдуллы)
Китайские имена ставят фамилию первой. Большинство имён состоят из двух или трёх иероглифов.
张伟 (Чжан Вэй) — 2 иероглифа
欧阳修 (Оуян Сю) — 3 иероглифа
Модель, построенная на западных паттернах имён, пропустит эти структуры.
4. Направление текста
Некоторые языки читаются справа налево. Когда RTL-текст содержит английское имя, визуальный и логический порядок расходятся. Это называется двунаправленным текстом (BiDi). Он требует тщательной обработки.
F1-оценки по системам письма
| Язык | Система письма | Диапазон F1 | Уровень сложности |
|---|---|---|---|
| Английский | Латиница | 85–92% | Низкий |
| Немецкий | Латиница | 82–88% | Низкий |
| Французский | Латиница | 80–87% | Низкий |
| Испанский | Латиница | 81–86% | Низкий |
| Русский | Кириллица | 75–83% | Средний |
| Арабский | Консонантное письмо | 55–75% | Высокий |
| Китайский | Иероглифы | 60–78% | Высокий |
| Японский | Смешанный | 65–80% | Высокий |
| Тайский | Тайский | 50–70% | Очень высокий |
| Хинди | Деванагари | 60–75% | Высокий |
Не-латинские системы и отсутствие границ слов снижают показатели во всех случаях.
Трёхуровневое решение
Мы используем три уровня для охвата 48 языков и систем письма.
Уровень 1: spaCy — 25 языков
Для языков с сильными, проверенными моделями. Охватывает английский, немецкий, французский, испанский, итальянский, португальский, нидерландский, польский, русский и греческий.
Уровень 2: Stanza — сложные языки
Stanza от Стэнфорда обрабатывает арабский, китайский, японский и корейский. Выполняет разбиение слов и анализ корней до NER.
Уровень 3: XLM-RoBERTa — малоресурсные языки
Для языков без специализированных моделей. Тайский, вьетнамский, хинди, бенгальский, иврит, турецкий и фарси. Обрабатывает смешанноязычный текст без явных меток.
RTL и BiDi
Текст справа налево требует дополнительных шагов помимо разбиения.
Наш конвейер:
- Нормализует текст в логический порядок.
- Выполняет NER в этом порядке.
- Сопоставляет позиции сущностей обратно с визуальным порядком.
Мы удаляем прикреплённые префиксы до NER и восстанавливаем их после.
"محمد" — только имя
"لمحمد" — «для Мухаммада» (с префиксом)
Смешение кодов
Реальные документы часто смешивают языки в одной строке.
"El meeting con John es at 3pm"
"我今天跟John去shopping"
Наш конвейер разбивает текст по языку. Запускает нужную модель для каждой части. Затем объединяет результаты с сопоставлением позиций.
Внутренние бенчмарки
Результаты внутренних тестов на многоязычных данных:
| Сценарий | F1 |
|---|---|
| Только английский | 91% |
| Только немецкий | 88% |
| Только арабский | 79% |
| Только китайский | 81% |
| Английский + арабский | 83% |
| Английский + китайский | 84% |
| Английский + немецкий | 89% |
Примечания по настройке
Настольное приложение автоматически определяет язык для каждого документа. Для многоязычных файлов оно обрабатывает каждый сегмент с помощью нужной модели. Ручных действий не требуется.
Укажите язык в API, если он вам известен:
{
"text": "محمد بن عبد الله",
"language": "ar"
}
Используйте автоопределение, если нет:
{
"text": "محمد بن عبد الله",
"language": "auto"
}
Пользовательские шаблоны должны учитывать локальные цифры:
# Табельный номер (латинские цифры)
EMP-[0-9]{6}
# Табельный номер (включает арабско-индийские цифры)
موظف-[٠-٩0-9]{6}
Полный список сущностей — на странице /entities. Настройка API — на странице функций API. Наше руководство по соответствию GDPR охватывает влияние пробелов в обнаружении на законодательство о защите данных.
anonym.legal использует трёхуровневый стек NER — spaCy, Stanza и XLM-RoBERTa — для охвата 48 языков с единообразным обнаружением PII.