英文

Bangla BERT 基础版

一段艰难的旅程。这里是我们的Bangla-Bert!它现在可以在Huggingface模型库中使用。

Bangla-Bert-Base 是使用掩码语言建模描述的孟加拉语预训练语言模型,其GitHub地址为 repository

预训练语料细节

语料库来源于两个主要的来源:

在下载这些语料库后,我们将其预处理为Bert格式,即每行一句话,并为新文档添加额外的换行符。

sentence 1
sentence 2

sentence 1
sentence 2

构建词汇表

我们使用 BNLP 包来训练孟加拉语的句子分词模型,词汇大小为102025。我们将输出的词汇文件预处理为Bert格式。我们最终的词汇文件可在 https://github.com/sagorbrur/bangla-bert huggingface 模型库中获得。

训练细节

  • 使用Google BERT的GitHub仓库中提供的代码进行Bangla-Bert的训练( https://github.com/google-research/bert
  • 当前发布的模型遵循bert-base-uncased模型架构(12层,768隐藏层,12个头,110M参数)
  • 总训练步数:100万
  • 模型在一台Google Cloud GPU上进行训练

评估结果

语言模型评估结果

在训练100万步后,以下是评估结果。

global_step = 1000000
loss = 2.2406516
masked_lm_accuracy = 0.60641736
masked_lm_loss = 2.201459
next_sentence_accuracy = 0.98625
next_sentence_loss = 0.040997364
perplexity = numpy.exp(2.2406516) = 9.393331287442784
Loss for final step: 2.426227

下游任务评估结果

  • 在孟加拉分类基准数据集上进行评估

非常感谢 Nick Doiron 提供分类任务的评估结果。他在分类任务中使用了 Bengali Classification Benchmark 数据集。与Nick的 Bengali electra 和多语言BERT相比,Bangla BERT基础版取得了最先进的结果。这里是 evaluation script

Model Sentiment Analysis Hate Speech Task News Topic Task Average
mBERT 68.15 52.32 72.27 64.25
Bengali Electra 69.19 44.84 82.33 65.45
Bangla BERT Base 70.37 71.83 89.19 77.13

我们使用 Wikiann 孟加拉NER数据集以及另外三个基准模型(mBERT,XLM-R,Indic-BERT)对Bangla BERT基础版进行了评估。在训练这些模型5个时期后,Bangla BERT基础版获得了第三名的成绩,mBERT获得第一名,XLM-R获得第二名。

Base Pre-trained Model F1 Score Accuracy
12320321 97.11 97.68
12321321 96.22 97.03
12322321 92.66 94.74
Bangla-BERT-Base 95.57 97.49

所有四个模型都是使用 transformers-token-classification 笔记本进行训练。您可以在 here 上找到所有模型的评估结果。

此外,您还可以查看下面的论文列表。他们在自己的数据集上使用了这个模型。

注:如果您将此模型用于任何自然语言处理任务,请与我们分享评估结果。我们将在此处添加。

限制和偏见

如何使用

孟加拉BERT分词器

from transformers import AutoTokenizer, AutoModel

bnbert_tokenizer = AutoTokenizer.from_pretrained("sagorsarker/bangla-bert-base")
text = "আমি বাংলায় গান গাই।"
bnbert_tokenizer.tokenize(text)
# ['আমি', 'বাংলা', '##য', 'গান', 'গাই', '।']

掩码生成

您可以直接使用此模型进行掩码语言建模的管道。

from transformers import BertForMaskedLM, BertTokenizer, pipeline

model = BertForMaskedLM.from_pretrained("sagorsarker/bangla-bert-base")
tokenizer = BertTokenizer.from_pretrained("sagorsarker/bangla-bert-base")
nlp = pipeline('fill-mask', model=model, tokenizer=tokenizer)
for pred in nlp(f"আমি বাংলায় {nlp.tokenizer.mask_token} গাই।"):
  print(pred)

# {'sequence': '[CLS] আমি বাংলায গান গাই । [SEP]', 'score': 0.13404667377471924, 'token': 2552, 'token_str': 'গান'}

作者

Sagor Sarker

参考

引用

如果您发现此模型有用,请引用。

@misc{Sagor_2020,
  title   = {BanglaBERT: Bengali Mask Language Model for Bengali Language Understading},
  author  = {Sagor Sarker},
  year    = {2020},
  url    = {https://github.com/sagorbrur/bangla-bert}
}