模型:
dkleczek/bert-base-polish-uncased-v1
波尔贝特 - 波兰语BERT语言模型来了!现在有大小写两个变体可供下载和使用,都可通过HuggingFace transformers库下载和使用。我建议使用大小写模型,关于差异和基准结果的更多信息请参见下文。
下面是以及通过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通过 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数据集的过采样及其与某些任务中的数据的相似性。所有这些基准任务都是序列分类任务,因此在这里大小写模型的相对优势不太明显。
用于训练模型的数据存在偏见。它可能反映了与性别、种族等有关的刻板印象。在使用模型进行下游任务时,请谨慎考虑这些偏见并加以缓解。
Darek Kłeczek - 在Twitter上联系我 @dk21