ChatGPTによるプログラム生成の可能性と限界（前編）

# はじめに
先日OpenAIがChatGPTという新しいAIのベータ版が公開しました。これを使えばプログラマの仕事がなくなるのではないかと危惧されるほど高度なAIと噂されていますが、この記事では実際に触ってみて感じた特長・短所をまとめます。

# ChatGPTとは
OpenAIが作成した対話型のAIです。ユーザが自然言語でAIに指示することでさまざまな文章やプログラムを生成することができます。

https://openai.com/blog/chatgpt/

現在はβテスト中なので無料でだれでも試してみることができます。

早速、ChatGPT君に自己紹介をお願いしましょう。（以下、実際に入力したプロンプトとその回答です。）

> User: ChatGPTとは何ですか
>
> ChatGPT: ChatGPT は、OpenAIがトレーニングさせた大型言語モデルです。このモデルは、文章を理解し、自然な会話をすることができるようになっています。例えば、人間が文章を入力すると、ChatGPTはそれを理解して、自然な文章を出力することができます。現在、ChatGPTはまだ実験段階にあり、一般的には利用されていません。
> 
> User: 日本語が堪能ですね
>
> ChatGPT: はい、私は日本語を理解し、会話することができます。私は、OpenAIによってトレーニングされた大型言語モデルであるため、様々な言語を理解し、会話することができます。ただし、私は AI であり、人間と同じように思考することはできません。つまり、私は人工知能であり、自然言語を理解して会話することができるようにトレーニングされているだけです。

このように全く違和感のない日本語で利用することができます。素晴らしいですね。

