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

Python

プログラミング未経験の方のための
プログラミング学習講座を作成しました

その名も
「1時間で学べるPythonプログラミング」


講義動画はこちら




この講座は初学者の方が
短時間でPython言語を学ぶことのできる
プログラミング学習用の講座です

プログラミングが分からないない方は
Python言語を通じて
プログラミングの基礎を学習できます

講座は動画に加えてGoogle Colabを用いて
手元でコードを動かすことのできます
コードがどう動くのかを確認をしながら
進めていってください

資料はここ:
Google Colabの資料


00:00 1.はじめに
02:13 2.導入方法
02:55 3.GoogleColaboratoryの操作方法
06:19 4.Pythonの計算の基礎
27:27 5.Pythonの制御文
42:14 6.Pythonのクラス
49:11 7.Pythonのその他構文
64:30 8.まとめ

なおPythonチートシートを作成しています。

コーディングに迷った際に役に立ち

WEB検索する時間を無くして

作業時間を効率化できます。

note
Pythonチートシート


 

今回はサイバーさんの
大規模日本語モデルを
Google Colabで試してみることにしました

解説動画はこちら



はじめに

サイバーエージェントから日本語LLM
OpenCALMが発表されたので
Google Colabで動かしてみることとします

最大68億パラメータの
日本語LLM(大規模言語モデル)

オープンなデータで学習した
商用利用可能なモデルとのことです

詳細はこちら

chatGPTなどとは違い
入力した文章の
続きとなる文章を生成してくれる
LLMになっています

モデルの性能も
いくつか種類がある様で

Model Params Layers Dim Heads Dev ppl
cyberagent/open-calm-small 160M 12 768 12 19.7
cyberagent/open-calm-medium 400M 24 1024 16 13.8
cyberagent/open-calm-large 830M 24 1536 16 11.3
cyberagent/open-calm-1b 1.4B 24 2048 16 10.3
cyberagent/open-calm-3b 2.7B 32 2560 32 9.7
cyberagent/open-calm-7b 6.8B 32 4096 32 8.2

こんな感じのモデル構成になっています
今回は一番小さい small モデルを試します


必要なもの

Google Colabで動かすのに必要なのは
1.「ランタイムタイプの変更」:GPUに変更する
2.必要なライブラリのインストール
3.ライブラリやモデルのインポート
です


・「ランタイムタイプの変更」:GPUに変更する

Colabのメニューから「ランタイムタイプの変更」で
GPUに変更しておきましょう




・必要なライブラリのインストール

Google Colabのライブラリだけでは
動かないので次の2つをインストールしましょう
!pip install transformers

!pip install accelerate

1分くらいでインストール出来ます


・ライブラリやモデルのインポート

次のコードでライブラリと
モデルをセットアップ出来ます
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("cyberagent/open-calm-small", device_map="auto", torch_dtype=torch.float16)
tokenizer = AutoTokenizer.from_pretrained("cyberagent/open-calm-small")

エラーはライブラリなどが
インストール出来ていない場合に起きるので
先にインストール確認しておきましょう


次のコードは入力用の関数です
先に実行しておきましょう
# 入力用の関数を定義
def make_text(input_text):
    inputs = tokenizer(input_text, return_tensors="pt").to(model.device)
    with torch.no_grad():
        tokens = model.generate(
            **inputs,
            max_new_tokens=64,
            do_sample=True,
            temperature=0.7,
            pad_token_id=tokenizer.pad_token_id,
        )
    return tokenizer.decode(tokens[0], skip_special_tokens=True)


ここまで揃ったらあとは実行のみです
文章を入力して実行してみましょう
input_text = "文章を入力、"
out = make_text(input_text)
print(out)

次のような文章が生成されました

吾輩は猫である、つまり猫である。
猫が猫であるということは、
すなわち猫であるということは、
つまり猫であるということである。

これは、猫に人間が従うという前提が、
猫に人間を従わせるという前提が前提になっているからである。

猫は、人間に従属する、従属関係にある。
猫は、人間に従属する



諦めたらそこで試合終了ですよ、
正直、今、プロでも勝てる試合もそんなにない。
しかも、まだ2試合あるし。

まあ、その状態は、
プロでも通用しないってことですよね。

で、その状態での、
4連敗は、
かなり、ヤバい。
もう、
負けると、
もう、




俺は高校生探偵、工藤新一。
幼馴染と遊園地へ遊びに行って、
黒ずくめの男の怪しげな取引現場を目撃した、
同級生の阿久津。

