模型:
KBLab/bert-base-swedish-cased
瑞典国家图书馆/KBLab发布了基于BERT和ALBERT的三个预训练语言模型。这些模型使用来自各种来源(图书、新闻、政府出版物、瑞典维基百科和互联网论坛)的大约15-20GB文本(200M个句子,3000M个标记)进行训练,旨在为瑞典文本提供代表性的BERT模型。稍后将发布更完整的描述。
目前提供以下三个模型:
所有模型都是大小写敏感的,且采用了整个单词掩码。
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基础模型。词汇表大小约为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')
该模型经过SUC 3.0数据集微调。使用Huggingface pipeline可以轻松实例化该模型。对于Transformer<2.4.1,似乎必须单独加载分词器以禁用输入字符串的小写处理:
from transformers import pipeline nlp = pipeline('ner', model='KB/bert-base-swedish-cased-ner', tokenizer='KB/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'} ]
最简单的方法是再次使用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')