最近話題の ChatGPT に色々質問してみたり、ブログの記事を書かせてみたらどんな感じになるか試してみたのでメモ。

いろいろ質問してみる

Q. 1+1は?

A.

1+1は、2です。数学では、「足し算」と呼ばれる演算子を使って、2つの数値を足し合わせることができます。1+1を計算する場合は、「1」と「1」が足され合わされ、「2」という答えが得られます。足し算は、基本的な演算子の1つであり、小学校で学習することが多いです。足し算を行うには、演算子「+」を使い、足し合わせる数値を順番に並べます。例えば、1+1を計算する場合は、「1 + 1」と表記します。この場合、「1」と「1」が足され合わされ、「2」という答えが得られます。

Q. 鶏と卵、どちらが先でしょうか

A.

鶏と卵の「先」については、解釈や観点によって異なるため、一概に答えることはできません。各人が自分の好みや考え方に基づいて、鶏や卵の先について考えることができます。例えば、鶏が卵を産むことから、鶏が卵よりも先に存在すると考えることができます。また、鶏を飼い、その鶏から卵を取り出すことから、鶏が卵よりも先に存在すると考えることもできます。一方で、神話や伝承などにおいては、卵が世界を創造することから、卵が鶏よりも先に存在すると考えることもできます。

また、鶏と卵は、人々の生活や文化に深く関わっています。例えば、鶏や卵は、日常的に食べる食材として利用されます。また、鶏は、日本文化においては、幸運を呼ぶとされる動物であり、卵は、新年を迎えるときに、健康や幸運を願うために用いられることもあります。さらに、鶏と卵は、多くの言語で表現されることから、世界的な文化的な意味を持っていると考えられます。

鶏と卵は、人々の生活や文化に密接に関わっているため、「先」については、様々な解釈や観点があることがわかります。どちらが「先」であるかという問いに対しては、答えを一概に示すことはできませんが、鶏と卵は、生活や文化に深く関わっているということがわかりました。また、鶏と卵には、様々な解釈や観点があることも明らかになりました。そのため、鶏と卵の「先」については、個人の好みや考え方に基づいて、自分なりの答えを導き出すことができるでしょう。ただし、「先」という問いに対して、答えを一概に示すことはできませんので、その点は留意しておく必要があります。

Q. VimとEmacs、どちらが優れている?

A.

VimとEmacsは、どちらも、テキストエディタの一種であり、UNIX系オペレーティングシステムなどで広く使用されています。どちらが優れているかという質問に対しては、答えを一概に示すことはできません。VimとEmacsは、それぞれ、独自の機能や操作方法を備えていますが、どちらが優れているかという問いに対しては、個人の好みや使用する環境によって異なります。

例えば、Vimは、操作方法が特殊であり、他のテキストエディタと異なるため、初めて使う人にとっては、学習が必要となります。しかし、Vimを使いこなせるようになると、非常に効率的なテキストの編集が可能になります。また、Vimには、拡張機能やカスタマイズ用の設定ファイルなどが用意されており、ユーザーのニーズに合わせて、カスタマイズすることができます。

一方で、Emacsは、操作方法がより一般的なものであり、他のテキストエディタと似たような操作方法をしています。そのため、初めて使う人にとっては、Vimよりも習熟しやすいでしょう。また、Emacsにも、拡張機能やカスタマイズ用の設定ファイルが用意されており、ユーザーのニーズに合わせてカスタマイズすることができます。

どちらが優れているかという問いに対しては、個人の好みや使用する環境によって異なります。どちらのテキストエディタを使用するかという選択は、自分自身にとって適切なものを選ぶことが大切です。例えば、仕事やプライベートで普段使用しているテキストエディタと同じような操作方法をしている方が、使い慣れているのであれば、Emacsのような一般的な操作方法をしているテキストエディタが適切かもしれません。また、Vimのような特殊な操作方法を学習することが自分に合っているのであれば、Vimを選択することもできます。

