Google Geminiのプログラミングを行なってきたが、「質問文」の方が難しいかも?
生成AIを理解しようと、Google Geminiを、普通にブラウザーから使うのではなく、Google Colab経由で、Pythonを使って、プログラミングしてきました。理由は、Pythonでプログラミングした方が、さまざまな「設定」や「制御」ができるからです。
実際に、
Google Colabで、Google Gemini(AI)のプログラミング解説、初心者用(#8)・Geminiの創造性パラメーターを制御する
創造性パラメーター(temperature)を変えるだけで、生成AIの出力が、過去のデータに基づくか、想像が多くなるか制御可能
Google Colabで、Google Gemini(AI)のプログラミング解説、初心者用(#9)・Geminiの安全性設定を制御する
SEXUALLY_EXPLICIT、HATE_SPEECH、HARASSMENT、DANGEROUS_CONTENTに関する表現を抑制することが可能
ということを、確認してきました。
さて、次のプログラムを書こうかと、GoogleのGemin APIの文章を読んでいると、「プロンプト設計戦略」という文章を発見しました。そして、そのような文章があるのです。
言語モデル、特に大規模言語モデル(LLM)は、単語間のパターンと関係を学習するために、膨大なテキストデータでトレーニングされています。テキスト(プロンプト)を受け取った言語モデルは、高度なオートコンプリート ツールのように、次に来ると思われるものを予測できます。したがって、プロンプトを設計する際は、モデルによる次の予測に影響を与える可能性のあるさまざまな要因を考慮してください。
プロンプトの設計に正しい方法や間違った方法はありませんが、モデルのレスポンスに影響を与えるために使用できる一般的な戦略があります。このセクションでは、一般的なプロンプト設計戦略について紹介します。
つまり、Google Geminiのような生成AIへの質問文の設計は、奥が深いということですよね。ということで、今回は、プロンプト(質問文)の設計を行います。ということは、実は、この記事のテストは、全て、Google Geminiのブラウザー画面から行えるので、今まで、生成AIから、遠かった方もぜひ、試してみてください。
今回は、インターネットに公開されている文章を要約します。
実は、ビジネスシーンで、生成AIを使う頻度が高い仕事は、文章の要約ではないでしょうか。
お客様の会社の概要分の作成
入札文章や、お客様の仕事の仕様書の理解
今日は、インターネットに公開されている文章を対象にしますが、自分のパソコンに入っている資料についても、今日説明する全てのことは同じように行えます。
Google Geminiの初期設定
では、いつも通りプログラミングしますが、今日のプログラムは簡単です。それと、今回は、Google Geminiの画面での操作も説明しますね。
Google Colabでプログラムする場合
テキスト欄を開けて、
# 初期設定
Gemini利用の
* SDKの導入
* パッケージのインストール
* API KEYの導入
* Geminiのモデル(gemini-pro)の指定
を行います。
と入力、コード欄を開けて、
!pip install -q -U google-generativeai
import pathlib
import textwrap
import google.generativeai as genai
from IPython.display import display
from IPython.display import Markdown
def to_markdown(text):
text = text.replace('•', ' *')
return Markdown(textwrap.indent(text, '> ', predicate=lambda _: True))
# Used to securely store your API key
from google.colab import userdata
# Or use `os.getenv('GOOGLE_API_KEY')` to fetch an environment variable.
GOOGLE_API_KEY=userdata.get('GOOGLE_API_KEY')
genai.configure(api_key=GOOGLE_API_KEY)
model = genai.GenerativeModel('gemini-pro')
と、いつも通り入力です。
ブラウザーで試す場合
何も行うことはありません。
インターネット上のファイルを要約させる
Google Colabでプログラムする場合
テキスト欄を開けて、
## 指定なしで、インターネット上の文章を要約させる
と入力し、コード欄に、
response = model.generate_content("次のテキストを要約してください。 テキスト:https://ja.wikipedia.org/wiki/一寸法師")
to_markdown(response.text)
と、入力です。
ブラウザーで試す場合
ブラウザーの質問文に、
次のテキストを要約してください。
テキスト:https://ja.wikipedia.org/wiki/一寸法師
と入力しましょう。
ブラウザーの場合は、質問をすれば、上記のように、すぐに返事が戻ってくると思います。
一寸法師の要約を実行
Google Colabでプログラムする場合
プログラムを書いた人は、いつものように、2つのコードを、上から順番に実行(三角ボタンをクリック)してみましょう。
ひょっとしたら、2つ目の要約のコードのところで、エラーが出るかもしれません。
このエラーが出た場合は、もう一度「三角ボタン」をクリックしてみてください。大抵は、2回目で、読み込みに成功し、要約の出力が行われると思います。私の実行では、
「一寸法師」は、日本の昔話で、わずか 1 寸(約 3.03 cm)の大きさの男の子が主人公です。
誕生後、「一寸法師」は豆のように小さく、父親が作った椀を船代わりに、川を下って冒険の旅に出ます。途中、鬼に捕らわれましたが、機転を利かせてナスの種を撒いて鬼を退散させます。
その後、都にたどり着いた一寸法師は、お姫様の侍として仕えます。ある日、鬼退治のために大筒が求められていることを知り、自らが乗り込むことを提案します。鬼を討伐した後、一寸法師は巨大化し、お姫様と結婚して幸せに暮らしました。
という要約が出力されました。
今回は、童話なので、要約は私にでもできますが、実際に難しいビジネスの文章の要約を行なってもらえると考えると、生成AIは、とても便利ですね。
「焦点」を絞った要約を行わせよう
実際のビジネスの場面では、ある項目を中心に、資料のサマライズしたいこともあるでしょう。そのようなプロンプトを次に実行させましょう。
Google Colabでプログラムする場合
最後のコード欄の下に、新たなテキスト欄を開けて、
## 一寸法師の行動に注目
と入力し、次のコード欄に
response = model.generate_content("次のテキストを要約してください。 特に、一寸法師の行動について、丁寧に教えてください。テキスト:https://ja.wikipedia.org/wiki/一寸法師")
to_markdown(response.text)
と、入力しましょう。
ちなみに、テキスト:URL の部分は、好きなURLに変更可能です。なお、他のwikipediaページで試す場合の留意点として、URLをUTF-8 コードに変換しないで指定ください。具体的には、今回の一寸法師のURLも、ブラウザーからコピーすると、
となりますが、
と、日本語で入力してください。
ブラウザーで試す場合
次のテキストを要約してください。 特に、一寸法師の行動について、丁寧に教えてください。テキスト:https://ja.wikipedia.org/wiki/一寸法師
と、入力してみましょう。
Google Gemini出力例
さぁ、Google Colabの方は、プログラム実行、ブラウザーの人は、単純にクリックしてみましょう。私の出力例を参考に載せておきますね。
一寸法師の要約
一寸法師は、わずか一寸(約3cm)の背丈の少年の物語です。ある夫婦が子供を授かるよう祈ったところ、仏様が現れて一粒の麦を与えます。夫婦はこの麦を植えて立派な竹を育て、中から一寸法師が生まれます。
一寸法師は、針を刀、茶碗を帽子として、旅に出ます。ある日、お姫様が鬼にさらわれます。一寸法師は、お姫様を救うため鬼と対決します。
一寸法師の行動
勇敢(ゆうかん): 一寸法師は、自分の小さな体にもかかわらず、お姫様を救うために鬼に立ち向かいます。
機転(きたん)がきく: 一寸法師は、針を武器として使用し、鬼の目を突くなど、機転を利かせた戦いをします。
礼儀正しい: 鬼を倒した後は、お姫様が食べ残したおにぎりを鬼に分け与えて、礼儀正しさを示します。
帰還(きかん): お姫様を救った後、一寸法師は再び竹の中に戻り、夫婦の元に帰還します。
となりました。機転を「きたん」と教えてくれるあたりが、今の生成AIが、成長途中であることを感じるところですね。
Google Geminiに文章に関する質問をしてみよう
次に、単純な要約ではなく、特定の質問を行ってみましょう。
Google Colabでプログラムする場合
テキスト欄を開けて、
## ゼロショット プロンプトと少数ショット プロンプト
と入力し、コード欄を開けて、
response = model.generate_content("次のテキストの説明として正しいものを全て教えてください。説明1: 一寸法師は、頭脳明晰だ 説明2:一寸法師は女の子 説明3:一寸法師は勇敢だ テキスト:https://ja.wikipedia.org/wiki/一寸法師")
to_markdown(response.text)
と入力します。
ブラウザーで試す場合
次のテキストの説明として正しいものを全て教えてください。説明1: 一寸法師は、頭脳明晰だ 説明2:一寸法師は女の子 説明3:一寸法師は勇敢だ テキスト:https://ja.wikipedia.org/wiki/一寸法師
と入力します。
Google Gemini出力例
今回は、以下のように出力されました。
正しい説明:
説明1: 一寸法師は頭脳明晰だ
説明3: 一寸法師は勇敢だ
このサンプルは、ビジネスのシーンでは有効ですよね。ただ、プロンプトの書き方は、明晰でないと、回答も不明瞭になるので、注意が必要です。
書式を指定して要約させよう
生成AIの多くは、書式を伝えることが可能です。それも試してみましょう。
Google Colabでプログラムする場合
テキスト欄を開けて、
## レスポンスの書式設定をモデルに指示する
コード欄を開けて、
response = model.generate_content("次のテキストを概要を作成してください。I. はじめに * * * * テキスト:https://ja.wikipedia.org/wiki/一寸法師")
to_markdown(response.text)
と入力です。
ブラウザーで試す場合
次のテキストを概要を作成してください。I. はじめに * * * * テキスト:https://ja.wikipedia.org/wiki/一寸法師
と入力です。
Google Gemini出力例
今回は、以下のように出力されました。
一寸法師のあらすじ
I. はじめに
一寸法師は日本の昔話。
主人公は親指サイズの小さな男の子。
II. 生い立ち
貧しい老夫婦の元に生まれる。
親指ばかり小さい。
III. 旅立ち
一寸法師は都で出世するため旅に出る。
針を刀、茶碗を船、箸を櫂にして旅する。
IV. 鬼退治
一寸法師は鬼が老婆をさらうところに出くわす。
針を使って鬼を退治する。
V. 都での活躍
一寸法師は都で侍となり、活躍する。
鬼退治の功績が称えられる。
VI. 帰郷
一寸法師は故郷に錦を飾る。
両親と幸せに暮らす。
VII. 結末
一寸法師は生涯、親指サイズのままであり、その小ささを強みに活躍した。
となりました。
プロンプトの設計の方が、プログラムより奥深い
今回のプログラミング、いやプロンプティング、いかがでした。実際に、プロンプトエンジニアリングという言葉が存在するように、プロンプトにも、学ぶことが多いですね。
Comentaris