🔥

日本語LLMを動かしてみた

2023/08/15に公開

今回は3種の日本語LLMをGoogleColab上で動かしてみました

目次

  1. CyberAgentのOpenCALM
  2. RinnaのJapaneseGPT
  3. StabilityAIのJapaneseStableLM
  4. 性能比較
  5. まとめ

CyberAgentのOpenCALM

https://huggingface.co/cyberagent

基本はHuggingFaceに記載されてるコードですが
Colab上で動かすには以下が必要でした

  • transformersとaccelerateのインストール
!pip install transformers
!pip install accelerate

なお、1B以下のサイズであれば無料T4 GPUでいけますが、3B以上はRAMが足りなくなるため有料のA100 GPUが必要です

ちなみに…

print(model.parameters)

でモデルのパラメータ構成を見ることができます
以下は7B版の場合の結果

<bound method Module.parameters of GPTNeoXForCausalLM(
  (gpt_neox): GPTNeoXModel(
    (embed_in): Embedding(52224, 4096)
    (emb_dropout): Dropout(p=0.0, inplace=False)
    (layers): ModuleList(
      (0-31): 32 x GPTNeoXLayer(
        (input_layernorm): LayerNorm((4096,), eps=1e-05, elementwise_affine=True)
        (post_attention_layernorm): LayerNorm((4096,), eps=1e-05, elementwise_affine=True)
        (post_attention_dropout): Dropout(p=0.0, inplace=False)
        (post_mlp_dropout): Dropout(p=0.0, inplace=False)
        (attention): GPTNeoXAttention(
          (rotary_emb): GPTNeoXRotaryEmbedding()
          (query_key_value): Linear(in_features=4096, out_features=12288, bias=True)
          (dense): Linear(in_features=4096, out_features=4096, bias=True)
          (attention_dropout): Dropout(p=0.0, inplace=False)
        )
        (mlp): GPTNeoXMLP(
          (dense_h_to_4h): Linear(in_features=4096, out_features=16384, bias=True)
          (dense_4h_to_h): Linear(in_features=16384, out_features=4096, bias=True)
          (act): GELUActivation()
        )
      )
    )
    (final_layer_norm): LayerNorm((4096,), eps=1e-05, elementwise_affine=True)
  )
  (embed_out): Linear(in_features=4096, out_features=52224, bias=False)
)>

どのような構成になってるかわかりますね
ちなみにGPTNeoXとはこちらの自己回帰モデル
これを32層重ねて構成してるようです

RinnaのJapaneseGPT

https://huggingface.co/rinna
※上記のjapanese-gpt-neox-XXXというモデル

こちらもHuggingFaceに記載されてるコードに加えて以下が必要でした

  • transformersとsentencepieceのインストール
!pip install transformers
!pip install sentencepiece

モデルのパラメータ構成はこちら

<bound method Module.parameters of GPTNeoXForCausalLM(
  (gpt_neox): GPTNeoXModel(
    (embed_in): Embedding(32000, 2816)
    (emb_dropout): Dropout(p=0.0, inplace=False)
    (layers): ModuleList(
      (0-35): 36 x GPTNeoXLayer(
        (input_layernorm): LayerNorm((2816,), eps=1e-05, elementwise_affine=True)
        (post_attention_layernorm): LayerNorm((2816,), eps=1e-05, elementwise_affine=True)
        (post_attention_dropout): Dropout(p=0.0, inplace=False)
        (post_mlp_dropout): Dropout(p=0.0, inplace=False)
        (attention): GPTNeoXAttention(
          (rotary_emb): GPTNeoXRotaryEmbedding()
          (query_key_value): Linear(in_features=2816, out_features=8448, bias=True)
          (dense): Linear(in_features=2816, out_features=2816, bias=True)
          (attention_dropout): Dropout(p=0.0, inplace=False)
        )
        (mlp): GPTNeoXMLP(
          (dense_h_to_4h): Linear(in_features=2816, out_features=11264, bias=True)
          (dense_4h_to_h): Linear(in_features=11264, out_features=2816, bias=True)
          (act): GELUActivation()
        )
      )
    )
    (final_layer_norm): LayerNorm((2816,), eps=1e-05, elementwise_affine=True)
  )
  (embed_out): Linear(in_features=2816, out_features=32000, bias=False)
)>

