다국어 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, "write" 어근)
→ كاتب (작가), كتاب (책), مكتبة (도서관), يكتب (그는 쓴다)
하나의 아랍어 어근은 수십 개의 관련 단어를 생성합니다. NER 모델은 이 파생 시스템을 이해해야 합니다.
3. 이름 규칙
영어 이름: 이름 성
John Smith, Mary Johnson
아랍어 이름: 여러 구성 요소
محمد بن عبد الله بن عبد المطلب
(Muhammad son-of Abdullah son-of Abdul-Muttalib)
중국어 이름: 성이 먼저 나오며, 보통 2-3자입니다.
张伟 (Zhang Wei) - 2자
欧阳修 (Ouyang Xiu) - 3자
4. 스크립트 방향
영어: 왼쪽에서 오른쪽으로 (LTR) 아랍어/히브리어: 오른쪽에서 왼쪽으로 (RTL) 혼합 텍스트: 양방향 (BiDi) - 극도로 복잡합니다.
영어 이름이 아랍어 텍스트에 나타날 때:
التقيت بـ John Smith في المؤتمر
(I met John Smith at the conference)
렌더링 순서, 논리적 순서 및 표시 순서가 모두 다릅니다.
언어별 정확도
실제 NER 성능은 극적으로 다릅니다:
| 언어 | 스크립트 | F1-점수 범위 | 도전 수준 |
|---|---|---|---|
| 영어 | 라틴 | 85-92% | 낮음 |
| 독일어 | 라틴 | 82-88% | 낮음 |
| 프랑스어 | 라틴 | 80-87% | 낮음 |
| 스페인어 | 라틴 | 81-86% | 낮음 |
| 러시아어 | 키릴 | 75-83% | 중간 |
| 아랍어 | 아랍어 | 55-75% | 높음 |
| 중국어 | 한자 | 60-78% | 높음 |
| 일본어 | 혼합 | 65-80% | 높음 |
| 태국어 | 태국어 | 50-70% | 매우 높음 |
| 힌디어 | 데바나가리 | 60-75% | 높음 |
복잡한 형태론, 비라틴 스크립트 또는 단어 경계가 없는 언어는 지속적으로 저조한 성과를 보입니다.
anonym.legal의 3단계 접근법
우리는 세 가지 전문화된 단계로 다국어 NER을 해결합니다:
1단계: spaCy (25개 언어)
고급 리소스 언어에 대한 좋은 모델:
- 영어, 독일어, 프랑스어, 스페인어, 이탈리아어, 포르투갈어
- 네덜란드어, 폴란드어, 러시아어, 그리스어
- 그리고 신뢰할 수 있는 정확도를 가진 15개 언어
2단계: Stanza (7개 언어)
복잡한 형태론을 가진 언어:
- 아랍어 (어근-패턴 형태론)
- 중국어 (단어 분할 필요)
- 일본어 (여러 스크립트)
- 한국어 (교착어)
- 그리고 3개 언어
3단계: XLM-RoBERTa (16개 언어)
전용 모델이 없는 저급 리소스 언어:
- 태국어, 베트남어, 인도네시아어
- 힌디어, 벵골어, 타밀어
- 히브리어, 터키어, 페르시아어
- 그리고 더 많은 언어
작동 방식
언어 감지가 있는 입력 텍스트
↓
[언어 라우터]
↓
┌───────┴───────┐
↓ ↓
고급 리소스 복잡/저급 리소스
(spaCy) (Stanza/XLM-RoBERTa)
↓ ↓
└───────┬───────┘
↓
[구조화된 데이터에 대한 정규 표현식 오버레이]
↓
[신뢰도 병합]
↓
최종 개체
정규 표현식 오버레이
일부 패턴은 언어에 독립적입니다:
- 이메일 주소:
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} - 신용 카드:
\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4} - 전화번호: 국가별 다양한 패턴
우리는 언어에 관계없이 구조화된 데이터에 대해 먼저 정규 표현식을 적용합니다.
RTL 스크립트 처리
오른쪽에서 왼쪽으로 읽는 언어는 특별한 처리가 필요합니다:
양방향 텍스트 알고리즘
아랍어에 영어가 포함될 때:
비주얼: المؤتمر في John Smith بـ التقيت
논리적: التقيت بـ John Smith في المؤتمر
우리의 처리:
- 논리적 순서로 정규화
- 논리적 순서에서 NER 실행
- 개체 위치를 시각적 순서로 다시 매핑
- 모든 렌더링에 대해 일관된 위치 반환
개체 경계 감지
아랍어 개체 경계는 복잡합니다:
"محمد" - 단지 이름
"لمحمد" - "to Muhammad" (부착된 전치사)
"ومحمد" - "and Muhammad" (부착된 접속사)
우리는 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"
}
데스크탑 앱 사용자에게
앱은 문서별로 언어를 자동 감지합니다. 혼합 언어 파일의 경우 각 세그먼트를 적절하게 처리합니다.
사용자 정의 개체 유형에 대해
사용자 정의 패턴은 스크립트를 고려해야 합니다:
# 영어 직원 ID
EMP-[0-9]{6}
# 아랍어 직원 ID (아랍 숫자 포함)
موظف-[٠-٩0-9]{6}
결론
영어로 훈련된 NER 모델은 비영어 텍스트에서 실패하는 이유는 언어가 근본적으로 다르기 때문입니다:
- 단어 경계 (또는 그 부족)
- 형태론적 복잡성
- 스크립트 방향
- 이름 규칙
효과적인 다국어 PII 탐지를 위해서는:
- 복잡한 스크립트에 대한 언어별 모델
- 구조화된 데이터에 대한 정규 표현식 패턴
- 적절한 RTL/BiDi 처리
- 코드 스위칭 지원
anonym.legal은 48개 언어를 지원하며, 우리의 3단계 접근법을 통해 모든 언어에서 일관된 정확도를 달성합니다.
직접 시도해 보세요:
출처: