「自分が何を使ってるのか」を最低限わかるようになるChatGPT解説【エンジニアブログ】
はじめに
2023年3月末現在、GoogleやTwitterなどでChatGPTについて0から情報を集めようとすると大量のノイズ情報が溢れていて、有用な情報にたどり着きにくい状態となっています。
この状況を踏まえて、初心者向けに基礎的だが有用な情報をまとめることに価値があるハズだと思い本記事を執筆しています。主にエンジニア向けですが、そうでない方が読んでも分かり易いように努めています。
なお、著者はエンジニアではなく機械学習については全くの素人であるため、認識に誤りがある可能性があります。ご了承ください。
GPTとは
GPTとはGenerative Pretrained Transformerの略で、大規模言語モデル(Large Language Models)の一種です。
他にもLLMには、LLaMA(Meta)やPaLM(Google)、LaMDA(Google)などがあります。
ChatGPTやMicrosoft BingはGPT(OpenAI)を積んでおり、Google BardはLaMDAを積んでいます。サービス名と搭載言語モデルの関係です。
Generative Pretrained Transformerとは
事前学習を行った、回答を出力可能な変換器(直訳)
ウィキペディアによると、”教師あり学習と強化学習の両方の手法で転移学習されている” ものらしいです。
平たく言えば、膨大な文字情報を学習データとして使用した上で、人の手をかけて報酬を設定して調教された、文字回答を出力できるAIです。
人の手が入っているので、GPTは人間にとって耳ざわりのよい回答ができるのが特長です。
ChatGPTとは
GPTを搭載したチャット形式のサービスの名称です。
基本無料ですが、混雑時には利用が制限されたりします。
サブスクリプションサービスに課金することで、混雑時でも使えたり、レスポンス速度が上がったり、GPT-4 modelをお試しで使えたりします。
このサブスクリプションはAPIの利用とは別です。
APIについて
GPTのAPIは従量課金で利用することができます。サブスクリプションに加入する必要はありません。GPT-3.5はかなり安価なので、常識的な量であればおやつ代程度で利用可能です。
GPTの出力
GPTに知性はありません。(私はそう理解しています)
入力の後に続く文章として最も可能性が高いものが返答として生成されるシステムが非常によくできており、これが疑似知性があるかのようなUXを与えてくれるのだと思っています。
続きの予測というのは、簡単には「いつもお世話に」の後に続く単語は「なります(なっております)」ですし、「そう、iPhone」の次は「ならね」となる、こういったものを指します。(※実際ChatGPTに入力しても続きは返ってきません。イメージです。)
なぜ成立しないかというと、デフォルトの命令として、入力文章を質問と捉え、単に続きを答えるのではなく、質問への回答の形式として成型するように調整されているためです。よい回答が生成できなかったと自身が認識したとき、謝罪し更なる情報を求めるようにもなっています。これらの調整により、ユーザーはGPTにまるで知性があるように感じられます。
実際に成立する例
解説付きで続きを返してくれます。
With great power comes
great responsibility.
大いなる力には大いなる責任が伴う。スパイダーマンのセリフ。
may the force
be with you
フォースと共にあらんことを。STAR WARSのセリフ。
望む出力を得るには
GPTはネット上の膨大な文章を学習しています。
例えば、
「ありがとー」「どういたしまして」という口語チックなやり取りや、
「お早う御座います。明日は銀座にて出店致します」のようなBlog、
「本研究では新たなウイルスベクターを用いることで、これまで困難であった早期かつ簡便なゲノム除去手法を提案します」のような論文など、様々な文体と単語で学習をしています。[1]
このような膨大な単語やそれらを繋ぎ合わせた文章群を、深津氏は「可能性空間」や「潜在空間」と表現しています。[2]
GPTは可能性空間の中で、inputに空間的に近いものを(かつその続きを)出す作業をしています。
従って、望む回答が書かれているであろう空間に近いものをinputすると、望むoutputが得られる確率が上がります(可能性空間の限定)。※具体的なプロンプトは後述します。
inputの文体や単語のチョイスもベクトルに影響します。
例えば、命令文体よりも敬語体の方がoutputがよいという記事もあります。[3]
また、学習データに英語の文章が量的に多いことも重要です。一般論として、英語のinput/outputの方が精度が高いです。
有用なプロンプト8選
回答の精度を上げることができるプロンプトを紹介します。
※inputのことをプロンプト(prompt)ともいいます。特に最初の命令文の形式を指すことが多いようです。
プロンプトは日進月歩で新しいものが公開されているため、情報が古い可能性があります。
本記事で紹介するプロンプトは私が実際に試し、有用だと思ったものです。
roleの指定
貴方はプロの編集者です
貴方はプロのgo langエンジニアです
出力ベクトルの指定
レビューしてください
教えてください
日本語で「教えてください」inputするとGPTは「解説をしてください」のニュアンスで捉えます。聞いてもないのに理由が返ってきがちです。
ベクトルの追加
最高の
素敵な
簡潔に
出力形式の指定
箇条書きで10個出力してください
100文字以内で
「Let's think step by step」
ステップバイステップで考えて、と最後に付け加えるだけで精度が上がるプロンプト。
本当にステップバイステップで考えているという説と、この呪文がある文章は論理的なことが多いので正しい答えが返ってくるのだという説があります。
「このタスクで最高の結果をだすために、追加の情報が必要な場合は、質問をしてください」
内部的に近しいベクトルの回答が生成されないと判断された場合に、質問をしてくれます。
要点を聞いてからそれを押さえた回答を出力するよう命令する
XXで重要な点を箇条書きで5つ挙げてください
(返答)
それらを踏まえてXXを作成してください
マークダウン記法を使用する
上記のプロンプトはマークダウン記法で使用すると精度が上がりやすいです
まとめ
可能性空間を限定し、望む文章群に近づけていくのが大事
プロンプトは可能性空間を限定するための手段
お誘い
私のチームでは通年採用を実施しています!
ユーザの幸せについて真剣に議論したり、「やってみたい」で新しい技術に挑戦をしてみたり、気づいたら30分雑談していたり、ゆるく真面目に開発しています。もし興味を持ってもらえたら、こちらを読んでみてください!