🚀 瑞典语BERT模型
瑞典国家图书馆/KBLab发布了三个基于BERT和ALBERT的预训练语言模型。这些模型在约15 - 20GB来自各种来源(书籍、新闻、政府出版物、瑞典语维基百科和互联网论坛)的文本(2亿个句子、300亿个标记)上进行训练,旨在为瑞典语文本提供具有代表性的BERT模型。更完整的描述将在后续发布。
目前有以下三个模型可供使用:
- bert-base-swedish-cased (v1) - 一个使用与谷歌首次发布时相同超参数训练的BERT模型。
- bert-base-swedish-cased-ner (实验性) - 一个使用SUC 3.0数据集针对命名实体识别(NER)进行微调的BERT模型。
- albert-base-swedish-cased-alpha (alpha) - 瑞典语ALBERT模型的首次尝试。
所有模型均区分大小写,并使用全词掩码进行训练。
📦 安装指南
以下示例需要Huggingface Transformers 2.4.1和Pytorch 1.3.1或更高版本。对于Transformers < 2.4.0,必须手动实例化分词器,并将do_lower_case
标志参数设置为False
,将keep_accents
设置为True
(针对ALBERT)。
要创建一个可以运行示例的环境,请在你选择的操作系统的终端中运行以下命令:
# git clone https://github.com/Kungbib/swedish-bert-models
# cd swedish-bert-models
# python3 -m venv venv
# source venv/bin/activate
# pip install --upgrade pip
# pip install -r requirements.txt
💻 使用示例
基础用法
瑞典语标准BERT基础模型
这是一个在多种来源数据上训练的瑞典语标准BERT基础模型,词汇量约为50k。使用Huggingface Transformers,可以在Python中按如下方式加载模型:
from transformers import AutoModel,AutoTokenizer
tok = AutoTokenizer.from_pretrained('KBLab/bert-base-swedish-cased')
model = AutoModel.from_pretrained('KBLab/bert-base-swedish-cased')
针对瑞典语NER微调的BERT基础模型
该模型在SUC 3.0数据集上进行了微调。使用Huggingface管道可以轻松实例化该模型。对于Transformer < 2.4.1,似乎必须单独加载分词器以禁用输入字符串的小写转换:
from transformers import pipeline
nlp = pipeline('ner', model='KBLab/bert-base-swedish-cased-ner', tokenizer='KBLab/bert-base-swedish-cased-ner')
nlp('Idag släpper KB tre språkmodeller.')
运行上述Python代码应产生类似以下的结果。使用的实体类型包括:TME
表示时间,PRS
表示人名,LOC
表示地点,EVN
表示事件,ORG
表示组织。这些标签可能会发生变化。
[ { 'word': 'Idag', 'score': 0.9998126029968262, 'entity': 'TME' },
{ 'word': 'KB', 'score': 0.9814832210540771, 'entity': 'ORG' } ]
BERT分词器通常会将单词拆分为多个标记,子部分以##
开头,例如字符串Engelbert kör Volvo till Herrängens fotbollsklubb
会被分词为Engel ##bert kör Volvo till Herr ##ängens fotbolls ##klubb
。要将这些部分重新组合在一起,可以使用如下代码:
text = 'Engelbert tar Volvon till Tele2 Arena för att titta på Djurgården IF ' +\
'som spelar fotboll i VM klockan två på kvällen.'
l = []
for token in nlp(text):
if token['word'].startswith('##'):
l[-1]['word'] += token['word'][2:]
else:
l += [ token ]
print(l)
运行结果应该类似于以下内容(格式可能不太整齐):
[ { 'word': 'Engelbert', 'score': 0.99..., 'entity': 'PRS'},
{ 'word': 'Volvon', 'score': 0.99..., 'entity': 'OBJ'},
{ 'word': 'Tele2', 'score': 0.99..., 'entity': 'LOC'},
{ 'word': 'Arena', 'score': 0.99..., 'entity': 'LOC'},
{ 'word': 'Djurgården', 'score': 0.99..., 'entity': 'ORG'},
{ 'word': 'IF', 'score': 0.99..., 'entity': 'ORG'},
{ 'word': 'VM', 'score': 0.99..., 'entity': 'EVN'},
{ 'word': 'klockan', 'score': 0.99..., 'entity': 'TME'},
{ 'word': 'två', 'score': 0.99..., 'entity': 'TME'},
{ 'word': 'på', 'score': 0.99..., 'entity': 'TME'},
{ 'word': 'kvällen', 'score': 0.54..., 'entity': 'TME'} ]
瑞典语ALBERT基础模型
同样,使用Huggingface Transformers加载该模型的最简单方法如下:
from transformers import AutoModel,AutoTokenizer
tok = AutoTokenizer.from_pretrained('KBLab/albert-base-swedish-cased-alpha'),
model = AutoModel.from_pretrained('KBLab/albert-base-swedish-cased-alpha')
📚 详细文档
文件信息
TensorFlow模型权重将很快发布。
❤️ 致谢
- 在针对NER微调BERT模型时,使用了斯德哥尔摩大学、于默奥大学和哥德堡大学瑞典语语料库的资源。
- 模型预训练部分在KBLab内部完成,部分(针对无有效版权的材料)在谷歌TensorFlow研究云(TFRC)的Cloud TPU支持下完成。
- 模型由Huggingface托管在S3上 🤗