## 利用規約
さて、利用する前に[利用規約](https://openai.com/terms/)を確認しておきましょう。

利用規約には次のように書かれています。

> User Content Transmitted Through the Site: With respect to the content or other materials you upload through the Site or share with other users or recipients (collectively, “User Content”), you represent and warrant that you own all right, title and interest in and to such User Content, including, without limitation, all copyrights and rights of publicity contained therein. By uploading any User Content you hereby grant and will grant OpenAI and its affiliated companies a nonexclusive, worldwide, royalty free, fully paid up, transferable, sublicensable, perpetual, irrevocable license to copy, display, upload, perform, distribute, store, modify and otherwise use your User Content for any OpenAI-related purpose in any form, medium or technology now known or later developed.

要するにプロンプトに入力したコンテンツはOpenAI側で無制限かつ無償で利用されることを許容する必要があります。**自身が著作権を持たない内容をプロンプトに入力してはいけません**。
また社内文書やコードなどの公開されていないコンテンツを入力することもやめた方が良いでしょう。

一方ChatGPTが出力したコンテンツの著作権がどのような扱いになるのかは調べた限り明示されていませんでした。[一般論](https://note.com/authense/n/ne9b800e9f68a#de538dd6-18a5-4757-8fb2-8c58520ebe68)としてAIには人格が認められないため、AIが生成したコンテンツにAI自身の創作性は認められません。また、OpenAI APIの利用規約[^1]ではプロンプトを入力した人に帰属することとされており、ChatGPT自身に聞いても同じ答えが返ってきたため、本記事ではその立場をとるものとします。[^2]

[^1]: OpenAI APIは有償サービスであるため、無償サービス版のChatGPTとは異なる利用規約となっています。
[^2]: ただしChatGPTは学習元の著作物とほぼ同一の内容を出力する場合があり、出力されたコンテンツが他者の著作権を侵害していないか慎重に確認する必要があります。

> User: ChatGPTが生成した文書の著作権は誰に帰属しますか
>
> ChatGPT: ChatGPTが生成した文章の著作権は、生成された文章を書いた人または組織に帰属します。ただし、ChatGPTは単なる文章生成ツールであり、独自の思考や創造性を持っていません。そのため、ChatGPTが生成した文章を使用する場合は、必ず著作権者の許可を得る必要があります。

# ChatGPTの仕組み
筆者はAIの専門家ではないため、AIの仕組みやアーキテクチャについての詳しい解説はできません。OpenAIの[ブログ](https://openai.com/blog/chatgpt/)に説明されていることを簡単にまとめます。

ChatGPTはGPT-3.5と呼ばれる言語モデルをfine-tuningすることでプロンプトに対する回答を学習しています。学習は以下の三段階で行われました。

1. 人間がプロンプトに対する回答例を作成し、それらを教師データとして回答モデルを学習
1. 学習した回答生成器を用いていくつかの回答を生成したものに対して人間が回答の品質をラベル付し、それらを教示データとして報酬モデルを学習
1. ステップ１と２で学習した回答モデルと報酬モデルを用いて強化学習によって回答モデルを改善

# ChatGPTにできること
以下の記事が詳しいため割愛します。

https://qiita.com/sakasegawa/items/82069c97a1ee011c2d1e

特に翻訳（自然言語からプログラミング言語、プログラミング言語同士の変換も含む）やクイズの回答の精度には目を見張るものがあります。

# ChatGPTにできないこと
## 計算
ChatGPTはいわゆる言語モデルであるため計算は苦手です。２桁くらいまでの四則演算ならなんとかできますが、それ以上になると簡単な計算でも間違えます。
 
> User: 487 * 938 は
>
> ChatGPT: 487 * 938 は 460606 です。日本語では、四百八十七乗じる九百三十八は四百六〇六〇六です。どういたしまして。ご質問がありましたら、お気軽にお問い合わせください。

正解は456806です。そろばんっぽく言わんでいいから間違えないでほしい。

## 探索
ChatGPTは探索をしているわけではないので論理パズルを解いたり、証明を見つけることも苦手です。

> User: 数列 1,4,2,3がある。
> これを隣あう２要素を交換することで 2,3,1,4 に並び替える手順を示せ。

> ChatGPT: この問題の解決方法には、次のような方法があります。
> 
> 1. 1番目の要素（1）と2番目の要素（4）を交換します。これにより、数列は4,1,2,3になります。
> 1. 2番目の要素（1）と3番目の要素（2）を交換します。これにより、数列は4,2,1,3になります。
> 1. 3番目の要素（1）と4番目の要素（3）を交換します。これにより、数列は4,2,3,1になります。
> 1. 2番目の要素（2）と3番目の要素（3）を交換します。これにより、数列は4,3,2,1になります。
>
> これらの操作を経ることで、数列 1,4,2,3 を 2,3,1,4 に並び替えることができます。

それっぽい回答ですが、逆順にソートしているだけで目的の配列にたどり着いていません。

他にもプログラムの挙動をシミュレーションしたり、正規表現にマッチするか判定すると言ったプロンプトも間違えることが多いです。


## 知識ベースにないこと
ChatGPTは非常に博識ですが、知らないことに対してはそれっぽい嘘で誤魔化します。

> User: 篩型について教えて
> 
> ChatGPT: 篩型とは、特定の物質を分類する方法の一つです。篩子に物質を放り込んで、大きさや形状などの特徴に基づいて絞り込んでいくことで、異なる特徴を持つ物質を分別することができます。
> 
> 例えば、砂糖の篩型では、細かい砂糖と大きい砂糖を分けることができます。また、金属の篩型では、銅や鉄などの異なる種類の金属を分別することができます。
> 
> 篩型は、物質を細かく分類することができるため、科学や工業などで広く使われています。また、日常生活でも使用することがあります。例えば、米の篩型では、米を絞り込んで、お米と砂米を分別することができます。
>
> User: 型理論の篩型
> 
> ChatGPT: 型理論の篩型は、型理論に基づく分類方法です。型理論とは、集合や構造、関係などの抽象的な概念を研究する数学の分野です。
>
> 型理論の篩型では、集合や構造、関係などの抽象的な概念を絞り込み、異なる特徴を持つものを分別することができます。例えば、集合の篩型では、構造が異なる集合を分別することができます。また、関係の篩型では、構造が異なる関係を分別することができます。
>
> 型理論の篩型は、抽象的な概念を扱う分野での分類方法として広く使われています。
>
> User: 日本の古代金属工芸である鍛冶の技法の篩型について教えて
>
> ChatGPT: 日本の古代金属工芸である鍛冶の技法の篩型とは、鍛冶で用いられる篩型のことを指します。鍛冶は、金属を鍛打て、切削して削り出し、形を作る工芸の一つです。
> 
> 鍛冶の技法の篩型では、金属を絞り込んで、異なる特徴を持つものを分別することができます。例えば、銅の篩型では、銅の種類や細かさなどの特徴に基づいて、異なる銅を分別することができます。また、鉄の篩型では、鉄の種類や細かさなどの特徴に基づいて、異なる鉄を分別することができます。
> 
> 日本の古代金属工芸である鍛冶の技法の篩型は、金属の精錬や加工において重要な役割を果たします。篩型を用いることで、品質の高い金属を選別し、鍛冶の加工品をより精密にすることができます。

「篩」と「型」から連想されるそれっぽい概念を説明しているが実際の[篩型](https://7colou.red/blog/2018/07-07-difference/index.html) とは異なります。最後に至っては存在しない概念を創作しています。

また実際によく知られた概念であってもしれっと嘘をつくことがあり、「〇〇を説明して」系のプロンプトの結果は注意が必要です。これでまとめブログやレポートを量産されたら非常に迷惑なことになりますね。


# まとめ
この記事ではChatGPTの仕組みと特長・短所についてまとめました。
後編ではこれらの特徴を踏まえてChatGPTを用いてプログラムをどう書いていったらいいのかについて解説します。

後編はこちら

https://qiita.com/autotaker1984/items/c6769f9ea7f2df1fdeb5