🚀 スウェーデン語BERTモデル
スウェーデン国立図書館 / KBLabは、BERTとALBERTに基づく3つの事前学習済み言語モデルをリリースしています。これらのモデルは、様々なソース(書籍、ニュース、政府刊行物、スウェーデン語版ウィキペディア、インターネットフォーラム)から収集された約15 - 20GBのテキスト(2億文、300億トークン)で学習されており、スウェーデン語テキストに適した代表的なBERTモデルを提供することを目的としています。より詳細な説明は後日公開されます。
現在、以下の3つのモデルが利用可能です。
- bert-base-swedish-cased (v1) - Googleが最初に公開したものと同じハイパーパラメータで学習されたBERTモデル。
- bert-base-swedish-cased-ner (実験的) - SUC 3.0を使用してNER用にファインチューニングされたBERTモデル。
- albert-base-swedish-cased-alpha (アルファ版) - スウェーデン語用のALBERTモデルの最初の試み。
すべてのモデルは大文字小文字を区別し、単語全体のマスキングで学習されています。
🚀 クイックスタート
ファイル
TensorFlowのモデルウェイトは近日公開予定です。
インストール
以下のコマンドを実行して、サンプルコードを実行するための環境を作成します。
# 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
使用例
基本的な使用法
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ベースモデル
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ベースモデル
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')
謝辞 ❤️
- NER用にBERTをファインチューニングする際に、ストックホルム大学、ウメオ大学、ゴーテボリ大学のスウェーデン語銀行のリソースを使用しました。
- モデルの事前学習は、一部はKBLab内で行われ、一部(著作権が有効な素材については)GoogleのTensorFlow Research Cloud (TFRC) のCloud TPUの支援を受けて行われました。
- モデルはHuggingface 🤗 によってS3にホストされています。