日本語版の大規模言語モデルLLMを使ってみた。rinna社バージョン

X 旧Twitterはこちら。
https://twitter.com/ison1232

************

日本語版の大規模言語モデルが登場

ついに日本語で学習された大規模言語モデルが登場しましたね。
それも同じ日に、2つ同時です。

一つはサイバーエージェント社の日本語LLM。
もうひとつは rinna社の日本語LLM。

サイバーのやつはパラメータ数が68億。
rinna社のやつは36億。

まあ、億を超えてるわけで、すごいことなんですが、何と言ってもChatGPTが1750億。

GPT-4なんかは公開せずっていう(多分何兆レベル。scaling low理論の限界にチャレンジですかね。詳しくはscaling lowで検索)。

すごい数のパラメータがひしめきあってるので、30億でも「ふーん、そうなのね」で済んでしまう。

でもこれだけのパラメータ数で、しかも日本語を専用に学習させたモデルですから、期待は持てます。

ちなみに大規模言語モデルっていうのは、略称するとLLM(Large Language Model)と呼ばれています。

ChatGPTに大規模言語モデルLLMについて聞いてみた

意味をChatGPTに聞いてみましょう。

*****************ここから。原文ママ

大規模言語モデルは、近年の人工知能の進歩の中で重要な役割を果たしています。これらのモデルは、巨大なデータセットを学習し、自然言語の理解と生成を行うことができます。大規模言語モデルは、機械翻訳、文章生成、会話エージェント、情報検索、自動要約など、さまざまなタスクに利用されています。

大規模言語モデルの一例としては、GPT-3が挙げられます。GPT-3は、OpenAIが開発した最先端のモデルであり、数十億のパラメータを持っています。このモデルは、人間に近い文章を生成することができ、非常に優れた性能を持っています。

しかし、大規模言語モデルにはいくつかの制約も存在します。それらは、計算リソースの要求、データのプライバシーとセキュリティの問題、バイアスや偏見の反映などです。これらの制約に対処するためには、モデルの開発者や利用者が倫理的な観点を考慮し、適切なガイドラインや規制を策定する必要があります。

大規模言語モデルの進化は、今後ますます加速していくことが予想されます。より高度な自然言語処理能力を持つモデルが登場し、私たちの日常生活やビジネスの様々な側面に影響を与えるでしょう。しかし、その発展には慎重なアプローチが求められ、技術と倫理のバランスを取りながら進めていく必要があります。

************ここまで。原文ママ

だそうです。
GPT-3のパラメータ数は違ってますね。
1750億ですよね。

まあ、さておき。
早速、インストールして使ってみましょう。

rinna社の対話モデルをインストール

まずはrinna社から。

rinna社のやつはモデルが2つあって、汎用モデルと対話モデルがあります。
今回は対話に特化したやつの方が面白いかなと思ったので、対話モデルをいじってみましょう。

公開先はHugging face
機械学習のモデルがわんさかアップされているサイトです。

URLはこちら。
汎用GPT言語モデル
https://huggingface.co/rinna/japanese-gpt-neox-3.6b

対話GPT言語モデル
https://huggingface.co/rinna/japanese-gpt-neox-3.6b-instruction-sft

環境はgoogle colab proのスタンダード。

pro版で、GPUの設定を
A100
ハイメモリ
で、いってみます。

まずは下記のコマンドでインストールしていきます。

パッケージのインストール。
!pip install transformers sentencepiece

続いてこちら。

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

# トークナイザーとモデルの準備
tokenizer = AutoTokenizer.from_pretrained(
“rinna/japanese-gpt-neox-3.6b-instruction-sft”,
use_fast=False
)
model = AutoModelForCausalLM.from_pretrained(
“rinna/japanese-gpt-neox-3.6b-instruction-sft”
).to(“cuda”)

学習済みのモデルを落として、modelにセットする感じですね。

rinna社の対話モデルで推論してみた

で、推論してみます。

promptに質問文を入れるのですが、結構決まりがあるようで、詳細はHugging faceのサイトを読んでください。

簡単に説明すると、

prompt = “ユーザー: 首都の意味を答えてください。?システム: ”

このように、質問文の後に
システム: ”
を入れてとのこと。
最後は空白を入れるそうです。

では、これで推論のコードを記します。

# プロンプトの準備
prompt = “ユーザー: 首都の意味を答えてください。?システム: ”

# 推論
token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors=”pt”)
with torch.no_grad():
output_ids = model.generate(
token_ids.to(model.device),
do_sample=True,
max_new_tokens=300,
temperature=0.7,
pad_token_id=tokenizer.pad_token_id,
bos_token_id=tokenizer.bos_token_id,
eos_token_id=tokenizer.eos_token_id
)
output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1):])
output = output.replace(“”, “\n”)
print(output)

 

