見出し画像

OpenAI 探索日記(5)

クイックスタート

クイックスタートのサイトをDeepLで翻訳してみた。

OpenAIは、テキストの理解と生成に非常に優れた最先端の言語モデルを訓練しています。私たちのAPIは、これらのモデルへのアクセスを提供し、言語処理を伴うほぼすべてのタスクを解決するために使用することができます。

このクイックスタートチュートリアルでは、簡単なサンプルアプリケーションを構築します。その過程で、APIをあらゆるタスクに使用するための基本的な主要コンセプトとテクニックを学ぶことができます。

コンテンツ生成
要約
分類、カテゴライズ、センチメント分析
データ抽出
翻訳
その他多数

はじめに


補完エンドポイントは APIの中核であり、非常に柔軟で強力なシンプルインターフェースを提供します。プロンプトとしてテキストを入力すると、API は与えられた指示や文脈にマッチするよう試みるテキスト補完を返します。

プロンプト Prompt
アイスクリーム屋のキャッチフレーズを作れ。
Write a tagline for an ice cream shop.

完成
Completion

私たちは、すべてのスクープに笑顔を添えています
We serve up smiles with every scoop!

これは、非常に高度なオートコンプリートと考えることができます。このモデルは、プロンプトのテキストを処理し、次に何が来る可能性が高いかを予測しようとします。

以下の説明は次のチュートリアルをやりながらである。
https://beta.openai.com/docs/quickstart/add-some-examples

インストラクションから始める


ペットの名前ジェネレーターを作りたいと想像してください。ゼロから名前を考えるのは大変だ!

まず、何をしたいのかを明確にするプロンプトが必要です。まずは指示書から始めましょう。このプロンプトを送信すると、最初の完成品が生成されます。

ペットの名前ジェネレーターを作りたいと想像してください。ゼロから名前を考えるのは大変!?

まず、何をしたいのかを明確にするプロンプトが必要です。まずは指示から始めましょう。このプロンプトを送信すると、最初の完成品が生成されます。
ここで
Suggest one name for a horse.
というプロンプトが出てくる。そこで
Jack John
と入れてみた。
すると
ジャック・ジョンは、作家のJ.K.ローリングが生み出した架空の人物です。ハリー・ポッターシリーズの主人公で、魔法使いである。リリーとジェームズ・ポッターの息子で、ハーマイオニー・グレンジャーとロン・ウィーズリーとは親友である。ホグワーツ魔法魔術学校の校長でもある。勇敢で聡明、そして忠実なことで知られている。また、闇の魔法使いヴォルデモート卿を倒したことでも知られる。
と説明がでてきた。

そして、

悪くない!では、もっと具体的に指示を出してみてください。
とくる。

Suggest one name for a black horse.
とプロンプトが出てくる。
なのでBlack Jack John
といれた。
すると、
ブラック・ジャック・ジョンは、19世紀に活躍した伝説のギャンブラーでありカードプレイヤーである。彼は1820年にイギリスで生まれ、ブラックジャックゲームの達人だったと言われています。彼はカードを数えるのが得意で、このゲームで常に勝利を収めていたことで知られている。また、彼は寛大さでも知られ、しばしば自分の勝ち分を困っている人々に寄付していた。彼は1891年に亡くなりましたが、彼の遺産はブラックジャックゲームの中で生き続けています。
となる。

このように、プロンプトに簡単な形容詞を追加するだけで、結果の補完が変わります。プロンプトをデザインすることは、本質的にモデルを「プログラミング」することなのです。

と説明が続く。

2: 事例を追加する


良い結果を得るためには、良い説明書を作ることが重要ですが、それだけでは不十分な場合もあります。しかし、それだけでは不十分な場合もあります。
そこで次のようなプロンプトがでてくる。
Suggest three names for a horse that is a superhero.
そこで次のように考えてみた。
Jack John The Thunder
Sharp John  the Smith
Speedy John the Lightning

すると次のようにプロンプトに出た。
Jack John the Thunder, Sharp John the Smith, and Speedy John the Lightning.

この完成度は、私たちが望んでいるものとはちょっと違います。これらの名前はかなり一般的で、私たちの指示の馬の部分をモデルが拾っていないように見えます。もっと適切な提案をさせることができるかどうか見てみましょう。

多くの場合、あなたが欲しいものをモデルに見せたり、伝えたりすることが役に立ちます。プロンプトに例を追加することで、パターンやニュアンスを伝えることができます。いくつかの例を含むこのプロンプトを送信してみてください。
Suggest three names for an animal that is a superhero.

Animal: Cat
Names: Captain Sharpclaw, Agent Fluffball, The Incredible Feline
Animal: Dog
Names: Ruff the Protector, Wonder Canine, Sir Barks-a-Lot
Animal: Horse
Names: 

ときて名前を考えていく。猫と犬の例をいれて、プロンプトの言葉生成ボタンをおすと、

