🚀 瑞典語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)。
要創建一個可以運行示例的環境,請在你選擇的操作系統的終端中運行以下命令:
💻 使用示例
基礎用法
瑞典語基礎BERT模型
這是一個在多種來源數據上訓練的標準瑞典語BERT基礎模型,詞彙量約為5萬。使用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')
針對瑞典語命名實體識別微調的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加載ALBERT基礎模型是最簡單的方式:
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')
❤️ 致謝
- 在針對命名實體識別微調BERT時,使用了斯德哥爾摩大學、于默奧大學和哥德堡大學瑞典語語料庫的資源。
- 模型預訓練部分在KBLab內部完成,部分(針對無有效版權的材料)在谷歌TensorFlow研究雲(TFRC)的Cloud TPU支持下完成。
- 模型由Huggingface託管在S3上 🤗