tech Ray

主に技術な話を

第二のGoogle!?ChatGPTの実力とは

週1ぐらいでブログにアウトプットしたいな~と毎週思いながら平均年1しか記事を書かないわやです。

あんまりブログを書かない僕ですが、巷でChatGPTなるものが話題なので取り上げて行こうと思います。

ChatGPTとは?

ChatGPTとは、ChatGPT曰く

「chatGPTは、自然言語処理において、文章の生成を行うためのモデルです。

chatGPTは、GPT-3を改良したモデルであり、GPT-3が持っている膨大な言語データを利用して、文章を生成することができます。

また、chatGPTは、人間が自然に会話するような文章を生成することができるため、会話ボットやメッセージの自動応答などに利用されることがあります。

chatGPTは、自然言語処理の研究や、会話システムの開発などに利用されることが多く、最新の技術を用いて文章の生成を行うことができるため、注目を集めています。」

使い方

手順は2つだけです。

  1. ChatGPTにアクセスしてOpenAIのアカウントを作成する

    アカウントの作成で特に難しいことはありませんが、メールアドレスと電話番号が必要になります。

  2. ログインすると画像のような画面になるので、画面下部の入力欄に質問を入れる

何ができるの?

Yahoo知恵袋のように使える

sin cosで知られる三角関数は何に使えるのか、というたまに話題になる事など、様々な事を質問できます。

Q:実世界で三角関数は何の役に立つの?

実世界で三角関数は、建築や土木工学などの分野で用いられることがあります。例えば、建築物の建設際には、建物の構造物の抗力やせん断力を計算する際に三角関数が用いられます。また、航空や航空宇宙の分野では、飛行機やロケットの軌道計算に三角関数が用いられます。さらに、地図やナビゲーションシステムなどでも三角関数が用いられます。例えば、地図上の点の座標を求める際に、地球の形が丸いことを考慮して三角関数が用いられます。また、位置情報を測定する際にも三角関数が用いられます。

日本語で検索するとあまり欲しいものがでない海外の情報なんかも容易に検索できます。

英語でもヒットしないような情報を検索するには非常に有用そうです。

Q:コンピューターサイエンスにおけるイタリアの人気の大学を箇条書きして大学の情報も教えて

・ポリテクニカ・トリノ大学:トリノ市に本部を置く大学で、工学・建築・芸術・自然科学の分野において優れた教育を提供しています。コンピューターサイエンスの分野でも実績があります。

ボローニャ大学:イタリア最古の大学の1つであり、ボローニャ市に本部を置く大学です。人文科学から工学・建築・芸術・自然科学まで幅広い分野で優れた教育を提供しています。

フィレンツェ工科大学:フィレンツェ市に本部を置く大学で、工学・建築・芸術・自然科学の分野で優れた教育を提供しています。特に、デザインや美術の分野では有名です。

・ローマ工科大学:ローマ市に本部を置く大学で、工学・建築・自然科学の分野で優れた教育を提供しています。特に、建築や都市計画の分野では実績があります。

・アントニアン・ロマーナ大学:レッジョ・アントニアン県に本部を置く大学で、工学・建築・自然科学の分野で優れた教育を提供しています。特に、医学や建築の分野では有名です。

・バローチカ大学:バローチカ市に本部を置く大学で、工学・建築・自然科学の分野で優れた教育を提供しています。特に、医学や環境学の分野では有名です。

ソフトウェアエンジニアとしては、検索エンジンに近い形でドキュメントに関する質問も使えるところも嬉しいですね。

Q:C++2023で追加される主要な機能は?

C++2023で追加される予定の主要な機能は、以下のようなものがあります。

  • Modules:C++をモジュール化するための機能で、外部のライブラリをインクルードする際に、高速かつ安全な方法を提供します。
  • Concepts:関数やクラスのテンプレートの使い方を制限するための機能で、コードの品質を高めることができます。
  • Ranges:配列やコンテナの処理をより簡潔かつ効率的に行うための機能で、コードをスッキリさせることができます。
  • Coroutines:非同期処理を行うための機能で、処理の途中で待機してもメモリを消費しないようにすることができます。
  • Networking:ネットワークプログラミングを支援するための機能で、インターネットやローカルネットワーク上でのデータの送受信を容易にすることができます。
  • Concepts Lite:Conceptsの機能を簡略化したもので、コンパイル時間の短縮や可読性の向上を実現します。

また、C++2023では、以前からある機能の強化や拡張も予定されています。

2つ以上のものの関係性が示せる

Yahoo知恵袋のような使い方だけでも十分有用なツールですが、2つ以上のものの関係性が示せるところも良く、 ツールやクラウドサービスなど、導入前の比較検討にも使えそうです。