Mighty Steed, Super Stallion, Captain Equus
とでてくる。

いいね!ある入力に対して期待される出力の例を追加することで、私たちが求めていた種類の名前をモデルが提供してくれるようになったのです。

と文章は続く。そして、

このように、プロンプトに簡単な形容詞を追加するだけで、結果の補完が変わります。プロンプトをデザインすることは、本質的にモデルを「プログラミング」することなのです。
と述べる。

3: 設定を調整する


自由に使えるツールは、プロンプトデザインだけではありません。設定を調整することで、完成度をコントロールすることも可能です。最も重要な設定の1つは、temperatureと呼ばれるものです。

上記の例で同じプロンプトを複数回送信した場合、モデルは常に同一または非常に類似した完了を返すことにお気づきかもしれません。これは、temperatureが0に設定されていたためです。

temperatureを 1 に設定して、同じプロンプトを数回再送信してみてください。下記のようなプロンプトが出てき来る。でボタンを押してみる。

Suggest three names for an animal that is a superhero.

Animal: Cat
Names: Captain Sharpclaw, Agent Fluffball, The Incredible Feline
Animal: Dog
Names: Ruff the Protector, Wonder Canine, Sir Barks-a-Lot
Animal: Horse
Names:

すると、次のような名前を提案してくる。
Super Steed, Mighty Mare, Captain Charger
もう一度おすと、
Mighty Charger, Power Stallion, The Winged Hero

何が起こったのか。temperatureが0を超えると、同じプロンプトを送信しても、毎回異なる補完結果になるのだ。

このモデルは、どのテキストがその前のテキストに続く可能性が最も高いかを予測することを忘れないでください。temperatureは0と1の間の値で、基本的にモデルがこれらの予測を行う際にどの程度確信を持って行うべきかを制御することができます。temperatureを下げると、リスクが少なくなり、補完はより正確で決定的になります。temperatureを上げると、より多様な補完が行われます。

ディープダイブ(より詳しい説明)



トークンと確率を理解する
私たちのモデルは、テキストをトークンと呼ばれる小さな単位に分解して処理します。トークンには、単語、単語の塊、1文字があります。以下のテキストを編集して、どのようにトークン化されるかを見てみましょう。

I have an orange cat named Butterscotch.

(私はバタースコッチという名前のオレンジ色の猫を飼っています。)

cat のような一般的な単語は1つのトークンですが、あまり一般的でない単語は複数のトークンに分割されることがよくあります。例えば、"Butterscotch "は4つのトークンに変換されます。「But」、「ters」、「cot」、「ch」です。多くのトークンは、例えば" hello "や" bye "のように、空白で始まります。I have an orange cat named Butterscotch.あるテキストが与えられると、モデルはどのトークンが次に来る可能性が最も高いかを判断する。例えば、"Horses are my favorite "というテキストは、"animal "というトークンの後に来る可能性が最も高い。動物49.65%動物42.58%\n3.49%!0.91%ここで、温度が重要な意味を持ちます。温度を 0 に設定してこのプロンプトを 4 回送信すると、モデルは常に " 動物 " を次に返しますが、これは最も確率が高いからです。温度を上げると、よりリスクを取り、より低い確率のトークンを考慮するようになります。

あるテキストが与えられたとき、このモデルはどのトークンが次に来る可能性が高いかを判断する。例えば、"Horses are my favorite "というテキストは、"animal "というトークンの後に来る可能性が最も高い。


ここで、temperatureが重要になる。temperatureを0に設定してこのプロンプトを4回送信すると、モデルは常に次に「animal」を返すことになります。temperatureを上げると、よりリスクを取り、より低い確率のトークンを考慮するようになります。

通常、目的の出力が明確に定義されている作業では、低いtemperatureを設定するのが最適です。多様性や創造性が求められる作業や、エンドユーザーや人間の専門家が選択できるようにいくつかのバリエーションを生成したい場合は、temperatureを高く設定することが有効です。

ペットの名前ジェネレーターは、おそらくたくさんの名前のアイデアを生み出せるようにしたいのでしょう。0.6という適度なtemperatureで、うまく機能するはずです。

4 アプリケーションを構築する



適切なプロンプトと設定が見つかったので、ペットの名前ジェネレーターを構築する準備ができました。以下の手順に従って、コードをダウンロードし、アプリを実行してください。ここからはダウンロードが必要なので、英語の頁のリンクをはっておくので、そこで必要なプログラムなどをダウンロードしてもらいたい。

https://beta.openai.com/docs/quickstart/adjust-your-settings

Setup

If you don’t have Node.js installed, install it from here.


Then download the code by cloning this repository.

OpenAI API Quickstart - Node.js example app

This is an example pet name generator app used in the OpenAI API quickstart tutorial. It uses the Next.js framework with React. Check out the tutorial or follow the instructions below to get set up.

