🚀 スウェーデン語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モデルの重みは近日公開予定です。
📦 インストール
以下の例では、Huggingface Transformers 2.4.1とPytorch 1.3.1以上が必要です。Transformers < 2.4.0の場合、トークナイザーを手動でインスタンス化し、do_lower_case
フラグパラメータをFalse
に、keep_accents
をTrue
に設定する必要があります(ALBERTの場合)。
以下のコマンドを任意のOSのターミナルで実行し、サンプルコードを実行できる環境を作成します。
# 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ベースモデルです。語彙サイズは約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')
スウェーデン語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内で行われ、一部(著作権が有効でない資料について)はGoogleのTensorFlow Research Cloud (TFRC)のCloud TPUの支援を受けて行われました。
- モデルはHuggingface 🤗によってS3にホストされています。