GPTNeoXを使った構成はOpenCALMと同じ
層は36と少し多いですが、パラメータ数は全体的に7割くらいと少ないですね

StabilityAIのJapaneseStableLM

https://huggingface.co/stabilityai
※上記のjapanese-stablelm-XXXというモデル

こちらもHuggingFaceに記載されてるコードに加えて以下が必要でした

  • transformersとsentencepiece einopsのインストール
!pip install transformers
!pip install sentencepiece einops

また、追加学習版を使うにはHuggingFaceのアクセストークンの指定が必要です

モデルのパラメータ構成はこちら

<bound method Module.parameters of JapaneseStableLMAlphaForCausalLM(
  (transformer): JapaneseStableLMAlphaModel(
    (embed_in): Embedding(65536, 4096)
    (layers): ModuleList(
      (0-31): 32 x DecoderLayer(
        (input_layernorm): LayerNorm((4096,), eps=1e-05, elementwise_affine=False)
        (post_attention_layernorm): LayerNorm((4096,), eps=1e-05, elementwise_affine=True)
        (attention): Attention(
          (rotary_emb): RotaryEmbedding()
          (query_key_value): Linear(in_features=4096, out_features=12288, bias=False)
          (dense): Linear(in_features=4096, out_features=4096, bias=False)
        )
        (mlp): MLP(
          (packed_input_proj): Linear(in_features=4096, out_features=22016, bias=False)
          (out_proj): Linear(in_features=11008, out_features=4096, bias=False)
          (act): SiLU()
        )
      )
    )
    (final_layer_norm): LayerNorm((4096,), eps=1e-05, elementwise_affine=True)
  )
  (embed_out): Linear(in_features=4096, out_features=65536, bias=False)
)>

こちらはJapaneseStableLMAlphaという独自のモデルを使っていますが、本家サイトによるとGPTNeoXを発展させたものらしいですね
層の数や各パラメータの値はOpenCALMと近いです

性能比較

こちらのGPT-2の論文内Table5に記載されている質問文を参考に、以下の8種の日本語の質問文を投げてみました

  1. Q:ドラゴンボールの作者は誰?\nA:
    →正解:鳥山明
  2. Q:楽天の社長は誰?\nA:
    →正解:三木谷浩史
  3. Q:パンダはどこの国の国獣?\nA:
    →正解:中国
  4. Q:相対性理論を提唱したのは誰?\nA:
    →正解:アルベルト・アインシュタイン
  5. Q:ドラえもん映画が最初に放映されたのはいつ?\nA:
    →正解:1980年3月(ドラえもん のび太の恐竜)
  6. Q:日本で最も店舗数の多いコンビニは?\nA:
    →正解:セブンイレブン(約21,000)
  7. Q:日本の都道府県で最も面積が広いのは?\nA:
    →正解:北海道(83,450km2)
  8. Q:日本の通貨単位は何?\nA:
    →正解:円

なお、以下のパラメータ設定をしつつ

  • max_new_tokens=128
  • temperature=0.7
  • repetition_penalty=1.25

seed値は1に固定しています

torch.manual_seed(1)

