🕷️

GPT-3互換のGPT-J-6Bで日本語推論

2021/06/24に公開
1

この記事は何?

自然な文章を生成できるとして、一時期話題になったGPT-2の後継であり、パラメータサイズの大きさからより高性能と更に話題になったGPT-3と同等の精度かつApache-2.0で商用利用可能なGPTが登場したので日本語で試してみた記事です。実装や理論については触れていません。

GPT-3とは

https://github.com/openai/gpt-3

  • OpenAIにより作成された1750億パラメータの自然言語処理モデル
  • Microsoftが独占ライセンスを取得しており、一般ユーザが利用するためにはOpenAI APIへの登録が必要、1000tokenあたり$0.0008~$0.0600[1]
MODEL PRICE PER 1K TOKENS
DavinciMost powerful $0.0600
Curie $0.0060
Babbage $0.0012
AdaFastest $0.0008
  • パラメータを増やすことで、タスクに依存しないFew-Shotでのパフォーマンスが大幅に向上
  • Zero-Shot/Few-Shot Learningにより、モデルのパラメータを変更せずに(=Fine-Tuningを行わず)複数のタスクを推論することが可能

Zero-Shot Learning

タスクを説明する指示のみがinputとして利用される。
e.g. 「こんにちは」を英訳したい場合

Translate Japanese to English: 
こんにちは。->

Few-Shot Learning

タスクを説明する指示と例文がinputとして利用される。例文が一つであれば One-Shot
e.g. 「ミカン」を英訳したい場合(例文あり)

Translate Japanese to English: 
リンゴ->Apple
ミカン->

詳しくは論文 "Language Models are Few-Shot Learners" を参照のこと
https://arxiv.org/abs/2005.14165

GPT-J-6Bとは

https://github.com/kingoflolz/mesh-transformer-jax

  • EleutherAIというオープンソースでGPT-NeoGPT-NeoX,大規模言語コーパスPileの作成を手がける研究プロジェクトが作成
  • 事前学習済モデルをApache-2.0 Licenceで使用可能
  • GPT-J-6B -> Jは"JAX",6Bはパラメータサイズ6,053,381,344より"6Billion"を表す。
  • GPT-3の6.7Bと同程度の性能

動作確認

以下のデモ用ノートブックをそのまま流用
https://colab.research.google.com/github/kingoflolz/mesh-transformer-jax/blob/master/colab_demo.ipynb

  • Google Colab TPUの無料環境
  • 出力は実行のたびに変わるため、成功することもあれば失敗することもあるので注意
  • トークンの出力サイズを大きくしているため、後半に余計な文章が出力されることが多いが、実際は<|endoftext|>のような特殊トークンや後処理可能であるため、必要な情報のみ記載

おおよその推論時間(初回のみ1分程度かかります)

推論時間 gen_len
13.48s 512
7.28s 256
3.59s 128
1.94s 64
1.10s 32

翻訳(短文)

input
日本語を英語に翻訳してください。:
料金は12000円です。->

成功例

output
The price is ¥12,000

丁寧にカンマまでつけて出力してくれていますね。

失敗例

output
Ni ha kuishin o tsukutta

「に は くいしん お つくった」まったく意味がわかりません・・

翻訳

日本語を英語に翻訳してください。

だとうまくいかなかったため英語で指示を出します。

input
Translate Japanese to English:
私は海外進学を希望していますが、奨学金がないと辛いです。
イギリスへの留学を希望していますがなにか支援するための制度はありますか。->

成功例

output
I’m hoping to study abroad, but tuition is expensive. 
Is there any system of support for my studying in England?

伝えたいことは伝えられそうです。

失敗例

output
Would love to go overseas in Japan to study but I have no funds. 
What programs are there to encourage international education overseas?

ニュアンスはおおよそ間違ってはないのですが、日本に留学したい文章になってしまいました。

分類

ポジネガで分類してみます。

input
次の文章はポジティブかネガティブか:
### 
さっき見た映画は残念だった。->ネガティブ 
### 

### 昨日食べたピザは美味しい。->

成功例

output
ポジティブ

失敗例

output
そう

そう・・・ 他にもネガティブと推論したり、顔文字で出力されたりしました。

QA

input
以下の質問に回答してください。
日本の首都の名称を答えよ:

成功例

output
東京

正解!
ちなみに「ドラゴンボールの作者は誰か」という質問は英語だとすぐに答えが出ましたが、日本語だといろいろな人名が登場しました

失敗例

output
Osaka

ちゃうねん

要約

例文の要約前の文章は環境省からお借りしました。

