模型:

KBLab/bert-base-swedish-cased-ner

英文

Swedish BERT 模型

瑞典国家图书馆 / KBLab发布了三个基于BERT和ALBERT的预训练语言模型。这些模型是根据各种来源(图书、新闻、政府出版物、瑞典维基百科和互联网论坛)的大约15-20GB的文本(2亿个句子,30亿个标记)进行训练的,旨在为瑞典文本提供代表性的BERT模型。稍后将发布更详细的描述。

目前可用以下三个模型:

  • bert-base-swedish-cased ( v1 ) - 使用与Google第一次发布的相同的超参数进行训练的BERT。
  • bert-base-swedish-cased-ner ( experimental ) - 在SUC 3.0上进行了命名实体识别(NER)的BERT微调。
  • albert-base-swedish-cased-alpha ( alpha ) - 对瑞典语的ALBERT的初步尝试。

所有模型都经过大小写处理,并使用整词遮罩进行训练。

文件

name files
bert-base-swedish-cased 1237321 , 1238321 , 1239321
bert-base-swedish-cased-ner 12310321 , 12311321 12312321
albert-base-swedish-cased-alpha 12313321 , 12314321 , 12315321

TensorFlow模型权重即将发布。

使用要求/安装说明

下面的示例需要使用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 Base Swedish

这是在各种来源上训练的标准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 pipeline,可以轻松实例化该模型。对于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')

致谢 ❤️

  • 在进行BERT用于NER的微调时,使用了斯德哥尔摩大学、乌梅奥大学和哥德堡大学瑞典语言银行的资源。
  • 模型的预训练部分是在KBLab内部完成的,同时在没有版权的材料上,还使用了Google的TensorFlow Research Cloud (TFRC)上的Cloud TPU的支持。
  • 模型由Huggingface ? 托管在S3上。