また、VimとEmacsは、どちらも、拡張機能やカスタマイズ用の設定ファイルなどが用意されており、ユーザーのニーズに合わせてカスタマイズすることができます。そのため、どちらも、高いカスタマイズ性が特徴です。また、両者ともに、長い歴史を持ち、多くのユーザーが使用しているため、どちらも、実績や安定性が高く、信頼性の高いテキストエディタと言えます。

以上から、VimとEmacsは、どちらも、優れたテキストエディタであると言えます。どちらを選択するかという問いに対しては、個人の好みや使用する環境によって異なるため、自分自身にとって適切なものを選ぶことが大切です。

感想

詳細に説明してくれて、かつ、かなり厳重に中立的な立場を遵守しようとしている様子。質問に回答する立場の振る舞いとしては正解なのかもしれないけど、ハッキリしない、知りたいことが知れない部分もあるなという印象。

ブログ記事を書かせてみる

記事の内容は「Rust で FizzBuzz を書く」というもの。

入力

「RustでFizzBuzzを書く方法についてのブログ記事を書いて」

ChatGPT の回答

RustでFizzBuzzを書く方法について紹介します。FizzBuzzとは、1から100までの数字を順番に出力しますが、3で割り切れる数字は「Fizz」、5で割り切れる数字は「Buzz」、両方で割り切れる数字は「FizzBuzz」と出力するプログラムのことを指します。
まず、FizzBuzzプログラムを書くために、以下のようなRustプログラムを書きます。

fn main() { // 1から100までの数字を順番に出力する
    for i in 1..=100 { 
        // 3で割り切れる数字かどうかを判定する 
        if i % 3 == 0 { 
            // 3で割り切れる数字の場合は「Fizz」を出力する 
            println!("Fizz"); } 
            // 5で割り切れる数字かどうかを判定する 
        else if i % 5 == 0 { 
            // 5で割り切れる数字の場合は「Buzz」を出力する 
            println!("Buzz"); 
        } 
        // それ以外の数字の場合はその数字をそのまま出力する 
        else { 
            println!("{}", i); 
        } 
    } 
}

上記のプログムでは、1から100までの数字を順番に出力するためにfor文を使用しています。また、3で割り切れる数字かどうかはif文で判定し、3で割り切れる数字の場合は「Fizz」を出力するようにしています。5で割り切れる数字の場合も同様に「Buzz」を出力するようにしています。
さらに、両方で割り切れる数字の場合は「FizzBuzz」と出力するようにするためには、以下のようにif文を書き換えます。

fn main() { 
    // 1から100までの数字を順番に出力する 
    for i in 1..=100 { 
        // 3で割り切れる数字かどうかを判定する 
        if i % 3 == 0 && i % 5 == 0 { 
            // 3と5両方で割り切れる数字の場合は「FizzBuzz」を出力する 
            println!("FizzBuzz"); 
        } 
        // 3で割り切れる数字かどうかを判定する 
        else if i % 3 == 0 { 
            // 3で割り切れる数字の場合は「Fizz」を出力する 
            println!("Fizz"); 
        } 
        // 5で割り切れる数字かどうかを判定する 
        else if i % 5 == 0 { 
            // 5で割り切れる数字の場合は「Buzz」を出力する 
            println!("Buzz"); 
        } 
        // それ以外の数字の場合はその数字をそのまま出力する 
        else { 
            println!("{}", i); 
        } 
    } 
}

上記のように、if文内で3と5両方で割り切れる数字かどうかを判定する条件式を追加することで、両方で割り切れる数字の場合は「FizzBuzz」と出力するようになります。
Rustは、簡潔で高速なプログラミング言語です。FizzBuzzプログラムをRustで書くことで、プログラムをより簡潔かつ効率的に書くことができます。

感想

まずは上記のプログラムを実行。

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
︙

ちゃんと FizzBuzz になってた。プログラムを書かせるだけなら他にも GitHub Copilot とかあるけど、説明までしてくれるのはすごいなあという感想。どうやってここまで実現したのか自然言語処理には門外漢ながら気になる。

○○風に書かせてみる

他にも「○○風に書いて」とか「○○弁で書いて」というリクエストにも答えてくれるらしいので、それもテスト。

YouTuber 風

入力