質問に対する回答を順に見ていきます
(MAXトークン数に収まり切らず途切れてるものも多いですね。長いものはアコーディオン内にしまいます)

  1. Q:ドラゴンボールの作者は誰?\nA:
    →正解:鳥山明
    • OpenCALM(7B)
      A:鳥山明さん…

      A:鳥山明さん。ちなみに、連載開始時は「Dragon Ball」ではなく、「青き炎の書」、そして第1話のタイトルは『目覚めろ海原』でした。(単行本3巻まで)

    • RinnaJapaneseGPT(3.6B)
      A:鳥山明 コメントする</s>
    • RinnaJapaneseGPT(3.6B、追加学習あり)
      A:鳥山明氏です…

      A:鳥山明氏です。 彼は日本のマンガ家兼イラストレーターで、代表作には「ドラゴンボール」や、「DRAGONBALL Z」、「DRAGON Ballerina」があります。 彼の作品は世界中に多くのファンを持っています。</s>

    • JapaneseStableLM(7B)
      A:鳥山明…

      A:鳥山明 ©︎BUNYA WEEKLY/集英社・東映アニメーション
      悟空の父であり、原作では初期から登場している。第17回天下一武道会に出場した際のゴテンクスに「亀仙人より強い」と発言されており、その後の一時的な修行をへて実力を伸ばし、「超サイヤ人2」へと変身できるようになったことで強敵を倒すことが多くなりました。この頃から筋骨隆々の体格になり、頭髪は白髪が増えていますが伸び続けていて長さは変わらないという特徴があります。また戦闘時には服が破れて上半身裸になります(笑)。なお

    • JapaneseStableLM(7B、追加学習あり)
      A:鳥山明…

      A:鳥山明 ©︎BUNYA WEEKLY/集英社・東映アニメーション
      悟空の父であり、原作では初期から登場している。第17回天下一武道会に出場した際のゴテンクスに「亀仙人より強い」と発言されており、その後の一時的な修行をへて実力を伸ばし、「超サイヤ人2」へと変身できるようになったことで強敵を倒すことが多くなりました。この頃から筋骨隆々の体格になり、頭髪は白髪が増えていますが伸び続けていて長さは変わらないという特徴があります。また戦闘時には服が破れて上半身裸になります(笑)。なお

5つとも正解だけど、続く情報は間違いだらけですね
唯一、Rinnaのベースモデルはシンプルに回答していますが、謎の「コメントする</s>」という言葉が続いています

  1. Q:楽天の社長は誰?\nA:
    →正解:三木谷浩史
    • OpenCALM(7B)
      A:三木谷浩史氏…

      A:三木谷浩史氏。現会長で創業者である。「10%還元」や「電子決済手段の提供」、そして、今回の事業提携の目的の1つに挙げられているのは、「キャッシュレス社会の推進」。そのためのパイプ役という意味合いも大きいと考えられる。(編集部・下島夏蓮)

    • RinnaJapaneseGPT(3.6B)
      A:三木谷浩史(敬称略)…

      A:三木谷浩史(敬称略)」という問題。ここで「三木谷浩史」を答えないと、この設問そのものが成立しないことに注意しましょう! そして、「Aが誰か?」ということがわからなくても構いません。「もしも『私』だったらどうなるだろうか....そう言えば、『私はこういう性格だ!』と言い張っていたなぁ~!」と考えてみればいいんですね★</s>

    • RinnaJapaneseGPT(3.6B、追加学習あり)
      A:三木谷浩史です…

      A:三木谷浩史です。 彼は日本のインターネットショッピング業界で数々の革新的な取り組みを行ってきました。代表的なものとして、ポイントサービスや共通の会員IDシステムがあります。最近では、同社が提供するオンラインモールを中国に拡大することを検討しており、その成長戦略の一環として、自社株式の一部を売却して投資ファンドを設立しています。</s>

    • JapaneseStableLM(7B)
      A:三木谷浩史…

      A:三木谷浩史(みきたにひろし)氏です。楽天株式会社の代表取締役会長兼社長をしています。1965年生まれ、兵庫県神戸市出身で早稲田大学第一文学部卒業後に日本興業銀行に入行します。 20年間務めた後退職してハーバード大学経営大学院に留学しますが中退しました。帰国後は起業家として様々な事業を手掛けて成功させていきますが、その中のひとつであるインターネットショッピングモールの「楽天市場」で大成功したのです。「楽天グループ」は国内最大級のオンライン・サービスカンパニーとなりました。

    • JapaneseStableLM(7B、追加学習あり)
      A:三木谷浩史…

      A:三木谷浩史(みきたにひろし)氏です。楽天株式会社の代表取締役会長兼社長をしています。1965年生まれ、兵庫県神戸市出身で早稲田大学第一文学部卒業後に日本興業銀行に入行します。 20年間務めた後退職してハーバード大学経営大学院に留学しますが中退しました。帰国後は起業家として様々な事業を手掛けて成功させていきますが、その中のひとつであるインターネットショッピングモールの「楽天市場」で大成功したのです。「楽天グループ」は国内最大級のオンライン・サービスカンパニーとなりました。また最近では世界進出も進めていてアジアを中心に店舗を増や

