自分のキャリアをあれこれ考えながら、Pythonで様々なデータを分析していくブログです

話題のOpenAIのAPIでGPT-3モデルをplaygroundとPythonで使ってみた

Python
PythonChatGPT

ChatGPTで有名なOpenAIのAPIに登録して、GPT3モデルを使ってみました。GPT3モデルは文章を生成してくれるモデルになっています。

OpenAIのAPIでは現在下記3種類のモデルが利用可能のようです。

・GPT-3: 自然言語を理解し生成するモデル
・Codex: (プログラミングなどの)コードを理解し生成してくれるモデル
・Content filter: 文章にセンシティブもしくは安全でない内容が含まれているか検知するモデル

参考: https://platform.openai.com/docs/models

※ 23年2月11日現在、Content filterの代わりにmoderation endpointを使うことが推奨されています。

We recommend using our new moderation endpoint instead of the content filter model.
引用: https://platform.openai.com/docs/models/content-filter

また、OpenAIは下記のようなAIサービスも展開しています。
・会話AI「ChatGPT
・画像生成AI「DALL·E 2
・音声認識AI「Whisper

ChatGPT関連は最近よくニュースに出てきますね。検索エンジンのBingが新しい検索方法を導入するということでMicrosoftが23年2月7日に下記記事を出しています。

プロメテウスモデルと名付けられたモデルで、ChatGPTやGPT3よりも早く正確で汎用的なモデルで「検索」に特化したモデルを導入したとのことです。

Next-generation OpenAI model. ... the new Bing is ... more powerful than ChatGPT and customized specifically for search. It takes key learnings and advancements from ChatGPT and GPT-3.5 – and it is even faster, more accurate and more capable.
Microsoft Prometheus model ... gives you more relevant, timely and targeted results, with improved safety.
引用: https://blogs.microsoft.com/blog/2023/02/07/reinventing-search-with-a-new-ai-powered-microsoft-bing-and-edge-your-copilot-for-the-web/

スポンサーリンク

GPT3とは?

「OpenAIのGPT3(Generative Pre-trained Transformer 3)は、自然言語処理の分野で最も大きなAIモデルの1つです。GPT3は、大量のテキストデータから学習した、自然言語処理および自然言語生成を行うためのAIモデルです。GPT3は、自然言語処理などの用途に使用できるモデルであり、自然言語を理解し、短い文章や文書から長い文章を生成することができます。」

ちなみに上記文章はGPT3の中でもtext-davinci-003というモデルで生成したものを日本語の意味が通じるように修正したものです。

text-davinci-003モデルはGPT3モデルの中でも一番汎用性が高いモデルで、色々なタスクを高品質でこなしてくれるものです。通常このモデルを選んでおけば今のところ間違いなしのようです。

text-davinci-003: Most capable GPT-3 model. Can do any task the other models can do, often with higher quality, longer output and better instruction-following. Also supports inserting completions within text.
引用: https://platform.openai.com/docs/models/gpt-3

スポンサーリンク

GPT3とChatGPTの違いは?

私はなんとなく同じようなものだと思っていましたが、違うようです。

ChatGPTは会話に特化したモデルで、GPT3より少ないデータで作成されたモデルのようです。そのため、GPT3の方がより汎用的な受け答えが出来るので表現力がChatGPTより豊かなようです。

First, ChatGPT is specifically designed for conversational tasks, whereas GPT-3 is a more general-purpose model that can be used for a wide range of language-related tasks.
Second, ChatGPT is trained on a smaller amount of data compared to GPT-3, which may affect its ability to generate diverse and nuanced responses.
引用: https://dzone.com/articles/chatgpt-vs-gpt3-the-ultimate-comparison-features

ChatGPTはGPT3モデルをチャット形式で使えるようにしたというわけではなく、「ChatGPT」という別の言語モデルのようですね。すっきりしました 笑

スポンサーリンク

OpenAIのAPI利用の登録

GPT3モデルを使うためにOpenAIのAPIに登録します。ちなみに、ここで登録をしておけばChatGPT、DALL·E 2、Whisperも使えるようになりました。

それではAPI利用登録してみましょう。

1. https://openai.com/api/ へアクセスし、「SIGN UP」リンクを押下

図: https://openai.com/api/

2. アカウントの作成。私はGoogleアカウントで登録しました。(Continue with Google)

図: アカウント登録画面

3. 名前を入力

図: 利用者名登録

4. 電話番号認証

図: SMS認証ページ

5. SMSが届くのでコードを入力。(たまに迷惑フォルダに入る場合があるようです。)

図: SMS認証確認ページ

6. アンケートに答える。(OpenAIの利用目的)

図: アンケートページ

・製品や機能の開発
・個人利用
・AI研究での利用
・私はジャーナリストまたはコンテンツクリエーターだから

私は個人利用を選択しました。                             

7.ログインページへ遷移

図: ログイン後のページ

これでGPT3が利用可能になりました。

スポンサーリンク