Setup

  1. If you don’t have Node.js installed, install it from here (Node.js version >= 14.6.0 required)

  2. Clone this repository

  3. Navigate into the project directory

    1. $ cd openai-quickstart-node

  4. Install the requirements

    1. $ npm install

  5. Make a copy of the example environment variables file

    1. On Linux systems:

    2. $ cp .env.example .env

    3. On Windows:

    4. $ copy .env.example .env

  6. Add your API key to the newly created .env file

  7. Run the app

    1. $ npm run dev

You should now be able to access the app at http://localhost:3000! For the full context behind this example app, check out the tutorial.

上記に従って環境を構築しよう。
そして次に進む。
ここからは英語で行っていく。

Setup

If you don’t have Node.js installed, install it from here. Then download the code by cloning this repository.

git clone https://github.com/openai/openai-quickstart-node.git

If you prefer not to use git, you can alternatively download the code using this zip file.

Add your API key

Navigate into the project directory and make a copy of the example environment variables file.

cd openai-quickstart-node
cp .env.example .env

Copy your secret API key and set it as the OPENAI_API_KEY in your newly created .env file. If you haven't created a secret key yet, you can do so below.

You currently do not have any API keys. Please create one below.

Create new secret key‍


Important note: When using Javascript, all API calls should be made on the server-side only, since making calls in client-side browser code will expose your API key. See here for more details.

Run the app

Run the following commands in the project directory to install the dependencies and run the app.

npm install
npm run dev

Open http://localhost:3000 in your browser and you should see the pet name generator!

Understand the code

Open up generate.js in the openai-quickstart-node/pages/api folder. At the bottom, you’ll see the function that generates the prompt that we were using above. Since users will be entering the type of animal their pet is, it dynamically swaps out the part of the prompt that specifies the animal.

1
2
3
4
5
6
7
8
9
10
11
function generatePrompt(animal) {
  const capitalizedAnimal = animal[0].toUpperCase() + animal.slice(1).toLowerCase();
  return `Suggest three names for an animal that is a superhero.

Animal: Cat
Names: Captain Sharpclaw, Agent Fluffball, The Incredible Feline
Animal: Dog
Names: Ruff the Protector, Wonder Canine, Sir Barks-a-Lot
Animal: ${capitalizedAnimal}
Names:`;
}

On line 9 in generate.js, you’ll see the code that sends the actual API request. As mentioned above, it uses the completions endpoint with a temperature of 0.6.

1
2
3
4
5
const completion = await openai.createCompletion({
  model: "text-davinci-003",
  prompt: generatePrompt(req.body.animal),
  temperature: 0.6,
});

And that’s it! You should now have a full understanding of how your (superhero) pet name generator uses the OpenAI API!

クロージング

これらのコンセプトとテクニックは、あなた自身のアプリケーションを構築する上で大いに役立つことでしょう。とはいえ、この簡単な例は、何ができるかのほんの一端を示したに過ぎません。補完エンドポイントは、コンテンツ生成、要約、セマンティック検索、トピックタグ付け、センチメント分析など、事実上あらゆる言語処理タスクを解決するのに十分な柔軟性を備えています。

ただし、1つのAPIリクエストで処理できるのは、プロンプトから補完までの間にある2,048トークン(約1,500ワード)までという制限があります。

さて、モデルを実際に利用するとお金がかかる。

Open AI社から


弊社では、様々な機能と価格のモデルを提供しています。このチュートリアルでは、最も高性能な自然言語モデルであるtext-davinci-003を使用しています。このモデルが最も良い結果をもたらすので、このモデルを使いながら実験することをお勧めします。一旦動作が確認できたら、他のモデルでより低いレイテンシとコストで同じ結果が得られるかどうかを確認することができます。

1つのリクエストで処理されるトークンの総数(プロンプトと完了の両方)は、そのモデルの最大コンテキスト長を超えることはできません。ほとんどのモデルで、これは2,048トークンまたは約1,500ワードです。大まかな目安として、1トークンは英文の場合約4文字、0.75ワードに相当します。

料金は1,000トークンごとの従量課金制で、最初の3か月間は18ドルの無料クレジットを利用することができます。詳しくはこちら

であるが、実際に動かせるまではまだ大分かかるので、しばらくは無料クレジットをつかうことができる。

より高度なタスクでは、1 つのプロンプトに収まらないほどの例やコンテキストを提供したいと思うことがあります。微調整APIは、このような高度なタスクのための素晴らしいオプションです。微調整により、何百、何千もの例を提供し、特定のユースケースに合わせてモデルをカスタマイズすることができます。

以上である。
まずは上記を参考にプログラム環境を構築してみよう。

次のステップ

完成ガイドを読む。

サンプルプロンプトのライブラリを見る。

プレイグラウンドで実験を始める。







この記事が気に入ったらサポートをしてみませんか?