5つとも正解ですが、続く文章は間違いや破綻が多いですね
ただ、JapaneseStableLMの2つの回答に記載されている情報は正しいものが多いようです

  1. Q:パンダはどこの国の国獣?\nA:
    →正解:中国
    • OpenCALM(7B)
      A:中国・台湾…

      A:中国・台湾*4。白と黒で、一目でわかる特徴がありますよね!また、「麒麟(きりん)」は中国では皇帝のシンボルということから「國」の字が使われています。*5日本では昔の朝廷から貴族や地位の高い人たちを中心に様々な意味で親しまれてきました。(動物園のパンダも『竹取物語』に出てくるように昔は財宝の神様でした。)ちなみに、『国獸之路』(角川書店)によると中国の伝説上の動物である奇幻王丸は仙人になりたくて宇宙まで行ったけど途中で不運にも地球に落下して死んでしまったそうです...。そのためか中国では今でも不死の獣を大事する習慣があるみたいです。『

    • RinnaJapaneseGPT(3.6B)
      A:中国です…

      A:中国です。 Q:「おそろしや」とは、どんなことですか?</s>

    • RinnaJapaneseGPT(3.6B、追加学習あり)
      A:中国。</s>
    • JapaneseStableLM(7B)
      A: 中国 です。
    • JapaneseStableLM(7B、追加学習あり)
      A: 中国 です。

5つとも正解(OpenCALMは台湾も言及しているが)
ただしOpenCALMとRinnaJapaneseGPTのベースモデルは変な文章が続きます

  1. Q:相対性理論を提唱したのは誰?\nA:
    →正解:アルベルト・アインシュタイン
    • OpenCALM(7B)
      A:アインシュタイン…

      A:アインシュタイン。超時空には、時間・空間はないという仮説を立てた。(『宇宙はなぜこのような形なのか』岩波書店)

    • RinnaJapaneseGPT(3.6B)
      A:アインシュタインです…

      A:アインシュタインです。 Q:ガリレオはどのようにして地動説を広めたのでしょうか? また、彼の功績とは何なのでしょ...</s>

    • RinnaJapaneseGPT(3.6B、追加学習あり)
      A:アルバート・アインシュタイン…

      A:アルバート・アインシュタイン 、ドイツの物理学者。 B.アインシュタインは一般相対論を発表したが、量子力学の発展によりその地位を失った。 C.ニュートンやライプニッツの物理学を発展させたとされるガリレイも相対論を主張しています。</s>

    • JapaneseStableLM(7B)
      A:アルベルト・アインシュタイン…

      A:アルベルト・アインシュタイン(1879年 - 1954年)です。アメリカ生まれのユダヤ人科学者で、20世紀最大の物理学者と言われています。彼の提言した「特殊および一般相対論」は現代物理学の中核となっていますが、「光電効果」「ブラウン運動」など数多くの科学的発見を成し遂げました。またノーベル賞も受賞しています。彼は生涯独身でしたが、同性愛者だったという説もあり、晩年は精神的に不安定になっていたそうです。「私は天才ではない、ただ間違えただけだ。」という言葉の通り、決して傲慢な人物ではありませんでした。

    • JapaneseStableLM(7B、追加学習あり)
      A:アルベルト・アインシュタイン…

      A:アルベルト・アインシュタイン(1879年 - 1954年)です。アメリカ生まれのユダヤ人科学者で、20世紀最大の物理学者と言われています。彼の提言した「特殊および一般相対論」は現代物理学の中核となっていますが、「光電効果」「ブラウン運動」など数多くの科学的な発見をしています。「ノーベル賞の生みの親であり、生前受賞できなかった唯一の天才である。」と語られることもあります。

