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

バグ発見

論文要約

Marp Cliを使ってMarkdownファイルをパワーポイント形式に変換してみる

どうもわや(@wayawatech) です。

ブログ作って早々気づいたら2年間も放置してました、時が経つのは早いですね。

先日ツイッターを眺めてみると、こんなツイートがありちょうどMarkdownをパワーポイント形式に変換したいと思っていたのでMarpを使ってみたいと思います。

なお、この記事ではVisual Studio Code拡張機能のMarpではなくCliのMarpを使用します。

この記事でわかること

  • Marp Cliのインストール方法
  • Marp Cliの簡単な使い方

この記事の想定読者レベル

環境構築

Marpのドキュメントを見るとWin環境ではScoop1でインストールができます。

Scoop環境がない場合は、Scoopもインストールしちゃいましょう。

Scoopのインストール

コマンドプロンプト上、またはWin + Rキーでpowershellと打ちpowershellプロンプトで下記のコマンドを打ちます。

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
iwr -useb get.scoop.sh | iex

エラーメッセージが出た場合は、TLS1.2の有効化してから、再度コマンドを打ってみてください。

iwr : 要求は中止されました: SSL/TLS のセキュリティで保護されているチャネルを作成できませんでした

// TLS1.2有効化
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

 Marp Cliのインストール

コマンドプロンプト上で、下記のコマンドを打ちます。

scoop install marp

使い方

MarpのGithubデモ用のMarkdownファイルがあるのでダウンロードしてきましょう。

---
marp: true
theme: uncover
---

# Hello, I'm Marp CLI!

Write and convert your presentation deck with just a plain Markdown!

---

<!-- backgroundColor: beige -->

## Watch and preview

Marp CLI is supported watch mode and preview window.

---

# <!--fit--> :+1:

ダウンロード出来たら、コマンドプロンプトMarkdownファイルのあるフォルダへ移動し、下記のコマンドを打ちます。

marp --pptx demo.md

変換が完了するとこんな感じのパワーポイントが生成できました。

f:id:fujarenpaw:20220103003607p:plain

パワーポイント形式のほかに、HTML, PDF, PNG, JPEG形式の変換ができるようです。

終わりに

Markdownは書きやすく便利なものの、僕の周りでは詳しい人ばかりではなく「資料はパワーポイントで 」と言われる事も少なくなかったので、Markdownからパワーポイントに変換できるMarp Cliを使ってみました。

定型的な資料作成は、元となるMarkdownをプログラムで生成してパワーポイントに変換して提出、のようにして楽していきたいですね。


  1. scoopとはWindowsにおけるパッケージマネージャソフトのうちの1つ

Pythonでビックマック指数のヒートマップ世界地図を作ってみる

はじめに

最近海外の国について調べるようになり、世界の物価について気になったのでビックマック指数のヒートマップ世界地図を作ってみる。

 

ビッグマック指数ビッグマックしすう、英語: Big Mac index)とは、各国の経済力を測るための指数[1]マクドナルドで販売されているビッグマック1個の価格を比較することで得られる[1]

wikipedia) より

 

Folium

サクッと作りたいのでPythonのfoliumという地図ライブラリを利用する。

まずはライブラリをインストール

pip install folium

Foliumのチュートリアル を見ると今回やりたいことに近いサンプルコードがあったため、これをベースに作る。

import pandas as pd
import folium

url = 'https://raw.githubusercontent.com/python-visualization/folium/master/examples/data'
state_geo = f'{url}/us-states.json'
state_unemployment = f'{url}/US_Unemployment_Oct2012.csv'
state_data = pd.read_csv(state_unemployment)

m = folium.Map(location=[48, -102], zoom_start=3)

folium.Choropleth(
geo_data=state_geo,
name='choropleth',
data=state_data,
columns=['State', 'Unemployment'],
key_on='feature.id',
fill_color='YlGn',
fill_opacity=0.7,
line_opacity=0.2,
legend_name='Unemployment Rate (%)'
).add_to(m)

folium.LayerControl().add_to(m)

f:id:fujarenpaw:20191216194303p:plain

アメリカの失業率を州ごとに集計したデータを描画したものだ。

folium.Choroplethの引数となるgeo_dataにアメリカの各州の緯度経度を定義したjsonファイルを渡し、 data引数に失業率を記載したcsvを読み込ませて描画させているようだ。

 

アメリカの州の緯度経度定義を世界の緯度経度定義に変更、失業率情報をビックマック指数に変更したら出来そうなので実施する。

少し調べてみるとThe Economistが集計しているビックマック指数の情報と世界の緯度経度を定義したファイルがあるGithubがあったため、これを使用する。

 

 

ビックマック指数のデータは2011年以後のデータが入っており、集計日の異なる同じ国のデータが入っている。今回はデータの中にある一番集計日が新しいものだけ必要なので古いデータは削除する。

import pandas as pd
# Economistが公開しているビッグマック指数のデータを読み込み
url = "https://github.com/TheEconomist/big-mac-data/blob/master/output-data/big-mac-full-index.csv"
df = pd.read_html(url, header=0)[0]

# 1つの国で日付の異なる複数のデータがあるため、古い重複データは削除
df = df.drop_duplicates(['iso_a3'], keep='last')

 

世界の緯度経度を定義したjsonファイルはurl経由だとJSONDecodeErrorが発生したため、ローカルに落とした。

前準備は整ったので、チュートリアルをベースに必要な個所を変えていく。

import folium
# 世界地図を作製
m = folium.Map(location=[50, 0], zoom_start=1)
geojson = r'..\Data\worldJson\countries.geo.json'

# 地図に色を塗る
folium.Choropleth(
geo_data=geojson,
name='choropleth',
data=df,# 描画データ
columns=['iso_a3', 'dollar_price'], # ["国コード", "値の列"]
key_on='feature.id',
fill_color='OrRd',# 色指定
fill_opacity=0.7, # 色の透明度
line_opacity=1,#国境線の透明度
legend_name='big mac index dollar_price' #凡例
).add_to(m)

m.save("world.html")

f:id:fujarenpaw:20191216194243p:plain

 

良い感じに出来た。

黒の部分はThe Economistビックマック指数データにないもの。

多分マクドナルドが存在しないのだろう。

 

 

最後に

ググるビックマック指数の表は出てくるもののいまいちどの国の物価が高く、どの国が物価が安いのか掴みづらかったたため、Foliumを使い可視化した。

南米の物価が想像より高い事やヨーロッパにはマクドナルドがないなど可視化することで一目でわかるようになった。

 

今回使用したソースはGithubにあげているので使いたい人はどうぞ。

 

実行環境

Python 3.6.4 :: Anaconda, Inc.
folium==0.10.1
pandas==0.22.0