毎月開催されているwatsonx.ai Dojoのハンズオンの内容を復習してみました。
内容が多いため、2部構成でお届けします。今回は演習1の部分と次回は演習2&演習3という組み合わせになっています。プログラミングなしでも演習1は体験できるのでこちらだけでもどうぞ。
イベントページ
今回はの内容はプロンプト・エンジニアリング入門ということで、プロンプトの作成、入力内容の工夫、プロンプトに具体例を含めるFew-Shotを試す内容です。

今回の資料のConnpassページにもありますが、念の為こちらにも掲載しておきます。
資料
資料(GitHub)
【動画】
演習概要
内容は以下のような流れになっています。演習1は単独した内容ですが、演習2と演習3は前後関係がある形になっています。
- 【演習1】プロンプト・ラボのフリー・フォームを使ってプロンプトを作る
- (次回へ)【演習2】プロンプト・ラボの構造化フォームを使ってプロンプトを作り、Web APIとしてデプロイする
- (次回へ)【演習3】デプロイ済みのWeb APIへアクセスする
【演習1】プロンプト・ラボのフリー・フォームを使ってプロンプトを作る
資料
https://github.com/IBM/japan-technology/blob/main/watsonx.ai/dojo/03/01-simple-prompt/readme.md
今回のハンズオンの内容は静岡県でしたが、演習のテーマをオリジナリティを出すために、今回は愛知県に変更して進めることにしました。そのため、資料内のプロンプトとは内容の変更しています。
まずはwatsonx.aiのページにログインを行い、今回使用するプロジェクトを作成しておきます。
jp-tok.dataplatform.cloud.ibm.com
IBMCloudからwatsonx.aiへいくよりも直接watsonx.aiへ直接アクセスをしたほうが良いでしょう。ログインすると以下の画面に遷移します。

下にスクロールすると、プロジェクトリストがあるので、その左上にある新規プロジェクトの作成ボタンである【+】ボタンをクリックします。

プロジェクトの作成画面にきたら、【名前】のフィールドに入力し、【作成】ボタンをクリックします。今回私はDojo#03というプロジェクト名にしました。

ちなみにこの画面にはストレージというフィールドがありますが、以前プロジェクトの作成時に使用していた値が自動的に格納されます。初回の場合には前回の内容を確認して、オブジェクトストレージの設定を行ってください。

参考 前回エントリ
プロジェクト作成後、画面がダッシュボードの表示に戻りプロジェクト作成が行われたことがわかります。

続いてこのプロジェクトにWatson Machine Learningサービスを関連付ける作業を行います。【管理】タブをクリックし、左側のペンから【サービスおよび統合】をクリック、右側にある【サービスの関連付け】ボタンをクリックします。

サービスの関連付けのダイアログが表示されるので、関連付けるWatson Machine Learningにチェックをつけて、【アソシエイト】ボタンをクリックします。

Watson Machine Learningの設定についても前述した前回のエントリなどを見て確認してもらえればと思います。
ようやくスタート地点に来ました。作成したプロジェクトの【概要】タブをクリックします。

【作業の開始】にある【ファウンデーション・モデルを使用したチャットとプロンプトの作成】をクリックします。

PromptLabの画面に遷移するので、【フリーフォーム】のタブをクリックします。

また、モデルのプルダウンからgranite-8b-japaneseを選択します。プルダウン内にない場合には【すべての基盤モデルを表示する】からモデルを探してください。

では、プロンプトのフィールドに以下のテキストを入力していきます。資料では静岡県になっていましたが、私は愛知県に変更したテキストにしています。
プロンプト例①
愛知県を知らない人に、有名なアーティスト、 アニメの話、美味しい食事、名所、生産品などを含めて、楽しく愛知の魅力を伝えてください。
上記のテキストをコピーしてプロンプトのエリアにペーストして、【生成】ボタンをクリックします…
結果が思ったように出ない場合もあります。ヒントにもあるように例があったりすると結果が変わるようです。

では設定を変えていきます。
画面の下にある【出力のクリア】ボタンをクリックして、入力したプロンプトのテキストだけの状態にします。

ではプロンプトの文面を以下に変更してみます。
プロンプト例②
以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。 ### 指示: 与えられた質問に対して、文脈がある場合はそれも利用し、回答してください。 ### 入力: 愛知県を知らない人に、有名なアーティスト、 アニメの話、美味しい食事、名所、生産品などを含めて、楽しく愛知の魅力を伝えてください。 ### 応答:
プロンプトを変更したら、【生成】ボタンをクリックします。

