该模型是基于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种语言的文本序列。训练集包含70k个样本,验证集和测试集各10k个。测试集上的平均准确率为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)或者可以分别进行 tokenizer 和模型的处理:
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)
# Map raw predictions to languages
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 notebook。
训练过程中使用了以下超参数:
以下是语言识别数据集 valid 分割的验证结果总结。
| 训练损失 | 轮次 | 步数 | 验证损失 | 准确率 | F1 分数 |
|---|---|---|---|---|---|
| 0.2492 | 1.0 | 1094 | 0.0149 | 0.9969 | 0.9969 |
| 0.0101 | 2.0 | 2188 | 0.0103 | 0.9977 | 0.9977 |
简而言之,它在验证集上取得了以下结果: