Polbert - 波兰语BERT
波兰语版本的BERT语言模型现已发布!提供两种变体:区分大小写版和不区分大小写版,均可通过HuggingFace transformers库下载使用。推荐使用区分大小写模型,下文将详述差异与基准测试结果。

区分大小写与不区分大小写版本
- 初始训练的是不区分大小写模型,语料库与训练细节见下文。发布后发现以下问题:
- 波兰语特殊字符和重音符号经BERT分词器小写处理后存在分词错误。这对序列分类影响较小,但会显著影响标记分类任务。
- Open Subtitles数据集中存在大量重复内容,该数据集在训练语料中占比过高。
- 未使用全词掩码技术。
- 区分大小写模型的改进:
- 确保所有波兰语字符和重音符号正确分词。
- 移除Open Subtitles数据集中的重复内容。语料库规模减小但更均衡。
- 采用全词掩码技术训练。
预训练语料库
下表列出使用的语料库及wc
命令统计结果(行数、词数、字符数)。这些语料经srxsegmenter分句(参见参考文献)后,通过HuggingFace BERT分词器进行拼接和分词。
不区分大小写版
区分大小写版
预训练细节
不区分大小写版
- 使用Google BERT官方代码库训练(https://github.com/google-research/bert)
- 当前发布模型遵循bert-base-uncased架构(12层,768隐藏单元,12头注意力,1.1亿参数)
- 训练配置:总训练步数100万次
- 前10万步:序列长度128,批次大小512,学习率1e-4(预热1万步)
- 中间80万步:序列长度128,批次大小512,学习率5e-5
- 最后10万步:序列长度512,批次大小256,学习率2e-5
- 使用单块Google Cloud TPU v3-8训练
区分大小写版
- 基础配置与不区分大小写版相同,差异点:
- 训练配置:
- 前10万步:序列长度128,批次大小2048,学习率1e-4(预热1万步)
- 中间10万步:序列长度128,批次大小2048,学习率5e-5
- 最后10万步:序列长度512,批次大小256,学习率2e-5
使用方法
通过HuggingFace Transformers库发布。
语言模型使用示例参见此笔记本文件。
不区分大小写版
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)
区分大小写版
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)
下一节展示Polbert在下游任务中的应用示例。
性能评估
感谢Allegro提供的KLEJ基准测试,包含九项波兰语理解评估任务。以下结果为标准评估脚本运行结果(未使用特殊技巧),对比两个版本Polbert的表现。
模型 |
平均分 |
NKJP-NER |
CDSC-E |
CDSC-R |
CBD |
PolEmo2.0-IN |
PolEmo2.0-OUT |
DYK |
PSC |
AR |
Polbert区分大小写 |
81.7 |
93.6 |
93.4 |
93.8 |
52.7 |
87.4 |
71.1 |
59.1 |
98.6 |
85.2 |
Polbert不区分大小写 |
81.4 |
90.1 |
93.9 |
93.5 |
55.0 |
88.1 |
68.8 |
59.4 |
98.8 |
85.4 |
注意到不区分大小写模型在某些任务上表现更优?推测是由于Open Subtitles数据集过采样及其与部分任务数据的相似性。当前基准测试均为序列分类任务,因此区分大小写模型的优势未能充分体现。
偏差警示
训练数据存在固有偏差,可能反映性别、种族等方面的刻板印象。在下游任务应用中请注意识别并缓解这些偏差。
致谢
- 感谢Google TensorFlow研究云(TFRC)提供的免费TPU资源
- 感谢deepset的Timo Möller分享训练德语BERT的经验与脚本
- 特别感谢Allegro发布KLEJ基准测试,以及Piotr Rybak在评估和分词问题上的帮助
- 感谢fastai的Rachel Thomas、Jeremy Howard和Sylvain Gugger提供的NLP与深度学习课程
作者
Darek Kłeczek - 通过Twitter联系 @dk21
参考文献
- https://github.com/google-research/bert
- https://github.com/narusemotoki/srx_segmenter
- 波兰语句子分割SRX规则文件(作者Marcin Miłkowski):https://raw.githubusercontent.com/languagetool-org/languagetool/master/languagetool-core/src/main/resources/org/languagetool/resource/segment.srx
- KLEJ基准测试