File size: 5,020 Bytes
2d8cd28
 
 
 
 
 
 
 
 
00cfab8
2d8cd28
00cfab8
2d8cd28
1c77c84
2d8cd28
 
7de14d9
0368b5f
 
2d8cd28
 
 
 
0368b5f
2d8cd28
 
 
0368b5f
2d8cd28
0368b5f
2d8cd28
 
 
 
 
81efab8
 
2d8cd28
 
a1f3fdb
4a25df7
 
a1f3fdb
4a25df7
02c9413
2d8cd28
31bcc0d
2d8cd28
 
 
 
 
81efab8
 
2d8cd28
7855e31
a1f3fdb
4a25df7
 
a1f3fdb
4a25df7
02c9413
2d8cd28
 
 
 
 
 
d0fa09f
2d8cd28
 
7855e31
2d8cd28
 
 
b90ef8e
4a25df7
2d8cd28
 
 
85c9726
 
 
95bc47d
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
78
79
80
81
82
83
84
---
language: ja
tags:
- mobilebert
license: cc-by-sa-3.0
datasets:
- wikipedia
---

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

# 利用方法
既に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%|
  |モデルファイルサイズ(MB)|440.2|-|41.8|
  
    - 条件
      - ライブドアニュースコーパスのタイトルとカテゴリで学習・推論。
      - 比較対象のBERTモデルは東北大学さんの"cl-tohoku/bert-base-japanese-whole-word-masking"。
      - 推論データ n=1,474。精度はAccuracy
      - 学習パラメータ: エポック数=10, lr=1e-4
      - 推論時の高速化として、枝刈り(-20%)・量子化・jitコンパイルを実施。
      - Google Colabにて、学習にGPU、推論にCPUを利用。バッチ処理でなく1件ずつ推論。
      - それぞれ、学習~推論を3回実施した平均値。
  
  - 固有表現抽出(MobileBertForTokenClassification)
  |メトリック|BERT|MobileBERT(高速化前)|MobileBERT(高速化後)|
  |-----------|-----------| ------- | -------- |
  |学習時間(s)|428.0|294.0|-|
  |推論時間(s)|163.5|78.4|40.9|
  |精度|86.4%|82.5%|83.3%|
  |モデルファイルサイズ(MB)|440.2|-|41.8|
    
    - 条件
      - ストックマーク社さんのwikipediaデータセットで学習・推論。(https://github.com/stockmarkteam/ner-wikipedia-dataset)  
      - 比較対象のBERTモデルは東北大学さんの"cl-tohoku/bert-base-japanese-whole-word-masking"。
      - 推論データ n=2,140。精度は完全一致のf-measure
      - 学習パラメータ: エポック数=10, lr=1e-4
      - 推論時の高速化として、枝刈り(-20%)・量子化・jitコンパイルを実施。
      - Google Colabにて、学習にGPU、推論にCPUを利用。バッチ処理でなく1件ずつ推論。
      - それぞれ、学習~推論を3回実施した平均値。

# モデルの説明
- モデルの構造
  - 論文中の"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は32,768です。
- 学習方法
  - Google ColabからTPUを用いて学習しました。
    1. IB-BERT<sub>LARGE</sub>をlr=5e-4で1Mステップ学習しました。
    1. IB-BERT<sub>LARGE</sub>を240kステップ蒸留後、mobileBERTをlr=5e-4で2Mステップ学習しました。
  - トータルで2ヶ月半くらいかかりました。。エラー出まくってつらかったです。
  
# ライセンス
[CC-BY SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/deed.ja)  
トークナイザについては東北大学さんのモデル"cl-tohoku/bert-large-japanese"からお借りしました。

# 免責
このモデルを利用・参照することで発生したあらゆる不都合や損害について、一切の責任を負いかねます。