模型:
dkleczek/bert-base-polish-cased-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 |
注意,小写模型在某些任务上的表现优于大小写模型?我猜这是因为开放字幕数据集的过采样及其与某些任务中的数据的相似性。所有这些基准任务都是序列分类,因此在这里大小写模型的相对优势不太明显。
用于训练模型的数据存在偏差。它可能反映了与性别、种族等有关的刻板印象。在使用模型进行下游任务时,请谨慎考虑这些偏见并予以缓解。
Darek Kłeczek-在Twitter上联系我 @dk21