HuggingFace镜像/xlm-roberta-base-language-detection
模型介绍文件和版本分析
下载使用量0

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种语言的文本序列。训练集包含70k个样本,验证集和测试集各10k个。测试集上的平均准确率为99.6%(这与测试集完全平衡时的平均宏/加权F1分数相匹配)。下表提供了更详细的评估。

语言精确率召回率F1分数支持
ar0.9980.9960.997500
bg0.9980.9640.981500
de0.9980.9960.997500
el0.9961.0000.998500
en1.0001.0001.000500
es0.9671.0000.983500
fr1.0001.0001.000500
hi0.9940.9920.993500
it1.0000.9920.996500
ja0.9960.9960.996500
nl1.0001.0001.000500
pl1.0001.0001.000500
pt0.9881.0000.994500
ru1.0000.9940.997500
sw1.0001.0001.000500
th1.0000.9980.999500
tr0.9940.9920.993500
ur1.0001.0001.000500
vi0.9921.0000.996500
zh1.0001.0001.000500

基准测试

作为与xlm-roberta-base-language-detection进行比较的基准,我们使用了Python的langid库。由于它预训练了97种语言,我们使用了它的.set_languages()方法将语言集限制为我们的20种语言。langid在测试集上的平均准确率为98.5%。下表提供了更多细节。

语言精确率召回率F1分数支持
ar0.9900.9700.980500
bg0.9980.9640.981500
de0.9920.9440.967500
el1.0000.9980.999500
en1.0001.0001.000500
es1.0000.9680.984500
fr0.9961.0000.998500
hi0.9490.9760.963500
it0.9900.9800.985500
ja0.9270.9880.956500
nl0.9801.0000.990500
pl0.9860.9960.991500
pt0.9500.9960.973500
ru0.9960.9740.985500
sw1.0001.0001.000500
th1.0000.9960.998500
tr0.9900.9680.979500
ur0.9980.9960.997500
vi0.9710.9900.980500
zh1.0001.0001.000500

如何开始使用模型

使用该模型的最简单方法是通过高级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。

训练超参数

训练过程中使用了以下超参数:

  • learning_rate: 2e-05
  • train_batch_size: 64
  • eval_batch_size: 128
  • seed: 42
  • optimizer: Adam,betas=(0.9,0.999),epsilon=1e-08
  • lr_scheduler_type: linear
  • num_epochs: 2
  • mixed_precision_training: Native AMP

训练结果

以下是语言识别数据集 valid 分割的验证结果总结。

训练损失轮次步数验证损失准确率F1 分数
0.24921.010940.01490.99690.9969
0.01012.021880.01030.99770.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