質問:
首都の意味を答えてください。

回答:
首都とは、国の首都であり、国の政府所在地であり、政府の所在地です。首都とは、国の中央政府や行政の中心であり、国の政治や文化の中心でもあります。

だそうです。
ん〜ん、てな感じもしないことはないですが、結構ちゃんとした答えが返ってきます。
やはり日本語で学習したやつは違いますね。

max_new_tokens=300 の値をいじると、返答の文字数を変動できます。
いろいろいじって遊んでみてください。

別に、サイバーのやつも使ってみましたが、両者ともどっこいどっこいといった所でしょうか。

ChatGPTにはまだまだ勝てない感じですが、こういった日本語LLMもどんどん開発していって、世界をリードしていってほしいものです。

大規模言語モデルLLMの日本語版の今後は?

そういえば先日、日本のスーパーコンピューターの「富岳」でしたっけ。これを使って日本語LLMを作るみたいな発表がありましたよね。

本気出してやれば、計算スピードはピカイチなんだから、結構早く目標を達成できるのではないでしょうか。
ただ、データセットをどうするとか、細かいパラメータの設定なんかは試行錯誤が必要なので、まだまだGAFAMには勝てないでしょう。

でもチャレンジすることに意味があるんですよね。
頑張ってください チーム「富岳」。
期待しています。

*******************

アスキーアートをプログラミング言語のPythonで作ってみた

アスキーアートって何

プログラミングとアートを融合させたい場合に、手っ取り早く表現できるのはこれ。
アスキーアートですね。
まずはご覧ください。

アスキーアートをChatGPTに聞いてみた

今となっては懐かしいアートですが、アスキーアートを知らない人もいると思うので、どんなものかと。
今時のChatGPTに聞いてみました。
以下、回答です。

**********ChatGPT曰く

アスキーアートとは、テキスト文字だけで描かれたアートのことを指します。文字の種類や大きさを調整することで、テキストの視覚的なレイアウトを作り出すことができます。

アスキーアートは、最初のパーソナルコンピュータが普及した1970年代に登場しました。
当時、コンピュータのグラフィック能力は限られており、画像を描くのにテキスト文字を使用することが一般的でした。

この技術は、コンピュータ画面上でプログラムが実行されている間、テキスト文字を使って遊び心のあるイラストを作ることができるという魅力的なアイデアを生み出しました。

アスキーアートは、様々な形式で表現されます。単純な絵文字から、詳細な3Dモデルまで、どんなものでも表現できます。

一部のアスキーアーティストは、手動でアートを作成することもありますが、多くの場合、画像変換ツールやオンラインアプリケーションを使用して、元の画像をテキストで置き換えます。

***********だそうです。

はい、わかりましたか?

アスキーアートをプログラミング言語Pythonで描いてみる

簡単に言うと、アスキーアートてのは、いわゆるテキストで絵やロゴを描いていくってやつです。

アートとしての面白さと、プログラミングの楽しさを感じられるのが、このアスキーアート。

特にプログラミングを始めてみたいけど、数字の羅列や計算とかは面倒だなーって人には、何か面白い結果が出るこのアスキーアートはおすすめです。

アスキーアートを作る

それでは、今回はアスキーアートを作るわけですが、以下のコードをgoogle colabへ貼り付けて、実行します。
ちなみに言語はPython3です。


from PIL import Image
from PIL import Image, ImageDraw

# アスキーアートに変換する画像ファイルのパス
IMAGE_PATH = “/content/○○○.jpg”

