模型:

dkleczek/bert-base-polish-uncased-v1

英文

Polbert - Polish BERT

波尔贝特 - 波兰语BERT语言模型来了!现在有大小写两个变体可供下载和使用,都可通过HuggingFace transformers库下载和使用。我建议使用大小写模型,关于差异和基准结果的更多信息请参见下文。

大小写变体

  • 我最初训练了小写模型,具体语料库和训练细节请参见下文。在发布小写模型后,我发现了一些问题:
    • 对BERT分词器进行小写转换时,一些波兰字符和重音没有被正确分词。这对序列分类影响不大,但可能会对标记分类任务产生重大影响。
    • 我注意到在Open Subtitles数据集中存在许多重复记录,该数据集占据了训练语料库的主导地位。
    • 我没有使用整词掩码。
  • 大写模型在以下方面改进了小写模型:
    • 所有的波兰字符和重音现在都应该被正确分词。
    • 我从Open Subtitles数据集中删除了重复记录。语料库规模较小,但更加平衡。
    • 模型使用了整词掩码。

预训练语料库

下面是以及通过wc命令(计算行数、单词数和字符数)得到的预训练语料库列表。这些语料库使用srxsegmenter(请参见参考文献)分割为句子,并使用HuggingFace BERT Tokenizer进行标记化。

小写

Tables Lines Words Characters
1233321 236635408 1431199601 7628097730
1234321 8470950 176670885 1163505275
1235321 9799859 121154785 938896963
1236321 8014206 132067986 1015849191
Total 262920423 1861093257 10746349159

大写

Tables Lines Words Characters
1237321 41998942 213590656 1424873235
1234321 8470950 176670885 1163505275
1235321 9799859 121154785 938896963
1236321 8014206 132067986 1015849191
Total 68283960 646479197 4543124667

预训练细节

小写

  • Polbert使用了Google BERT的GitHub库中提供的代码进行训练( https://github.com/google-research/bert )。
  • 目前发布的模型遵循了bert-base-uncased模型架构(12层,768隐藏单元,12个头部,110M参数)。
  • 训练设置:总共训练100万个步骤:
    • 100,000个步骤 - 128个序列长度,批大小为512,学习率为1e-4(前10,000个步骤进行预热)。
    • 800,000个步骤 - 128个序列长度,批大小为512,学习率为5e-5。
    • 100,000个步骤 - 512个序列长度,批大小为256,学习率为2e-5。
  • 模型是在单个Google Cloud TPU v3-8上训练的。

大写

  • 与小写模型相同的方法,但有以下区别:
    • 整词掩码。
  • 训练设置:
    • 100,000个步骤 - 128个序列长度,批大小为2048,学习率为1e-4(前10,000个步骤进行预热)。
    • 100,000个步骤 - 128个序列长度,批大小为2048,学习率为5e-5。
    • 100,000个步骤 - 512个序列长度,批大小为256,学习率为2e-5。

用法

Polbert通过 HuggingFace Transformers library 发布。

有关使用语言模型的示例,请参阅此笔记本文件。

小写

from transformers import *
model = BertForMaskedLM.from_pretrained("dkleczek/bert-base-polish-uncased-v1")
tokenizer = BertTokenizer.from_pretrained("dkleczek/bert-base-polish-uncased-v1")
nlp = pipeline('fill-mask', model=model, tokenizer=tokenizer)
for pred in nlp(f"Adam Mickiewicz wielkim polskim {nlp.tokenizer.mask_token} był."):
  print(pred)
# Output:
# {'sequence': '[CLS] adam mickiewicz wielkim polskim poeta był. [SEP]', 'score': 0.47196975350379944, 'token': 26596}
# {'sequence': '[CLS] adam mickiewicz wielkim polskim bohaterem był. [SEP]', 'score': 0.09127858281135559, 'token': 10953}
# {'sequence': '[CLS] adam mickiewicz wielkim polskim człowiekiem był. [SEP]', 'score': 0.0647173821926117, 'token': 5182}
# {'sequence': '[CLS] adam mickiewicz wielkim polskim pisarzem był. [SEP]', 'score': 0.05232388526201248, 'token': 24293}
# {'sequence': '[CLS] adam mickiewicz wielkim polskim politykiem był. [SEP]', 'score': 0.04554257541894913, 'token': 44095}

大写

model = BertForMaskedLM.from_pretrained("dkleczek/bert-base-polish-cased-v1")
tokenizer = BertTokenizer.from_pretrained("dkleczek/bert-base-polish-cased-v1")
nlp = pipeline('fill-mask', model=model, tokenizer=tokenizer)
for pred in nlp(f"Adam Mickiewicz wielkim polskim {nlp.tokenizer.mask_token} był."):
  print(pred)
# Output:
# {'sequence': '[CLS] Adam Mickiewicz wielkim polskim pisarzem był. [SEP]', 'score': 0.5391148328781128, 'token': 37120}
# {'sequence': '[CLS] Adam Mickiewicz wielkim polskim człowiekiem był. [SEP]', 'score': 0.11683262139558792, 'token': 6810}
# {'sequence': '[CLS] Adam Mickiewicz wielkim polskim bohaterem był. [SEP]', 'score': 0.06021466106176376, 'token': 17709}
# {'sequence': '[CLS] Adam Mickiewicz wielkim polskim mistrzem był. [SEP]', 'score': 0.051870670169591904, 'token': 14652}
# {'sequence': '[CLS] Adam Mickiewicz wielkim polskim artystą był. [SEP]', 'score': 0.031787533313035965, 'token': 35680}

有关Polbert在下游任务中的示例用法,请参见下一部分。

评估结果

感谢Allegro,我们现在拥有 KLEJ benchmark ,这是一组用于波兰语理解的九个评估任务。以下结果是通过运行标准的评估脚本(没有任何技巧!)利用Polbert的大小写变体获得的。

Model Average NKJP-NER CDSC-E CDSC-R CBD PolEmo2.0-IN PolEmo2.0-OUT DYK PSC AR
Polbert cased 81.7 93.6 93.4 93.8 52.7 87.4 71.1 59.1 98.6 85.2
Polbert uncased 81.4 90.1 93.9 93.5 55.0 88.1 68.8 59.4 98.8 85.4

注意,在某些任务中,小写模型表现比大写模型好?我猜这是因为Open Subtitles数据集的过采样及其与某些任务中的数据的相似性。所有这些基准任务都是序列分类任务,因此在这里大小写模型的相对优势不太明显。

偏见

用于训练模型的数据存在偏见。它可能反映了与性别、种族等有关的刻板印象。在使用模型进行下游任务时,请谨慎考虑这些偏见并加以缓解。

致谢

  • 我要向Google( TensorFlow Research Cloud (TFRC) )表示感谢,他们提供了免费的TPU配额 - 谢谢!
  • 还要感谢Timo Möller( deepset )从Training German BERT模型的经验中分享的技巧和脚本。
  • 感谢Allegro发布了KLEJ基准测试,特别感谢Piotr Rybak帮助评估并指出了一些标记化问题。
  • 最后,感谢Rachel Thomas、Jeremy Howard和Sylvain Gugger( fastai )的NLP和深度学习课程!

作者

Darek Kłeczek - 在Twitter上联系我 @dk21

参考文献