🚀 瑞典語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模型。
所有模型都區分大小寫,並使用全詞掩碼進行訓練。
📦 文件
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模型
這是一個在多種來源數據上訓練的瑞典語標準BERT基礎模型,詞彙量約為50k。使用Huggingface Transformers,可以在Python中按如下方式加載模型:
from transformers import AutoModel,AutoTokenizer
tok = AutoTokenizer.from_pretrained('KB/bert-base-swedish-cased')
model = AutoModel.from_pretrained('KB/bert-base-swedish-cased')
針對瑞典語NER微調的BERT基礎模型
該模型在SUC 3.0數據集上進行了微調。使用Huggingface管道可以輕鬆實例化該模型。對於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'} ]
瑞典語基礎ALBERT模型
同樣,使用Huggingface Transformers是加載該模型最簡單的方法:
from transformers import AutoModel,AutoTokenizer
tok = AutoTokenizer.from_pretrained('KB/albert-base-swedish-cased-alpha'),
model = AutoModel.from_pretrained('KB/albert-base-swedish-cased-alpha')
🙏 致謝
- 在針對NER微調BERT模型時,使用了斯德哥爾摩大學、于默奧大學和哥德堡大學瑞典語語料庫的資源。
- 模型的預訓練部分在KBLab內部完成,部分(針對無有效版權的材料)在谷歌TensorFlow研究雲(TFRC)的Cloud TPU支持下完成。
- 模型由Huggingface託管在S3上。