|
--- |
|
tags: |
|
- fill-mask |
|
- japanese |
|
- albert |
|
|
|
language: |
|
- ja |
|
|
|
license: mit |
|
|
|
widget: |
|
- text: "2022年の[MASK]概要" |
|
|
|
--- |
|
## albert-base-japanese-v1 |
|
日本語事前学習済みALBERTモデルです |
|
|
|
## How to use |
|
### ファインチューニング |
|
このモデルはPreTrainedモデルです |
|
基本的には各種タスク用にファインチューニングして使用されることを想定しています |
|
|
|
### Fill-Mask |
|
このモデルではTokenizerにSentencepieceを利用しています |
|
そのままでは`[MASK]`トークンのあとに[余計なトークンが混入する問題](https://ken11.jp/blog/sentencepiece-tokenizer-bug)があるので、利用する際には以下のようにする必要があります |
|
#### for PyTorch |
|
```py |
|
from transformers import ( |
|
AlbertForMaskedLM, AlbertTokenizerFast |
|
) |
|
import torch |
|
|
|
|
|
tokenizer = AlbertTokenizerFast.from_pretrained("ken11/albert-base-japanese-v1") |
|
model = AlbertForMaskedLM.from_pretrained("ken11/albert-base-japanese-v1") |
|
|
|
text = "大学で[MASK]の研究をしています" |
|
tokenized_text = tokenizer.tokenize(text) |
|
del tokenized_text[tokenized_text.index(tokenizer.mask_token) + 1] |
|
|
|
input_ids = [tokenizer.cls_token_id] |
|
input_ids.extend(tokenizer.convert_tokens_to_ids(tokenized_text)) |
|
input_ids.append(tokenizer.sep_token_id) |
|
|
|
inputs = {"input_ids": [input_ids], "token_type_ids": [[0]*len(input_ids)], "attention_mask": [[1]*len(input_ids)]} |
|
batch = {k: torch.tensor(v, dtype=torch.int64) for k, v in inputs.items()} |
|
output = model(**batch)[0] |
|
_, result = output[0, input_ids.index(tokenizer.mask_token_id)].topk(5) |
|
|
|
print(tokenizer.convert_ids_to_tokens(result.tolist())) |
|
# ['英語', '心理学', '数学', '医学', '日本語'] |
|
``` |
|
|
|
#### for TensorFlow |
|
```py |
|
from transformers import ( |
|
TFAlbertForMaskedLM, AlbertTokenizerFast |
|
) |
|
import tensorflow as tf |
|
|
|
|
|
tokenizer = AlbertTokenizerFast.from_pretrained("ken11/albert-base-japanese-v1") |
|
model = TFAlbertForMaskedLM.from_pretrained("ken11/albert-base-japanese-v1") |
|
|
|
text = "大学で[MASK]の研究をしています" |
|
tokenized_text = tokenizer.tokenize(text) |
|
del tokenized_text[tokenized_text.index(tokenizer.mask_token) + 1] |
|
|
|
input_ids = [tokenizer.cls_token_id] |
|
input_ids.extend(tokenizer.convert_tokens_to_ids(tokenized_text)) |
|
input_ids.append(tokenizer.sep_token_id) |
|
|
|
inputs = {"input_ids": [input_ids], "token_type_ids": [[0]*len(input_ids)], "attention_mask": [[1]*len(input_ids)]} |
|
batch = {k: tf.convert_to_tensor(v, dtype=tf.int32) for k, v in inputs.items()} |
|
output = model(**batch)[0] |
|
result = tf.math.top_k(output[0, input_ids.index(tokenizer.mask_token_id)], k=5) |
|
|
|
print(tokenizer.convert_ids_to_tokens(result.indices.numpy())) |
|
# ['英語', '心理学', '数学', '医学', '日本語'] |
|
``` |
|
|
|
## Training Data |
|
学習には |
|
- [日本語Wikipediaの全文](https://ja.wikipedia.org/wiki/Wikipedia:%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89) |
|
- [livedoorニュースコーパス](https://www.rondhuit.com/download.html#ldcc) |
|
|
|
を利用しています |
|
|
|
## Tokenizer |
|
トークナイザーは[Sentencepiece](https://github.com/google/sentencepiece)を利用しています |
|
こちらも学習データは同様です |
|
|
|
## Licenese |
|
[The MIT license](https://opensource.org/licenses/MIT) |
|
|