GPT-3試し斬り

「GPT-3」は、イーロン・マスク氏らが汎用人工知能の実現を目指して設立した非営利企業であるOpenAIが開発した自然言語処理モデルです。OpenAIは11月19日(現地時間)、「GPT-3」のAPIを利用する際の人数制限を撤廃し、誰でもすぐに利用できるようにしたと発表しました。いくつかの制限はありますが、誰でもすぐに試せるようになったということで早速試してみました。

エンジン

GPT-3にはいくつかのエンジンがあります。 Codex seriesが気になりますが、今回はBase seriesを試してみました。

モデル説明
Base series自然言語を理解して生成できるGPT-3モデルのセット
Instruct series [Beta]基本シリーズに似ている、指示に従うのが得意な特殊モデルのセット
Codex series [Private beta]自然言語からコードに変換するなどコードを理解して生成できるモデル
Content filterセンシティブまたは危険なコンテンツを検出できるモデル

Base series にはいくつかのモデルがあり、それぞれ過去の偉人の名前が付けられていて得意分野が異なります。

モデル説明
Davinciレオナルド・ダ・ヴィンチ。最も有能なエンジンであり、他のモデルが実行できるすべてのタスクを実行でき、多くの場合少ない指示で実行できる。多くのコンピューティングリソースが必要になり、APIの呼び出しコストが高く、他のエンジンほど高速ではない。
得意分野 : 複雑な意図、原因と結果、聴衆のための要約
Curieキュリー夫人。感情の分類や要約など、微妙な違いのある多くのタスクに対応できる。質問への回答やQ&Aの実行、および一般的なサービスチャットボットとしても非常に優れている。
得意分野 : 言語翻訳、複雑な分類、テキスト感情、要約
Babbageチャールズ・バベッジ。単純な分類のような簡単なタスクを実行できる。セマンティック検索では、ドキュメントが検索クエリとどの程度一致しているかをランク付けすることもできる。
得意分野 : 中程度の分類、セマンティック検索の分類
Adaエイダ・ラブレス。通常最速のモデルであり、テキストの解析、アドレス修正、およびあまりニュアンスを必要としない特定の種類の分類タスクなどのタスクを実行できる。
得意分野 : テキストの解析、簡単な分類、住所修正、キーワード

今回はDavinciで色々してみました。

要約

少し前にニュース記事を要約するAIなどで話題になっていたアレです。過去に自分の書いた記事を要約してみました。トークンが2048までと制限されているため、なくても問題なさそうな部分を削って要約します。要約させるには、入力した文章の最後にtl;dr:を付けるだけで良さそうです。

Azure Kubernetes Service (AKS)のイングレスコントローラーにはめられた
→ Microsoftのドキュメントは必ず最新の状態で更新されています

なるほど。

GitLabをリストアした話
→ GitLabのバージョンアップは毎日自動でバックアップしておいたほうがいいです

そうですね。リストアはどこに。

消しゴムマジック (Magic Eraser)
→ 「Google フォト」の新機能「消しゴムマジック」の体験レポートでした

まあそうですね。

.NET 5 から .NET 6 に移行してみた
→ .NET 6では、.NET 5と同じように、.NET 4.6.2 以上が必要です

??? そうはならんやろ。

ちなみに tl;dr:だけでなく長い。3行で とか、かんたんにまとめてとかでも要約できました。3行にはなりませんでしたが。パラメータがいくつかありますが、狙った要約を得るには調整が難しそうな印象でした。ベストプラクティスみたいなのがあると良いのですが。

SQL

今回メインで試したかったのはこれです。どこで見たのかは忘れましたが自然言語をSQLにできると見た気がしたので試してみました。アプリケーションで自然言語で抽出条件を指定出来たら便利そうです。以降、1つ目のコードブロックが入力、2つ目が出力結果です。

データベース:users
|カラム名|表示名|
|id|ID|
|name|名前|
|age|年齢|
|country|国|
|score|点数|

年齢が20歳以上でアメリカまたは日本のユーザのスコア合計を求めるSQL:
SELECT name,age,country,score FROM users WHERE age>20 AND country='USA' OR country='Japan'

