« 日本語対応のオンプレ生成AIとしては現時点で最強!?な感じの「OpenCalm 7B」 | トップページ | メインPCのストレージをキオクシア製2TB NVMe M.2 SSDにしてみた »

2023年5月21日 (日)

こっちの方が本命か!?日本語専用生成AI「rinna japanese-gpt-neox-3.6b」

先日の「日本語対応のオンプレ生成AIとしては現時点で最強!?な感じの「OpenCalm 7B」: EeePCの軌跡」という記事を書いている時にも薄々勘づいてました。rinnaというもう一つの日本語専用AIの最新版も公開されるらしい、と。

で、それが出てたので、早速試してみました。
参考サイトはいか。

rinna/japanese-gpt-neox-3.6b-instruction-sft · Hugging Face

日本語特化型の大規模言語モデル、OpenCALMとrinna/japanese-gpt-neox-3.6bの検証 - Qiita

ところでこのrinna/japanese-gpt-neox-3.6ですが、大きく二種類あります。
簡単に言うと、前回紹介した「OpenCalm 7B」のように文章の続きを書くやつ。
そしてもう一つが、質問文→回答 を返すタイプのもの。
正直、文章の続きを書かれてもという気持ちなので、後者の「質問→回答」型のやつをいきなり動かします。

プログラムコードは以下(rinna-3.6b-instruction-sft.py)。

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
# prompt定義
prompt = [
    {
        "speaker": "ユーザー",
        "text": "AIを有効に活用するにはどうすればいいですか?"
    }
]
prompt = [
    f"{uttr['speaker']}: {uttr['text']}"
    for uttr in prompt
]
prompt = "<NL>".join(prompt)
prompt = (
    prompt
    + "<NL>"
    + "システム: "
)
print(prompt)
# ここまで
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")
#if torch.cuda.is_available():
#    model = model.to("cuda")
model = model.to("cpu")

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=256,
        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("<NL>", "\n")
print(output)

プロンプトの与え方が、ちょっと変わってます。まるでChatGPT APIに受け渡す形式のようですね。
まあ、要するに「"text": 」の後ろに質問文を書けばいいだけです。
また、我が家のGPU環境(GTX1650Ti GPUメモリーは4GB)ではGPUでの動作ができなかったため、model = model.to("cpu")をしております。

なお、うちではモデルダウンロード時にエラーが出ました。以下のライブラリを入れたら、エラーを解消しました。
> pip install sentencepiece

では早速、実行です。
> python rinna-3.6b-instruction-sft.py

20230521-141401
メモリー使用量はMaxで30GB程度。64GBメモリー搭載の我が家のメインPCに死角はない。
ちなみに、モデルダウンロードを除くと、実行から回答出力まで大体2分でした。

で、質問文と得られた回答を並べます。

【質問文】
AIを有効に活用するにはどうすればいいですか?

【回答】
AIは、さまざまなタスクを実行するために設計されたコンピュータプログラムです。
AIは、人間が行うような複雑で詳細なタスクを実行することができますが、通常、人間が行うよりも効率が低くなります。
AIを有効に活用するためには、AIに大量のデータを学習させ、それらのデータを検証して、人間が行うよりも効率が高いかどうかを確認する必要があります。
また、AIがより効率的にタスクを実行するために、特定のタスクに特化したソフトウェアを作成することも可能です。
これらを行うには、AIに専門的な知識や技術が必要であり、人間が行うよりもはるかに高価になることがあります。

うん、なかなかいい感じじゃないでしょうか。3.6B(36億パラメータ)とは思えないほどのいい回答っぷりです。

調子に乗って、少し難易度の高い質問もしてみました。

【質問文】
データドリブン経営を実現するには、まず何から取り組めばよいですか?

【回答】
私は、データドリブン経営を実現するためのさまざまな方法があると思います。以下は、データドリブン経営を実現するための一般的な方法のいくつかです:

- データや事実を分析し、そこから学びを得る
- データを解釈し、その解釈から価値を生み出す
- データから学び、データが示す現実に基づいてアクションを起こす
- データを解釈し、ビジネスモデルや戦略を改善する
- データと事実に基づいて行動し、データから学び、プロセスを改善する

あなたはどのようにデータドリブン経営を実現したいですか?

なぜか、質問に質問を返してきました。
おそらくここでチャット形式に質問を続けると、さらなる答えが引き出される……のかもしれません。この回答自体をプロンプトに加えて、再び質問です。

ということで、プロンプト部分を以下のように変えました。

prompt = [
    {
        "speaker": "ユーザー",
        "text": "データドリブン経営を実現するには、まず何から取り組めばよいですか?"
    },
    {
        "speaker": "システム",

        "text": "私は、データドリブン経営を実現するためのさまざまな方法があると思います。\
            以下は、データドリブン経営を実現するための一般的な方法のいくつかです:\
            - データや事実を分析し、そこから学びを得る\
            - データを解釈し、その解釈から価値を生み出す\
            - データから学び、データが示す現実に基づいてアクションを起こす\
            - データを解釈し、ビジネスモデルや戦略を改善する\
            - データと事実に基づいて行動し、データから学び、プロセスを改善する\
            あなたはどのようにデータドリブン経営を実現したいですか?"
    },
  {
        "speaker": "ユーザー",
        "text": "データと事実に基づいて行動し、データから学び、プロセスを改善することに重きを置きたいと考えてます。"
    }
]

で、返ってきたのはこちら。

【回答2】
素晴らしいです!
そして、データドリブン経営を実現するためには、データから学び、データから学び、プロセスを改善するさまざまな方法があります。
以下にいくつかの例を挙げます:
- データから学び、データを解釈して、現実に基づいてアクションを起こす
- データを使って学び、データを解釈し、プロセスを改善する
- データを解釈し、ビジネスモデルや戦略を改善する
- データを解釈し、プロセスを改善する
- データを解釈し、ビジネスモデルや戦略を改善する

うん、心を広く持てば、一応は会話になっているのかなとも思える回答です。

ということは、このプロンプトの部分をJSON形式のファイルとして書き出し、同じスレのチャット上で過去の会話も残しつつモデルに受け渡すようなプログラムを組んだら、いわゆるチャット型のAIが作れる気がします。

と言いたいところですが、実のところ、同じプロンプトで2、3回動かして、わりとマシな回答となったものをここに載せているため、必ずしもこのクオリティの回答が得られるとは限りません。時々、繰り返し文のようなものを返すこともあります。
これでチャットアプリを作るなら、安定的なパラメータ値が欲しいところです。

ちなみにですが、このjapanese-gpt-neox-3.6bのモデルは「The MIT Lisence」、つまり商用利用は可能なやつのようです。

にしても、今年に入ってからのオープンソースな文章生成AIの勢いが止まりませんね。この調子だと今年の終わりごろには、どうなってるんでしょうか?


週刊東洋経済 2023/4/22号(ChatGPT 仕事術革命)

« 日本語対応のオンプレ生成AIとしては現時点で最強!?な感じの「OpenCalm 7B」 | トップページ | メインPCのストレージをキオクシア製2TB NVMe M.2 SSDにしてみた »

数値解析系」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« 日本語対応のオンプレ生成AIとしては現時点で最強!?な感じの「OpenCalm 7B」 | トップページ | メインPCのストレージをキオクシア製2TB NVMe M.2 SSDにしてみた »

無料ブログはココログ

スポンサード リンク

ブログ村