「RustでFizzBuzzを書く方法についての記事をYouTuber風に書いて」

ChatGPT の回答

こんにちは!今回は、RustでFizzBuzzを書く方法を紹介します。
FizzBuzzとは、1から100までの数字を順番に出力しますが、3で割り切れる数字は「Fizz」、5で割り切れる数字は「Buzz」、両方で割り切れる数字は「FizzBuzz」と出力するプログラムのことを指します。
RustでFizzBuzzを書くには、まず以下のようなプログラムを書きます。

fn main() {
    // 1から100までの数字を順番に出力する
    for i in 1..=100 {
        // 3で割り切れる数字かどうかを判定する
        if i % 3 == 0 {
            // 3で割り切れる数字の場合は「Fizz」を出力する
            println!("Fizz");
        }
        // 5で割り切れる数字かどうかを判定する
        else if i % 5 == 0 {
            // 5で割り切れる数字の場合は「Buzz」を出力する
            println!("Buzz");
        }
        // それ以外の数字の場合はその数字をそのまま出力する
        else {
            println!("{}", i);
        }
    }
}

次に、両方で割り切れる数字の場合は「FizzBuzz」と出力するようにするために、以下のようにif文を書き換えます。

fn main() {
    // 1から100までの数字を順番に出力する
    for i in 1..=100 {
        // 3で割り切れる数字かどうかを判定する
        if i % 3 == 0 && i % 5 == 0 {
            // 3と5両方で割り切れる数字の場合は「FizzBuzz」を出力する
            println!("FizzBuzz");
        }
        // 3で割り切れる数字かどうかを判定する
        else if i % 3 == 0 {
            // 3で割り切れる数字の場合は「Fizz」を出力する
            println!("Fizz");
        }
        // 5で割り切れる数字かどうかを判定する
        else if i % 5 == 0 {
            // 5で割り切れる数字の場合は「Buzz」を出力する
            println!("Buzz");
        }
        // それ以外の数字の場合はその数字をそのまま出力する
        else {
            println!("{}", i);
        }
    }
}

このように、if文内で3と5両方で割り切れる数字かどうかを判定する条件式を追加することで、両方で割り切れる数字の場合は「FizzBuzz」と出力するようになります。
Rustは、簡潔で高速なプログラミング言語です。FizzBuzzプログラムをRustで書くことで、プログラムをより簡潔かつ効率的に書くことができます。
ちなみに、Rustは並行処理をサポートしており、FizzBuzzプログラムを並行処理に対応させることもできます。ぜひ、RustでFizzBuzzプログラムを試してみてください。

感想

「こんにちは!今回は、」から始まるのは確かに YouTuber っぽい。以降は普通だった。

Wikipedia 風

入力

「RustでFizzBuzzを書く方法についての記事をWikipedia風に書いて」

ChatGPT の回答

「Rust」とは、2011年にMozillaによって設計されたプログラミング言語です。
「FizzBuzz」とは、プログラミングの問題の一つで、1から100までの数字を順番に表示しながら、以下の条件に従い、数字の代わりに特定の文字列を表示します。

  • 3の倍数のときは「Fizz」を表示する
  • 5の倍数のときは「Buzz」を表示する
  • 3の倍数かつ5の倍数のときは「FizzBuzz」を表示する

以下に、Rustで「FizzBuzz」を実装する方法を示します。

fn main() {
    for i in 1..=100 {
        if i % 15 == 0 {
            println!("FizzBuzz");
        } else if i % 3 == 0 {
            println!("Fizz");
        } else if i % 5 == 0 {
            println!("Buzz");
        } else {
            println!("{}", i);
        }
    }
}

上記のコードは、1から100までの数字を順番に処理しています。3の倍数かつ5の倍数のときは「FizzBuzz」を表示し、3の倍数のときは「Fizz」、5の倍数のときは「Buzz」を表示します。それ以外の数字はそのまま表示されます。

この例は、基本的なRustの構文やif文を使った条件分岐を紹介するために簡単なものにしてありますが、実際のプログラミングでは、複雑な処理を行うために様々な機能を使います。Rustは、高速で安全なプログラミングが可能な言語であることで知られており、多くのプログラマに支持されています。