表示名で指定したのにそれっぽい。 さすがダ・ヴィンチ。以上がage>20になっているのと合計ではないのが惜しい。テーブルの結合はできるのか気になったので試しました。

データベース:users
|カラム名|表示名|
|id|ID|
|name|名前|
|age|年齢|

データベース:scores
|カラム名|表示名|
|name|名前|
|score|点数|

年齢が20歳以上のスコア合計を求めるSQL:
SELECT SUM(score) FROM scores WHERE age>20

違うテーブルのカラムを見てる。パラメータを色々いじくったら次のような結果になることも。

データベース:users
|カラム名|表示名|
|id|ID|
|name|名前|
|age|年齢|

データベース:scores
|カラム名|表示名|
|name|名前|
|score|点数|

年齢が20歳以上のスコア合計を求めるSQL:
SELECT name, SUM(score) FROM scores WHERE age >= 20 GROUP BY name

年齢が20歳以上のスコア合計を求めるSQL:

SELECT name, SUM(score) FROM scores WHERE age >= 20 GROUP BY name

年齢が20歳以上のスコア合計を求めるSQL:

SELECT name, SUM(score) FROM scores WHERE age >= 20 GROUP BY name

年齢が20歳以上のスコア合計を求めるSQL:

SELECT name, SUM(score) FROM scores WHERE age >= 20 GROUP BY name

年齢が20歳以上のスコア合計を求めるSQL:

SELECT name, SUM(score) FROM scores WHERE age >= 20 GROUP BY name

ああ、なんかごめんなさい。SQLではないけど、Examplesを見てたら例をもっと示すと良さそうということに気が付きました。

データベース:users
|カラム名|表示名|
|id|ID|
|name|名前|
|age|年齢|

データベース:scores
|カラム名|表示名|
|name|名前|
|score|点数|

年齢が20歳以上のレコード数を求めるSQL:
SELECT COUNT(id) FROM scores WHERE age>=20;

年齢が20歳以上のスコア合計を求めるSQL(INNER JOIN):
SELECT name,score FROM scores INNER JOIN users ON scores.id=users.id WHERE age>=20

かなりそれっぽい。以下のようなことを示したつもりです。例のSQLの最後に;を付け、Stop sequencesパラメータに;を設定すると、生成されたSQLの最後にも;がついてそこで生成終了となります。

  • 以上が>=であること
  • 結果としてSQLを求めていること
  • INNER JOINしてほしいこと

テーブル形式ではなくてCSVっぽく指定してもいけました。アプリケーションとしては表示名で指定したいケースが多いとは思いますが、ローカルネットワークのアプリケーションならこちらの方が楽です。

データベース:users
id,name,age

データベース:scores
name,score

年齢が20歳以上のレコード数を求めるSQL:
SELECT COUNT(id) FROM scores WHERE age>=20;

年齢が20歳以上のスコア合計を求めるSQL(INNER JOIN):
SELECT name,score FROM scores INNER JOIN users ON scores.name=users.name WHERE age>=20


ちなみに「テーブル:」とするよりも「データベース:」としたほうが期待する結果が返ってきやすかったためそうしています。手元にサンプルデータとして日本語のテーブル名やカラム名がついたデータベースがあったので、そちらでも試してみました。

データベース:総数及び世帯総数
市区町村名,町丁・字等名称,人口総数,男,女,世帯総数

人口総数の合計を取得するSQL:
SELECT SUM(人口総数) FROM 総数及び世帯総数;

市区町村名が豊橋市のレコードを取得するSQL:
SELECT * FROM 総数及び世帯総数 WHERE 市区町村名 = '豊橋市'

日本語でもいけました。こちらはそのまま正常にSQLを発行できました。

まとめ

今回試したのは「GPT-3」のほんのさわりの部分ですが、色々な可能性を感じました。ここまでのものが、誰でもすぐ試用できるようになったとは驚きです。今後も「GPT-3」に注目していきたいと思います。一方で期待した結果を得るためには入力やパラメータの調整がかなり必要だと思われます。この辺はAzure OpenAI Serviceである程度最適なセットを提供してくれないかなと勝手に期待することにします。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA