top of page

Google Colabで、Google Gemini(AI)のプログラミング解説、初心者用(#8)・Geminiの創造性パラメーターを制御する

更新日:2月26日

生成系AIを使っているとイラつくことありますよね

ChatGPTでも、Google Geminiでも、生成系AIを使っていると、イライラすることがありますよね。その理由の一つに、「これ、本当?」という答えがあるからです。


これは、生成系AIには、回答を作るときに、いくつかの変数があり、その変数によって、大規模言語モデル(Large Language Models、LLM)の振る舞いを変えられるからです。


Google Geminiでは、以下のパラメーターが、代表的です。

  • temperature パラメーター

    • 適切な日本語訳が不明ですが、直訳すると「温度パラメーター」

    • ここでは、「創造性パラメーター」と呼びます

    • 0.0から1.0の間でなければなりません。1.0に近い値を設定すると、より創造的な回答が得られ、0.0に近い値を設定すると、通常より標準的な回答が得られます。

  • 安全性パラメーター

    • 以下の四つの安全性フィルターが用意されており、「ブロックする」か「ブロックしない」かを設定できる

    • SEXUALLY_EXPLICIT

    • HATE_SPEECH

    • HARASSMENT

    • DANGEROUS_CONTENT


今回は、この創造性パラメーターについて、プログラミングを行ってみましょう。次回の「Google Colabで、Google Gemini(AI)のプログラミング解説、初心者用(#9)」で、安全性パラメーターの設定を行ってみましょう。


いつものGoogle ColabのGoogle Geminiの初期設定から

さぁ、プロミングにいきましょう。まずは、テキスト欄を開けて、

# 初期設定

Gemini利用の

* SDKの導入
* パッケージのインストール
* API KEYの導入
* Geminiのモデル(gemini-pro)の指定
を行います。

と入力します。この「創造性パラメーター」(temperature)の制御は、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 Geminiのトークン(文字数)と、創造性パラメーターを指定しよう

今回は、Google Geminiの創造性パラメーター(temperature)の設定が目的です。しかし、実は、出力する文字数のようなトークン(tokens)の設定も可能なので、合わせて、ここで実験してみましょう。最初の質問が、「スーパーボウル」なのは、私が、NFLファンだからです。しばし、お付き合いください。


テキスト欄を開けて、

# 推論のチューニング

と入力し、再度、テキスト欄を開けて、

### 最大1000トークン、創造性パラメーター0.7の候補を1つ生成


創造性パラメーターはGoogle Geminiの創造性をコントロール。パラメーターは0.0から1.0の間。1.0に近い値を設定すると、より創造的な回答が得られ、0.0に近い値を設定すると、通常より標準的な回答が得られます。

と、備忘録も書いておきましょう。次に、コード欄を開けて、

response = model.generate_content("過去一番話題になったスーパーボウルを教えて?",
        generation_config=genai.types.GenerationConfig(
        candidate_count=1,
        max_output_tokens=1000,
        temperature=0.7)
)
to_markdown(response.text)

と入力します。generation_configの中で、パラメーターの指定が行われていますね。ちなみに、candidate_count=1というして部分が、返答候補の数の指定部分だと思われますが、現状は、この指定は"1"以外は、指定できないようです。


Google Geminiの創造性パラメーターを標準的に変更

では、創造性パラメーター(temperature)を、小さいな数値、つまり創造性を少なくする、標準的な回答の指定を行ってみましょう。


テキスト欄を開けて、

### 最大500トークン、創造性パラメーター0.2

次に、コード欄を開けて、

response = model.generate_content("過去一番話題になったスーパーボウルを教えて?",
        generation_config=genai.types.GenerationConfig(
        candidate_count=1,
        max_output_tokens=500,
        temperature=0.2)
)
to_markdown(response.text)

と、入力します。今回は、tokens(文字数・トークン)の指定も、500に変更してみます。実際に、出力の長さは変わるでしょうか?


Google Geminiの創造性パラメーターを創造的に変更

次に、創造性パラメーター(temperature)を、大きな数値、つまり創造性が高い回答の指定を行ってみましょう。


テキスト欄を開けて、

### 最大500トークン、創造性パラメーター1

次に、コード欄に、

response = model.generate_content("過去一番話題になったスーパーボウルを教えて?",
        generation_config=genai.types.GenerationConfig(
        candidate_count=1,
        max_output_tokens=500,
        temperature=1)
)
to_markdown(response.text)

と、入力です。今回のプログラミングは、変数の変更だけなので、とっても簡単でしたね。


さぁ、Google Geminiの創造性パラメーター(temperature)の違いを確認


さぁ、プログラム実行の時間です。いつも通り、Google Colabの画面の上の方から、コード欄の左の「三角」マークを押して実行していきましょう。いかに私の出力を書きますが、皆さんの出力とは、異なる部分があると思います。参考程度に確認してみてください。


最大1000トークン、創造性パラメーター(temperature)0.7の候補を1つ生成


第51回スーパーボウル(Super Bowl LI)
・開催日:2017年2月5日 ・会場:テキサス州ヒューストンのNRGスタジアム ・対戦カード:ニューイングランド・ペイトリオッツ(AFC)対アトランタ・ファルコンズ(NFC) ・結果:ペイトリオッツ 34、ファルコンズ 28
・注目ポイント: ・ペイトリオッツのQBトム・ブレイディが4回目のスーパーボウル制覇を目指す。 ・ファルコンズは初のスーパーボウル出場で、QBマット・ライアンがブレイディに挑む。 ・試合は、前半はファルコンズがリードする展開となる。 ・しかし、第3クォーターにペイトリオッツが反撃を開始し、第4クォーターにはブレイディがジェームス・ホワイトにパスを投げて同点に追いつく。 ・その後、ペイトリオッツはオーバータイムに突入し、ホワイトがランニングタッチダウンを決めて勝利した。
・この試合は、史上初のオーバータイムでの決着となり、また、ブレイディが4回目のスーパーボウル制覇を果たしたことで大きな話題となった。

最大500トークン、創造性パラメーター(temperature)0.2


過去一番話題になったスーパーボウルは、2017年2月5日に開催された第51回スーパーボウルです。この試合は、ニューイングランド・ペイトリオッツとアトランタ・ファルコンズの間で行われ、ペイトリオッツが34対28で勝利しました。
この試合は、多くの理由で話題になりました。まず、ペイトリオッツは第4クォーターに25点差から逆転勝利を収めたためです。これは、スーパーボウル史上初の逆転勝利でした。また、ペイトリオッツのクォーターバック、トム・ブレイディは、この試合でスーパーボウル史上最多となる466ヤードをパスしました。さらに、ペイトリオッツのワイドレシーバー、ジュリアン・エデルマンは、この試合でスーパーボウル史上最多となる137ヤードをレシーブしました。
この試合は、アメリカ国内で1億1300万人が視聴し、スーパーボウル史上最多の視聴者数を記録しました。また、この試合は、ソーシャルメディアでも大きな話題となり、ツイッターで1億3000万件以上のツイートが投稿されました。
第51回スーパーボウルは、多くのドラマと興奮に満ちた試合であり、過去一番話題になったスーパーボウルとして記憶されています。

最大500トークン、創造性パラメーター(temperature)1


*スーパーボウルXLII(2008年)
ニューヨーク・ジャイアンツとニューイングランド・ペイトリオッツの対戦。ペイトリオッツは18-0のパーフェクトシーズンでスーパーボウルに進出、ジャイアンツはプレーオフ初戦でプレーオフ1位通過のチームを相手に勝利するなど、勢いに乗ってスーパーボウルに駒を進めた。試合はペイトリオッツ有利の下馬評だったが、序盤からジャイアンツが主導権を奪い、最終盤にペイトリオッツの同点タッチダウンを阻止して17-14で勝利した。スーパーボウル史上、史上初のシーズン完全制覇チームからの勝利となった。
*スーパーボウルXLIX(2015年)
ニューイングランド・ペイトリオッツとシアトル・シーホークスの対戦。シーホークスが12連勝でスーパーボウルに進出、ペイトリオッツもプレーオフ3試合を平均20.3点差で勝利してスーパーボウルに進出した。試合はシーホークス有利の下馬評だったが、ペイトリオッツが攻守に圧倒して28-24で勝利した。ペイトリオッツのトム・ブレイディはスーパーボウル史上最多の4個目のスーパーボウルMVPを獲得した。
*スーパーボウルLII(2018年)
フィラデルフィア・イーグルスとニューイングランド・ペイトリオッツの対戦。イーグルスは13連勝でスーパーボウルに進出、ペイトリオッツはプレーオフ3試合を平均17.7点差で勝利してスーパーボウルに進出した。試合は前半をペイトリオッツが14-3でリードして後半に突入したが、イーグルスが第2ハーフで22点を挙げて38-33で勝利した。イーグルスのクォーターバック、ニック・フォールズはスーパーボウルMVPを獲得した。

確かに、創造性パラメーター(temperature)で、違いがある。

確かに、創造性パラメーター(temperature)で、答えに違いがあります。特に、創造性パラメーター=1とすると、質問では、「過去一番話題」と聞いているのに、答えは、3つも登場しています。


一寸法師とGoogle Geminiの創造性パラメーター(temperature)の考察


もう少し、短な事例で、実験してみましょう。「一寸法師」をGoogle Geminiに教わってみましょう。おそらく、プログラミングは、皆さんもこのBlogを見なくてもできると思いますが、一応、参考に書いておきますね。


Adobe Fireflyの「童話「一寸法師」のイラストを書いて」画像
Adobe Fireflyの「童話「一寸法師」のイラストを書いて」画像


創造性パラメーター(temperature)=0.1

テキスト欄に、

### 創造性パラメーター=0.1

コード欄に、

response = model.generate_content("一寸法師という童話を教えて?",
        generation_config=genai.types.GenerationConfig(
        candidate_count=1,
        max_output_tokens=500,
        temperature=0.1)
)
to_markdown(response.text)

と入力です。

創造性パラメーター(temperature)=0.9

テキスト欄に、

### 創造性パラメーター=0.9

コード欄に、

response = model.generate_content("一寸法師という童話を教えて?",
        generation_config=genai.types.GenerationConfig(
        candidate_count=1,
        max_output_tokens=500,
        temperature=0.9)
)
to_markdown(response.text)

と入力。以上でプログラミング完成です。


一寸法師とGoogle Geminiの創造性パラメーター(temperature)の実験結果


では、私の結果発表です。一寸法師って、そんな話だっけという、結果が出ましたよ。


創造性パラメーター(temperature)=0.1(創造性低い)


昔々、あるところに、おじいさんとおばあさんが住んでいました。おじいさんは山で柴刈りをして、おばあさんは家で機を織って暮らしていました。
ある日、おじいさんが山で柴刈りをしていると、大きな竹を見つけました。おじいさんは竹を切って家に持ち帰り、おばあさんに「この竹を割って、お椀を作ってくれ」と言いました。
おばあさんは竹を割って、お椀を作りました。すると、お椀の中から小さな男の子が出てきました。男の子は一寸法師と名付けられました。
一寸法師は、とても小さく、親指ほどの大きさしかありませんでした。しかし、一寸法師は、とても賢くて、力持ちでした。
ある日、一寸法師は、おじいさんとおばあさんに「僕は旅に出ます」と言いました。おじいさんとおばあさんは、一寸法師を心配しましたが、一寸法師の決意は固く、旅に出ることを許しました。
一寸法師は、旅に出ると、いろいろなところを旅しました。そして、いろいろな人と出会い、いろいろなことを学びました。
ある日、一寸法師は、鬼ヶ島にたどり着きました。鬼ヶ島には、鬼が住んでいました。鬼は、人間を食べてしまう悪い鬼でした。
一寸法師は、鬼ヶ島に潜入し、鬼を退治しました。そして、鬼ヶ島の宝物を持ち帰り、おじいさんとおばあさんに渡しました。
おじいさんとおばあさんは、一寸法師の活躍を喜びました。そして、一寸法師は、おじいさんとおばあさんと幸せに暮らしました。

創造性パラメーター(temperature)=0.9(創造性高い)


昔々、あるところに、一寸法師という小さな男の子がいました。身長はわずか一寸(約3cm)しかありませんでした。
ある日、一寸法師は近所のお婆さんに、豆を売りに来てもらいました。お婆さんは一寸法師の珍しい姿に興味を持ち、豆と引き換えに一寸法師を家に連れて帰りました。
一寸法師はお婆さんのお世話を良くし、とても可愛がられました。ある日、一寸法師はお婆さんに、「僕は、お婆さんのために、力持ちの鬼をやっつけてきます」と言いました。
一寸法師は、お婆さんからもらった針を武器にして、鬼退治に出発しました。旅の途中、一寸法師は、大きな川にさしかかりました。一寸法師は、船もなければ、橋もありません。そこで、一寸法師は、針を使って、木の葉っぱを舟のようにして、川を渡りました。
川を渡りきった一寸法師は、鬼の住む山にたどり着きました。鬼は、一寸法師を見て、「なんだ、ちびっこが来たか。どうしたんだ?」と威嚇してきました。
一寸法師は、鬼に、「僕は、お婆さんのために、あなたを退治しに来ました」と答えました。鬼は、「ちびっこが俺を退治するだと?冗談じゃないぜ」と大笑いしました。
一寸法師は、鬼に向かって、針を投げつけました。鬼は、針を指に刺されて、「いてぇ!」と叫びました。一寸法師は、次々と針を投げつけ、鬼を倒しました。
鬼を倒した一寸法師は、お婆さんのもとに帰りました。お婆さんは、一寸法師を大喜びで迎え入れました。
一寸法師は、お婆さんと一緒に、いつまでも幸せに暮らしました。

もう、Google Geminiの創造力に感服ですね。

閲覧数:123回0件のコメント
bottom of page