そして、阿久津は、ある事件の犯人に成りすまして、
美人でかっこいい高校生探偵・工藤新一と名乗り、
高校生探偵事務所を開いたのだ。

その依頼を受けた新一は、阿久津に、
事件の詳細を尋ねた。
それは「工藤新一」という同級生の阿久津


勝手に色々な物語を生成してくれます

正直な話
精度に関しては良く分かりません

実行毎に結果は変わるので
良いものが出るまで
繰り返してみることをお勧めします


今回はサイバーエージェントの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を初めとした
大規模言語モデルの開発が進んできています

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

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

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

今回はAmazonからリリースされた
コーディング支援ツール
Amazon CodeWhispererを試していきたいと思います


解説動画はこちら




さてこのツールですが
Amazonからリリースされた
コーディング支援ツールになっていて
個人なら無料で使えそうです

VSCodeなどのIDEで利用可能です
Pythonを初めとした
たくさんの言語で使えるみたいです


CodeWhispererを使えるようにする方法

1.VSCodeのインストール

MSのサイトからインストールしましょう

2.Amazon Toolkitのインストール

VSCodeの拡張機能から
インストール出来ます

3.DEVELOPER TOOLSの起動

画面左のDEVELOPER TOOLSから
CodeWhispererの所にある
Startをクリックしてください

4.ビルダーIDの登録

英語で「ビルダーIDでサインイン」が
を選択出来るので、そこから出てくる
ポップアップのコードをコピーします

5.Eメールで登録

AmazonのWEBサイトで登録を行う形になります

Eメールを入力すると確認コードが飛んでくるので
それとパスワードなどを入力して登録します

登録できたら使える様になります


Amazon CodeWhispererの使い方

使い方はとても簡単で

コード上でコメントに
入力してもらいたいコード内容を
文章で入力してエンターキーです

コードが推薦されるので
タブキーで確定します

これだけです

あとは使ってみましょう

使っている様子は
動画から確認する事ができますので
使い勝手を見てみて下さい

ChatGPTに加えて
コーディングもAI活用で
かなり捗るのではないかと思いますので
なかなか面白いですね

これからもこういうツール系は
たくさん試してみたいと思います

それでは

今回はChatGPTが
簡単なコードでもどこまで書けるか
色々試してみることにしました


解説動画はこちら



今回はChatGPTを用いて
コードを書かずにプロンプトの指定だけで
どこまでプログラミング 出来るかを
試してみました



プロンプトプログラミング

ChatGPTを用いると
簡単なプログラムコードを
作成させる事ができます

そのプログラムコードが
上手くいくものになるかどうかは
「プロンプト」の指定が
正しく行われている事が前提となっています

なので正しく動作するプログラムを生成したければ
それなりにプロンプトの指定を
きちんと指定を行う必要があります

上手くいくコツとしては

1.どのようなものを作るのかを指定する
2.前提条件を指定する
3.機能面を細かく指定する

というのがポイントとなります

まず初めに簡単なプログラムを指定しました

前提条件:
コードにはコメントを記載する
Python 3.8を使用する
グローバル変数の使用を避けて関数の引数を介して必要な変数を渡す

機能条件:

1.以下の構造を持つ関数「read_csv_file」を作成する
seaborn ライブラリの tips データセットを読み込みする
データフレームを戻り値として返す

2.機能条件1で作成したデータを読み込み以下の形式でプロットする関数「plot_data」を作成する
matplotlib ライブラリを用いて読み込んだデータフレームの
数値型の列のデータを1つ箱髭図でプロットする

こんな感じで指定を行うと
次のようなコードが生成されました

import seaborn as sns
import matplotlib.pyplot as plt

def read_csv_file():
    # seabornライブラリのtipsデータセットを読み込む
    df = sns.load_dataset('tips')
    # データフレームを返す
    return df

def plot_data(df, column_name):
    # 指定された列のデータを取得
    data = df[column_name]
    # 箱ひげ図を描画
    fig, ax = plt.subplots()
    ax.boxplot(data)
    ax.set_title(column_name)
    plt.show()

関数の指定しかしていないので
関数だけが作成されましたが
動作としては正常に動作するものになりました

要は指定通りです


次はGUIを作成してみました

データの読み込みは一緒にして
ボタンを配置するなどの機能を指定します

ボタンをクリックしたら
描画する様に指定してみます

以下の条件を満たすPythonコードを生成して下さい

