语言:
- 多语言
- 阿拉伯语 (ar)
- 保加利亚语 (bg)
- 德语 (de)
- 现代希腊语 (el)
- 英语 (en)
- 西班牙语 (es)
- 法语 (fr)
- 印地语 (hi)
- 意大利语 (it)
- 日语 (ja)
- 荷兰语 (nl)
- 波兰语 (pl)
- 葡萄牙语 (pt)
- 俄语 (ru)
- 斯瓦希里语 (sw)
- 泰语 (th)
- 土耳其语 (tr)
- 乌尔都语 (ur)
- 越南语 (vi)
- 中文 (zh)
许可证: mit
标签:
- 训练生成
数据集: papluca/language-identification
评估指标:
- 准确率
- F1分数
基础模型: xlm-roberta-base
模型索引:
- 名称: xlm-roberta-base-language-detection
结果: []
xlm-roberta-base-language-detection
该模型是基于xlm-roberta-base在语言识别数据集上微调后的版本。
模型描述
此模型是一个带有分类头(即在池化输出之上的线性层)的XLM-RoBERTa变换器模型。更多信息请参考xlm-roberta-base模型卡片或Conneau等人的论文《大规模无监督跨语言表示学习》。
预期用途与限制
您可以直接将此模型用作语言检测器,即用于序列分类任务。目前,它支持以下20种语言:
阿拉伯语 (ar)、保加利亚语 (bg)、德语 (de)、现代希腊语 (el)、英语 (en)、西班牙语 (es)、法语 (fr)、印地语 (hi)、意大利语 (it)、日语 (ja)、荷兰语 (nl)、波兰语 (pl)、葡萄牙语 (pt)、俄语 (ru)、斯瓦希里语 (sw)、泰语 (th)、土耳其语 (tr)、乌尔都语 (ur)、越南语 (vi)和中文 (zh)
训练与评估数据
该模型在语言识别数据集上进行了微调,该数据集包含20种语言的文本序列。训练集包含7万个样本,验证集和测试集各包含1万个样本。测试集上的平均准确率为99.6%(这与测试集完美平衡的平均宏/加权F1分数一致)。更详细的评估如下表所示。
语言 |
精确率 |
召回率 |
F1分数 |
支持数 |
ar |
0.998 |
0.996 |
0.997 |
500 |
bg |
0.998 |
0.964 |
0.981 |
500 |
de |
0.998 |
0.996 |
0.997 |
500 |
el |
0.996 |
1.000 |
0.998 |
500 |
en |
1.000 |
1.000 |
1.000 |
500 |
es |
0.967 |
1.000 |
0.983 |
500 |
fr |
1.000 |
1.000 |
1.000 |
500 |
hi |
0.994 |
0.992 |
0.993 |
500 |
it |
1.000 |
0.992 |
0.996 |
500 |
ja |
0.996 |
0.996 |
0.996 |
500 |
nl |
1.000 |
1.000 |
1.000 |
500 |
pl |
1.000 |
1.000 |
1.000 |
500 |
pt |
0.988 |
1.000 |
0.994 |
500 |
ru |
1.000 |
0.994 |
0.997 |
500 |
sw |
1.000 |
1.000 |
1.000 |
500 |
th |
1.000 |
0.998 |
0.999 |
500 |
tr |
0.994 |
0.992 |
0.993 |
500 |
ur |
1.000 |
1.000 |
1.000 |
500 |
vi |
0.992 |
1.000 |
0.996 |
500 |
zh |
1.000 |
1.000 |
1.000 |
500 |
基准测试
作为与xlm-roberta-base-language-detection
对比的基准,我们使用了Python的langid库。由于它预训练了97种语言,我们使用了其.set_languages()
方法将语言集限制为我们的20种语言。langid在测试集上的平均准确率为98.5%。更多细节如下表所示。
语言 |
精确率 |
召回率 |
F1分数 |
支持数 |
ar |
0.990 |
0.970 |
0.980 |
500 |
bg |
0.998 |
0.964 |
0.981 |
500 |
de |
0.992 |
0.944 |
0.967 |
500 |
el |
1.000 |
0.998 |
0.999 |
500 |
en |
1.000 |
1.000 |
1.000 |
500 |
es |
1.000 |
0.968 |
0.984 |
500 |
fr |
0.996 |
1.000 |
0.998 |
500 |
hi |
0.949 |
0.976 |
0.963 |
500 |
it |
0.990 |
0.980 |
0.985 |
500 |
ja |
0.927 |
0.988 |
0.956 |
500 |
nl |
0.980 |
1.000 |
0.990 |
500 |
pl |
0.986 |
0.996 |
0.991 |
500 |
pt |
0.950 |
0.996 |
0.973 |
500 |
ru |
0.996 |
0.974 |
0.985 |
500 |
sw |
1.000 |
1.000 |
1.000 |
500 |
th |
1.000 |
0.996 |
0.998 |
500 |
tr |
0.990 |
0.968 |
0.979 |
500 |
ur |
0.998 |
0.996 |
0.997 |
500 |
vi |
0.971 |
0.990 |
0.980 |
500 |
zh |
1.000 |
1.000 |
1.000 |
500 |
如何开始使用该模型
最简单的方式是通过高级pipeline
API使用该模型:
from transformers import pipeline
text = [
"Brevity is the soul of wit.",
"Amor, ch'a nullo amato amar perdona."
]
model_ckpt = "papluca/xlm-roberta-base-language-detection"
pipe = pipeline("text-classification", model=model_ckpt)
pipe(text, top_k=1, truncation=True)
或者可以单独使用分词器和模型:
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer
text = [
"Brevity is the soul of wit.",
"Amor, ch'a nullo amato amar perdona."
]
model_ckpt = "papluca/xlm-roberta-base-language-detection"
tokenizer = AutoTokenizer.from_pretrained(model_ckpt)
model = AutoModelForSequenceClassification.from_pretrained(model_ckpt)
inputs = tokenizer(text, padding=True, truncation=True, return_tensors="pt")
with torch.no_grad():
logits = model(**inputs).logits
preds = torch.softmax(logits, dim=-1)
id2lang = model.config.id2label
vals, idxs = torch.max(preds, dim=1)
{id2lang[k.item()]: v.item() for k, v in zip(idxs, vals)}
训练过程
微调是通过Trainer
API完成的。这里是包含训练代码的Colab笔记本。
训练超参数
训练过程中使用了以下超参数:
- 学习率: 2e-05
- 训练批次大小: 64
- 评估批次大小: 128
- 随机种子: 42
- 优化器: Adam,betas=(0.9,0.999),epsilon=1e-08
- 学习率调度器类型: 线性
- 训练轮数: 2
- 混合精度训练: Native AMP
训练结果
在语言识别数据集的valid
分割上的验证结果总结如下。
训练损失 |
轮数 |
步数 |
验证损失 |
准确率 |
F1分数 |
0.2492 |
1.0 |
1094 |
0.0149 |
0.9969 |
0.9969 |
0.0101 |
2.0 |
2188 |
0.0103 |
0.9977 |
0.9977 |
简而言之,在验证集上取得了以下结果:
- 损失: 0.0101
- 准确率: 0.9977
- F1分数: 0.9977
框架版本
- Transformers 4.12.5
- Pytorch 1.10.0+cu111
- Datasets 1.15.1
- Tokenizers 0.10.3