こちらも5つとも正解ですが、続く文章には間違いが多いですね

  1. Q:ドラえもん映画が最初に放映されたのはいつ?\nA:
    →正解:1980年3月(ドラえもん のび太の恐竜)
    • OpenCALM(7B)
      A:1990年4月2日…

      A:1990年4月2日に放送された第1作「のび太の恐竜」から。現在、地上波で視聴できる『劇場版』は第13作目まであります(2019年時点で。)ちなみに、『映画 クレヨンしんちゃんシリーズ』(2012~2016)は過去11作品が全てDVD化されています。(2020年夏公開の「『オラの引越し物語 サボテン大襲撃』」では12作目の作品を含む約5,000分の収録が実現しました!! )■スタッフ原作・監督...原恵一(『河童のクゥと夏休み』『カラフル』)音楽...宇崎泰央アニメーション制作......旭プロダクション声の出演〈大人〉緒方賢一がび太役、〈

    • RinnaJapaneseGPT(3.6B)
      A:1973年9月…

      A:1973年9月、MGM(当時はメトロ・ゴールドウィン)制作「海底超特急マリンエクスプレス」。</s>

    • RinnaJapaneseGPT(3.6B、追加学習あり)
      A:1973年9月26日…

      A:1973年9月26日 B.1974年頃 C.1969年頃に D.1970年代末から1980年代初頭にかけて E.1979年から1981年に公開された F.1975年に製作された G.1977年以降に制作された H.1979年頃に製作された I.1967年から1968年頃に制作された J.1965年に制作された K.1966年8月に制作された M.1960年代後半に制作された L.1961年に制作された,1962年に制作された S.1963年に公開された N.1964年に設立された。 TL;DR:1953年まで製作され、1963年に公開された。 1980年代半ばには、東宝によって4つの長編映画シリーズが開始されました。これらは1986年と1988年に公開されています。 1989年には『新世紀エ

    • JapaneseStableLM(7B)
      A:1980年4月…

      A:1980年4月。その前年に公開された「のび太の大魔境」から、2年後のことであった。「大長編シリーズ第3弾『海底鬼岩城』を原作に作られたのがこの作品である。『人魚姫』と並んで、藤子・F・不二雄先生による名作の一つである。」(出典:https://dic.nicovideo.jp/a/浻)

    • JapaneseStableLM(7B、追加学習あり)
      A:1980年4月…

      A:1980年4月。その前年に公開された「のび太の大魔境」から、2年後のことであった。「大長編シリーズ第3弾『海底鬼岩城』を原作に作られたのがこの作品である。『人魚姫』と並んで、藤子・F・不二雄先生による名作の一つである。」(出典:https://dic.nicovideo.jp/a/浻)

こちらは5つとも不正解(JapaneseStableLMは惜しい)
タイトルも間違っています

  1. Q:日本で最も店舗数の多いコンビニは?\nA:
    →正解:セブンイレブン(約21,000)
    • OpenCALM(7B)
      A:セブンイレブン…

      A:セブンイレブンの店舗数が2万4,565店。ローソン1社を除いた競合のコンビニでは、ファミリーマートの318店が最多で続く。(2016年10月現在)

    • RinnaJapaneseGPT(3.6B)
      A:ミニストップ</s>
    • RinnaJapaneseGPT(3.6B、追加学習あり)
      A:ローソンです…

      A:ローソンです。全国に約2万店あります。</s>

    • JapaneseStableLM(7B)
      A:セブンイレブン…

      A:セブンイレブン 9,362店(+78)
      B:ファミリーマート 10,451(-5)
      C:ローソンストア100 2,108 (-1)
      D:ミニストップ 1,919 (-40) 合計 : 1万7,896 (+174 )
      問3.「2位と30%近い差をつけての首位の背景には、ある理由が存在していました」という記述がある。そこで述べられている理由を答えよ。(解答欄数=5)(配点比率50

    • JapaneseStableLM(7B、追加学習あり)
      A:セブンイレブン…

      A:セブンイレブン 9,362店(+78)
      B:ファミリーマート 10,451(-5)
      C:ローソンストア100 2,108 (-1)

OpenCALMとJapaneseStableLMの3つが正解
OpenCALMは店舗数もかなり近いです

  1. Q:日本の都道府県で最も面積が広いのは?\nA:
    →正解:北海道(83,450km2)
    • OpenCALM(7B)
      A:沖縄、北海道…

      A:沖縄、北海道。日本は広いですね~。

    • RinnaJapaneseGPT(3.6B)
      A:北海道です…

      A:北海道です。 最も狭い所(最北の地)では、約3,780km2もあります! Q.【問題】 日本には多くの種類の動物がいるため「動物園」がありますよね 「水族館」「植物園」「サファリパーク」、「テーマーパーク」(遊園地なども含む総称として使う言葉で正式名称ではないそうなので注意が必要とのこと・・・。「アミューズメント施設」やらもこの中に入るのか?)などが代表的なものとして挙げられると思いま [続きを読む]</s>

    • RinnaJapaneseGPT(3.6B、追加学習あり)
      A:北海道です…

      A:北海道です。面積は39万平方キロメートルで、全国の約20%を占めています。</s>

    • JapaneseStableLM(7B)
      A:北海道…

      A:北海道 B:埼玉県 C:東京都 D:石川県 E : 岩手県 F :山口県 G :新潟県 H :栃木県 I J  J2 K:群馬県 L M N :山梨県 O P:富山県 QR :長野県 RRS S  SRT SRT1 SRT3 SRT4

    • JapaneseStableLM(7B、追加学習あり)
      A:北海道…

      A:北海道 B:埼玉県 C:東京都 D:岐阜県 E : 愛知県 F :山口県 G :新潟県 H :栃木県 I J  富山県 K   群馬県 L                (山形県) MN 長野県 N 山梨県 O P 滋賀県 Q R 神奈川県 S T千葉県 U V 福岡県 W X Z

RinnaJapaneseGPTとJapaneseStableLMの4つが正解

  1. Q:日本の通貨単位は何?\nA:
    →正解:円
    • OpenCALM(7B)
      A:円、ドル…

      A:円、ドル。硬貨は5セント以下と25¢・50Csがあります。[編集部]

    • RinnaJapaneseGPT(3.6B)
      A:円です…

      A:円です。 Q:1番の質問で、正解した人は「1」を入力してください。「2」「3...</s>

    • RinnaJapaneseGPT(3.6B、追加学習あり)
      A:円です…

      A:円です。 ドルやユーロなどもありますが、日本で最も一般的なのは日本円です。</s>

    • JapaneseStableLM(7B)
      A:日本円は「japanese yen」…

      A:日本円は「japanese yen」です。 日本の国内で利用される紙幣には、「一万円」「五千円札(樋口一葉)」「二千円札」などがあります。 硬貨にも種類があり、それぞれ発行している機関が異なります。 一万円の価値がある貨幣は日本銀行券と呼ばれています。「壱圓」、「拾圓」、10銭銅貨などは額面通りの価値はありませんので注意してくださいね! 日本では26種類の金貨・銀貨が存在しています。

    • JapaneseStableLM(7B、追加学習あり)
      A:日本円は「japanese yen」…

      A:日本円は「japanese yen」です。 日本の国内で使われるのはもちろんのこと、アメリカやヨーロッパなどの海外の観光地でも利用できますし、世界中の様々な国で両替が可能となっていますので便利ですよね! そんな便利な通貨である日...

回答としてはRinnaJapaneseGPTの2つが正解
JapaneseStableLMの2つは噛み合わない回答ですが間違ってはいません
OpenCALMは7問目と同様に2つ回答してしまいました

まとめ

今回は追加学習済みのモデルも含めて5種類動かして試してみました
プロンプトを投げる際のパラメータに改善の余地はありそうですが、いずれも正解率は6~7割程度で変な文章を続けて回答してしまうことが多かったです
なお、RinnaJapaneseGPTとJapaneseStableLMについてはベースモデルと追加学習済みモデルの両方を試しましたが大きな差は見られませんでした(追加学習の方向性が違えば当然の結果ではある)
今度は自身でもチューニングを行い、良い結果を出したいと思います

Discussion