前提条件:
コードにはコメントを記載する
Python 3.8を使用する
グローバル変数の使用を避けて関数の引数を介して必要な変数を渡す

機能条件:

1.以下の構造を持つ関数「read_csv_file」を作成する
seaborn ライブラリの tips データセットを読み込みする
データフレームを戻り値として返す

2.ipywidgetsを使ってGUIを作成する
 2-1.で作成した関数を用いてデータフレームを作成する
 2-2.データフレームのデータを数値型だけに絞り込む
 2-3.ipywidgetsで2-2で作成したデータのカラムを選択できるセレクトボックスを作る
 2-4.ipywidgetsでボタンを作成し「plot」と表示する
 2-5.2-4で作成したボタンをクリックしたら読み込みしたデータをmatplotlibライブラリでプロットする

出来上がったコードはこれ

import seaborn as sns
import ipywidgets as widgets
from IPython.display import display
import matplotlib.pyplot as plt

def read_csv_file():
    # seabornライブラリのtipsデータセットを読み込む
    df = sns.load_dataset('tips')
    # データフレームを返す
    return df

def plot_data(df, column_name):
    # 指定された列のデータを取得
    data = df[column_name]
    # 箱ひげ図を描画
    fig, ax = plt.subplots()
    ax.boxplot(data)
    ax.set_title(column_name)
    plt.show()

def on_button_clicked(b):
    # カラムを選択するセレクトボックスの値を取得
    column_name = dropdown.value
    # 指定されたカラムのデータをプロットする
    plot_data(numeric_df, column_name)

# データフレームを読み込む
df = read_csv_file()
# 数値型のカラムだけを抽出したデータフレームを作成する
numeric_df = df.select_dtypes(include=['float64', 'int64'])

# カラムを選択するセレクトボックスを作成する
dropdown = widgets.Dropdown(options=list(numeric_df.columns))

# ボタンを作成する
button = widgets.Button(description='plot')
# ボタンがクリックされたらon_button_clicked関数を呼び出す
button.on_click(on_button_clicked)

# セレクトボックスとボタンを表示する
display(dropdown)
display(button)

ボタンもきちんと配置され
機能面も指定通りです

クリックすると描画も行われます
数値型の絞り込みもバッチリですが
クリックごとに描画が増えてしまうので
そこを消す指定をしてあげないと
クリックするたびに画像が増えてしまいます

プロンプトで指定していない機能は
実装されない様ですね

最後はWEBからデータを取得して
描画させる様にしました

以下の条件を満たすPythonコードを生成して下さい

前提条件:
コードにはコメントを記載する
Python 3.8を使用する
グローバル変数の使用を避けて関数の引数を介して必要な変数を渡す
データの作成はPandasライブラリを使用する

機能条件:

1.以下の要件を満たすコードを作成する
1-1.以下のWEBサイトからPandasライブラリを用いてデータを取得する
 「https://finance.yahoo.co.jp/quote/998407.O/history」

1-2.取得したデータの1番目のデータをデータフレームとして読み込みする
1-3.Plotlyライブラリを用いて5列目のデータを折れ線グラフでプロットする
WEBからのデータ取得は上手くいくのでしょうか?
出来上がったコードはこれ

import pandas as pd
import plotly.express as px

# Yahoo Financeからデータを取得
url = 'https://finance.yahoo.co.jp/quote/998407.O/history'
df = pd.read_html(url)[0]

# 1番目のデータを取得
df = df.iloc[[0]]

# 5列目のデータを折れ線グラフでプロット
fig = px.line(df, x='日付', y=df.columns[4])
fig.show()

データの取得は出来ましたが
描画の方が少しおかしいところが出てきました

表示されるラベルが違っていたり
データが足りなかったり
データの造り込みなどを指定する部分が
少し甘かった様です

このようにきちんとプロンプトを指定すれば
コードの方もきちんとしたものが返ってきます


コードの作成に時間がかかる様なものをつくりたければ
仕様をきちんと文字起こしすれば
上手く機能するコードに直す事が
一瞬で出来そうですね


プログラミング初心者が
どうコードを書いて良いかわからない場合に
お手本となるサンプルプログラムを
解説付きで生成出来たりもするので

これからはプロンプトプログラミングが
主流になっていくんじゃないかと思います

プログラム言語の知識に加えて
その周辺のプロンプト活用の知識も
必須になって来ますね

今回はプロンプトを活用して
ChatGPTでノーコードプログラミングを
試してみました

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

このページのトップヘ