rinna社のbert事前学習モデルを使ってみた

## GPT-2の威力を知るために
日本語に対応したbertの事前学習モデルが複数誕生しており、簡単に試すことができる環境になりました。

ここでは、rinna社のモデルを使わせていただき、文書生成を試してみます。

rinna株式会社とりんな

https://www.rinna.jp/profile

GitHub

https://github.com/rinnakk/japanese-pretrained-models

Huggingface

https://huggingface.co/rinna
## 環境
Google Colaboratory

tensorflow : 2.6.0
transformers : 4.10.3

## 準備
####transformersとsentencepieceのインストール

```sh
!pip install transformers
!pip install sentencepiece
```
####トークナイザーとモデルの準備
事前学習済みの言語モデルとして３つが利用できます。
- rinna/japanese-gpt2-medium
- rinna/japanese-gpt2-small
- rinna/japanese-gpt2-xsmall
今回は、パタメータ数が最も多いmediumを使用します。

```python
from transformers import T5Tokenizer, AutoModelForCausalLM
 
tokenizer = T5Tokenizer.from_pretrained("rinna/japanese-gpt2-medium")
model = AutoModelForCausalLM.from_pretrained("rinna/japanese-gpt2-medium")
```


#### 推論
tokenizerのインプットと、generateのアウトプットを関数化してます。

```python
def auto_print(str):
    input = tokenizer.encode(str, return_tensors="pt")
    output = model.generate(input, do_sample=True, max_length=1000, num_return_sequences=1)
    return tokenizer.batch_decode(output)
```

文書生成のための書き出しの入力文を関数に渡します。

```python
%time
output = auto_print('勉強を好きになるためには、良い師匠と出会うことが大切です。')
```

カッコ表記があると文章が読みにくくなるので、後処理としてカッコとその中身を削除しています。

```python
import re

re.sub("\(.+?\)", "", output[0])
```


```python
output
```
### 出力結果
今回の出力結果は以下の様になりました。


勉強を好きになるためには、良い師匠と出会うことが大切です。
 塾では、一人ひとりの生徒とじっくり向き合い、一人一人の弱点や弱点を把握しながら生徒の目標達成のために全力を尽くします。 「学校では教えてくれない!」「勉強の仕方がわからない!」という高校生の皆さんのために、学校では教えてくれない学習法や勉強法のコツ、勉強方法のヒントを塾長から教えてもらいます。 学校の教科書以外のものや書籍で分からないものは、すぐに指導員に質問しましょう! 塾の授業は、1コマ(1回30分)45分で、質問は1回1分以内です。 講師の皆さんは、自分の持っている知識を生徒に正しく伝えることができるのかという不安がありました。だから、講師と生徒でお互いに情報を共有することで、生徒一人一人の問題解決の手助けができると考えました。また、生徒一人一人が自ら気付くことが大切だと考えたので、生徒を一人一人に丁寧に質問しました。 問題を解くためのテキストだけでなく、答え合わせ用の問題用紙や、解答をまとめた小冊子(模範解答)も用意しました。また、先生から出されるノートは生徒ひとりひとりが自由に読むことができます。さらに、授業で使用した教科書を生徒1人1人にもってきて、その内容を説明できるように準備しました。 受験勉強は大変です。しかし、合格するまで諦めず、一緒に頑張りましょう。一緒にがんばりましょう! 私は、2年生の時に塾講師として採用していただくまで、大手の塾で仕事をしたことがありませんでした。 大手塾は、受験生の多さや授業の質など、様々なことを勉強する必要があり、私にはとても向いていると思っていました。 そして、学生時代に、生徒と楽しい時間を過ごせる塾であれば、絶対に仕事にも役立つ!!と思っていました。 最初は、大手塾でのバイト経験はありませんでした。そして、大手塾での仕事が楽しく思えたことから、大手の塾で働けるチャンスが巡り合えたんだと勘違いしていました。 でも、大手塾での仕事とは全く違う世界で今の自分を生かさないで終わってしまい、後悔しかありません。 大手の塾は、大手の塾の良さがありつつも、塾の面白さがあります。 大手塾のバイトは、授業をするだけでなく、生徒をどう指導していくかが大切なんだと実感しました。 大手塾での仕事は、塾講師だけでなく、生徒が勉強の質問をしにきたときや、教室で宿題を教えてほしいときなど、生徒とたくさんかかわることがでてきました。 また、大手塾のアルバイトは、大手の会社の社員さんとも一緒にお仕事します。仕事の内容としては、生徒や、社員さんをフォローするために、資料の読み方や質問の答えの組み立てなど、教えるというよりは、生徒の目線で教えるように心がけました。 大手の会社は、研修などを充実させているので、学ぶことができる機会がたくさんあります。 大手の塾のバイトは、大手の社員さんとの会話が楽しいです。友達のように気軽に話しにのせてくださいます。 授業の動画を撮りに行っているので、生徒は学校の授業と変わらず、熱心に授業を視聴しています。 最初は、塾講師の仕事に興味がありました。そして、この仕事なら、生徒の勉強のサポートができるかなと思い、受験合格まで、家庭教師の仕事を経験したことはありませんでした。 しかし、大手の塾のアルバイトの経験で「なるほど!」と思うことがたくさんあって、とても面白かったです。 また、大手の塾では生徒一人ひとりと向きあうことが大切なんだと実感できて勉強に夢中になります。 そして、大手の塾の仕事は大手だからこそできる仕事なんだよと、教えてくれました。 私は、大手の会社のバイトは、他のバイトと違い、生徒との距離が近く、とても楽しいんだと実感できました。 中学3年生の時に、高校受験に向けて勉強をはじめ、志望校を決めて、私立は難関校ということで、合格し、公立の高校に入学できました。 私は、中学も高校も地元の公立高校に入りたかったので、大手の会社で働くことが大きな目標でした。 そして、その目標がかなうために、勉強方法のコツのヒントを塾長から教えてもらいました。 私も、大手の会社でずっと、講師をしていた経験があるわけではないので、大手の会社で働くことは目標ではなく、夢のようでした。 ところが、大手の会社から、アルバイト募集の連絡が入り、私はすぐに応募しました。 そして、1年間のアルバイトをした経験から、大手の会社でアルバイトをすることがゴールだったのではないこと、大手だからこそ生徒一人ひとりのことを考えて、その目標に達成できることを知っていました。 大手の会社は、目標がしっかりあって、生徒一人ひとりが