GPT3をplaygroundで使ってみる

まずはお試しでOpenAIのサイト上でGPT3モデルを実行できる環境があるので利用してみます。

ログインした状態で下記にアクセスします。

Just a moment...

図: playground画面

右側のパネルでモデルやパラメータを選択することが出来ます。

各パラメータの項目の意味はAPIの仕様ページに詳しく載っていましたのでそちらを参考にしてみてください。

代表的なパラメータは下記になります。

・model: 利用モデルの選択。とりあえず一番汎用性が高いモデルでOK。(23年2月9日現在はtext-davinci-003モデル)
・temperature: ランダム性。0になると毎回同じ生成結果になる。
・top_p: 結果に出てくるトークン(単語)の調整値。よく使われる言葉だけ出すのかなど。temperatureかtop_pどちらかのみ調整することが推奨されている。
・presence_penalty:新しいトピックをどれくらい出すかの指標。0.1~1.0で設定すれば十分。詳細
・frequency_penalty:セリフの使い回し具合の指標。0.1~1.0で設定すれば十分。詳細

ちなみに今のところモデル利用には料金がかかるようです。ただし最初の3ヶ月使える、18ドル分の無料クレジットがあるのでお試し可能です。

Start for free: Start experimenting with $18 in free credit that can be used during your first 3 months.
引用:https://openai.com/api/pricing/

現状どれほど使っているかはManage Account → Usage画面から確認できます。

図: Usage画面

結構使っていると思うのですが、まだまだ利用できます。

それでは早速使ってみます。

図: playground実行結果(日本語入力)

結果が返ってきました。当然ですが英語で記載することも可能です。

図: playground実行結果(英文入力)
スポンサーリンク

GPT3をPython経由で使ってみる

1. APIキーの作成

API作成ページからAPIキーを作成します。

図: API管理画面

作成済みなのでもうAPIキーが登録されていますが、このような画面です。

追加のAPIを作りたいときは「Create new secret key」ボタンを押下すれば作成出来ます。

2. openaiをpipでインストール

openaiのインストール
# https://platform.openai.com/docs/api-reference/introduction?lang=python
python3 -m pip install openai

3. PythonでOpenAIのAPIを呼ぶ

APIをOPENAI_API_KEY環境変数にセットして使います。

promptに質問したい内容を渡してあげます。

import os
import openai

# APIキーはここ
os.environ['OPENAI_API_KEY'] = 'sk-xxxx9o'
openai.api_key = os.getenv("OPENAI_API_KEY")

response = openai.Completion.create(
  model="text-davinci-003",
  prompt=u"今夜の夕食は何にしたらいいでしょうか?",
  temperature=0.8,
  max_tokens=4000,
  top_p=0.75,
  frequency_penalty=0.3,
  presence_penalty=1.3
)

response
Out[0]
OpenAIObject text_completion id=cmpl-xxx at 0x118811090> JSON: {
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "text": "\n\n\u304a\u597d\u307f\u306b\u5fdc\u3058\u3066\u3001\u3054\u81ea\u5206\u3067\u8003\u3048\u3066\u304f\u3060\u3055\u3044\u3002\u4f55\u304b\u30a2\u30a4\u30c7\u30a2\u304c\u306a\u3044\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u3082\u306e\u3092\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046\u3002\n\n\u30fb\u9d8f\u8089\u3068\u91ce\u83dc\u306e\u7092\u3081\u7269 \n\u30fb\u30cf\u30f3\u30d0\u30fc\u30b0 \n\u30fb\u30b9\u30d1\u30b2\u30c3\u30c6\u30a3 \n\u30fb\u30aa\u30e0\u30e9\u30a4\u30b9 \n\u30fb\u30d4\u30b6 \n\u30fb\u713c\u304d\u9b5a \n\u30fb\u30ab\u30ec\u30fc\u30e9\u30a4\u30b9 \n\u30fb\u9ebb\u5a46\u8c46\u8150"
    }
  ],
  "created": 1xxxxxxxxx,
  "id": "cmpl-xxxx",
  "model": "text-davinci-003",
  "object": "text_completion",
  "usage": {
    "completion_tokens": 160,
    "prompt_tokens": 27,
    "total_tokens": 187
  }
}

OpenAIObjectで返却されました。JSON形式で結果が戻ってきます。生成された文章を取り出してみましょう

print(response["choices"][0]["text"])
Out[0]
お好みに応じて、ご自分で考えてください。何かアイデアがない場合は、以下のようなものを考えてみましょう。

・鶏肉と野菜の炒め物 
・ハンバーグ 
・スパゲッティ 
・オムライス 
・ピザ 
・焼き魚 
・カレーライス 
・麻婆豆腐

自分で考えてくださいと突き放されましたが、提案もしてくれました 笑

今夜は焼き魚にしましょうか。

スポンサーリンク

(オプション) OpenAIを使ったアプリケーションの作成