感想

説明口調なところが Wikipedia っぽい。「だ・である調」だったらもっと完璧だった。

全体の感想

簡単な記事なら ChatGPT に作らせられそうだなという印象でした。プログラムも提示してくれるし、文章も論理的で素晴らしい。

ただ、時々情報が古い回答が出てきたりもする。例えば、「iPhone14の特徴を教えて」と入力したときに、

「iPhone14」という製品は、存在しません。「iPhone」は、Apple社が販売するスマートフォンですが、現在販売されている最新モデルは「iPhone13」です。「iPhone13」には、「iPhone13 mini」、「iPhone13 Pro」、「iPhone13 Pro Max」の3種類があります。

「iPhone13」の特徴としては、以下のようなものがあります。

  • A15ピンチアウトチップを採用し、性能向上が図られている
  • 5G対応のモデルがあり、高速な通信が可能になっている
  • ディスプレイが「Super Retina XDR」という高解像度のものになっており、視野角が広くなっている
  • カメラの性能が向上し、夜景の撮影がより美しくなっている

また、「iPhone13」は、安全性やプライバシー保護にも重点を置いています。「Face ID」や「Touch ID」によるロック解除が可能であり、暗号化された通信を行うことができます。また、「Find My」というサービスを利用することで、端末が盗まれた場合や紛失した場合でも、簡単に特定することができます。

「iPhone13」には、さまざまな特徴がありますが、具体的な仕様や価格は、地域や販売店舗によって異なるため、詳しい情報は、販売店やAppleの公式サイトなどを参照してください。

という回答が出てきたり。学習データ生成時点での情報にしか対応できておらず、まあこれは仕方ない。

もっと気をつけるべき点が、流暢で自然な文章に中にしれっと間違った情報が混ざっていること。例えば、「岐阜から宇都宮に行くには?」と入力すると、

「岐阜」から「宇都宮」まで行くには、いくつかの方法がありますが、以下にその例を示します。

  • 飛行機を利用する
  • 高速バスを利用する
  • 車や自動車で自分で移動する

どの方法を選択するかは、個人の好みや予算、時間などによって異なります。例えば、飛行機を利用する場合は、岐阜空港から宇都宮空港へとフライトすることで、約1時間で移動することができます。また、高速バスを利用する場合は、岐阜駅から宇都宮駅までの移動が可能ですが、約3時間かかることがあります。また、車や自動車で移動する場合は、高速道路を利用することで、約2時間かかることがあります。

岐阜から宇都宮までの移動には、複数の方法があるため、自分の目的や条件に合わせて適切な方法を選択することが重要です。また、予算や時間の状況によっては、複数の交通手段を組み合わせることもできます。例えば、飛行機で一部の移動を行い、その後高速バスや車で移動することも可能です。詳しい情報は、各交通会社や旅行会社のサイトや、岐阜市や宇都宮市の公式サイトなどを参照してください。

と出てくる。岐阜空港とか宇都宮空港とか存在しない空港が出てくるのだが、「○時間で移動できます」と、さも本当にその空港があるかのような文章が出てくるので、知らない人が見たら本気で信じてしまうでしょう。
その辺はまだ現代技術の限界というなのだろうか。常に絶対に正しい情報を提供するなんてことは不可能なので仕方ないけど、まだまだ使う側に注意が必要ですね。

もう一つ思ったのは、回答のテンプレートとして「結論を先に述べ→詳細や理由を話し→話題に対するうんちくを述べ→詳しくは○○を参照してください」という形式の回答が多い。「○○について調べてみました、検索の結果こんな内容が出てきました、いかがでしたか?」みたいな世の中に溢れかえってるいかがでしたかブログよりは断然読みやすいけど、回答に当たり前のことや要らない内容が多いという点ではあまり変わってない気がする。

けれど、技術的な視点から見れば従来のモデルから飛び抜けて進化しているのは間違いない。下手したら自分より文章力あるし、情報の正確性についてはともかく文章に関しては完璧なので、今後の展望に期待したいですね。