Проблема многоязычного NER
Модели распознавания именованных сущностей (NER), обученные на английском, показывают впечатляющие результаты — 85-92% F1 на стандартных тестах. Примените эти же модели к арабскому или китайскому? Точность часто падает до 50-70%.
Для обнаружения PII этот разрыв критичен. Уровень обнаружения в 70% означает, что 30% чувствительных данных остается незащищенным.
Почему английские модели не работают
1. Границы слов
Английский: Слова разделены пробелами.
"John Smith lives in New York"
→ ["John", "Smith", "lives", "in", "New", "York"]
Китайский: Нет границ слов вообще.
"张伟住在北京"
→ Требуется сегментация сначала: ["张伟", "住在", "北京"]
Арабский: Слова соединяются, и краткие гласные не пишутся.
"محمد يعيش في دبي"
→ Соединенный текст, справа налево, гласные опущены
Правила токенизации английского просто не применимы.
2. Морфологическая сложность
Английская морфология: Относительно простая
run → runs, running, ran
Арабская морфология: Чрезвычайно сложная (система корней и шаблонов)
كتب (k-t-b, "корень писать")
→ كاتب (писатель), كتاب (книга), مكتبة (библиотека), يكتب (он пишет)
Один арабский корень генерирует десятки связанных слов. Модели NER должны понимать эту систему деривации.
3. Конвенции имен
Английские имена: Имя Фамилия
John Smith, Mary Johnson
Арабские имена: Множество компонентов
محمد بن عبد الله بن عبد المطلب
(Мухаммад сын Абдуллы сын Абд аль-Муталиба)
Китайские имена: Фамилия первая, часто 2-3 символа в общем
张伟 (Чжан Вэй) - 2 символа
欧阳修 (Оуян Сю) - 3 символа
4. Направление письма
Английский: Слева направо (LTR) Арабский/Иврит: Справа налево (RTL) Смешанный текст: Двунаправленный (BiDi) - чрезвычайно сложный
Когда английское имя появляется в арабском тексте:
التقيت بـ John Smith في المؤتمر
(Я встретил Джона Смита на конференции)
Порядок рендеринга, логический порядок и порядок отображения все различаются.
Точность по языкам
Реальная производительность NER варьируется значительно:
| Язык | Скрипт | Диапазон F1-Оценки | Уровень сложности |
|---|---|---|---|
| Английский | Латиница | 85-92% | Низкий |
| Немецкий | Латиница | 82-88% | Низкий |
| Французский | Латиница | 80-87% | Низкий |
| Испанский | Латиница | 81-86% | Низкий |
| Русский | Кириллица | 75-83% | Средний |
| Арабский | Арабский | 55-75% | Высокий |
| Китайский | Хандзи | 60-78% | Высокий |
| Японский | Смешанный | 65-80% | Высокий |
| Тайский | Тайский | 50-70% | Очень высокий |
| Хинди | Деванагари | 60-75% | Высокий |
Языки со сложной морфологией, нелатинскими скриптами или отсутствием границ слов последовательно показывают низкие результаты.
Подход anonym.legal с тремя уровнями
Мы решаем многоязычное NER через три специализированных уровня:
Уровень 1: spaCy (25 языков)
Для языков с высоким ресурсом и хорошими моделями:
- Английский, Немецкий, Французский, Испанский, Итальянский, Португальский
- Нидерландский, Польский, Русский, Греческий
- И еще 15 с надежной точностью
Уровень 2: Stanza (7 языков)
Для языков со сложной морфологией:
- Арабский (морфология корней и шаблонов)
- Китайский (требуется сегментация слов)
- Японский (несколько скриптов)
- Корейский (агглютинативный)
- И еще 3
Уровень 3: XLM-RoBERTa (16 языков)
Для языков с низким ресурсом без специализированных моделей:
- Тайский, Вьетнамский, Индонезийский
- Хинди, Бенгальский, Тамильский
- Иврит, Турецкий, Персидский
- И другие
Как это работает
Входной текст с определением языка
↓
[Маршрутизатор языка]
↓
┌───────┴───────┐
↓ ↓
Языки с высоким ресурсом Сложные/Языки с низким ресурсом
(spaCy) (Stanza/XLM-RoBERTa)
↓ ↓
└───────┬───────┘
↓
[Накладка Regex для структурированных данных]
↓
[Объединение уверенности]
↓
Итоговые сущности
Накладка Regex
Некоторые шаблоны не зависят от языка:
- Адреса электронной почты:
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} - Кредитные карты:
\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4} - Номера телефонов: Различные шаблоны для каждой страны
Мы применяем regex в первую очередь для структурированных данных, независимо от языка.
Обработка RTL-скриптов
Языки справа налево требуют специальной обработки:
Алгоритм двунаправленного текста
Когда арабский содержит английский:
Визуально: المؤتمر في John Smith بـ التقيت
Логически: التقيت بـ John Smith في المؤتمر
Наша обработка:
- Нормализовать до логического порядка
- Запустить 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}
Заключение
Модели NER, обученные на английском, не работают с неанглийским текстом, потому что языки принципиально различаются в:
- Границах слов (или их отсутствии)
- Морфологической сложности
- Направлении письма
- Конвенциях имен
Эффективное многоязычное обнаружение PII требует:
- Языковых моделей для сложных скриптов
- Шаблонов regex для структурированных данных
- Правильной обработки RTL/BiDi
- Поддержки код-свитчинга
anonym.legal поддерживает 48 языков через наш подход с тремя уровнями, достигая стабильной точности во всех.
Попробуйте сами:
Источники: