乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

LLM

今回は
まだ活用できていない人のための
大規模言語モデルについてです


解説動画はこちら



最近流行の大規模言語モデルについての概要と
コード生成での活用方法についてです


大規模言語モデルとは

英:large language model
日:大規模言語モデル

多数のパラメータを持つ
ニューラルネットワークで構成される
コンピュータ言語モデルのこと

自然言語処理分野のさまざまなタスクで
優れた性能を発揮し 世の中の一般知識や
訓練中の事実を記憶することができるため
さまざまな自然言語タスクに応用することができる
というものです。

LLMの作成には大量のテキストデータで事前訓練が行われ
高品質な言語データは数兆語に及ぶと推定されています


現在の主流は
・巨大テキストデータセットを用いた、事前学習(Pre-Training)
・性能を最適化する、微調整(Fine-Tuning)
の2段階のプロセスで構成されています。

自社でLLMを活用する際は学習データを用意して
ファインチューニングを行い
業務に最適化させる必要があります。


大規模言語モデル(LLM)の種類

GoogleのBERTやLaMDA
ChatGPTに用いられているGPT-4
新興系だとAnthropicのClaudeなどがあります

その他、2023年現在では
様々な言語モデルが登場しています。



大規模言語モデル(LLM)の活用方法 

LLMの活用は
指示を送る入力文(プロンプト)の
エンジニアリング次第です

ここからはコード生成における
プロンプトエンジニアリングの
ベストプラクティスをお送りします

・ベストプラクティス

「命令文」「制約条件」「入力文」の
3構成に分けそれぞれで詳細な設定を行う

ここからは詳細なプロンプトの書き方を
説明します。

1.プロンプトの最初に指示を書く

役割や目的を明示しておくと良いでしょう

例:
あなたはFlutterで開発をしているプログラマーです
以下の条件でコードを修正してください

2.区切り文字を使用する

例:
# 命令書
・・・・・・・・

# 条件
・・・・・・・・


3.前提条件(制約)を指定する

使用できるライブラリや変数名を
細かく指定するとうまく行く確率が上がります

例:
#条件
・bodyにリストビューを追加する
・リスト表示用のデータはxxxを使用する
・・・・



4.出力形式を追加する

XXXメソッドの部分を直す等
細かく指定するほど出力される
コードの精度も上がるようです

例:
#条件
・XXメソッドの戻り値を文字列に変更する
・・・・

5.コードを入力する

コードを修正してもらいたい場合は
修正対象のコードをそのまま入力します

例:
#以下はflutterのコードです
・・・・
・・・・・

コピペしましょう



LLMを活用するための便利なツール

・OpenAI:ChatGPT
・Bing:AIチャット
・Google:Bard
・Anthropic:Claude

など、現在では使用できるLLMサービスが複数あります
一個一個使用するのは面倒くさかったりもするので
一気にまとめてプロンプトを投げられる
ツールが有ります。

「ChatHub」

Google Chromeのプラグインになるので
Google webstoreなどからインストール出来ます。

使用感は動画の方を見ていただければと思います。


今回はLLMとその活用方法について
お伝えしました。

コード作成がめちゃくちゃ捗るので
活用しない手は無いですね

是非色々活用してみて下さい
それでは。

今回は最近発表された大規模言語モデル
Rinna を試してみました

解説動画はこちら



はじめに

最近発表された「Rinna」は
rinna株式会社が開発した
大規模言語モデル(LLM 英: large language model)
になります

日本語に特化した36億パラメータを持つ
汎用言語モデルと対話言語モデルの
2種類のGPT言語モデルが
オープンソースで公開されています

今回は対話GPT言語モデル
の方を使っていきます

モデル自体はこちらで公開されています

対話GPT言語モデル(Hugging Faceリンク


早速使い方を見ていきましょう

必要可動要件


モデルの稼働にメモリが16GBほど必要です
最低でも16GB以上の
メモリを積んだPCが必要です

メモリが足りない場合は
次のモデルのダウンロードで落ちます


インストール方法

transformers pytorch などの
ライブラリが必要です

手元にインストールしていない人は
インストールしておいて下さい

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



モデルのダウンロード

ライブラリに問題ない人は
次のコードでモデルをダウンロード出来ます

モデルのダウンロード(15-20分くらい)
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")


GPUが使える人は
下記のコードを追加するとGPUを使えます
if torch.cuda.is_available():
    model = model.to("cuda")


rinnaを使って会話してみる

先に会話実行用の関数を定義しておきましょう
プロンプトと呼ばれる命令文を
引数として渡します

プロンプトの後半部分も
作成する関数を用意します
# 対話用関数
def excute_conv(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=128, 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") output = output.replace("。","。\n") print(output) def make_prompt(l): prompt = [f"{k}:{v}" for (k,v) in l] prompt = "<NL>".join(prompt) prompt = (prompt + "<NL>" + "システム: ") return prompt

ここまで用意できたら、あとは
プロンプトを用意して会話するだけです

簡単なプロンプトを指定して会話してみましょう
# プロンプトの用意
l = [
    ["ユーザー","あなたはどんな仕組みで動いていますか、より詳しく解説して下さい"],
]
prompt = make_prompt(l)
print(prompt.replace("<NL>","\n"))
excute_conv(prompt)
ユーザー:あなたはどんな仕組みで動いていますか、
より詳しく解説して下さい

システム: 
私はロボットであり、ハードウェアと
ソフトウェアを組み合わせ、そのハードウェアを使って
自分自身のソフトウェアを実行しています。
</s>


こんな感じで会話が成立しました
日本語自体はかなり自然で正しい構文である様に見えます

他の会話も色々試しているので
結果は動画をみてみて下さいね


まとめ

ChatGPTを初めとした
大規模言語モデルの開発が進んできています

ファインチューニングを行えば
自社のサービスに特化した会話も
実現できる様になりそうなので

これらのモデルの進化に期待したい所です

今回はここまでです
それでは

このページのトップヘ