input
### 
地球温暖化対策の推進に関する法律では、都道府県及び市町村は、その区域の自然的社会的条件に応じて、温室効果ガスの排出の抑制等のための総合的かつ計画的な施策を策定し、及び実施するように努めるものとするとされています。
こうした制度も踏まえつつ、昨今、脱炭素社会に向けて、2050年二酸化炭素実質排出量ゼロに取り組むことを表明した地方公共団体が増えつつあります。 
### 
tl;dr:地球温暖化対策の推進に関する法律では温室効果ガスの排出の抑制等のための総合的かつ計画的な施策を策定し、2050年二酸化炭素実質排出量ゼロに取り組む地方公共団体が増えている。 
###

###
昨日の議論では、今後の継続的なCO2削減に関わる施策についてプランAで実行することに決定した。
プランBと比較して、長期的な効果を見込むことができ、かつ、再利用可能な資源を活用することができるためである。この施策は来年1月より実施することとする。
### 
tl;dr:

成功例

output
来年1月よりかかっての施策では、CO2削減に関わる施策である。プランBと比較して長期的な効果を見込むことができ、再利用可能な資源を活用することができる

プランAという言葉は消えてしまいましたが、だいぶ良いのではないでしょうか。

失敗例

output
今日の議論では今後、日本国がCO2削減に関わる途上国との条約により、最終合意された問題材料を扱おうと決議された。この文章で発表された施策では、

要約になっていないですね、話題としては近しいですが、今回の文章とは関係ない語彙を生成しています。

抽出

都道府県を抜き出してもらいます。

input
エクストラクタは重要なキーワードを抽出します。

 ###
 東京から大阪まで車を運転した、京都でお土産を買おうと思ったが時間がなかったため諦めてホテルに帰った。
 エクストラクタ:東京/大阪/京都 
 ### 

 ###
 香川のうどんのはなししてたら思い出したんだけど、長野で食べる蕎麦も美味しかったな。今度は岩手県のわんこそばにも挑戦してみよう。 
 エクストラクタ:香川/長野/岩手 
 ### 

 ### 
 北海道に行ったことないんだけど青森から車で行けるんだっけ。飛行機使わないとダメかな。
 エクストラクタ:

成功例

output
北海道/青森

失敗例

output
川内/奈良

よくある失敗パターンは「北海道」だけ「青森」だけのパターンですが、違う地域が登場することも・・

文書生成

チャッピー(仮称)というチャットボットを想定して電気の質問に回答してもらいます。

input
チャッピーは丁寧に返答を行うチャットボットです。

 ###
 お客様:あのー、今月の電気料金の請求金額について確認したいのですが。
 チャッピー:承知いたしました。今月ご利用の電気料金についてご確認したいのですね。ご案内申し上げます。 
 ### 

 ### 
 お客様:先月届いた請求書について不明点があるのですが、教えてもらえますか。なんでこんなに高いんでしょう。
 チャッピー:お手数おかけします。先月分のご請求書についてですね。ご確認致しますので、少々お待ちください。 
 ### 

### 
 お客様:電気が止まってしまったので、未払いの料金をお支払いしたいのですが方法を教えてください。
 チャッピー:

成功例

output
非常に残念なことにございまして、その場合の未払いのお支払いについては領収書で届けております。

領収書で支払えますよというニュアンスですね。

失敗例

output
電気レベルのステータスが微妙に変更されましたこちらがございますので、まずはご自宅に駐在の星野さんに教えて下さい。お待ち下さい。

ご自宅に駐在している星野さん一体何者なんだ・・

コード生成

input
###
pythonでコードを記述してください。 
numpyをインポート:import numpy as np
###

###
pandasをインポート:

成功例

output
import pandas as pd

失敗例

output
import pandas as p

惜しいです。

全体を通じて

今回は日本語にフォーカスしましたが、英語だと日本語よりもZero-Shotで解けるタスクが多かったです。(変なときには変ですが)
GPT-J-6Bの事前学習で使われているPileデータセットは日本語メインではないにもかかわらず、ここまで出力できるのは驚き。おそらく未知であろう語彙も入力として受け付けてくれました。
とはいえ、出力結果は安定しないのでタスクに応じたドメインテキストで再度、事前学習するなしでは、現実課題での利用は難しいと思います。例えば要約タスクは20回ほど実行して成功例に出力を得ることができました。
動かして見るだけでしたら、Colab上ですぐに試せるので噂のGPTの実力ぜひお試しあれ。


脚注
  1. https://beta.openai.com/pricing ↩︎

Discussion

ミッキーミッキー

このプログラムを実行したいのですが、どうやって実行できるのでしょうか?