すると、先程より良くなった結果を得ることが出来ます。

更に結果を良くするために、モデル・パラメータを変更してみます。モデル・パラメータは画面の右上にあるので、ボタンをクリックします。

モデル・パラメータが表示されるので【最小トークン】を200、【最大トークン】を1000として再度【生成】を行います。

生成結果の文面が増えていますが、繰り返しの文面も見受けられます。

生成結果の繰り返しが行われることを予防するため【モデル・パラメータ】の【反復ペナルティ】の値を2にあげてみます。

結果はでてきましたが、絵文字も増えてかなりカオスな内容ですね🙄

更にプロンプトのテキストを修正するとともに、【反復ペナルティ】を1に戻して再度【生成】してみます。
プロンプト例③
以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。 ### 指示: 与えられた質問に対して、文脈がある場合はそれも利用し、回答してください。 文脈: - 愛知県の人気のレストランは「矢場とん」です。矢場とんには、名古屋名物の味噌カツがあります。 - 名古屋市の名所は、「名古屋城」です。金のシャチホコが有名です。 - 愛知県は、令和3年に自動車生産台数で日本一でした。 - 愛知県の県庁所在地は、「名古屋市」です。豊田市ではありません。 - 豊田市には世界で有名な企業があります。トヨタ自動車は世界最大級の自動車メーカーとして知られています。デンソーやアイシンなどの自動車部品メーカーも本社を置いています。 - アニメ作品「名探偵コナン」には、愛知県名古屋市が何度も舞台として登場します。名古屋テレビ塔やオアシス21などのランドマークが描かれています。 - アニメ作品「八十亀ちゃんかんさつにっき」の話は、愛知県名古屋市がモデルになっています。名古屋弁や名古屋文化が特徴的に描かれています。 ### 入力: 愛知県を知らない人に、有名なアーティスト、 アニメの話、美味しい食事、名所、生産品などを含めて、楽しく愛知の魅力を伝えてください。 ### 応答:

最後に、言語モデルに含まれていない知識を使わないようにします。プロンプトのテキストをすべて消去し、次のものに置き換えます。
プロンプト例④
以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。 ### 指示: 与えられた質問に対して、文脈がある場合はそれも利用し、回答してください。知識にないことは答えないでください。 文脈: - 愛知県の人気のレストランは「矢場とん」です。矢場とんには、名古屋名物の味噌カツがあります。 - 名古屋市の名所は、「名古屋城」です。金のシャチホコが有名です。 - 愛知県は、令和3年に自動車生産台数で日本一でした。 - 愛知県の県庁所在地は、「名古屋市」です。豊田市ではありません。 - 豊田市には世界で有名な企業があります。トヨタ自動車は世界最大級の自動車メーカーとして知られています。デンソーやアイシンなどの自動車部品メーカーも本社を置いています。 - アニメ作品「名探偵コナン」には、愛知県名古屋市が何度も舞台として登場します。名古屋テレビ塔やオアシス21などのランドマークが描かれています。 - アニメ作品「八十亀ちゃんかんさつにっき」の話は、愛知県名古屋市がモデルになっています。名古屋弁や名古屋文化が特徴的に描かれています。 ### 入力: 愛知県を知らない人に、楽しく愛知の魅力を伝える文章を作ります。有名なアニメの話、有名なアーティスト、最後に観光名所と食事の話など行くべき名所などを紹介して、愛知に旅行したくなる人を増やしたいです。 ### 応答
すると結果は以下のようになりました。

※このようにプロンプトやパラメータを変えながら調整することが多いです。一回決定したものが最善とは限らないので、いろいろ調整していくことが重要になります。
最後にこのプロンプトの内容を保存しておきましょう。

これで演習1は終了になります。
おわりに
今回は、プロンプトエンジニアリングの基礎を体験し、プロンプトの作成やパラメータ調整ついて学ぶことができました。プロンプトの設計やモデルの出力は、試行錯誤を重ねることでどんどん精度が向上するものなので根気よくテストをしていきましょう。次回は、演習2と演習3で構造化フォームの使用やWeb API化について、より実践的な内容になります。お楽しみに!