下記にクイックスタートとして、openaiを使ったアプリケーション(node.js/FLASK)の作成方法がありますので興味ある方は構築してみてください。

Just a moment...
FLASKアプリの作成準備
git clone https://github.com/openai/openai-quickstart-python.git
cd openai-quickstart-python 
cp .env.example .env        
vi .env # APIキーの登録
python3 -m venv venv-openai
source venv-openai/bin/activate
(venv-openai) hinomaruc@myMBP openai-quickstart-python % python3 -m pip install -r requirements.txt 
Out[0]
Collecting autopep8==1.6.0 (from -r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/39/3a/cd60ecce0d9737efefc06a074ae280a5d0e904d697fe59b414bf8ab5c472/autopep8-1.6.0-py2.py3-none-any.whl (45kB)
・・・省略・・・
Building wheels for collected packages: openai
  Building wheel for openai (PEP 517) ... done
  Created wheel for openai: filename=openai-0.19.0-cp38-none-any.whl size=53512 sha256=495e21a06761105942bbbff93885dd4744b1652dc3271df5c78540069d2a3584
  Stored in directory: /Users/hinomaruc/Library/Caches/pip/wheels/b3/df/ac/4b8c7a738ba7305b6b28ecee455feb2b13b97203e41c14c209
Successfully built openai
Installing collected packages: toml, pycodestyle, autopep8, certifi, charset-normalizer, click, et-xmlfile, itsdangerous, MarkupSafe, Jinja2, Werkzeug, Flask, idna, numpy, urllib3, requests, pytz, six, python-dateutil, pandas, openpyxl, pandas-stubs, tqdm, openai, python-dotenv
Successfully installed Flask-2.0.2 Jinja2-3.0.2 MarkupSafe-2.0.1 Werkzeug-2.0.2 autopep8-1.6.0 certifi-2021.10.8 charset-normalizer-2.0.7 click-8.0.3 et-xmlfile-1.1.0 idna-3.3 itsdangerous-2.0.1 numpy-1.21.3 openai-0.19.0 openpyxl-3.0.9 pandas-1.3.4 pandas-stubs-1.2.0.35 pycodestyle-2.8.0 python-dateutil-2.8.2 python-dotenv-0.19.2 pytz-2021.3 requests-2.26.0 six-1.16.0 toml-0.10.2 tqdm-4.62.3 urllib3-1.26.7
WARNING: You are using pip version 19.2.3, however version 23.0 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
FLASKアプリの実行
(venv-openai) hinomaruc@myMBP openai-quickstart-python % flask run
Out[0]
 * Serving Flask app 'app' (lazy loading)
 * Environment: development
 * Debug mode: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 454-694-638
127.0.0.1 - - [03/Feb/2023 20:59:57] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [03/Feb/2023 20:59:58] "GET /static/main.css HTTP/1.1" 200 -
127.0.0.1 - - [03/Feb/2023 20:59:58] "GET /static/dog.png HTTP/1.1" 200 -
127.0.0.1 - - [03/Feb/2023 21:00:09] "POST / HTTP/1.1" 302 -
127.0.0.1 - - [03/Feb/2023 21:00:09] "GET /?result=+Super+Whiskers%2C+The+Mighty+Mouser%2C+Furry+Avenger HTTP/1.1" 200 -
127.0.0.1 - - [03/Feb/2023 21:00:09] "GET /static/dog.png HTTP/1.1" 304 -
127.0.0.1 - - [03/Feb/2023 21:00:09] "GET /static/main.css HTTP/1.1" 200 -  
```

http://127.0.0.1:5000/ にアクセスすればサンプルアプリが起動します。

スポンサーリンク

ChatGPTを使ってみる

話題になっているのでChatGPTも使ってみます 笑

  1. https://openai.com/blog/chatgpt/ にアクセス。ログインしていなければ、ログインしてください。

  1. 会話を開始

朝ごはんに何を作ればいいのか?という質問に対して候補を提案してくれました。

さらに続けて、オムレツの作り方も聞いてみました。

会話可能なAIですね 笑

スポンサーリンク

DALL·E 2で画像生成をしてみた

「近代的な一軒家」と「a modern house」という2つのフレーズで画像を生成してみようと思います。

日本語だと和風な感じですね 笑 全然近代的ではなさそうです。

英語だと近代的っぽいですね (主観ですが)

スポンサーリンク

まとめ

生成AIというものにOpenAIを通して触れることが出来ました。現状だとGPTで文章のレイアウトを作成しつつ、人間の頭脳で足りない部分を補完してあげるのが良さそうですね。

Bingのプロメテウスモデルを使った新しい検索方法は、文章で検索させることで、ユーザーの知りたいこととニュアンスをフレーズ単位で検索するより理解することが出来るのかなといった印象を持ちました。

SEO対策とかは今までの知見が全くなくなることはないでしょうが、従来のテクニックからよりどうAIに検索してもらうようになるのかと比重が変わってきそうですね 笑

タイトルとURLをコピーしました