多语言命名实体识别挑战
在英语上训练的命名实体识别(NER)模型取得了令人印象深刻的结果——在标准基准上F1分数达到85-92%。将这些模型应用于阿拉伯语或中文时?准确率通常下降到50-70%。
对于个人身份信息检测,这一差距至关重要。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
阿拉伯语名字: 多个组成部分
محمد بن عبد الله بن عبد المطلب
(Muhammad son-of Abdullah son-of Abdul-Muttalib)
中文名字: 姓在前,通常总共2-3个字符
张伟 (Zhang Wei) - 2个字符
欧阳修 (Ouyang Xiu) - 3个字符
4. 书写方向
英语: 从左到右(LTR) 阿拉伯语/希伯来语: 从右到左(RTL) 混合文本: 双向(BiDi) - 极其复杂
当一个英语名字出现在阿拉伯语文本中时:
التقيت بـ John Smith في المؤتمر
(我在会议上遇见了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问题:
第一层:spaCy(25种语言)
针对资源丰富的语言和良好的模型:
- 英语、德语、法语、西班牙语、意大利语、葡萄牙语
- 荷兰语、波兰语、俄语、希腊语
- 还有15种准确性可靠的语言
第二层:Stanza(7种语言)
针对具有复杂形态的语言:
- 阿拉伯语(根-模式形态学)
- 中文(需要分词)
- 日语(多种书写系统)
- 韩语(粘着语)
- 还有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
- 将实体位置映射回视觉顺序
- 返回任何渲染的一致位置
实体边界检测
阿拉伯语实体边界复杂:
"محمد" - 仅是名字
"لمحمد" - "给穆罕默德"(附加介词)
"ومحمد" - "和穆罕默德"(附加连词)
我们在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模型失败是因为语言在以下方面根本不同:
- 单词边界(或缺乏)
- 形态复杂性
- 书写方向
- 名字惯例
有效的多语言个人身份信息检测需要:
- 针对复杂书写系统的特定语言模型
- 用于结构化数据的正则表达式模式
- 适当的RTL/BiDi处理
- 代码切换支持
anonym.legal通过我们的三层方法支持48种语言,在所有语言中实现一致的准确性。
亲自试试:
来源: