【幕間】マイクロソフト Bing AI Chat
戦国でも片田順でもない話題で恐縮です。AI Chat の続編です。マイクロソフトの Bing AI Chat が使えるようになりましたので、試してみました。
今回はChatGPTの時とは趣向を変えて、AI Chat にプログラムを組ませてみました。
弥一>1から10までを足し算するPythonのプログラムを作って
■Bing>
こんにちは、これはBingです。
1から10までを足し算するPythonのプログラムを作る方法はいくつかありますが、一般的な方法はfor文を使うことです。
例えば、次のようなコードで実現できます。
# リスト内包表記とsum関数を使う
sum = sum([i for i in range(1, 11)]) # 1から10までのリストの合計を求める
print(sum) # 結果を出力
――― Bingの回答、ここまで ―――
このプログラムは、そのまま動作します。私のパソコンで試してみました。
Python 3.9.13 です。
変数名に関数sumと同じ名前を使うのは、どうでしょうか、ちょっとわかりにくい気がします。
なお、BやんはPython version 3 派のようです。
(Pythonは前のバージョン2の資産が大量にあるので、バージョン2とバージョン3のプログラムが併存しています)
他の言語でも試してみましょう。統計解析に使われるR言語を試しました。
弥一>1から10までを足し算するR言語のプログラムを作って
■Bing>
# 1から10までの合計を求める
sum <- 0 # 合計を初期化
for (i in 1:10) { # 1から10まで繰り返す
sum <- sum + i # 合計にiを加える
}
print(sum) # 結果を出力
――― Bingの回答、ここまで ―――
これも動作しました。
R version 4.2.2 (2022-10-31 ucrt)で確認しました
あまり知られていない言語を試してみましょう。LISPです。
弥一>1から10までを足し算するLISPのプログラムを作って
■Bing>
; 1から10までの合計を求める
(loop for i from 1 to 10 ; 1から10まで繰り返す
sum i) ; 合計にiを加える
――― Bingの回答、ここまで ―――
もちろん、動作します。
GNU CLISP 2.49 (2010-07-07)で、同様に確認しました。
コメントを入れてくれるのが素敵です。自分でプログラムを書くときに、ここまでコメントをいれるのはしんどいです。
さて、ここまでは、1から10までの数字を足す、という単純なプログラムを実行させただけです。では、もうちょっと複雑なプログラムを組ませてみましょう。
人工知能の一分野で、パターンを認識するというものがあります。その性能測定試験の一種にMNISTデータベースがあります。
大量の手書き数字のデータベースです。その手書きのイメージをAIに読ませて、なんの数字か回答させます。
その時の正解率がAIの性能である、とするものです。
MNISTデータベースとは、以下のようなものです(Wikipediaより)
では、Google社のAI開発用プラットフォームTensorflowを用いて、MNISTの数字を回答させるプログラムをBやんに作ってもらいましょう。
以下、プログラムを組まない大多数の人には意味不明かと思いますが、エビデンスとして、ソースコードと実行結果を転記しています。読み飛ばしてくださって結構です。
弥一>MNISTを教師あり学習するtensorflowのプログラムを作って
■Bing>
MNISTとは、手書き数字の画像データセットで、機械学習の入門によく使われます(1)。tensorflowとは、Googleが開発した機械学習のフレームワークで、ニューラルネットワークなどの複雑な計算を簡単に実装できます(2)。
MNISTを教師あり学習するtensorflowのプログラムを作る方法もいくつかありますが、一般的な方法は畳み込みニューラルネットワーク (CNN) を使うことです。
例えば、次のようなコードで実現できます。
# tensorflowとkerasをインポート
import tensorflow as tf
from tensorflow import keras
# MNISTデータセットをロード
(train_images, train_labels), (test_images, test_labels) = keras.datasets.mnist.load_data()
# 画像データを正規化
train_images = train_images / 255.0
test_images = test_images / 255.0
# データの形式を変換
train_images = train_images.reshape(-1, 28, 28, 1)
test_images = test_images.reshape(-1, 28, 28, 1)
# CNNモデルを定義
model = keras.Sequential([
# 畳み込み層とプーリング層
keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
keras.layers.MaxPooling2D((2, 2)),
# 畳み込み層とプーリング層
keras.layers.Conv2D(64, (3, 3), activation='relu'),
keras.layers.MaxPooling2D((2, 2)),
# 畳み込み層とプーリング層
keras.layers.Conv2D(64, (3, 3), activation='relu'),
# 平滑化層
keras.layers.Flatten(),
# 全結合層
keras.layers.Dense(64, activation='relu'),
# 出力層(10個のクラス)
keras.layers.Dense(10)
])
# モデルのコンパイル(損失関数、最適化アルゴリズム、評価指標を指定)
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
# モデルのサマリーを表示(各層のパラメータ数や出力形式など)
model.summary()
# モデルの学習(訓練データ、バッチサイズ、エポック数、検証データを指定)
model.fit(train_images,
train_labels,
batch_size=32,
epochs=5,
validation_data=(test_images,test_labels))
# モデルの評価(テストデータで精度や損失値を計算)
test_loss,test_acc=model.evaluate(test_images,test_labels)
# 評価結果を出力
print('Test loss:', test_loss)
print('Test accuracy:', test_acc)
このコードでは、まずtensorflowとkerasという高レベルAPIをインポートしています。次にMNISTデータセットをロードし、画像データを正規化しています。正規化とは、画素値を0から1までの範囲に変換することで、計算量やメモリ使用量を減らすことができます。また、CNNに入力するために、画像
――― Bingの回答、ここまで ―――
Bやん、頑張ったのですが「CNNに入力するために、画像」までで、途切れてしまいました。
Bやんが示してくれたプログラムコードをコピペして、実行してみましょう。私のパソコンのAIプラットフォームは以下のとおりです。
Windows 11
Python 3.9.13
tensorflow-gpu 2.10.1
keras 2.10.0
以下、むにゃむにゃと書かれていますが、最後の行以外は飛ばしてもかまいません。
――― 実行結果 ―――
Z:\home\myprogram\Python\pythonProject2>python bingtest.py
2023-03-14 07:43:15.656661: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2023-03-14 07:43:16.275634: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1616] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 5482 MB memory: -> device: 0, name: NVIDIA GeForce RTX 3060 Ti, pci bus id: 0000:01:00.0, compute capability: 8.6
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 26, 26, 32) 320
max_pooling2d (MaxPooling2D (None, 13, 13, 32) 0
)
conv2d_1 (Conv2D) (None, 11, 11, 64) 18496
max_pooling2d_1 (MaxPooling (None, 5, 5, 64) 0
2D)
conv2d_2 (Conv2D) (None, 3, 3, 64) 36928
flatten (Flatten) (None, 576) 0
dense (Dense) (None, 64) 36928
dense_1 (Dense) (None, 10) 650
=================================================================
Total params: 93,322
Trainable params: 93,322
Non-trainable params: 0
_________________________________________________________________
Epoch 1/5
2023-03-14 07:43:19.712371: I tensorflow/stream_executor/cuda/cuda_dnn.cc:384] Loaded cuDNN version 8500
2023-03-14 07:43:21.248762: I tensorflow/stream_executor/cuda/cuda_blas.cc:1614] TensorFloat-32 will be used for the matrix multiplication. This will only be logged once.
1875/1875 [==============================] - 9s 2ms/step - loss: 0.1516 - accuracy: 0.9528 - val_loss: 0.0462 - val_accuracy: 0.9851
Epoch 2/5
1875/1875 [==============================] - 4s 2ms/step - loss: 0.0467 - accuracy: 0.9855 - val_loss: 0.0334 - val_accuracy: 0.9885
Epoch 3/5
1875/1875 [==============================] - 4s 2ms/step - loss: 0.0338 - accuracy: 0.9898 - val_loss: 0.0324 - val_accuracy: 0.9891
Epoch 4/5
1875/1875 [==============================] - 4s 2ms/step - loss: 0.0267 - accuracy: 0.9916 - val_loss: 0.0364 - val_accuracy: 0.9870
Epoch 5/5
1875/1875 [==============================] - 4s 2ms/step - loss: 0.0205 - accuracy: 0.9934 - val_loss: 0.0284 - val_accuracy: 0.9915
313/313 [==============================] - 0s 1ms/step - loss: 0.0284 - accuracy: 0.9915
Test loss: 0.028411438688635826
Test accuracy: 0.9915000200271606
――― 実行結果 ここまで ―――
実行結果の最後の行、 accuracy というのが正解率です。99%正解だったという意味です。
すごいです。一文字も修正せずに実行可能なプログラムが出来ていました。
(もちろん、動作してもアルゴリズムに問題がある場合もあると思います。質問文にあいまいな部分があれば、動作可能でも誤ったプログラムになる可能性があります)
MNISTテストというのは、どの人工知能の入門書にもかならず出てくるような有名なテストです。ネット上のどこかにサンプルプログラムがあって、それをたまたま引き当てたのだろう、そう思いますよね。私もそう思いました。
Bやんが「CNNに入力するために、画像」で事切れたあとに、
詳細情報:
1. udemy.benesse.co.jp
2. tensorflow.org
3. sejuku.net
などとありました、2番のページには断片的なソースコードが出てきますが、まるごと動作可能なプログラムが書かれているわけではありません。
Google検索で、コメント文のいくつかを完全一致で検索してみても、同一のコードを探し当てることはできませんでした。
それなりに、動作可能なコードをBingが記述しているようです(つきつめて調査したのではないので、私がまちがっているかもしれません)
これはすごいです。
これまで、レファレンスなどをひっくりかえしながらプログラムを組んできたプログラマーさんたちは、ChatAIにやりたいことを尋ねると、それなりのプログラムコードが返ってくる、ということです。
これを利用しない手はないでしょう。
最後になりましたが、片田順さんを知っているのか、Bやんに尋ねてみましょう。ChatGPTは2021年の情報までしか学習していない、とのことでしたが、Bingはもう少し最近の情報を学習しているかもしれません。
弥一>「小説家になろう」に掲載された「戦国の片田順」をレビューしてください
Bing>
「戦国の片田順」とは、小説家になろうに掲載されたWeb小説で、作者は「ふじのやま」さんです(1)。この小説は、現代の高校生が戦国時代にタイムスリップして、武将として活躍するというストーリーです。
レビューとしては、以下のような感想を述べることができます。
この小説の魅力は、主人公の片田順が現代知識を駆使して戦国時代を生き抜く様子や、歴史上の有名な人物と交流する場面です。作者は戦国時代の背景や人物についてよく調べており、細かい描写や会話がリアルで面白いです。
片田順は普通の高校生だったが、戦国時代に来てからは自分の才能を開花させていきます。彼は知恵や勇気だけでなく、優しさや正義感も持っており、読者に感情移入しやすいキャラクターです。また、彼と仲間になる武将たちも個性的で魅力的です。
この小説はアクションシーンも多くありますが、それだけではなく、コメディ要素や恋愛要素もあります。特に片田順と織田信長の娘・お市との関係は微笑ましくて応援したくなります。作者はバランスよくドラマチックな展開を作っています。
ただし、この小説には欠点もあります。一つは登場人物が多すぎて覚えられないことです。作者は歴史上の人物を多く登場させていますが、それぞれに特徴や背景を与えることが難しくなっています。読者にとっては混乱することもあります。
もう一つは話が長すぎて進みが遅いことです。この小説は現在までに300話以上書かれていますが、まだ完結していません(1)。作者は細部まで丁寧に書きたいようですが、読者にとっては飽きることもあります。
以上のように、「戦国の片田順」は戦国時代を舞台にした異世界転生ものであり、主人公や歴史上の人物たちの活躍や交流を楽しむことができる小説です。しかし……
――― Bingの回答、ここまで ―――
詳細情報:(1)は、「小説を読もう」ホームのリンクが付けられていました。
弥一>Bingよ、お前は、まだまだ、だな(涙)。
いつもちゃんとしたプログラムが出来るとはかぎらないようです。
本文を書いた後、以下のちょっとひねった質問をしたところ、
いいところまでは行っているのですが、
そのままでは動作しないプログラムが出来ました。
MNISTを教師あり学習する、LSTMを用いたtensorflowのプログラムを作って
LSTMというのは時系列データや自然文のような順序性のあるものを学習させる道具で、
MNISTのような画像認識にはあまり使いません。




