File size: 4,612 Bytes
2d8cd28
 
 
 
 
 
 
 
 
00cfab8
2d8cd28
00cfab8
2d8cd28
 
 
0368b5f
 
 
2d8cd28
 
 
 
0368b5f
2d8cd28
 
 
0368b5f
2d8cd28
0368b5f
2d8cd28
 
 
 
 
 
 
 
 
 
837edc5
0368b5f
2d8cd28
 
 
 
 
 
 
 
 
 
 
 
837edc5
0368b5f
2d8cd28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
---
language: ja
tags:
- mobilebert
license: cc-by-sa-3.0
datasets:
- wikipedia
---

# MobileBERT 日本語事前学習済みモデル爆誕!!
AI関係の仕事をしている櫻本です。  
2020年に発表されたBERTの発展型モデルの一つである「MobileBERT」の、日本語事前学習済みモデルを構築しました。  
このページを見つけた方はかなりラッキーですから、ぜひ一度使ってみてください!!  

# 利用方法
既にtransformersでBERTを利用されている方向けです。  
トークナイザは東北大学さんのモデル(cl-tohoku/bert-large-japanese)からお借りしましたのでご指定ください。  
後は、**BertFor**なんちゃら~のクラスを**MobileBertFor**なんちゃら~に直して、このリポジトリを指定するだけです!  
```from transformers import BertJapaneseTokenizer, MobileBertForSequenceClassification
tokenizer = BertJapaneseTokenizer.from_pretrained("cl-tohoku/bert-large-japanese")
model = MobileBertForSequenceClassification.from_pretrained("ysakuramoto/mobilebert-ja") # 文書分類の場合
```
(注意:文書分類などのタスクに利用するには、ファインチューニングが必要です)  

# BERTとの性能比較
文書分類と固有表現抽出について、ファインチューニング・性能評価を行いました。  
参考程度にご覧ください。(ファインチューニング後の性能を保証するものではありません)

  - 文書分類(MobileBertForSequenceClassification)
  |メトリック|BERT|MobileBERT(高速化前)|MobileBERT(高速化後)|
  |-----------|-----------| ------- | -------- |
  |学習時間(s)|585.0|399.7|-|
  |推論時間(s)|259.0|108.7|70.5|
  |精度|86.4%|85.5%|86.4%|
    - 条件
      - ライブドアニュースコーパスのタイトルとカテゴリで学習・推論。
      - BERTモデルに、'cl-tohoku/bert-base-japanese-whole-word-masking'を利用。
      - 推論データ n=1,474。精度はAccuracy。
      - エポック数=10, lr=1e-4
      - 推論時の高速化として、枝刈り・量子化・jitコンパイルを実施。
      - Google Colabにて、学習にGPU、推論にCPUを利用。推論はバッチ処理でなく1件ずつ処理。
  
  - 固有表現抽出(BertForTokenClassification)
  |メトリック|BERT|MobileBERT(高速化前)|MobileBERT(高速化後)|
  |-----------|-----------| ------- | -------- |
  |学習時間(s)|428.0|294.0|-|
  |推論時間(s)|163.5|78.4|40.9|
  |精度|86.4%|82.5%|83.3%|
    - 条件
      - ストックーマークさんのwikipediaデータセットで学習・推論。(https://github.com/stockmarkteam/ner-wikipedia-dataset)  
      - BERTモデルに、'cl-tohoku/bert-base-japanese-whole-word-masking'を利用。
      - 推論データ n=2,140。精度は完全一致のAccuracy。
      - エポック数=10, lr=1e-4
      - 推論時の高速化として、枝刈り・量子化・jitコンパイルを実施。
      - Google Colabにて、学習にGPU、推論にCPUを利用。推論はバッチ処理でなく1件ずつ処理。

# モデルの説明
- モデルの構造
  - 論文中の"MobileBERT"構造に従いました。(論文中にはMobileBERT<sub>TINY</sub>というバージョンもありますがそちらではないです) 
    - 論文中のTable.1 をご確認ください。 https://arxiv.org/abs/2004.02984
- 学習に利用したデータ
  - 東北大学さんが公開されている方法で、2021年8月時点のwikipediaデータを利用しました。
    - 東北大学さんのgithub https://github.com/cl-tohoku/bert-japanese
- トークナイザ
  - 東北大学さんのモデル"cl-tohoku/bert-large-japanese"からお借りしました。vocab sizeは32768です。
- 学習方法
  - Google ColabからTPUを用いて学習しました。
    1. IB-BERT<sub>LARGE</sub>をlr=5e-4で1Mステップ学習しました。
    1. 240kステップの蒸留後、mobileBERTをlr=5e-4で2Mステップ学習しました。
  - トータルで2ヶ月半くらいかかりました。。エラーも出まくってつらかったです。
- tensorflow liteでの利用
  - こちらで説明されています。その名の通りモバイルで動かせるんですね。
    - https://www.tensorflow.org/lite/examples/bert_qa/overview
  
# ライセンス
[CC-BY SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/deed.ja)  
トークナイザについては東北大学さんのモデル"cl-tohoku/bert-large-japanese"からお借りしました。