Q:C#で作ったDLLとC++で作ったDLLの違いを説明して

C#で作ったDLLは、.NET Frameworkを利用して作成されたDLLであり、C++で作ったDLLは、C++の標準ライブラリやプラットフォームに依存するライブラリを利用して作成されたDLLです。

そのため、C#で作ったDLLは.NET Frameworkに依存しており、.NET Frameworkがインストールされている環境でのみ実行可能です。一方、C++で作ったDLLは依存するライブラリによって異なりますが、標準的なライブラリやプラットフォームに依存するライブラリを利用して作成された場合は、WindowsLinuxなど様々なプラットフォームで実行可能です。

また、C#で作ったDLLは、C#VB.NETなどの.NET言語からの利用が容易ですが、C++で作ったDLLはC++以外の言語からの利用が少し複雑になります。

そのため、C#で作ったDLLは.NET言語からの利用を前提としたライブラリとして、C++で作ったDLLは言語に依存しない汎用的なライブラリンスとして利用されることが多いです。

 

C++のdllやC#のdll単体の記事であればヒットするものの、関係性について記載した記事が出てくることは少ないためChatGPTの利点と言えるでしょう。

GoogleC++ C# dll 違い と検索してみるとC#からC++ dllを呼び出す方法など、検索意図と違ったものがでることもあり、Googleの代わりに使うということもありそうです。

プログラムも書いてくれる

これがChatGPTの最もすごいところだと思いますが、チャットによる適当な指示から良い感じにプログラムを書いてくれます。

Q:実現方法の説明はいらないのでprocessingでセルオートマトンを利用したジェネラティブアートのプログラム書いて

みました。

以下がプログラムのコードです。

int cols, rows;  // セルの数
int[][] grid;    // セルの状態を保存する配列

void setup() {
  size(600, 600);
  cols = 100;
  rows = 100;
  grid = new int[cols][rows];

  // 初期状態を設定する
  for (int i = 0; i < cols; i++) {
    for (int j = 0; j < rows; j++) {
      grid[i][j] = (int)random(2);
    }
  }
}

void draw() {
  background(255);

  // 1フレームごとに更新する
  int[][] next = new int[cols][rows];
  for (int i = 0; i < cols; i++) {
    for (int j = 0; j < rows; j++) {
      // 近傍の状態を取得する
      int state = grid[i][j];
      int sum = 0;
      for (int x = -1; x <= 1; x++) {
        for (int y = -1; y <= 1; y++) {
          int col = (i + x + cols) % cols;
          int row = (j + y + rows) % rows;
          sum += grid[col][row];
        }
      }
      sum -= state;

      // 次の状態を決定する
      if (state == 0 && sum == 3) {
        next[i][j] = 1;
      } else if (state == 1 && (sum == 2 || sum == 3)) {
        next[i][j] = 1;
      } else {
        next[i][j] = 0;
      }
    }
  }
  grid = next;

  // 描画する
  stroke(0);
  for (int i = 0; i < cols; i++) {
    for (int j = 0; j < rows; j++) {
      if (grid[i][j] == 1) {
        fill(0);
      } else {
        fill(255);
      }
      rect(i * 6, j * 6, 6, 6);
    }
  }
}

(コードが長かったので途中切ってます)

作ってもらったプログラムを実行してみるとこんな感じ

www.youtube.com

processingの開発環境がない人でもprocessingrunにアクセスするとWeb上で実行できるようなので、ChatGPTにプログラムを作ってもらってすぐに遊べます。

絵としてわかりやすいprocessingをチョイスしてみましたが、様々な言語でプログラムを書いてくれるようなので、エクセルをよく触る非ソフトウェアエンジニアがVBAで効率化ツールを作ってもらうような事も近々起こりそうですね。

注意点

ChatGPTは自信満々の回答で嘘が混じってる場合があります。

そのため、重要な事柄に関してはChatGPTの回答を鵜呑みにせずGoogle検索で裏取りをするなど必要になってきます。

それを踏まえても有用であるため、情報を得る手段として確立するでしょう。

終わりに

巷で話題のChatGPTを遊んでみました。

現在リサーチプレビュー中とのことで、無料で遊べるのでこの機会に使ってみるのはいかがでしょうか?

[ChatGPT: Optimizing Language Models for Dialogue (openai.com)](https://openai.com/blog/chatgpt/)

今後このようなサービスが無料で継続して使えるようになると、ソフトウェアに触れてこなかった人も使いこなす未来がありそうです。

シンギュラリティも間近に迫ってるかもしれませんね、まだ2022年ですが。

参考

様々なChatGPTの使い方

ディベート

UML

バグ発見

論文要約