# アスキーアートに使用する文字列
ASCII_CHARS = [“@”, “#”, “S”, “%”, “?”, “*”, “+”, “;”, “:”, “,”, “.”]

# アスキーアートの横幅(文字数)
WIDTH = 80

# 画像を開く
image = Image.open(IMAGE_PATH)

# 画像をグレースケールに変換
image = image.convert(“L”)

# 画像のサイズを縮小
width, height = image.size

aspect_ratio = height / width
new_width = WIDTH
new_height = int(WIDTH * aspect_ratio * 0.46)
image = image.resize((new_width, new_height))

# 画像をアスキーアートに変換
pixels = image.getdata()
characters = “”.join([ASCII_CHARS[pixel // 25] for pixel in pixels])
art = “\n”.join([characters[i:(i + new_width)] for i in range(0, len(characters), new_width)])

# アスキーアートを表示
print(art)

# ファイルにアスキーアートを書き込む
with open(“/content/○○○.txt”, “w”) as f:
f.write(art)

# ファイルが保存されたことを確認
import os
if os.path.exists(“/content/○○○.txt”):
print(“アスキーアートをファイルに保存しました。”)
else:
print(“アスキーアートの保存に失敗しました。”)

 

設置した画像を元に、テキストファイルにアスキーアートを描いてくれるものです。

ところが、このテキストファイルに描くやつだと、大きさの関係で人間にはちょっとわかりづらいんですね。

そこで、テキストファイルを画像に変換するコードがこれです。

from PIL import Image
from PIL import Image, ImageDraw

# テキストファイルを開く
with open(‘/content/○○○.txt’, ‘r’) as f:
text = f.read()

# 画像サイズを指定する
width, height = 500, 600

# 画像オブジェクトを作成する
img = Image.new(‘RGB’, (width, height), color = (255, 255, 255))

# テキストを描画するためのオブジェクトを作成する
draw = ImageDraw.Draw(img)

# テキストを画像に描画する
textwidth, textheight = draw.textsize(text)
x = (width – textwidth) / 2
y = (height – textheight) / 2
draw.text((x, y), text, fill=(0, 0, 0))

# 画像を保存する
img.save(‘/content/○○○.jpg’)

 

このコードもgoogle colabへ貼り付けて実行してみましょう。

お次は上記の2つのコードを1個にまとめた方が使い勝手がよろしいかと思い、コードを合体させました。
それがこちら。

from PIL import Image
from PIL import Image, ImageDraw

# アスキーアートに変換する画像ファイルのパス
IMAGE_PATH = “/content/kei001.jpg”

# アスキーアートに使用する文字列
ASCII_CHARS = [“@”, “#”, “S”, “%”, “?”, “*”, “+”, “;”, “:”, “,”, “.”]

# アスキーアートの横幅(文字数)
WIDTH = 80

# 画像を開く
image = Image.open(IMAGE_PATH)

# 画像をグレースケールに変換
image = image.convert(“L”)

# 画像のサイズを縮小
width, height = image.size

aspect_ratio = height / width
new_width = WIDTH
new_height = int(WIDTH * aspect_ratio * 0.46)
image = image.resize((new_width, new_height))

# 画像をアスキーアートに変換
pixels = image.getdata()
characters = “”.join([ASCII_CHARS[pixel // 25] for pixel in pixels])
art = “\n”.join([characters[i:(i + new_width)] for i in range(0, len(characters), new_width)])

# アスキーアートを表示
print(art)

# ファイルにアスキーアートを書き込む
with open(“/content/○○○.txt”, “w”) as f:
f.write(art)

# ファイルが保存されたことを確認
import os
if os.path.exists(“/content/○○○.txt”):
print(“アスキーアートをファイルに保存しました。”)
else:
print(“アスキーアートの保存に失敗しました。”)

# テキストファイルを開く
with open(‘/content/○○○.txt’, ‘r’) as f:
text = f.read()

# 画像サイズを指定する
width, height = 500, 600

# 画像オブジェクトを作成する
img = Image.new(‘RGB’, (width, height), color = (255, 255, 255))

# テキストを描画するためのオブジェクトを作成する
draw = ImageDraw.Draw(img)

# テキストを画像に描画する
textwidth, textheight = draw.textsize(text)
x = (width – textwidth) / 2
y = (height – textheight) / 2
draw.text((x, y), text, fill=(0, 0, 0))

# 画像を保存する
img.save(‘/content/○○○.jpg’)

 

アスキーアートをプログラミング言語のPythonで作ってみたのまとめ

google colabで動作確認済みです。いろいろいじって遊んでみてください。
アスキーアートに使う文字を変えてみるとか、画像の大きさを変えてみるとか。
自分に合ったコードに改造してみてください。

改造して動かしていくと、どんどん腕が上がっていきます。
当然、わからないところやエラーが出たりしますが、そんな時はググったり、チャトッたり(別名GPTったり)なんかで解決していきましょう。

アート系が好きな人、ちょっと変わったプログラミングをしてみたいって方はぜひ!

*******************

ChatGPTを使って、自然言語処理をプログラミングしてみた

ChatGPTに自然言語処理について聞いてみる

昨今のChatGPTの勢いがすごいものがありますね。

確かに使ってみるとわかるのですが、結構質問に対しての優れた回答をしてくれます。
これだけすごいシステムですから、プログラミングをしている者からすると、中身を知りたくなりますよね。

そんなこんなで、GPTシリーズの初期の頃のバージョンであるGPT2の文書生成モデルはどんなものなのかをChatGPTに聞きながら実装してみました。
(ちなみにChatGPTの回答はファクトチェックしていません。なので、間違っている可能性もあります。そこをご了承のほど)

まずは、ChatGPTに以下のプロンプトを投げてみます。

「あなたはシステムエンジニアです。
GPT2のようなシステムを使って、自然言語処理を体感したいです。
環境はgoogle colab
言語はPython。
上記の仕様でPythonコードを書いてください。
一歩づつ考えて実行してください。」

ちなみに、最後の「一歩づつ考えて実行してください。」は、このプロンプトを投げると理数系の精度が上がるらしいプロンプトです。

英語だと
Let’s think step by step.

この一言で数学の計算問題が解けたとかどうとか。

なので、一応、上記の日本語版で付けてみました。

で、返ってきた答えがこれ。

ChatGPTが書いたプログラミングのコード

###### ChatGPTの回答ここから

「はい、理解しました。まずはGoogle ColabでGPT-2の自然言語処理を体験するために必要なライブラリをインストールする必要があります。

以下のコードをGoogle Colabのセルにコピー&ペーストして実行してください。

!pip install transformers

次に、GPT-2を使って文章生成を行うためのコードを以下に示します。

##### pythonコードここから

from transformers import pipeline, set_seed

# 乱数シードを設定
set_seed(42)

# パイプラインを定義
generator = pipeline('text-generation', model='gpt2')

# テキスト生成
text = generator("Hello, I'm ChatGPT and ", max_length=50, num_return_sequences=1)[0]['generated_text']
print(text)

##### pythonコードここまで

このコードをGoogle Colabにコピー&ペーストし、実行してください。すると、”Hello, I’m ChatGPT and “というテキストに続く50文字の文章が生成されます。

上記のコードでは、GPT-2を用いた文章生成を行うために、Transformersというライブラリを使用しています。まず、set_seed()を用いて乱数のシードを固定し、同じ条件下で実行した場合に同じ結果が得られるようにしています。次に、pipeline()を用いてtext-generationというパイプラインを定義しています。このパイプラインを使用すると、GPT-2による文章生成を行うことができます。

最後に、生成するテキストの初めとなる文字列と、最大の文字数、生成するテキストの数を指定し、文章を生成しています。生成された文章は、print()で出力しています。

以上が、Google ColabでGPT-2を使った自然言語処理の体験に必要なコードになります。ご参考にしてください。」

###### ChatGPTの回答ここまで

てか、短かっ。
もっと長々のコードが出力されると思いきや、ほんの数行です。

おまけにtransformersのライブラリを読み込んでの回答です。

Attention層を使ってゴニョゴニョではなく、端折っているところが何とも言えないのですが、シンプルイズベストということで、今回はこのコードを実行してみましょう。

「Hello, I’m ChatGPT and」以降の文章を生成してくれるみたいです。

google colabにコピペして実行する

上記コードをgoogle colabにコピペ。

で、実行します。

結果は見事に文書生成できています。

「Hello, I’m ChatGPT and irc.is. A friend of mine went on a vacation on a recent trip and I came across a list of people where they will send their information (such as how many hours they are, how they」

もちろん、文書の意味は大した回答にはなっていません。
ざっくりモデルですから仕方ないですね。

大ざっぱに自然言語処理の文書生成を知りたい方には、かえって数行のコードですから、わかりやすいかもです。

GPT-3もtransformersライブラリを使ってるのか?

ついでに聞いてみました。

「GPT3もtransformersライブラリを使っているのですか?」

ChatGPTの回答です。

「はい、GPT-3もTransformersライブラリを使用しています。Transformersライブラリは、自然言語処理に関するさまざまなタスクを実行するためのAPIを提供し、GPT-2やGPT-3などの事前学習済み言語モデルを含め、多くのニューラルネットワークモデルをサポートしています。」

とのことです。
(ファクトチェックしてないです。あしからず)

ChatGPTは勉強教材として最高のツール

さて、今回の内容で学べることは、ChatGPTはプログラミングの勉強教材としては結構使えるものだってことです。

書籍を読む時間のない方や、本格的な書籍ほどの知識は要らない、けど、ざっくりとした知見は欲しいって方には、ピンポイントで知りたいことを聞けるツールだってことです。

以前だとググって必要な情報を探したけど、結構時間がかかるんですよね。
ましてやコードが動かないってこともあるし。

ChatGPTの出力したコードはgoogle colabで動かすと大抵はOKですね。
もちろんエラーも出ますけど、その際はググったり、調べたりで修正していけばよろしいかと。

あと、ChatGPTがあるからって、全くの知識がない方がチャレンジしても難しいです。
とりあえず入門書や基本書みたいなのを2、3冊読んでから挑戦してみてください。
でないと、専門用語がわからないですよね。

さて、そんなこんなで、
お次はGBT-3から大規模言語モデルLLMの実装ですかね。
(google colabだけじゃGPU足りませーん)

プログラミングがさらに楽しくなりそうです。

 

PAGE TOP